redac---n 0.0.0-stage → 0.0.1
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.
- package/LICENSE +21 -0
- package/README.md +323 -2
- package/THIRD_PARTY_NOTICES.md +59 -0
- package/dist/aho.d.ts +25 -0
- package/dist/aho.js +116 -0
- package/dist/base64.d.ts +10 -0
- package/dist/base64.js +29 -0
- package/dist/bip39-data.d.ts +2 -0
- package/dist/bip39-data.js +2 -0
- package/dist/cache.d.ts +14 -0
- package/dist/cache.js +40 -0
- package/dist/calls.d.ts +64 -0
- package/dist/calls.js +269 -0
- package/dist/charlm-data.d.ts +2 -0
- package/dist/charlm-data.js +3 -0
- package/dist/charlm.d.ts +7 -0
- package/dist/charlm.js +65 -0
- package/dist/checksums.d.ts +10 -0
- package/dist/checksums.js +98 -0
- package/dist/commands.d.ts +72 -0
- package/dist/commands.js +784 -0
- package/dist/context.d.ts +98 -0
- package/dist/context.js +469 -0
- package/dist/encoded.d.ts +11 -0
- package/dist/encoded.js +336 -0
- package/dist/environment.d.ts +10 -0
- package/dist/environment.js +62 -0
- package/dist/formats-data.d.ts +2 -0
- package/dist/formats-data.js +405 -0
- package/dist/formats.d.ts +5 -0
- package/dist/formats.js +470 -0
- package/dist/hmac.d.ts +3 -0
- package/dist/hmac.js +87 -0
- package/dist/index.d.ts +101 -0
- package/dist/index.js +484 -0
- package/dist/json.d.ts +82 -0
- package/dist/json.js +392 -0
- package/dist/known.d.ts +34 -0
- package/dist/known.js +340 -0
- package/dist/lines.d.ts +28 -0
- package/dist/lines.js +69 -0
- package/dist/lookup.d.ts +5 -0
- package/dist/lookup.js +7 -0
- package/dist/model-data.d.ts +3 -0
- package/dist/model-data.js +4 -0
- package/dist/model.d.ts +2 -0
- package/dist/model.js +19 -0
- package/dist/named.d.ts +20 -0
- package/dist/named.js +3257 -0
- package/dist/names.d.ts +94 -0
- package/dist/names.js +1449 -0
- package/dist/normalize.d.ts +25 -0
- package/dist/normalize.js +529 -0
- package/dist/pem.d.ts +32 -0
- package/dist/pem.js +269 -0
- package/dist/policy.d.ts +3 -0
- package/dist/policy.js +470 -0
- package/dist/public.d.ts +44 -0
- package/dist/public.js +362 -0
- package/dist/publickeys.d.ts +41 -0
- package/dist/publickeys.js +232 -0
- package/dist/random.d.ts +29 -0
- package/dist/random.js +165 -0
- package/dist/repeats.d.ts +21 -0
- package/dist/repeats.js +76 -0
- package/dist/rules.d.ts +42 -0
- package/dist/rules.js +58 -0
- package/dist/runs.d.ts +10 -0
- package/dist/runs.js +36 -0
- package/dist/secretfile.d.ts +52 -0
- package/dist/secretfile.js +676 -0
- package/dist/shell.d.ts +127 -0
- package/dist/shell.js +703 -0
- package/dist/spans.d.ts +53 -0
- package/dist/spans.js +272 -0
- package/dist/sql.d.ts +20 -0
- package/dist/sql.js +66 -0
- package/dist/stream.d.ts +46 -0
- package/dist/stream.js +150 -0
- package/dist/structure.d.ts +24 -0
- package/dist/structure.js +1614 -0
- package/dist/syntax.d.ts +156 -0
- package/dist/syntax.js +446 -0
- package/dist/transcript.d.ts +30 -0
- package/dist/transcript.js +709 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.js +1 -0
- package/dist/unnamed.d.ts +59 -0
- package/dist/unnamed.js +939 -0
- package/dist/urls.d.ts +70 -0
- package/dist/urls.js +303 -0
- package/dist/values.d.ts +178 -0
- package/dist/values.js +1621 -0
- package/dist/yaml.d.ts +40 -0
- package/dist/yaml.js +174 -0
- package/docs/creddata.svg +318 -0
- package/docs/guessing.md +139 -0
- package/docs/holdout.svg +85 -0
- package/docs/layers.md +80 -0
- package/docs/models.svg +81 -0
- package/docs/real-text.svg +112 -0
- package/package.json +57 -5
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by scripts/train-charlm.ts from public code. Do not edit.
|
|
2
|
+
/** Character trigram model of identifier parts: -log2 p(c | two previous) * 16, base64 of 37^3 bytes. */
|
|
3
|
+
export const CHARLM = "/0FMPURIS1VWS2RnUUpUV0FoRjxJVl5aaGtrYGFiYmVlZWVlZf9PQjU4T0xOb1hydjtXPnc/cD06SDxdW3R7bP/////////////9KkpKSjBMX3I7cnJAZG04a3Q7YWQ6enBsU2r9/f39/f39/f39/zBZWVZJWW04WIB7PGVzF2aFSV9lS3RyfG+C//////////////80UFBSHFBxaSlsc3FoZzpsbE1iYE9mdHxld///////////////Q09ERVBIZHRTeHZESS1oV1lOS11dSWwkbnf//////////////jBNTUs7SG12K3N9PWVgMWZsOVpoQHFsc25u/v7+/v7+/v7+/vM7ZE9WJmJrVj1taEFbYjtZaipUZEFhd2FwZfPz8/Pz8/Pz8/PzKF9ZVS1laWI5YlxYXGAvV2xYV0ZEXGtkSWHz8/Pz8/Pz8/Pz/lVnV0VhWVdoZ2tuXDoTWFdiXDtJc2p5Z4Jw/v7+/v7+/v7+/uU3Vl1NSVlcWkZZUmBZVC9MVVMxWThXVFpaUeXl5eXl5eXl5eXiRVtRUSNdaVI2W2FNUUZIVltbW1RBTkVdZ1ri4uLi4uLi4uLi9y9lX14yZWxrImhqWmVjJGJpY1NeUl9ta2dh9/f39/f39/f39/8iaWJcLmZoey12ZmNoaSxlb2tVWz1pcHBNb//////////////1MV1VUSxVV2hCZnBYX2QhVHZdVlRAVF9rbGr19fX19fX19fX18lg+QldfRVpkW2ZkVU9EWitsNU1NOztUYWln8vLy8vLy8vLy8v8qc25cPnFqW0ZyZUJzZzVmeh9fZUplenE9cf/////////////hUlZPUEZRSllHXVtUVVdcUlNZS0wbWlRWWFvh4eHh4eHh4eHh/ztramUMbXJmVHp3aWttP2GSc1pjR2xyfXR4//////////////9FcEFsL3p0QTt/ZlNcXUY9X2liLC9vXHtQgP//////////////OGVeZi1aaDU8cW5mYWwyYHIoWGNTbl1sSGf/////////////82FeXWRlXmpnX3FlV18Tbz1wQTlBXl5nbm1r8/Pz8/Pz8/Pz8+spW1JcKl1cYStga19UVztXY1pSWUxaZVthYuvr6+vr6+vr6+vvLWVaXy9ZXDcxc2BfaF4yVmo9VF5hYF5aYmLv7+/v7+/v7+/v4UhJQ0FGQFpJVVRcRERWT0ZWSkZMVk9WRE9P4eHh4eHh4eHh4d01VUhMPUpUTUdTXElIUz1WUlRWSU1SSFNQUd3d3d3d3d3d3d3dUk9PSjlPUk0/VV1OSEtBT1ZZQ09ISEpOUkrd3d3d3d3d3d3d6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKzI9Nzk3LDk9Oejo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6DQyNDk1OjU2NDTm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5uYtMjI5NzQ4Njo65+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnMzU0MTc2Njg2N+Tk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DAzOTUvPDc1OTXk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0NDE4NzM4NzY15OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkMTU5MzY2NTY3NuTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Dg0ODY3ODUyMzPk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQyOTM4NjA2Njc35OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkODQ1Mzc4NTI3M1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MdGkI/SERGcNhpd3ZqiFxshWJdY4HY2IPYitjY2NjY2NjY2NjYMktJSl0/W4yDO3KKEoV4UZB4gErsaJ2Z7Ijs7Ozs7Ozs7Ozs7DpWZzZoLGWkN06jJGGDoWSTYWRyJnKHo/Z1p/b29vb29vb29vYmPVNIMSxadH44VexTRexLhIhqSIF4R4egYuzs7Ozs7Ozs7OzsGzo/Pj8+OnltTVOAUFpoZWx6g1NfcX+BX89xz8/Pz8/Pz8/PzyA6NUNDMimEh1rVdNWHiGGD1Vp0O9WGctWI1dXV1dXV1dXV1dU3QpB9kxHfOYE8349wXk5ki99MQ2OPdnSKjt/f39/f39/f39/fHy2urq4vrlpdXVtcV0CuOFFVSq6uVK5MYGKurq6urq6urq6urjdOkXxWgpVl5JOSeiZLF1aIZz1LQJh75Ifk5OTk5OTk5OTk5OQbKDuxsUpgRbGxZWWxYLEusbGxR2VjXF2xZWWxsbGxsbGxsbGxIkhsd14RynrKPcp6eH19cl3KYEbKd3zKe2vKysrKysrKysrKyh1UeVuAP3Bkgyn+YyVveFhkh4NFTU57g/5kp/7+/v7+/v7+/v4uTkt5eRLmeeY95ppQT+ZbNoKJTHNs5paU5oDm5ubm5ubm5ubmL0OGMypWljiYQ55glIFHWIesljUvY5KSrFiG+/v7+/v7+/v7+xSmpitOUlBRpkumplpGpqZaWqampk6mWlOmSaampqampqampqYrUHGCdzt8mjwu545sjJpZHY9eOzzn55vnfOfn5+fn5+fn5+fnHT+3WV8pa2pBXmpnXGS3WmhGt7dLM7dnaEu3t7e3t7e3t7e3tzQ+ZEk5OXw8kjmYR1xRV29sjkc2M6iPjI1Ksv7+/v7+/v7+/v4zXHZPai6SezZKpEh7dWpZZYiVISxZjpnyVory8vLy8vLy8vLyQECmSJcdg/9HGv+5g4W0QZf/dV5CW62cqJK7/////////////0GN2lxFZHRKhoPa2jaHUI55jmU1D9qLjliL2tra2tra2tra2towMWvPzxbPb88kg4DPc4E3z8+Bg4GBz3hvas/Pz8/Pz8/Pz8/PIClcdFpFbFlwTsBKRsAywMDAZzVawMBmaFJmwMDAwMDAwMDAwBhHwGZTOmvAXSjAwEpucUdSwGZNT8BcwGVRdMDAwMDAwMDAwMARZU9dZzh3dmpPbtJNVWlRX4SFMFPS0nTSgNLS0tLS0tLS0tLSIbGxsV1LW7GxLGSxYkaxNGCxsbFaLmVisTBRsbGxsbGxsbGxsVNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTLUxGJkpUT12RZ5RlQmk/iGlfNTJJdeSRgXV35OTk5OTk5OTk5Bs9ND9CNz+Bgk2Cz0dvgl3PWkx9gWTPz4NWz8/Pz8/Pz8/Pz88cNkNBNzhB0VdTe9FFg9FF0YRpUnB30Wl1f4TR0dHR0dHR0dHRGi86Ojs9PX7LO8vLaH59UstreXXLy8vLf8tky8vLy8vLy8vLyyg7S0Q7RkxbTG3jkjXjQZLj4ypST+OAgHBgfePj4+Pj4+Pj4+MYNjc5OTs1enhWycl2yWxcfXtjdcnJyXjJyXrJycnJycnJycnJHmFdO61JrUCtVmBGU16tS1mtL1FgYUxVWmFera2tra2tra2trRlNUFQ0RKBPUaBMUKCgoC6gP6CgoKCgoE5RoKCgoKCgoKCgoKBCS2dfUW51P2+LidkhiyFKidlPbynZ2YqGi3DZ2dnZ2dnZ2dnZGj21XrUeZrVnRWW1tWe1UrVmTENRWbW1YLVktbW1tbW1tbW1tRilpUNBKaVMpTZTpaWlVKWlpaVVUKVQpVhXV6WlpaWlpaWlpaVPS5PoiAmJloY16HDompc8mITofpVbm5noVZno6Ojo6Ojo6OjoGj9kZ01DZ2K3JWtca7dmN1a3Z0lqardft2u3t7e3t7e3t7e3txQzVqlUNFhdqUxbqalaW0NVqV2pqVtdXKmpWqmpqampqampqalCQ2F7SdqIcnN4ito/ZFMnYdoyXDg2cHQsbIna2tra2tra2traIx6xsWBVsWJjYbGxN1pjTLGxKldksWJhY2SxsbGxsbGxsbGxsRgvqV2pW6mpqaldqV2pWqmpMKmpWSRdqalaqampqampqampqalFHn5feyHMzHsvgHhszHwkzMzMeWFfzMzMdXzMzMzMzMzMzMzMHmR3L08ne81dWn3NzXxwP17NbV0uWs1nzVnNzc3Nzc3Nzc3NzSIwbGa5Nmy5Z0hWuUprTkJlZC5juWlsuWw7aLm5ubm5ubm5ublY1GBPXX42N3QqgYI/TUTU1NRVNCLU1NTUZWLU1NTU1NTU1NTUFZ2dnZ06TJ2dIZ2dnZ1QnU+dnZ0/nZ1FT52dnZ2dnZ2dnZ2dnRNOTU2amppHmpqaS5pKmk1FmppKTUaaSkiampqampqampqampoPoVVToVJRoU9SoU2hoaFRoaGhUFJTUKFST1KhoaGhoaGhoaGhG1xqb3BJvEZRvG28vGxkvEJfZUgavG9tbby8vLy8vLy8vLy8vBJSTaBRoFRUUEhUoKCgUaBUoD6gUlJSUqBUoKCgoKCgoKCgoKBTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUz5YTz5VX2GKp4enoiNfQKM8bEI/I2CFpvWh9fX19fX19fX19fUWNjs1Nzk3yXFnycl6e8l0yXrJY8nJycnJyWnJycnJycnJycnJIz1KP0ciTNllUNmNdGaKN9nZcIZmNdls2dnZ2dnZ2dnZ2dnZ2Ro+Pjo5LzfOT11/f4J1cX9pznpcbM57fc5zgs7Ozs7Ozs7Ozs4ZWF1bPFNdjXNZ9ZJHVT2IRY8+KIL1pvWXnpj19fX19fX19fX1GThBOT04O1h7VH7LWXRhXX3LW17LfXp4e8t8y8vLy8vLy8vLyx9arGCsMl5SSU9eXE5eW1pcrCtaXGCsSltTYKysrKysrKysrKwpI6LwbRued/AynHqHXWZFe/BLg4JVmYHwfvDw8PDw8PDw8PDwNzNpeDg6N3yIV5OGUFIwSTmIUUY239/f333f39/f39/f39/f3w+jo1WjVKNUV6NVS6Ojo0gzo6NEo6Ojo0OjUqOjo6Ojo6Ojo6McQGdxeSRid3xAmJhEc1pgTHVjM1xj5WnlaeXl5eXl5eXl5eXlRx7gceAtf43gKeDg4IySJZGBfFiGM+Dgkobg4ODg4ODg4ODg4Bwtu7suPmxWu1e7bVZqu2Uwb1dcu1xtb21bu7u7u7u7u7u7u7sVRK1NrUxRWa1Wra1brVxMXq1ZXCutrV49Ya2tra2tra2tra2tXneCdDp0f2WWlf//OyMZW1apOGSOSlSN/////////////////x1EuU5nU1RPuVBmWkdta7k4uWdluSW5uWs8ubm5ubm5ubm5ubkaJKhaqKioqFRZqKhPqKhXqD5YqKgmqKioTKioqKioqKioqKioPzTcbXQdkIzcJdzcYnKJLXrc3HZzStzcjjnc3Nzc3Nzc3Nzc3AzOzn2ATnBuZUrOznp7zndgzlk4PX07gM7Ozs7Ozs7Ozs7Ozs4jVaWB8jSL8vIb8qZSh5czffJUPJFJpIxYZaHy8vLy8vLy8vLyRolQ2mpy2tpubNraMDNv2ljaGjAtdNqAitqO2tra2tra2tra2hRHqlBdP1pQqlFeqleqXapKqls0ql1QV6qqW6qqqqqqqqqqqqoXT6xbO02sQ6xETFs3V6xdVF+sSVxdrFlfrKysrKysrKysrKysDaSkpKSkpFOkWFFUpD9GpFSkpKSkVlSkRFJWpKSkpKSkpKSkpAlWZiq7u29mu2+7u2O7u7tru1S7SWy7u7u7u7u7u7u7u7u7u7sNnUmdnUWdnZ2dTk2dUVCdUVGdUZ2dnZ1RUVGdnZ2dnZ2dnZ2dU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MwV0ZPVVRYfId46YhSZD+FTGo/SBmUW4mSR5rp6enp6enp6enpFzY/PkNAP3fQ0NBmXWZwQGGC0HxlU9B/almD0NDQ0NDQ0NDQ0BsuPzs+QT1uWV95z1NdbUyAgVlsX8/PgHh+z8/Pz8/Pz8/Pz88ePkRFRi9B1XQ6hodSdYJdgdUwYYF91YSFgobV1dXV1dXV1dXVL1NROjlZPHWVqpeRQGA5hUWFKzpRklePWf+q/////////////xk5Qz05Oj9jeVCFglhsYVdi0XdUY26DhWWFhdHR0dHR0dHR0dEoW7VXtQ9nWrViabW1T7W1V7VAtWm1tV1jYmS1tbW1tbW1tbW1F0qvQmM0X15gRK9fUWNjNF2vYmOvYmNWWq9gr6+vr6+vr6+vr1M6ojVkY0Jc85Lz85JhJV6BojIjPnpP83rzhvPz8/Pz8/Pz8/MbL2GxYEexZWFisVliS7FgsWWxOrEnZWCxZV2xsbGxsbGxsbGxFFqmWqZFWlCmQEhUpkNTpqamVlhVpqZSVEZSpqampqampqampiVjxWzFF8XFcih0xWTFxT3Fc3N1eXl5xcU2xcXFxcXFxcXFxcUfL71NvUhraL0bcL1Ma71SaWpaV25xcL1uZb29vb29vb29vb29FC5fs1s8VbNlRWdns7NGs2ezszdis7OzZ2dks7Ozs7Ozs7OzszZ7aiF6TW5gf2CO3Vw4PlpV3UhjS0RqKHeH3d3d3d3d3d3d3d0eKFBjtWRjtWdHtVlaZ7UtZWgvZGdntbW1ZGW1tbW1tbW1tbW1FjFdVak0qV2pqampR1pXqampqVZKW1haW0NaqampqampqampqSojZM3NJXbNfTDNzc18fC9/eX9JzVZzYIBYzc3Nzc3Nzc3Nzc0GUndkhV2IgVhtiopvd2tyctfXY1pigWGJgInX19fX19fX19fXJ0a5uUo7TLkmR2q5TkhnW7m5SkdoWGxsZDhsubm5ubm5ubm5uT1Mhh/UWnLUhFXUhyczVnIz1D5XU4fU1HHU1NTU1NTU1NTU1NQmLmouYS5rY202arxdvG1MWT5GvHC8aW68vG68vLy8vLy8vLy8Hi+mpqY8plJXMKamplqmO6amN1FIpllaplimpqampqampqampgisrKysrKysYFWsYKysrF2sWl5ESKysrF5bWqysrKysrKysrKwOWblJuVG5ublVa7k5Wi5oubm5ubm5bGdsbFW5ubm5ubm5ubm5EJ+fn5+fn5+fn59NU59PT1BTQZ+fTZ+fLlNQn5+fn5+fn5+fn1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTPGRNQyheXmyDf/FHPUtC8VidMjUzWWbxooel8fHx8fHx8fHx8SQrPj9IQUKDXU6JeW2DikNjd05LZD5019dei9fX19fX19fX19c4SmliXEZrllE/qkRSepUtkaxQaxlEgKmagZj4+Pj4+Pj4+Pj4BWVtdmhOdnCcQ/+lhJyPdZb/iWWOVK//l5b//////////////yBPUkwqUVCTlXLiRlhTP+I84ktKP5V2lWfiWuLi4uLi4uLi4uIkOk9WVys8Y5Yr5eVNhG5O5eVaUF4+g5PlmeXl5eXl5eXl5eXlNCV6b3QyhGSKKNaKYUyIOXrWMNaFPYPWiHCK1tbW1tbW1tbW1iUhumK6Lmy6ujC6Zmy6ui26umy6VlVtbWxburq6urq6urq6uro5P32BSzxeLX52zXZRYiZpW800bUFpOc1sf3DNzc3Nzc3Nzc3NIEyqPKolWqqqXKpHqqpcRKqqXCSqXaqqXKqqqqqqqqqqqqqqqhJFs7NDPLNmszKzs0hjUbOzY2BLZmRmXrNXs7Ozs7Ozs7Ozs7MtO3dqSydbjqEwoYc2cG5FSvCMRFZ4afCfN/Dw8PDw8PDw8PDwMS9AZH8heW2XRJ3qkmaJMy7qlESbX3WIjGvq6urq6urq6urq6jZMkzQxRW9ef1iSqXqPgVuLmoA+FmJZm6SUpv////////////8sxl1fSmk1WMZfYXBQN1bGPMYwPG4xXFTGxsbGxsbGxsbGxsbGMTOSeHM0l5RYUpfjMmzjNGyPK0YwbJCVl23j4+Pj4+Pj4+Pj4yppeV3HYnnHdsfHx1jHX8dlZntJdwpmx8fHx8fHx8fHx8fHx8cZPnFYdkFib4k9/41eT1BtXf9NLEaJUXfCWr//////////////D4SeU5hJu5djWP+Zgph/WlGQlTErarn/t3j//////////////yM6fkl3MWqERDuXoGxqglxc8zk4P0t5YPNeivPz8/Pz8/Pz8/M0xHhASy7EY8RWxMRZY2RkxMQfNy93X3NQxMTExMTExMTExMTENS6Ld9oSidqFJ4zai4VtTGzaaGJtiIvajI7a2tra2tra2tra2iA1eXNjNWh9Rzh8XExtfTxJzDxFWIBbgHfMzMzMzMzMzMzMzMwwR3o0aDOanmc4i4B0mZ51IerqciOLnOqEmerq6urq6urq6urqE8xXWlxBUFqAdH7MZFdhSUjMYy9Vdm1MfczMzMzMzMzMzMzMzAu2tli2Lra2ak+2aLZhZzq2trZTZ7a2tmi2tra2tra2tra2trZTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUypISSRLTEfeiDl/V0FiU5GKgFtJTT1ckYqQi97e3t7e3t7e3t4XMDk4OzQ6ysp8ysp+eXlzyl/Ke3F0ysp5esrKysrKysrKysrKFzs6ODs4Ochob8jIdMhuUWd4dWV3enjIech6yMjIyMjIyMjIyBg4NTk+Mzl+ylx+ysp5fmF3XXptysrKdH7KysrKysrKysrKysonPU0zREBQ35CNgXljaEvf398fWT/fjW51hJLf39/f39/f39/fI1FVVlMtGJbkNeTkXIXka5bkj1SFe5OB5Ijk5OTk5OTk5OTk5BFcXFGoSqhXKKioXKioVqhZXFlEWaioqKioWaioqKioqKioqKgNOFShNaGhoVShoaFUoaFVoaFVSaGhUqGhUqGhoaGhoaGhoaGhT2aAMmkwazbtn56GIe0pfHyBRYBc7XjtO+157e3t7e3t7e3t7RBGS5pLS06amppOmpqaTkyamppEmkyaSZqaTJqampqampqampoOOUlKRpqampqaTJqamppJmk6ampqamkOamkyampqampqampqaQh6A0HAv0HHQMdCD0NCAIoPQ0NBoMdDQ0F9/0NDQ0NDQ0NDQ0BhEra2tSletXDtfra2tX0xGra1fIlytX62tYK2tra2tra2tra0RMmKwRmBbsGKwsLBkRF5LX7BDVLBhXGGwZGCwsLCwsLCwsLCwMY5zV93diojdet3dPItLQo/dDGd+Tt2GdN3d3d3d3d3d3d3d3RgrVKmpXKmpWqmpqTxUqalaqTRLqVSpWktLWqmpqampqampqakYnU0tL1CdnZ1RnZ1OUUWdnZ1NnZ2dSp2dUVGdnZ2dnZ2dnZ2dPxx+goIgzs7OPM6CgGaCIn56gs5/W85/fc7Ozs7Ozs7Ozs7Ozg9cblRvMXFsbVvCwnFNwmVLwmpTOMJzdMJwwsLCwsLCwsLCwsITbWtmwCfAwFpMwMDAXHFjOHNyTcBzwEzASG7AwMDAwMDAwMDAPYB/zn5dfXTOgYB8HX0Zgc5/RzdOzs59zoFFzs7Ozs7Ozs7Ozg9IWKSkQKRSRaRYpKSkWKRWVVJSWKRRpKRWVKSkpKSkpKSkpKQRQ1dBU1NXo1ejo0FXo1dUo1BUS1ejo6Ojo1ajo6Ojo6Ojo6OjDKKioqI8VFBUUlCioqKiokNWolaiU1aioqKioqKioqKioqKiogdvanFtanFvvjFxcL6+cb5vvr6+vnFsvr5wcb6+vr6+vr6+vr4OQ1NRTqBQU1SgU1OgoFKgUVOgoKCgUKCgoE+goKCgoKCgoKCgU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1M001Je04DTY4JFh9M8TTeHU4E7TRlPUoCAhnHT09PT09PT09PTGDClPk4ppaWlpaVOpVmlUVBTWaWlVaVZpVWlpaWlpaWlpaWlpSI+Z0pLW2JPRFxlaEVJajVAVlhFRFi2Zra2tra2tra2tra2trYbMEM9rFxYX2BWXVWsX6xCWlhJYKxVX05crFusrKysrKysrKysI3KAdkGJguzsn5jsX1YqRIbsMjEpf3mBYJyf7Ozs7Ozs7Ozs7B1BrV5dX1tcRCitWEJFrV+tXllfrTytXq1fYa2tra2tra2tra0lTcXFxRhfYXkyxXlGZ8VxxW4xZsXFxXJ3U8XFxcXFxcXFxcXFJ2FNZXhNbnyDV4DPOc/PV2zPz3MQ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V0zMbVE5UmbMzGs5KczMdIBnzMzMzMzMzMzMzMw5VDB1eFlSNnLExGJsMB7EYnNOT0B4d3h4xMTExMTExMTExMTEGDVUNVRVplWmRKZaplZWWFpWVqZVplemV1NXpqampqampqampg2dTE6dnZ1GnU6dnVFETU2dUZ2dnUudnZ1RnZ2dnZ2dnZ2dnZ0Lo1Sjo6OjVlOjVlWjVFZPU1WjUqOjVlSjVqOjo6Ojo6Ojo6OjFW1KuTtqubm5bbm5abloWh+5uT1Wa225a2q5ubm5ubm5ubm5uQ5WVaNUo6NUo1RVUaOjUlRSVVRSVVZWVKOjo6Ojo6Ojo6Ojo6NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyyLSItqYV9H5VtrhRtYLpWRhE5YLn/lhOWXl+Xl5eXl5eXl5eUgQ3JQhDyHZ4w5fdkqa2tfi4xHT2Erd4yChnbZ2dnZ2dnZ2dnZJSCRhYU2gaJRP6U3YX7yR6PyXkU2bJqmj37y8vLy8vLy8vLy8h81mW1SGXlUh0KX5muFaGN0lWROWFiRfFpu5ubm5ubm5ubm5uZAm5ZqM5BumedTgOdBcS2b55sxG2BoTEFw53nn5+fn5+fn5+fnMlOFem9MNd2NFo/djI9wZXrdgmk9cI2DgCeP3d3d3d3d3d3d3TY/jXuQTXlUID6XdHdeIXaFe05Z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bcHBwcHBVGMQbMFibMHBwcFhwXHBwcHBwcHBwcHBGEuYmJg3SZhIRkxJSJiYTJiYmJhLSEyYmD+YmJiYmJiYmJiYmCplumtQbrpRulpDujk9Krpduksha7paumK6urq6urq6urq6uroPVEVSoEtSoKCgoKCgQaBPUqCgUqBSVFRRoFCgoKCgoKCgoKCgEKBURqBOVFKgT6A3oKCgUqCgoEI8oKCgU6CgoKCgoKCgoKCgoA8+n59LT0yfn5+fQE2fnz2fn1Cfn1Cfn1Cfn5+fn5+fn5+fn58Qm0JMSptNm5tOm5ubm5tLTZubS0dOm06bTpubm5ubm5ubm5ubD0OjU0+jU1dUVKNUo1NTU1OjV6NTo6NXVKOjo6Ojo6Ojo6Ojo1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTKLw3bEC8USJVR7xgZ1w6YLy8RUFTvLxsvEy8vLy8vLy8vLy8vBpBo1FEPKNHo6Ojo06jox+jo1OjV6OjV1Gjo6Ojo6Ojo6Ojo6MWPqhaO0xaWqioWqioqForqKhYRqioqEuoXFOoqKioqKioqKioJTlLYWJYNFBfLq5Prq6uJa6uYK5HrmKurq5grq6urq6urq6uri6DjOQvT3TkiuTklFlmNORwlCpWN+RwbmYi5OTk5OTk5OTk5OQgoqKiolVVoqIkoqIoVqIzoqKiolKiVk9WUlWioqKioqKioqKiEKenp6dTQ6dWOKenp6enR1SnMkinRKenp6enp6enp6enp6enpx0hn58/n5+fn06fU5+fnzafn0pTTp9Tn1BNTp+fn5+fn5+fn583gnNuWETPg8+Cz888fRRYOWhkVC/Pz3p1fnzPz8/Pz8/Pz8/PDaFDVFGhoT6hoVJToaGhoVOhUlChoVRPoaFToaGhoaGhoaGhoQ6aR5pOOZqamjRMRZqamppMmpqaTpqampqampqampqampqampouObZqtiC2arYramplRLYutra2tmJgZmpqQ7a2tra2tra2tra2KCajV6NRVqNLNaOjLlejU6NWozVWo6NXo6NPo6Ojo6Ojo6OjoyxKrq5hSa6urjGurlquXBJdXq6urkGurleurq6urq6urq6urq4iVaqqqqpIqlxQW1o6qjVdTapFVkQ6PF5TqkqqqqqqqqqqqqqqJSurWatcq19dq1pfTl+rHVirPV+rq6tfX1Vdq6urq6urq6urqxhJmpqaSpqaMkuaTkiamppOmkuamieampqaTZqampqampqampocn0SfnyNSn588Tp+fn59LU5+fn1Azn1OfTZ+fn5+fn5+fn5+fB3rLfctey2x/YMvLVst/Z0XLy8tKRst/y319y8vLy8vLy8vLyx1OYl6uQ66uXC5erlmuTj2uriVIrmGuYmKurq6urq6urq6urq4rtBy0tGe0YrRnYrRPY7S0H2c5Q7RmtLS0tGO0tLS0tLS0tLS0F049UZ9LTp+fn5+fn008n0ifUUxCUkifU1Ofn5+fn5+fn5+fnxwlYa03ra2tWkmtYVthRi1hrV1fXa2tX62tra2tra2tra2tra0JnZ2dnZ1RnZ2dnZ2dnZ1PUZ2dnU9RnU1OUU+dnZ2dnZ2dnZ2dBqNWo6Ojo6Ojo6Ojo1ajTVejOqOjo1Kjo6Ojo6Ojo6Ojo6Ojow6ampqaQ5pNmpqamk2aTZpLmkpLmk6aSpqaPJqampqampqamppTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0qjO0NskvNbmEzzY4VXNPNYozQvIldhenRAbPPz8/Pz8/Pz8/MdIrOzsz5ns7Ozs1JGs2A4s1A/XLM8Z7Ozs2Ozs7Ozs7Ozs7OzJk1pvr5nvnIvXVm+P1xRKFlovktrKL6+bL5yvr6+vr6+vr6+vhVLdFV+JXbPgUB/a4FwT1bPgE82z89wfXBvgc/Pz8/Pz8/Pz88XP4pBQXZtW5N/pv9zS0SQc4Y/MkV2WHtUfJ3/////////////D1q3t2VbaWhTQ7dnPGleP2m3X1hUZWdjaGlot7e3t7e3t7e3txpMra2tWK1eXVhgrUStrSBJYD5DYK1fra1gra2tra2tra2tra0POqOjo02jo1Sjo1RXo6M+U6NWQVejVqOjVFajo6Ojo6Ojo6OjWUs9N0pJWEagkfxlkk0id1p2/DQ3gWCtj605/Pz8/Pz8/Pz8/A+jVFSjo6OjP1ZTo1Wjoz2jo6NXoz5URlajo6Ojo6Ojo6Ojo6MSs7NUVjmzs2AuSWRgs7Nns7NnQUtjs7NlYWazs7Ozs7Ozs7OzJD9cbG8qk+yQM+zsmmR3MWeankWKVXqXnSmW7Ozs7Ozs7Ozs7BYttmdoOba2Z0u2Z7ZiSTi2amo7tmq2aGhkZ7a2tra2tra2trYcLE+2aDK2X7Zqtk+2tmo4ara2MWlGaLa2ZmO2tra2tra2tra2SzZUKnKepS2GeomUl6A/Q1fxPUJFS3Ezc1zx8fHx8fHx8fHx8SAlwcFrOlJdMEjBwWNaW0tuwURXTcHBwcFcccHBwcHBwcHBwcEXK6OjPVajV6NWo1SjTaOjV1RQo1Q3o6NWU6Ojo6Ojo6Ojo6OjHUxXT0EyXmCtSq2tX62tQ0StWlxgM12tW1hera2tra2tra2trQdkcmWEPoeIbWCO3GJzelNbjXyNU3+OhWxq3Nzc3Nzc3Nzc3NwiPYKKZCeGgEQe1nLWhIdZdHZQSoVw1ofWUtbW1tbW1tbW1tbWQ0FoXzwoXDp9ZdhmiTZXiVnYPyo8jNiMWNjY2NjY2NjY2NjY2C03WmtxFG5rcTFubk5ZvW1ucb1rbWJvb71vcb29vb29vb29vb0bK6JWolFWoqIkok1WoqJATqKioqJWoqJKoqKioqKioqKioqKiEJ2dRZ2dUZ2dnZ1PnTNQnUxCUVGdnZ1LUZ2dnZ2dnZ2dnZ2dnQNrloBulnpx41njln15fuNplnxnYpOS4+PjXePj4+Pj4+Pj4+MVo6OjV6NXo1c9o6OjR1VMo0dVV1NXUztXV1Sjo6Ojo6Ojo6OjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NAmZBNb6SZTH0/b1g7mi3zPfMvRSOQhqVLe3nz8/Pz8/Pz8/PzLULJUlIeycnJKnfJPGhuOGrJU0l9WsnJyWvJycnJycnJycnJySEytDu0RGe0Q0e0aEVeZzxEWEhgW2FNtLRoZ7S0tLS0tLS0tLQbNlJPtkhhZrZAtrZFUU0/YGJhRbZBtmlWYWm2tra2tra2tra2I1GGcT9yemqRiveTXkoea4WqOjgyjZhsfpV59/f39/f39/f39xg5XGJYWWGurjRhYa5fX0ReYVpcrjdeXl5iYq6urq6urq6urq4fR1pcWjVPqalUW6mpNaldqVglTE6pqampWKmpqampqampqampDZ2dnZ0wRp2dUZ1NUJ2dnZ2dnU2dQZ2dnZ1NnZ2dnZ2dnZ2dnUmEiDtSdJZXnGWceUFYG3h/l1owKXjp6VnpRunp6enp6enp6ekNnp5Lnp6eTJ6enk1Snp6enk9PL56enlBSnp6enp6enp6enp6eFqamWCVAplqmUqZXWqZWpqampjpAplhWpqampqampqampqamphBfa2BfQ1fEbjRXbFFXYF9ycVJgxGZ3eFlnc8TExMTExMTExMQzH89czyGDz88zgc9xdc82z89tz4M2z4J5WoPPz8/Pz8/Pz8/PHDisrF5MXKxdKV5erKxeRldgWDxLXaysYF5drKysrKysrKysrEfiV00ekeKEgWNocWVgJWTikz5RPDk7luLid+Li4uLi4uLi4uIyNofna0ZreW1H55gd5+ctc5s8WDxJiZl9cufn5+fn5+fn5+fnFqKiRKJRolNRUqKiLaJTokhBoqI6olBTVqKioqKioqKioqKiohI0q6urL6tcq1Srq12rq01TW1pUS1qrVqtcq6urq6urq6urq6sKY3Vbej9vP4Fgz3twz8+BbM9RdVlaal9/Z4PPz8/Pz8/Pz8/PF1e7XGlMaWZZOLtKTWi7TTpqREdaXWi7UWltu7u7u7u7u7u7uzqDgFtxWYF/0HvQgBNVN9B50NA8J9CCfmPQ0NDQ0NDQ0NDQ0NAUPVlJqDJXW1uoWFuoqFtbVFlYqFlbWVhbqKioqKioqKioqKioFCukU1ZKpFCkM6SkV6SkUKRXpFSkVaSkpFdXpKSkpKSkpKSkpAxXpKSkpKRUVlekU6SkTaRUpFVXT0WkpFVVV6SkpKSkpKSkpKQgSEliUWpeV1dFumZMVrpNMLpEOFlaTGduaGm6urq6urq6urq6D6OjRKNVVVNDo6OjV6NBVaNXo6NVVKNQo1VRo6Ojo6Ojo6Ojo1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQYpNVl6egkzvZp13IyJH71JtQmUqbFaBj+/v7+/v7+/v7+/v7yI/t7e3T1W3tzJhZjhPtya3Z2FNZkBmt7dSare3t7e3t7e3t7dBR35/hRiZlDY9m5dJi4YuguxJc0Fmm57sR+zs7Ozs7Ozs7OzsJDZhdIYhc56RK5DxSHqHRWehVThuY4qInHmh8fHx8fHx8fHx8SVXi0gxV3BYh2eXklV0SGGnhSwwPXV0R1Fvi/Pz8/Pz8/Pz8/M1d4fWb0aG1oca1nY8dHAch4dHeWhMitaF1tbW1tbW1tbW1tbWBYKwh3pEipSHX7H/WZGfaZGubktqYoqlp5///////////////yMmWklZHWayYk2ysrKysj5lsrKyXkqysrKysrKysrKysrKysrJGXWk6U1JFZpqammR4SSVQVVlxPiV6YOprmjzq6urq6urq6urqHzxPYVgrYmSwU2FesGJgO7CwYjxiNLCwZLBisLCwsLCwsLCwsBFSx8fHK8dmx0DHx09ZVcd6x8cuaHp6Z3dyx8fHx8fHx8fHx8czV3BSWzjEc8QjcXjExHUjXsTEa2DExHB1JnXExMTExMTExMTEKR5qXWMevLy8vGhtcGxtO068cGplWW68a7xovLy8vLy8vLy8vC4/e899Ec/PzzZ/goOAey7PgnDPaml/z4Bje8/Pz8/Pz8/Pz885amhVRGlr5Jh35HhsQzNbT34uOylAWzt/hOTk5OTk5OTk5OTkLCBwcMV3xXB0QnVbTUlhTHdvKHhqOsV1alJzxcXFxcXFxcXFxRWfn59TS1FNn1Gfnzmfn5+fn5+fnxqfn5+fn5+fn5+fn5+fn58kWW9XvBNsvLxGarxwV209Vrxsb1Bka29vb7y8vLy8vLy8vLy8E2KWZJM4W/VoM6X1XXCmTUz19XEsSaB2oYuo9fX19fX19fX19Ro8sJOLJnmkZC7//1N+lmB2sT40hnOglKltnP////////////80Pmxvf0Rnas5QgoA0G1NdWG1gPkd/zs5Bzs7Ozs7Ozs7Ozs7OJzpSgHIafG1TM4DOa3ZrLc6CzmVrzl7Ozs58zs7Ozs7Ozs7OziIjSa1gSF5cRj2tra1ZrTetXjldYVqtrWGtra2tra2tra2tra0LqKhLqFVYqKhcqFmoSExaqKioqE9ZV1ZYqFioqKioqKioqKioFFZSUGG5uWhYQWy5QzC5VGi5bGFEbGxBubm5ubm5ubm5ubm5uREvWlpSM2CsrEOsrKysrKysWmCsrEhbWqysrKysrKysrKysrKxTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzdod08Qas3Nf3XNW0tlgXl6zTFQP1KBzYHNgc3Nzc3Nzc3Nzc0wNk110i+E0n9DLNJAg9I9gXFqL1JOYtLSWIDS0tLS0tLS0tLSMimQSXsycORXTuQiY46RRnuWaUdFPZWWf5WV5OTk5OTk5OTk5CtIWHVfFnKPhDfk5H99h1F75HZPki2Wk5ZYleTk5OTk5OTk5OQhZ7dqUmRBt7dqt7dZZVJqZ7czIEpqZLc5WGS3t7e3t7e3t7e3HlZvesdWG3fHLXh5dXV6RsfHx1I6Y8fHx8d5x8fHx8fHx8fHxyFadWN0S1I71DrU1E1pPkhc1ChCcVzU1HBJ1NTU1NTU1NTU1NQZMbBiWkawsLA7YrBbUDtYZFKwsEFJYmBhsF+wsLCwsLCwsLCwL854QS5kf3t/gM5/VGsTf3bOVUVXznl+gc5Wzs7Ozs7Ozs7Ozhu0tLRnF7RhtES0tLS0YlJgtGZGVExktGZXZrS0tLS0tLS0tLQfVmd9yxfLy8szeWpqWcvLy8vLPWNBy2zLaMvLy8vLy8vLy8vLND11czg5iOiYQOhzJ3ZwMIHonD5aREDo6FKc6Ojo6Ojo6Ojo6DU+Tpd4L4qbijWbkVwuY1Ebf5thdZ6gnJt5muzs7Ozs7Ozs7OwXRX1WTUNGVphTe4tldlhkdf+LJjyQXKe6eYz/////////////QJFiaUPdZFvd3d0lJVRUejuRPEsrenLdjI6R3d3d3d3d3d3d3S5Ddl5oHoaIVkXjkmVrdEpHYFJDMkqWjZRLluPj4+Pj4+Pj4+MRMkiYmEtJTJiYmJiYmEyYmJiYmJg4mJiYTEmYmJiYmJiYmJiYJk95VT43glqNOZ5HczRoZV//UD0wfJdxrFWj/////////////yZQhGBnJXqWbjDlgn+RfGRRfoY/Ilt5mXZjleXl5eXl5eXl5eUmNnRsbChq5Ds0k3BcfmA0YpF0QUFy5JbkZuTk5OTk5OTk5OTkWetYZkyJnUd/kYyfVpoi6zfrLTEjmmWbn5+d6+vr6+vr6+vr6zJBhm3WDWfWeyjWd9bW1nXWioSA1oqI1nZy1tbW1tbW1tbW1tYcTHRiazBp23pIbNtMeCGB29trMmx5eIyJ29vb29vb29vb29vbEF/CcmA9b8J1N8JxaVBxVGx2wsLCWMLCZTBxwsLCwsLCwsLCwhOvYGOvKa+vrzpjX681r69Zr684r6+vY6+vY6+vr6+vr6+vr68WqKioRiNcqFg/XKioRlxYW6hYXKhYqFeoXKioqKioqKioqKioU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTnWEwV4/xRp9SjZ9ldjmgc4UaPyxqjmuLSPHx8fHx8fHx8fHxFjiwXmRLsLCwTGJXYDewMLBkYVliZLCwXUWwsLCwsLCwsLCwsBU2bFu7u1+7u09uYlVVRypku2VKR7u7u2xsu7u7u7u7u7u7u7shLEJrc3UlwcE6dVpUbnJJbHLBWWxMb8FJb8HBwcHBwcHBwcHBLk2LKz1ZcGt4hfKXY4UrdXShHUVaenqGe6Sj8vLy8vLy8vLy8h5hXrBdsGKwYCRksENZXWRkYUw2sDtesFVhYLCwsLCwsLCwsLAZsVxkYUlSZWVasbGxUERaPbEnRGKxsVBbZbGxsbGxsbGxsbGxJjCAboApgICCKs7OboB+L2xqUVJhznrObEB8zs7Ozs7Ozs7OziuAjy1KRWndfoR/YTZxIX5Ej0lIRd1lkWTdbt3d3d3d3d3d3d0WUU+fn1OfnztRn5+fUUpMTE5On09PU59MU1Gfn5+fn5+fn5+fI1+sPaw1Rx2sPaxgXWCsrF+srEZBrKysrKxfrKysrKysrKysrEQh6I/oIejo6CSZmZScfjOCmpV6fD1ul+hH6Ojo6Ojo6Ojo6OgSRWFeXjKuUa6uQ19XXq5LrmFeSq5fX65drlmurq6urq6urq6uGihdY7FRYEthXmJcWmNdXjhkWLFUYbFhY19MsbGxsbGxsbGxsUiMioBaj4OTiDiYbzmRNE1H6SQfT194X5icmenp6enp6enp6ekzRnZ2ZB95i2g0jtovhnM9hIsuW2t6cdqNUo7a2tra2tra2traEEmlUqVWpVNYRKVYVqWlpaU8P6VWTqWlpVRWpaWlpaWlpaWlpVJppZ7zGZvzojCXo6LzohGlkKKBlHKdopiYovPz8/Pz8/Pz8/MNYoKDcDhnY1VHg3LSaIBmWG5uZUtPbmyCXIDS0tLS0tLS0tLSJEaLgog2kJBQHNzccmyCO2zcXjuQSIyN3Ex13Nzc3Nzc3Nzc3DrPJoODz31yz15/zy9gW89LgjU0IHt/z4OCac/Pz8/Pz8/Pz88fYVxNWTxaW1itXlQ4rV1MXK1UNFtdQkytXlytra2tra2tra2tEz6iU0OiUlSiolOiVkZWoqKioi+iVKKiolBRoqKioqKioqKiog+oXFpUXElcqFGoV6hHXFqoqKhZVlxXWlhZWqioqKioqKioqKgeWn88OG9SUHNVb2xfTVtlPGVLTzFeXW1ha9TU1NTU1NTU1NTUEldYpFVXpFhUUVhRWFdUpFdVWFJUVVekV1OkpKSkpKSkpKSkpFNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTDz1DX2i2aLa2SzRWQGS2arZSZ7a2ara2tra2tra2tra2tra2thVMmEeYPEuYmJhImJhJmEyYmJiYNpiYOJiYQ5iYmJiYmJiYmJgbOVNTo1ZQTaNWUVNXo0ZDo6NMV0ajVkCjo06jo6Ojo6Ojo6OjFUKkUUKkVqRTVk+kpDw8pFakR0CkpKRUpFSkpKSkpKSkpKSkpBxPL69grzWvY2FcYDxAr2OvY69cr2BBWFdYWa+vr6+vr6+vr68Snzufn59Pn0FCU5+fRlCfU5+fTZ9Qn59QUE2fn5+fn5+fn5+fFExQRE1RUU1OoqJWokVUQ6KiPlSiolOioqKioqKioqKioqKiog+enk+enp5KnktSLFKenp6eTJ6eT56enk1Qnp6enp6enp6enp4VRj5OPqlZqVhYVKlGqVypWalbVFdSqVpVWlupqampqampqampGTIyj4+Pj0GPj4+Pj4+Pj4+PQTyPj49DPkGPj4+Pj4+Pj4+PjwyYmJiYTEhIR5iYSZiYmJhMTJiYmJiYmJhKTJiYmJiYmJiYmJgOPLpVVLpES2dNurpOurpuRbpYulhUurppum66urq6urq6urq6Fk9RoaGhoaGhoVWhoSqhU0uhUqFSU1JRREFRoaGhoaGhoaGhoQ5DnJycnJxNSFCcnJxQTkacnJycRE6cnE6cTpycnJycnJycnJwPk5OTk5OTQkOTR5OTk0STPZOTNZOTRJOTk5OTk5OTk5OTk5OTF5tPT09Lm0KbS0mbRZtLm5ubS0WbRps+m06bm5ubm5ubm5ubmxNEq6swq05Pq11YP0hOW6urXFyrq6urX1qrXKurq6urq6urq6sVUZ2dnZ2dnVFNnZ2dnVGdnZ0/OD9OUZ1KOlCdnZ2dnZ2dnZ2dEVJHOFemWEpTVqamTKampqamplc/plhGpqampqampqampqamphU8WKSkUFekTT1VpKRXVaRUWE+kPqRYVKRQWKSkpKSkpKSkpKRSIXPa2hVx2own2tra2nQ2etp0jNp62oR9hYfa2tra2tra2traFkdDlZVFlZVFlUeVlUeVlUGVNZWVP5WVlZVFlZWVlZWVlZWVlRWXQpdJMZc2l5dLS0iXl5eXl5dLl5dJS5eXl5eXl5eXl5eXl5cUlUWVSZVJRUiVlZWVlZVDSEmVlUaVO5VGlZWVlZWVlZWVlZWVF1FTnzCfNp9TRTWfn0mfn5+fn5+fn59QT59Ln5+fn5+fn5+fnw1Ll5eXl5dHSkZLl5eXRpeXS5eXSkeXl5eXl5eXl5eXl5eXl5dTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0yMTzNKhF9OmkWNi0Q8K6o9pFlYJXRgYaBXiPv7+/v7+/v7+/seMr1xZj5vU70tvb1Scb0qbb1SWr1bvXFxTG+9vb29vb29vb29MzeJbIIdZNkhR9nZTWWHP3HZ2Vd9TtmGi4XZ2dnZ2dnZ2dnZ2RdddmN4KmuJbyqNb1Nw2WNeh2UxjWmDZ4xwjdnZ2dnZ2dnZ2dk3N3Q3N09DTntwg5VKTUF6P1tdK0uDT2qDk4r/////////////JC2/SWk1c79sQHFuNlS/MW2/VExdSb+/b3O/v7+/v7+/v7+/vzE3T1rPHHt1zz2Cz89jWElOz30qdE1qe3lsgM/Pz8/Pz8/Pz88lQ0msRjOsrKxCrKxdrFcoW2BcSlpHXKxaSFysrKysrKysrKysVDlCO002VUz5q6SHa1AoSUOqq0g1rUz5dZBJ+fn5+fn5+fn5+Rg+UJycPZycnE1QnJycTlCcnJwonEGcnEqcTJycnJycnJycnJwdXFZ5QylRe2o5f39Qy8vLfMtyKlhUy1tff3XLy8vLy8vLy8vLIzV/YEY3aoLOLmjOZ86CPU98cEbOV3yAzi2Azs7Ozs7Ozs7OziYdhGNrOFrdcyiPb3CR3UV03Y47c1t7et3dkd3d3d3d3d3d3d0gHm9kfS/RZYIvg4WFaoVIaNGCRHPRgoCFZIPR0dHR0dHR0dHRSlpFP0d+XVWSbVZpRj1BUjqaS0lDMUJIWXZt9/f39/f39/f39ycxVjpaUsrKQGbKclVheyx9fStjRWp7fX1pysrKysrKysrKysoNQpSUlJSUlJSUlJQqlJSUlJSUlJQplJSUlJSUlJSUlJSUlJSUNi+MhXYe2ojaMNp+jH52JNqMiW9zRIt42kSE2tra2tra2tra2gxSo2uHKvCjUjuf8I2hmVNigYmGTXyRiqCAoPDw8PDw8PDw8PAfQmhmeS10mUYl6OhjZVxeho58NoFNmomVTXXo6Ojo6Ojo6OjoRGRNJF1ZaWSIXYnYQzok2EDYdDFJW9jYidiI2NjY2NjY2NjY2C8odsh2FcjIyCZ3yHp4Z8h8fGtrc3p5ech5dsjIyMjIyMjIyMghILW1ZU5ntWkttbVRYLVptbUutbW1tWM8YbW1tbW1tbW1tbW1C1KhoaGhTqFTVaFToTyhoVWhoVNSoVOhoaFVoaGhoaGhoaGhoQdbdYFkc4qD2E/YinvYjHI02HdYbIJ7f4qIidjY2NjY2NjY2NgPm5tOmzybTktPm0+bTptKm5ubm5ubm09OTE+bm5ubm5ubm5ubU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MzXDxRY2lBRoxigmo4NzdrTNxATTV7RWSHYdzc3Nzc3Nzc3NzcGkNMPEZmtrZqNrZqtlNIRmq2tmRmNWS2VVC2tra2tra2tra2tjsolH+URZJ/NUHhjVdtlSl84SFiXE95iuHh4eHh4eHh4eHh4eEbQktrXThGvr4yW09XXWtHSr5eWldcWb5qvnK+vr6+vr6+vr6+JVGLQjpZem+cirCZRVU+iF9bKDczcXGGeqaF/Pz8/Pz8/Pz8/CFka7e3Nmu3XTO3a7dotyS3Z0xVSTa3Z2VXa7e3t7e3t7e3t7cUVbZIVVJpWGMwZrZWX2lfV7Y8RVe2tmK2aLa2tra2tra2tra2IyZklmcqa4XiK5TiaVpyL5DiZ45kWI3ijpSU4uLi4uLi4uLi4kxrRlRCY2Ay8qak8lxCLSqMo28+MJVO8mvyR/Ly8vLy8vLy8vIXn5+fUE6fUJ82U59Rn58nn5+fNp+fSlOfn5+fn5+fn5+fn5+fGXFvab8qv2ttInO/bG2/v2e/vzRTY3NtcV2/v7+/v7+/v7+/vycifmXPRHnPbieBbWl5bDBog89jdkvPz888z8/Pz8/Pz8/Pz88fJ3JVw0DDw3Qow8Now3M1UsNaUkfDZcNxw3TDw8PDw8PDw8PDHiC/v79Kv2+/Nm+/c1xwLW1iv2lOSXNkv2htv7+/v7+/v7+/v0J9ez9rkFCJkmji4i1CIHJw4iZxZzGOgojiluLi4uLi4uLi4uI+I314aByKl01M4+M2k4Yqlo9XcpZq4+N+eePj4+Pj4+Pj4+PjPFm5ubm5ubm5aLlrD2S5bbm5S2BoH225ubm5ubm5ubm5ubm5uR46uSlpPEtouT5tuWlquUZeuWtdZko/bWu5Yrm5ubm5ubm5ubkbSXaAcStshV8jgpRVb3ZGZJJ6aGpCe2Psh4bs7Ozs7Ozs7OzsJyR/ZlwzeHZ6OqOZeWxxP3D/JkyRWo6es2P//////////////1dRGU5tVFlZ6EyE6Ek1Vegy6DBQZ5ma6JeYnOjo6Ojo6Ojo6OgWSbU3tUZUL7VpWFJWZF61WLViQLVpZLW1aGO1tbW1tbW1tbW1JiO/Yk4vbmtuIb+/YFy/Pmq/a3O/v3O/v7+/v7+/v7+/v7+/vwxYp6dYV1dap6enp1RbWKdbp1enp1dXRFZbV6enp6enp6enp6cxy2dmfX3Lf8t5y8vLKxrLf39wG3/Ly314fHzLy8vLy8vLy8vLDKFVoaFUoaFVUU+hoaFUoaFRoVJOUlGhUlGhoaGhoaGhoaGhoVNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTOZMxO2mhckqCO4liNV42pmaVO0snenukXX/4+Pj4+Pj4+Pj4+CxWaWdgPFVftTVkaS5laSy1Z1RNtTZptbVBtbW1tbW1tbW1tbU7UNVsWHB2hA6JdYdSgmwwWNWGXGRUhmqJhoTV1dXV1dXV1dXVIjlSVl41ar9xJ2RuRW6/ML9wa1hwbFW/bm+/v7+/v7+/v7+/vyhsjFsndn1it5m5nldEPJFx/yAycoaCmlD/i/////////////8eUsJVTWJywm4nwsJUa1I1SG1MRFhLU3RywnTCwsLCwsLCwsLCIV6tXK2trV9ePlteYVxfQK1eH1NVX19eWlhIra2tra2tra2trR5J6oJ1I+qIfjuE6mJabiuD6jlUe06Xiupmfurq6urq6urq6uphS3I8bldRbZ+puKtDQCoWYJWBZ1K2QP+cu23/////////////E6NVV05FVFdXVUWjo1dXo1ejozmjo1NXo1NUo6Ojo6Ojo6OjoxpVql2qI1tdqjxcXaqqVapcXapdqj9bU1xcWKqqqqqqqqqqqqozQ4HRdyV90YUqf37Rb1lJcdF5RtHRftF3HNHR0dHR0dHR0dHRJynFdcUxaMV3cXd4M3TFMTxVWlxIUXh4xWhxxcXFxcXFxcXFxSQcV7xvK2tuZUu8vLxsbUS8vF5KVElvvG+8XLy8vLy8vLy8vLw+g1xTWIFpUHhukEpUOEVCR/EWUFhVg214mfHx8fHx8fHx8fHxJDhbWkpfZ3h1X3rINW15PmHIKVFUOsh7YE92yMjIyMjIyMjIyBNHnp43nlGeUFFPnlA6UJ6enp6enkSeTJ5Qnp6enp6enp6enp4/G/VsnTiBm/Ugpal7m4Y5hvWTeYc0i6f1R6n19fX19fX19fX1BHqDaHJX7Ozsbp+faZqIcGF9oJJLaIh6i56c7Ozs7Ozs7Ozs7Dg9jd6LGIqBaS/eiETeb1o83jRmed6QkIFJkN7e3t7e3t7e3t5GNkdsQ2Jwbtpk2tqGV0aBNoMVVTpvZ9qL2oza2tra2tra2traGxuqqqo/XKpeRapcqqpYSVSqXqqqW1xbXqpZqqqqqqqqqqqqqjE/t2ZiKFpcZihot2u3tx9bt1C3t7e3a2dra7e3t7e3t7e3t7cLsLCwsLCwsGJgU7BcV1VhsGKwXTNfZF5gVrCwsLCwsLCwsLCwDnWSZ3OQkuDgkX3gRuDg4BjgkXZw4JLgkuCN4ODg4ODg4ODg4A2vWE5LYa+vYUyvr0pgRkWvr69iXWCvYV5gYq+vr6+vr6+vr69TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0FhY4FqfYFM0XLR0RdeNoHR0S1PKYSCgtF90dHR0dHR0dHR0dEvWVRFRDhjVoBmYV4xRGhcQWJlKzxij5CNaNzc3Nzc3Nzc3NzcQF5+OIAqhNE5P2s5cdF50dGE0XYXbYR/hH6E0dHR0dHR0dHR0SJKdsVkH0lOxSvFxW9xcT1OxVtSxWR5xXhUxcXFxcXFxcXFxcUZbWxwSnDYhXlzh9hMcDKKbdgtKGdAitjYiIrY2NjY2NjY2NjYH01Vu2dmE227Yru7VVq7u7tlW0lpX2praLtsu7u7u7u7u7u7uyJMXHh3RFkpJTV6yFFUyFfIe8hMe1XIcsjIe8jIyMjIyMjIyMgcPkBBU1FToVJQVTWhUzxMoaGhoaGhoVFTU6GhoaGhoaGhoaGhN2rRQS9g0dHR0YLRJIU+0WCFNjos0UbRgtFr0dHR0dHR0dHR0RWenp6eSp6enp6ePp5Lnk6eTp6eniRMTU+eUZ6enp6enp6enp4VL6BBU1KgUVM4oFKgoE6goKCgoKBQQ6BSoKCgoKCgoKCgoKCgNiF6llQydIKTSeJ/MOJXcGWLgGogZeKSk3Li4uLi4uLi4uLi4iJLN3zaHnOKjkyOimc+WY0xjtpL2lNwh43ajtra2tra2tra2tpGTGUtKktobWgx8U9ZXFJwR3FMQTJ0imCfjoLx8fHx8fHx8fHxLrFbsWKxsbGxZGRlsVxlsbFlRrESJbFlsWKxsbGxsbGxsbGxsR9icF9GMXZUiFTb2zHbZl0u2289O49ye9th29vb29vb29vb29sSly6Xl5eXl0pJl5dKl5eXl0iXNJdJl5eXl0qXl5eXl5eXl5eXNzZqPHQgZ2rpQumFOIVDaV2aOj1gmlaMl3Dp6enp6enp6enp6SFOb+SHIOTkSzjk5E2Kk5NXkm9TJGaNl5FzleTk5OTk5OTk5OQuRXdeai9fjjEgnetbfp8tZetvUFZi6+vrgZ/r6+vr6+vr6+vrF6mpW1lWW1qpKqmpqUxaqV2pqVtHWy6pRqmpqampqampqampqSBIXqysIl2srDSsXzZerKysrFxUX15bRlpeXqysrKysrKysrKwUmZmZmT+ZTUpCmZmZmZlNTEmZO02ZSplKmUqZmZmZmZmZmZmZCkayV0ZMsmVlVGSyZLJlS7KysrJOW7KyYbKysrKysrKysrKyshCZmZmZM0uZmUpJmU2ZS5lISk2ZSJmZmZmZmZmZmZmZmZmZmZkZpaVZWaVYVVilWValVqWlR6WlpaWlpaWlpRWlpaWlpaWlpaWlU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1ND21ZfiIvbjo5O24MV20DbiNsjXTBbiYuJ29vb29vb29vb29vbEy9ZqalaqampPqlUV1k8VampqalbWkdbWKmpqampqampqampqRRKY2ZiskCyVk9SsmROslBHZkNTPWOysmRkYrKysrKysrKysrIRnFBKnJxLnJwuOZycnJycnJycTEtHnJxNnJycnJycnJycnJycIWfzXEaliYOSp6ekO2s483bzFT9/joKhjH578/Pz8/Pz8/Pz8w9ZWKWlPVelWFClpVhYpVhTpVNPpaVQpUBUpaWlpaWlpaWlpaUQV6amWkKmWlZFpqZXWKZFWKZSU6ZaWkJVpqampqampqampqamEqGhoT5AoaGhoUlDoaGhRqE7SD+hoVKhoaFRoaGhoaGhoaGhoVFJcjoyM3JRkpHeklV0M0R53kAjPd5m3t7eYd7e3t7e3t7e3t4PTp1BRJ2dnZ2dUZ2dTZ1PT09MT1GdnZ1LnZ2dnZ2dnZ2dnZ2dDkiampo1mpqaNzyampqampqampqamppOmk5HmpqampqampqamhooWVZVS1anpzKnVKenpy6np1hVp6enp6enV6enp6enp6enp6cTNEOmplSmplhYWqZPUKZLWqZYTaZapkxUplqmpqampqampqamEVJcqEdbXKhcqKhcqFVCVFhcPFioR6ioVqhXqKioqKioqKioqDluczh2xMTEeCjENSLEdnBueEFdO0jEVXRUeMTExMTExMTExMQPPltLUKioqFpYqFqoWEmoWaioUltbVKioTFqoqKioqKioqKioGZxMnE2cT01PnJxQnE+cnFAcnFBNnJycnJycnJycnJycnJycnA5KUqqqTFmqqlqqXldeTk9dqqqqS0OqqltbXaqqqqqqqqqqqqoVXlw/XFewsGFdsLCwX1hMUF9hMj+wsLBhRFuwsLCwsLCwsLCwElSkpFRSpKSkpKQ7VEBXPaSkVqRDpFikVkxUpKSkpKSkpKSkpBxYXVlMPqldqV2pWR5cXKldqVlOqVypqaldSKmpqampqampqakOQVmrX1pJXKurq6urq1urW6tbX6tbLFxfq6urq6urq6urq6urD0ecnE2cnE+cUJycnJycTU2cnEtMnJxPNpxNnJycnJycnJycnA5UoaFKU6GhT6GhVDuhVKFQoaFSU6GhoVFUU6GhoaGhoaGhoaEKT0lMMJ+fn06fU5+fn5+fn1Ofn5+fn5+fn5+fn5+fn5+fn5+fC02cnECcTpycnJycnEtOnJycSU6cnEucTpycnJycnJycnJycnFNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTTXdlhIXUf2LUONRkNNRC1Ep/Gko3hlKBbTaF1NTU1NTU1NTU1BY4SlNPPE+fnzxRnz9Dn0yfn5+fn0ifn5+fn5+fn5+fn5+fn58YUahVqE+oV0CoqEdaTVoxqKhYTEGoW1pQWluoqKioqKioqKioEE6rX6s6W6urSVyrTVxfR1Srq0NaUlyrW6urq6urq6urq6urqztAJGo3PoNphEGE0ELQUdDQ0CNCbNBhg37Q0NDQ0NDQ0NDQ0NAXQlelVFFWWaU5SKU8U6WlpaVEVqVWV6VRVVOlpaWlpaWlpaWlD6ioV1lJqC1cVlmoXFioqFmoqDyoqKhcqFqoqKioqKioqKioqDY1vmRyG3JvciW+vky+vjK+vmpdaly+vm5aX76+vr6+vr6+vr5A0IFmLoNScIHQhEs7cB7QV9BNNyvQfoCEgWLQ0NDQ0NDQ0NDQEUVEk5OTk0NDk5OTk5OTk5OTkyqTRZNHk5OTk5OTk5OTk5OTkxOkSKSkN6SkpERYpKSkVKSkpFYyOKSkSVSkpKSkpKSkpKSkpKQdYbBcsCOwYrAtT7BdX2Q+U7CwYmRZsLCwQGSwsLCwsLCwsLCwETlTUZ+fUJ+fn5+fSp+fNZ+fTVNKn02fTp+fn5+fn5+fn5+fnxBbw11eNnVnd0dxwzR1d8N0dXdBbHNjYFnDdMPDw8PDw8PDw8M5yspresp3eGpua35sXEdgfMoIaGhTynd8fnzKysrKysrKysrKITioQqioV1VHVaioRlxZOltMPFNDqKhcXEhcqKioqKioqKioqBFGkpKSQ0KSkkOSQ0aSkkaSkpKSkpKSkkSSRJKSkpKSkpKSkpI/G3G/bWBzv78Tv79rcG88v79ucHG/v79xc7+/v7+/v7+/v7+/DHK+X2E7bEBNWr5sTr5yb1W+XV9Par6+cb6+vr6+vr6+vr6+vhSmVaZXWkpYTVhYWqamVi1UUVSmWqZaWqZOpqampqampqampqYVnp5SSlKeUD9Qnk+enkyeOU9PT0+enp5LnlKenp6enp6enp6eFy5JUp5Pnp5PUp5SnjpSnlCenp5SUkqeTp6enp6enp6enp6eng5WoqJUP6JLokOiU6KiVqJToqKiU6JUOqKioqKioqKioqKioqIVplqmpqZWplSmWFFMWFlYUKY0UKZZVKZVOk6mpqampqampqamEpycQ5xInE6cnJycnJycPE2cTJw/nE5KUE5OnJycnJycnJycnBKZTZlNmUuZmUmZTZlLS5lKmZmZSplJR0lKmZmZmZmZmZmZmZlTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUypZNjVETVxKtk+2tmAhSba2tjy2YLZpalK2tra2tra2tra2trYkOEVEREZFoKBDUKBPTqA3UVGgR0+goKCgSaCgoKCgoKCgoKCgOGRlZFUWY09CS3NwKb+/SL+/cVpcYnFwcL9wv7+/v7+/v7+/vyAzQVJROVNUVTRhra2tra2trWFZOExdrVphWq2tra2tra2tra01YWwhMW1qx8fHx3pTPGPHdMcrKHF7esdnx3jHx8fHx8fHx8fHHDZEUVIxOl+rS6urq1leq6urQFSrV19fq1lbq6urq6urq6urqxGaTk6aSJpGTJpLmppGTJqami+ampqaTpqampqampqampqampoYKFtaq6tdq0c4WqurX1+rWF1SXEtfq11WWl+rq6urq6urq6urNcNTQ11MUHDDdnTDZTQsXsPDXiEsd3fDw3PDw8PDw8PDw8PDww9ST5+fn59Nn59Qn1JQn59On1FNn1KfUVBCUZ+fn5+fn5+fn58OnVA6nT09nU6dnZ2dnZ2dnVCdUJ2dnUtMnZ2dnZ2dnZ2dnZ2d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XV2qqqqqqqqqqqqqqg9Rnp6enp5Snk5InjaeRp6enk2enp5NnlJRUp6enp6enp6enp4RQ6NXo6NVo6Ojo1JUo1c9VaNXo6Ojo1ejLFKjo6Ojo6Ojo6OjFKenVFYjW1tDS6enWKenp1inp1unp6enVVZJp6enp6enp6enp1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTLL9JTnO/br+/Zr+/UnO/v2K/Rr8Lc7+/v79bv7+/v7+/v7+/vxacRUhMnJycnEacnJycSEZMTUycRDpMnJycUJycnJycnJycnJwUPkmdT51OnZ1KnZ0/S0+dnVGdnZ1OTj+dT52dnZ2dnZ2dnZ2dEECjo1NPUqNUVqOjVlNUo6NSV1NXT1Kjo1ZWo6Ojo6Ojo6OjoxVy2HUgf3pziYbYh3mMSXWG2Co7doGI2NjYidjY2NjY2NjY2NgPU5+fn59Tn1I7U1NNTFKfTZ9PSZ+fTJ+fn5+fn5+fn5+fn5+fD5qamppKSJqaS5qamk6amppKmppNS01OSUtOmpqampqampqamhI3RFNQoFSgTVBRoKA8oKBToKCgoFCgoFGgUKCgoKCgoKCgoKAuubliuVO5Urm5bLlGSRe5ILlpubm5arltbFi5ubm5ubm5ubm5DkeaSk6amppOmppMmpqaR5qamppOS0iamktMmpqampqampqamgqVR5WVSJWVlZVHlZWVlZWVR5VIlZWVlUhGlZWVlZWVlZWVlZUWUFA2UECenp49T55QnlBFnk9Qnp5RnlCenp6enp6enp6enp6eFzOkpFZUUqRUVaRVS1akQ1ikV1dTpFKkVlVDpKSkpKSkpKSkpBBIU1dYRKampqZZWFhVWaZSWVZTVVdYpqamVqampqampqampqYmr69eU69ar2GvY6+vrxI0TK9Zr2Ovr05hr2Ovr6+vr6+vr6+vDp9TOZ+fn59Tn5+fSlBRUJ+fT5+fTZ+fTlNTn5+fn5+fn5+fnw1OmkuamkuamktLmk6aTj6aSZpOmpqampqampqampqampqampoNmZlNmUyZmZlGmZmZmZlMmUqZTJlETUxKmZmZmZmZmZmZmZmZGFZKSlZWpaVFU6WlpVelV0JWpUcxpVdTU1SlpaWlpaWlpaWlpRFJnp6enp6enlCeUJ5QT56eUDWeS02enk86np6enp6enp6enp4TWampXFpdqalcWaktTUWpVlwwqV2pqampWqmpqampqampqampE6FLQ1FKTqFRUVWhUKFPoVGhVVOhoVWhTlFPoaGhoaGhoaGhoRI+U1dDo1Ojo6Ojo6NWSaNWVkijo1RWVFFRVqOjo6Ojo6Ojo6MUVKCgoKBNoFJQKaCgUT+goE+gU6CgVFRUoFKgoKCgoKCgoKCgDVZWVqWlpVilWFWlpaVYUkNXPVmlpaWlV6VZpaWlpaWlpaWlpRNIUa+vMGCvr1Rdr0evYk2vX69iYl9fYGJAVa+vr6+vr6+vr69TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTIt/f39/f39/f39/f39/f39/f39/f39/f39/fEkhFTlBVUk9QThrMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzDU5Q0I4QkNCRjsWycnJycnJycnJycnJycnJycnJycnJycnJyck6OkNAP0ZFQj9HGsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjINUlFQz5ERzk6ORfIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyDw+PkM7QEtEQjwZyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg5QUA8QEM/SDs9Hc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OSUQ3NjVBPT0+QxbIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyDY+SkU7REVCP0gYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgzQD5CPEZAQz9MGMrKysrKysrKysrKysrKysrKysrKysrKysrKOz9AOUlDOjpKRVNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyzQ+PEVCRDpHPT4bysrKysrKysrKysrKysrKysrKysrKysrKyspEOTw8PD08O0VFGsvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLSD1GNkQ3P0M4QBnHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx0A8P0JBPzc+REAYycnJycnJycnJycnJycnJycnJycnJycnJyclFQEA+OkJAPkE9F8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjITj0/OUFBOUBFPxnJycnJycnJycnJycnJycnJycnJycnJycnJyT89RT1BREE8OjscyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg+Oj08O0c/PTs7GcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIO0E/Nz8+Pj9HRBjJycnJycnJycnJycnJycnJycnJycnJycnJyUFEPDxAOT5KPkFTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MZzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMw4OT1BPEJDQkJFGMnJycnJycnJycnJycnJycnJycnJycnJycnJOUQ5PEc8QT1ESxnJycnJycnJycnJycnJycnJycnJycnJycnJyT9AO0I+QT04R0IXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8dBPj9GP0NJOT1AGMbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGREI8QTw9P0E+QRnLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyzZBPj47Pj9GQU4WyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg4N0NLRDs+T0FGGcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIQkI9RDxASDg6PhXHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxzdHQkRDSUFGQzoWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsZLQEc+O0Y8RT49U1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTGsnJycnJycnJycnJycnJycnJycnJycnJycnJN0NFSkRDO0A1OBfIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyD9FPUU9PEBAP0EZyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg7OzlMR0A8Pz5AHMrKysrKysrKysrKysrKysrKysrKysrKysrKRz84ODs6QD4/RBnIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyDw/QT1CNj5DRj4WyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMhIPUJFPj8/RD09GcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIQz89Qjw6QzxCPxnHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxz5BQ0FCPEc7OD0aycnJycnJycnJycnJycnJycnJycnJycnJyclGPkI5PD5DO0Y5F8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHNkU9TEM+Rz49P1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxzJycnJycnJycnJycnJycnJycnJycnJycnJyT03OT08P0JEQjsZyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg+Oj1APUI/Q0BAFMfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHSTxGSEI7Q0BDQBbIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyEFIOT8+Rz1AQ0IaysrKysrKysrKysrKysrKysrKysrKysrKyspAOj49PUI9Qj9AFMbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGQEM+SEM9N1RIQBfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxzw9P0I8PkxARkAYxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsY/Rz9DPj1AQTlAFcTExMTExMTExMTExMTExMTExMTExMTExMTEN1ZBQUBCR0A6QRjHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx0JDOz1JNkM+RD5TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MZycnJycnJycnJycnJycnJycnJycnJycnJyck3RDtPQj09PUQ8GMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIPD45PkI6TkpCPBjJycnJycnJycnJycnJycnJycnJycnJycnJyUNBQ0E+PTxFQDsVxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcU+RUA8REc/Rj9DGMfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHQUA6PUI/PDxHQRXJycnJycnJycnJycnJycnJycnJycnJycnJyT9DTUI+PDxBQkQZycnJycnJycnJycnJycnJycnJycnJycnJyclCPUZBQz1EODo+FsTExMTExMTExMTExMTExMTExMTExMTExMTEQUQ5QlJEPEE/OhXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxT4+QUE9QkpNP0AYx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8dBNkI8TEA9RkE7U1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTFsnJycnJycnJycnJycnJycnJycnJycnJycnJOUJLPU47PEBJQRXJycnJycnJycnJycnJycnJycnJycnJycnJyUZBQERARzs5TEIXxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsY9R0FASztCPjs+G8nJycnJycnJycnJycnJycnJycnJycnJycnJQTxGPT4/Pj41QRnIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyEQ4Pz9COD9JQEAbx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8c5QjpEQTk5OUhIGcfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHPjw8Oz1DO0c9TBXIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyDpLTz47Rj5HO0QZxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsZDQEBAO0M+PDpEE8bGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGPUlCQUlJRjxAQVNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxnHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxzlAPD9BRzs8Q0QXxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsZASDo/QkM6QzxEGMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFOEU4PD44RERSQhjGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxjk9P0M5QEFETDwXyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMhHSENASz88Ozw6GMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFODs7RDw+QkhOPhnGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxj07PztQOkM+QUAYycnJycnJycnJycnJycnJycnJycnJycnJyclBQzlGQzo/N0VEGcrKysrKysrKysrKysrKysrKysrKysrKysrKQT1EQTw9QjpIORvIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyD5DQjhCPT07OUdTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MVysrKysrKysrKysrKysrKysrKysrKysrKysoxQ0NJRUtFRTtFFsTExMTExMTExMTExMTExMTExMTExMTExMTEQUY6Sj49R0RAOxvHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxzhHQj9APj4+OjwUxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsY/O0hJQUJBSD9FF8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIQEhAPTY/REJAQRzHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxzw8PEhBNz88QzoXxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcVDRkA3PEJFQUk5FsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGREBLRTlBSEE2QBbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxjtAQ0c4Qj9FP0cVxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsZDOUBCR0dGSD46U1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTGcbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGQUc/QTxFQkE4NxjHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxztBQT1JPEA9QkAWx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8dAQD9DRjw/QD1NFsnJycnJycnJycnJycnJycnJycnJycnJycnJTDxMPj83REU8QhfDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwzc9NzVLQzxFUFQax8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8c8PkI9P0E1RkFAGMfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHQTtEP0BEOjZJRxjHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx0JISDg4Q0Q6QzoXxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsY+Qz5EPUJCST06GMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIRz1BQUI0PkVIOg==";
|
package/dist/charlm.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mean log2-likelihood ratio per scored term under the identifier model versus uniform over 36 characters: each
|
|
3
|
+
* letter and digit (lowercased), and each camelCase break (how likely the word was to end there), so `fooBar` has
|
|
4
|
+
* seven terms and `foo_bar` six. (The model was trained on this mean: the rule is not changed.) A symbol only resets
|
|
5
|
+
* the context, unscored.
|
|
6
|
+
*/
|
|
7
|
+
export declare function naturalness(token: string): number;
|
package/dist/charlm.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How much more likely a string is under a model of ordinary identifiers and words than as random
|
|
3
|
+
* characters. Names, words and their abbreviations score well above zero; random strings score near
|
|
4
|
+
* or below it.
|
|
5
|
+
*/
|
|
6
|
+
import { CHARLM } from "./charlm-data.js";
|
|
7
|
+
const A = 37;
|
|
8
|
+
let table;
|
|
9
|
+
function load() {
|
|
10
|
+
if (table)
|
|
11
|
+
return table;
|
|
12
|
+
const bin = atob(CHARLM);
|
|
13
|
+
table = new Uint8Array(bin.length);
|
|
14
|
+
for (let i = 0; i < bin.length; i++)
|
|
15
|
+
table[i] = bin.charCodeAt(i);
|
|
16
|
+
return table;
|
|
17
|
+
}
|
|
18
|
+
function idx(k) {
|
|
19
|
+
if (k >= 97 && k <= 122)
|
|
20
|
+
return k - 96;
|
|
21
|
+
if (k >= 65 && k <= 90)
|
|
22
|
+
return k - 64;
|
|
23
|
+
if (k >= 48 && k <= 57)
|
|
24
|
+
return k - 48 + 27;
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Mean log2-likelihood ratio per scored term under the identifier model versus uniform over 36 characters: each
|
|
29
|
+
* letter and digit (lowercased), and each camelCase break (how likely the word was to end there), so `fooBar` has
|
|
30
|
+
* seven terms and `foo_bar` six. (The model was trained on this mean: the rule is not changed.) A symbol only resets
|
|
31
|
+
* the context, unscored.
|
|
32
|
+
*/
|
|
33
|
+
export function naturalness(token) {
|
|
34
|
+
const t = load();
|
|
35
|
+
let a = 0;
|
|
36
|
+
let b = 0;
|
|
37
|
+
let sum = 0;
|
|
38
|
+
let n = 0;
|
|
39
|
+
const uniform = Math.log2(36);
|
|
40
|
+
for (let i = 0; i < token.length; i++) {
|
|
41
|
+
const code = token.charCodeAt(i);
|
|
42
|
+
// camelCase: an upper-case letter after a lower-case one starts a new word.
|
|
43
|
+
if (code >= 65 && code <= 90) {
|
|
44
|
+
// (Before the first, `charCodeAt(-1)` is NaN: no letter.)
|
|
45
|
+
const p = token.charCodeAt(i - 1);
|
|
46
|
+
if (p >= 97 && p <= 122) {
|
|
47
|
+
sum += uniform - t[a * A * A + b * A] / 16;
|
|
48
|
+
n++;
|
|
49
|
+
a = 0;
|
|
50
|
+
b = 0;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const c = idx(code);
|
|
54
|
+
if (c === 0) {
|
|
55
|
+
a = 0;
|
|
56
|
+
b = 0;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
sum += uniform - t[a * A * A + b * A + c] / 16;
|
|
60
|
+
n++;
|
|
61
|
+
a = b;
|
|
62
|
+
b = c;
|
|
63
|
+
}
|
|
64
|
+
return n ? sum / n : 0;
|
|
65
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A Bitcoin-style address: Base58Check of 21 bytes with a P2PKH or P2SH version (mainnet or testnet) and a valid checksum. */
|
|
2
|
+
export declare function isBase58Address(t: string): boolean;
|
|
3
|
+
/** An XRP Ledger account address (`rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`): Base58Check, in its own alphabet, of version 0 and a 20-byte account ID. (Never a seed, `s…`: version 33.) */
|
|
4
|
+
export declare function isXrpAddress(t: string): boolean;
|
|
5
|
+
/** A bech32 or bech32m address (`bc1…`, `cosmos1…`, `npub1…`) whose checksum verifies; never a secret's prefix (`nsec1`). All lower case or all upper case (BIP-173); not mixed. */
|
|
6
|
+
export declare function isBech32Address(address: string): boolean;
|
|
7
|
+
/** A Stellar public key (`G…`, 56 base32 characters): version byte, 32 key bytes and a CRC-16 that checks out. */
|
|
8
|
+
export declare function isStellarPublicKey(t: string): boolean;
|
|
9
|
+
/** A NATS public nkey: base32 of a prefix byte, 32 key bytes and a CRC-16 (XMODEM) that checks out. */
|
|
10
|
+
export declare function isNatsPublicKey(t: string): boolean;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public identifiers whose last characters check the rest: crypto addresses (Base58Check, bech32) and base32 keys
|
|
3
|
+
* with a CRC-16 (Stellar, NATS). A random string passes one by chance with odds of 2^-16 or less, so a value that
|
|
4
|
+
* verifies is the public identifier it claims to be.
|
|
5
|
+
*/
|
|
6
|
+
import { sha256 } from "./hmac.js";
|
|
7
|
+
const BASE58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
8
|
+
/** The XRP Ledger's base58 alphabet: Bitcoin's characters in another order, so that its version bytes lead with `r` (an account) or `s` (a seed). */
|
|
9
|
+
const XRP_BASE58 = "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz";
|
|
10
|
+
/** A Bitcoin-style address: Base58Check of 21 bytes with a P2PKH or P2SH version (mainnet or testnet) and a valid checksum. */
|
|
11
|
+
export function isBase58Address(t) {
|
|
12
|
+
if (t.length < 26 || t.length > 35 || !/^[123mnT][1-9A-HJ-NP-Za-km-z]+$/.test(t))
|
|
13
|
+
return false;
|
|
14
|
+
const bytes = base58Check(t, BASE58);
|
|
15
|
+
return bytes?.length === 21 && [0x00, 0x05, 0x6f, 0xc4, 0x41].includes(bytes[0]); // (0x41: TRON)
|
|
16
|
+
}
|
|
17
|
+
/** An XRP Ledger account address (`rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`): Base58Check, in its own alphabet, of version 0 and a 20-byte account ID. (Never a seed, `s…`: version 33.) */
|
|
18
|
+
export function isXrpAddress(t) {
|
|
19
|
+
if (t.length < 25 || t.length > 35 || !/^r[1-9A-HJ-NP-Za-km-z]+$/.test(t))
|
|
20
|
+
return false;
|
|
21
|
+
const bytes = base58Check(t, XRP_BASE58);
|
|
22
|
+
return bytes?.length === 21 && bytes[0] === 0;
|
|
23
|
+
}
|
|
24
|
+
/** The payload of Base58Check text in `alphabet` (version byte first) if its last 4 bytes are the double SHA-256 of the rest, else undefined. */
|
|
25
|
+
function base58Check(t, alphabet) {
|
|
26
|
+
let n = 0n;
|
|
27
|
+
for (const c of t)
|
|
28
|
+
n = n * 58n + BigInt(alphabet.indexOf(c));
|
|
29
|
+
const bytes = [];
|
|
30
|
+
while (n > 0n) {
|
|
31
|
+
bytes.unshift(Number(n & 255n));
|
|
32
|
+
n >>= 8n;
|
|
33
|
+
}
|
|
34
|
+
for (let i = 0; i < t.length && t[i] === alphabet[0]; i++)
|
|
35
|
+
bytes.unshift(0);
|
|
36
|
+
if (bytes.length < 5)
|
|
37
|
+
return undefined;
|
|
38
|
+
const payload = bytes.slice(0, -4);
|
|
39
|
+
const check = sha256(sha256(Uint8Array.from(payload)));
|
|
40
|
+
return check.slice(0, 4).every((b, i) => b === bytes[payload.length + i]) ? payload : undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The human-readable parts that name a secret, not an address: Nostr's `nsec` and `ncryptsec`, and the `sk`, `sec` and
|
|
44
|
+
* `priv` that chains and tools give a private key (`sk1…`, `priv1…`), whose checksum would verify as well.
|
|
45
|
+
*/
|
|
46
|
+
const SECRET_HRP = /^(?:nsec|ncryptsec|sk|sec|priv)$/;
|
|
47
|
+
/** A bech32 or bech32m address (`bc1…`, `cosmos1…`, `npub1…`) whose checksum verifies; never a secret's prefix (`nsec1`). All lower case or all upper case (BIP-173); not mixed. */
|
|
48
|
+
export function isBech32Address(address) {
|
|
49
|
+
const t = address === address.toUpperCase() ? address.toLowerCase() : address;
|
|
50
|
+
const m = /^([a-z]{2,16})1([02-9ac-hj-np-z]{30,90})$/.exec(t);
|
|
51
|
+
if (!m || SECRET_HRP.test(m[1]))
|
|
52
|
+
return false;
|
|
53
|
+
const CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
|
54
|
+
const GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
|
|
55
|
+
const values = [...m[1]]
|
|
56
|
+
.map((c) => c.charCodeAt(0) >> 5)
|
|
57
|
+
.concat([0], [...m[1]].map((c) => c.charCodeAt(0) & 31), [...m[2]].map((c) => CHARSET.indexOf(c)));
|
|
58
|
+
let chk = 1;
|
|
59
|
+
for (const v of values) {
|
|
60
|
+
const top = chk >>> 25;
|
|
61
|
+
chk = ((chk & 0x1ffffff) << 5) ^ v;
|
|
62
|
+
for (let i = 0; i < 5; i++)
|
|
63
|
+
if ((top >>> i) & 1)
|
|
64
|
+
chk ^= GEN[i];
|
|
65
|
+
}
|
|
66
|
+
return chk === 1 || chk === 0x2bc830a3; // bech32, bech32m
|
|
67
|
+
}
|
|
68
|
+
/** A Stellar public key (`G…`, 56 base32 characters): version byte, 32 key bytes and a CRC-16 that checks out. */
|
|
69
|
+
export function isStellarPublicKey(t) {
|
|
70
|
+
return /^G[A-Z2-7]{55}$/.test(t) && crc16Ok(t);
|
|
71
|
+
}
|
|
72
|
+
/** A NATS public nkey: base32 of a prefix byte, 32 key bytes and a CRC-16 (XMODEM) that checks out. */
|
|
73
|
+
export function isNatsPublicKey(t) {
|
|
74
|
+
return /^[ACNOUX][A-Z2-7]{55}$/.test(t) && crc16Ok(t); // (`P` is a private key's prefix, and `S` a seed's)
|
|
75
|
+
}
|
|
76
|
+
/** Base32 of 33 bytes and their CRC-16 (XMODEM), as NATS nkeys and Stellar strkeys are. */
|
|
77
|
+
function crc16Ok(t) {
|
|
78
|
+
const bytes = [];
|
|
79
|
+
let bits = 0;
|
|
80
|
+
let acc = 0;
|
|
81
|
+
for (const c of t) {
|
|
82
|
+
acc = ((acc << 5) | "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".indexOf(c)) & 0xfff; // (only the bits not yet emitted)
|
|
83
|
+
bits += 5;
|
|
84
|
+
if (bits >= 8) {
|
|
85
|
+
bytes.push((acc >> (bits - 8)) & 255);
|
|
86
|
+
bits -= 8;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (bytes.length !== 35)
|
|
90
|
+
return false;
|
|
91
|
+
let crc = 0;
|
|
92
|
+
for (const b of bytes.slice(0, 33)) {
|
|
93
|
+
crc ^= b << 8;
|
|
94
|
+
for (let i = 0; i < 8; i++)
|
|
95
|
+
crc = crc & 0x8000 ? ((crc << 1) ^ 0x1021) & 0xffff : (crc << 1) & 0xffff;
|
|
96
|
+
}
|
|
97
|
+
return crc === (bytes[33] | (bytes[34] << 8));
|
|
98
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type LineIndex, type ShellCommand, type ShellWord } from "./shell.ts";
|
|
2
|
+
/** Whether a path names a file whose whole content is secret material (`.env`, `id_rsa`, `credentials.json`). */
|
|
3
|
+
export declare function isSecretFile(path: string): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Whether a value is the name of a file that is a secret file or its template, not a password: `.env.example`, `.env.local`,
|
|
6
|
+
* `.npmrc` (a dotfile, or a template's name, in lower case; `Env.Local9` is a password).
|
|
7
|
+
*/
|
|
8
|
+
export declare function isConfigFileName(value: string): boolean;
|
|
9
|
+
/** Whether a path names a file that holds nothing but secrets, by its name or its directory's: `config/secrets.staging.yml`, `credentials.json`, `secrets/db`; not `.env`, which holds settings too. */
|
|
10
|
+
export declare function holdsOnlySecrets(path: string): boolean;
|
|
11
|
+
/** A shell's name: `bash`, `sh`, `zsh`. */
|
|
12
|
+
export declare const SHELL: RegExp;
|
|
13
|
+
/** A command a line runs. One that a substitution runs has its `host`: the command whose words take its output. */
|
|
14
|
+
export interface CommandRun extends ShellCommand {
|
|
15
|
+
host?: ShellCommand;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The simple commands a command line runs, in order, read through what runs a command of its own: a shell (`bash -lc
|
|
19
|
+
* "cat .env"`, `sudo sh -c '…'`, a heredoc or here-string fed to one: `ssh host <<'EOF'`), PowerShell (`pwsh -Command
|
|
20
|
+
* …`) and cmd (`cmd /c …`), a container (`docker exec app cat .env`, `docker compose exec`, `kubectl exec pod -- cat
|
|
21
|
+
* .env`), a remote host (`ssh host -- cat .env`), and substitutions (`echo "$(cat .env)"`), nested ones too. A prompt
|
|
22
|
+
* before the line (a pasted session's `$ `, a notebook's `!`, a trace's `+ `, a quote's `> `) is left out. Positions are in `text`, however deep the
|
|
23
|
+
* command was; an unwrapped command takes the wrapper's place in its pipeline and its redirections as a group's.
|
|
24
|
+
*/
|
|
25
|
+
export declare function commandsRun(text: string, { at, oneLine, lines, depth, }?: {
|
|
26
|
+
at?: number;
|
|
27
|
+
oneLine?: boolean;
|
|
28
|
+
lines?: LineIndex;
|
|
29
|
+
depth?: number;
|
|
30
|
+
}): CommandRun[];
|
|
31
|
+
/** Whether a command prints the contents of a secret file (`cat .env`, `grep KEY .env.local`, `cat < .env`, `git show HEAD:.env`). */
|
|
32
|
+
export declare function printsSecretFile(command: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Whether a command reads a secret file but cuts what it prints to the names (`cat .env | cut -d= -f1`): its output
|
|
35
|
+
* holds a value only where the cut didn't happen, a `NAME=value` line in it.
|
|
36
|
+
*/
|
|
37
|
+
export declare function printsSecretFileNames(command: string): boolean;
|
|
38
|
+
/** Whether a command prints a credential: any of its pipelines (`openssl rand -hex 32 && echo ok`) whose stage that makes one reaches its output. */
|
|
39
|
+
export declare function printsSecret(command: string): boolean;
|
|
40
|
+
/** How a command-line tool takes a password. */
|
|
41
|
+
export interface ToolSpec {
|
|
42
|
+
/** Options whose value is a password: `-p pw`, `--password pw`, `--password=pw`. */
|
|
43
|
+
flags: Set<string>;
|
|
44
|
+
/**
|
|
45
|
+
* How an option takes its value when it isn't attached: the next word, whatever it is (getopt's required argument:
|
|
46
|
+
* `-a '-Xk9…'`); the next word unless it is an option (an optional one: `mongosh -p` alone prompts); or never
|
|
47
|
+
* (mysql's `--password` alone prompts, and the next word is the database).
|
|
48
|
+
*/
|
|
49
|
+
next: "always" | "unless an option" | "never";
|
|
50
|
+
/** Whether a one-letter option may carry its value attached (`-pPW`); not for tools with one-dash long options (`influx -precision`). */
|
|
51
|
+
attached: boolean;
|
|
52
|
+
/** Whether only a subcommand takes it (`docker login -p pw`; `docker run -p 443:443` is a port). */
|
|
53
|
+
subcommand?: string;
|
|
54
|
+
/** A wrapper that runs another command after its own options (`sshpass -p pw ssh -p 2222 host`). */
|
|
55
|
+
wraps?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** How the tool a program names takes a password, if it takes one by an option. */
|
|
58
|
+
export declare function passwordOptions(program: string): ToolSpec | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* The simple command (shell.ts simpleCommand: past wrappers and assignments) whose words hold `at`, and the word at
|
|
61
|
+
* `at`: among the commands its line runs (`mysql` in `docker exec db mysql --password …`), or else among the line's
|
|
62
|
+
* commands as written (`docker` in `docker exec -u www-data:www-data app …`, which runs `app …`'s command).
|
|
63
|
+
*/
|
|
64
|
+
export declare function commandAt(text: string, at: number): {
|
|
65
|
+
command: ShellWord[];
|
|
66
|
+
word: ShellWord;
|
|
67
|
+
} | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Whether the word after the option at `at` is not its value, because the option takes one only attached:
|
|
70
|
+
* `mysql -u root --password mydb` prompts, and `mydb` is the database.
|
|
71
|
+
*/
|
|
72
|
+
export declare function promptsForValue(text: string, at: number): boolean;
|