├── .gitignore ├── .pylintrc ├── README.md ├── lambda_function.py ├── package-lock.json ├── package.json ├── requirements ├── requirements-dev.in └── requirements.in ├── serverless.yml ├── tesseract-layer ├── Dockerfile ├── build.sh └── serverless.yml └── test.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | 3 | tesseract-layer/layer 4 | 5 | ## Serverless 6 | node_modules 7 | **/.serverless 8 | 9 | *.png 10 | *.zip 11 | *.ipynb 12 | 13 | .vscode/ 14 | 15 | .envrc 16 | 17 | #pyenv 18 | tessenv/ 19 | -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [BASIC] 2 | 3 | # Good variable names which should always be accepted, separated by a comma 4 | good-names=i,j,k,ex,Run,_ 5 | 6 | # Bad variable names which should always be refused, separated by a comma 7 | bad-names=foo,bar,baz,toto,tutu,tata 8 | 9 | # Colon-delimited sets of names that determine each other's naming style when 10 | # the name regexes allow several styles. 11 | name-group= 12 | 13 | # Include a hint for the correct naming format with invalid-name 14 | include-naming-hint=no 15 | 16 | # List of decorators that produce properties, such as abc.abstractproperty. Add 17 | # to this list to register other decorators that produce valid properties. 18 | property-classes=abc.abstractproperty 19 | 20 | # Regular expression matching correct function names 21 | function-rgx=[a-z_][a-z0-9_]{2,30}$ 22 | 23 | # Naming hint for function names 24 | function-name-hint=[a-z_][a-z0-9_]{2,30}$ 25 | 26 | # Regular expression matching correct variable names 27 | variable-rgx=[a-z_][a-z0-9_]{2,30}$ 28 | 29 | # Naming hint for variable names 30 | variable-name-hint=[a-z_][a-z0-9_]{2,30}$ 31 | 32 | # Regular expression matching correct constant names 33 | const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ 34 | 35 | # Naming hint for constant names 36 | const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ 37 | 38 | # Regular expression matching correct attribute names 39 | attr-rgx=[a-z_][a-z0-9_]{2,30}$ 40 | 41 | # Naming hint for attribute names 42 | attr-name-hint=[a-z_][a-z0-9_]{2,30}$ 43 | 44 | # Regular expression matching correct argument names 45 | argument-rgx=[a-z_][a-z0-9_]{2,30}$ 46 | 47 | # Naming hint for argument names 48 | argument-name-hint=[a-z_][a-z0-9_]{2,30}$ 49 | 50 | # Regular expression matching correct class attribute names 51 | class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ 52 | 53 | # Naming hint for class attribute names 54 | class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ 55 | 56 | # Regular expression matching correct inline iteration names 57 | inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ 58 | 59 | # Naming hint for inline iteration names 60 | inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ 61 | 62 | # Regular expression matching correct class names 63 | class-rgx=[A-Z_][a-zA-Z0-9]+$ 64 | 65 | # Naming hint for class names 66 | class-name-hint=[A-Z_][a-zA-Z0-9]+$ 67 | 68 | # Regular expression matching correct module names 69 | module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ 70 | 71 | # Naming hint for module names 72 | module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ 73 | 74 | # Regular expression matching correct method names 75 | method-rgx=[a-z_][a-z0-9_]{2,30}$ 76 | 77 | # Naming hint for method names 78 | method-name-hint=[a-z_][a-z0-9_]{2,30}$ 79 | 80 | # Regular expression which should only match function or class names that do 81 | # not require a docstring. 82 | no-docstring-rgx=^_ 83 | 84 | # Minimum line length for functions/classes that require docstrings, shorter 85 | # ones are exempt. 86 | docstring-min-length=-1 87 | 88 | [ELIF] 89 | 90 | # Maximum number of nested blocks for function / method body 91 | max-nested-blocks=5 92 | 93 | 94 | [TYPECHECK] 95 | 96 | # Tells whether missing members accessed in mixin class should be ignored. A 97 | # mixin class is detected if its name ends with "mixin" (case insensitive). 98 | ignore-mixin-members=yes 99 | 100 | # List of module names for which member attributes should not be checked 101 | # (useful for modules/projects where namespaces are manipulated during runtime 102 | # and thus existing member attributes cannot be deduced by static analysis. It 103 | # supports qualified module names, as well as Unix pattern matching. 104 | ignored-modules= 105 | 106 | # List of class names for which member attributes should not be checked (useful 107 | # for classes with dynamically set attributes). This supports the use of 108 | # qualified names. 109 | ignored-classes=optparse.Values,thread._local,_thread._local 110 | 111 | # List of members which are set dynamically and missed by pylint inference 112 | # system, and so shouldn't trigger E1101 when accessed. Python regular 113 | # expressions are accepted. 114 | generated-members= 115 | 116 | # List of decorators that produce context managers, such as 117 | # contextlib.contextmanager. Add to this list to register other decorators that 118 | # produce valid context managers. 119 | contextmanager-decorators=contextlib.contextmanager 120 | 121 | 122 | [FORMAT] 123 | 124 | # Maximum number of characters on a single line. 125 | max-line-length=100 126 | 127 | # Regexp for a line that is allowed to be longer than the limit. 128 | ignore-long-lines=^\s*(# )??$ 129 | 130 | # Allow the body of an if to be on the same line as the test if there is no 131 | # else. 132 | single-line-if-stmt=no 133 | 134 | # List of optional constructs for which whitespace checking is disabled. `dict- 135 | # separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. 136 | # `trailing-comma` allows a space between comma and closing bracket: (a, ). 137 | # `empty-line` allows space-only lines. 138 | no-space-check=trailing-comma,dict-separator 139 | 140 | # Maximum number of lines in a module 141 | max-module-lines=1000 142 | 143 | # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 144 | # tab). 145 | # Use 2 spaces consistent with TensorFlow style. 146 | indent-string=' ' 147 | 148 | # Number of spaces of indent required inside a hanging or continued line. 149 | indent-after-paren=4 150 | 151 | # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. 152 | expected-line-ending-format= 153 | 154 | 155 | [MISCELLANEOUS] 156 | 157 | # List of note tags to take in consideration, separated by a comma. 158 | notes=FIXME,XXX,TODO 159 | 160 | 161 | [VARIABLES] 162 | 163 | # Tells whether we should check for unused import in __init__ files. 164 | init-import=no 165 | 166 | # A regular expression matching the name of dummy variables (i.e. expectedly 167 | # not used). 168 | dummy-variables-rgx=(_+[a-zA-Z0-9]*?$)|dummy 169 | 170 | # List of additional names supposed to be defined in builtins. Remember that 171 | # you should avoid to define new builtins when possible. 172 | additional-builtins= 173 | 174 | # List of strings which can identify a callback function by name. A callback 175 | # name must start or end with one of those strings. 176 | callbacks=cb_,_cb 177 | 178 | # List of qualified module names which can have objects that can redefine 179 | # builtins. 180 | redefining-builtins-modules=six.moves,future.builtins 181 | 182 | 183 | [LOGGING] 184 | 185 | # Logging modules to check that the string format arguments are in logging 186 | # function parameter format 187 | logging-modules=logging 188 | 189 | 190 | [SIMILARITIES] 191 | 192 | # Minimum lines number of a similarity. 193 | min-similarity-lines=4 194 | 195 | # Ignore comments when computing similarities. 196 | ignore-comments=yes 197 | 198 | # Ignore docstrings when computing similarities. 199 | ignore-docstrings=yes 200 | 201 | # Ignore imports when computing similarities. 202 | ignore-imports=no 203 | 204 | 205 | [SPELLING] 206 | 207 | # Spelling dictionary name. Available dictionaries: none. To make it working 208 | # install python-enchant package. 209 | spelling-dict= 210 | 211 | # List of comma separated words that should not be checked. 212 | spelling-ignore-words= 213 | 214 | # A path to a file that contains private dictionary; one word per line. 215 | spelling-private-dict-file= 216 | 217 | # Tells whether to store unknown words to indicated private dictionary in 218 | # --spelling-private-dict-file option instead of raising a message. 219 | spelling-store-unknown-words=no 220 | 221 | 222 | [IMPORTS] 223 | 224 | # Deprecated modules which should not be used, separated by a comma 225 | deprecated-modules=regsub,TERMIOS,Bastion,rexec 226 | 227 | # Create a graph of every (i.e. internal and external) dependencies in the 228 | # given file (report RP0402 must not be disabled) 229 | import-graph= 230 | 231 | # Create a graph of external dependencies in the given file (report RP0402 must 232 | # not be disabled) 233 | ext-import-graph= 234 | 235 | # Create a graph of internal dependencies in the given file (report RP0402 must 236 | # not be disabled) 237 | int-import-graph= 238 | 239 | # Force import order to recognize a module as part of the standard 240 | # compatibility libraries. 241 | known-standard-library= 242 | 243 | # Force import order to recognize a module as part of a third party library. 244 | known-third-party=enchant 245 | 246 | # Analyse import fallback blocks. This can be used to support both Python 2 and 247 | # 3 compatible code, which means that the block might have code that exists 248 | # only in one or another interpreter, leading to false positives when analysed. 249 | analyse-fallback-blocks=no 250 | 251 | 252 | [DESIGN] 253 | 254 | # Maximum number of arguments for function / method 255 | max-args=7 256 | 257 | # Argument names that match this expression will be ignored. Default to name 258 | # with leading underscore 259 | ignored-argument-names=_.* 260 | 261 | # Maximum number of locals for function / method body 262 | max-locals=15 263 | 264 | # Maximum number of return / yield for function / method body 265 | max-returns=6 266 | 267 | # Maximum number of branch for function / method body 268 | max-branches=12 269 | 270 | # Maximum number of statements in function / method body 271 | max-statements=50 272 | 273 | # Maximum number of parents for a class (see R0901). 274 | max-parents=7 275 | 276 | # Maximum number of attributes for a class (see R0902). 277 | max-attributes=7 278 | 279 | # Minimum number of public methods for a class (see R0903). 280 | min-public-methods=0 281 | 282 | # Maximum number of public methods for a class (see R0904). 283 | max-public-methods=20 284 | 285 | # Maximum number of boolean expressions in a if statement 286 | max-bool-expr=5 287 | 288 | 289 | [CLASSES] 290 | 291 | # List of method names used to declare (i.e. assign) instance attributes. 292 | defining-attr-methods=__init__,__new__,setUp 293 | 294 | # List of valid names for the first argument in a class method. 295 | valid-classmethod-first-arg=cls 296 | 297 | # List of valid names for the first argument in a metaclass class method. 298 | valid-metaclass-classmethod-first-arg=mcs 299 | 300 | # List of member names, which should be excluded from the protected access 301 | # warning. 302 | exclude-protected=_asdict,_fields,_replace,_source,_make 303 | 304 | 305 | [EXCEPTIONS] 306 | 307 | # Exceptions that will emit a warning when being caught. Defaults to 308 | # "Exception" 309 | overgeneral-exceptions=Exception -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tesseract OCR on AWS Lambda 2 | 3 | AWS Lambda function to run tesseract OCR 4 | 5 | ## Getting Started 6 | 7 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. 8 | 9 | The idea is to use a docker container to simulate an AWS lambda environment this allows to build binaries against AWS lambda linux env. 10 | In this example I have build [leptonica](http://www.leptonica.com/) and [Tesseract Open Source OCR Engine](https://github.com/tesseract-ocr/tesseract). 11 | 12 | The whole idea is leveraged from [here](https://gist.github.com/barbolo/e59aa45ec8e425a26ec4da1086acfbc7) 13 | 14 | ### Prerequisites 15 | 16 | In order to get started you need docker. 17 | This is a very basic lamdba example and was tested on AWS Lambda Python3.6 environment in 11/2018. 18 | AWS deployment will be automated using [serverless framework](https://serverless.com/) 19 | 20 | ### Installing 21 | 22 | #### Install Node.js (Ubuntu) 23 | 24 | Add latest release, add this PPA 25 | 26 | ```bash 27 | curl -sL https://deb.nodesource.com/setup_10.x | sudo bash - 28 | ``` 29 | 30 | To install the LTS release, use this PPA 31 | 32 | ```bash 33 | curl -sL https://deb.nodesource.com/setup_8.x | sudo bash - 34 | ``` 35 | 36 | Install Nodejs and nvm 37 | 38 | ```bash 39 | sudo apt install nodejs 40 | ``` 41 | 42 | Verify installation 43 | 44 | ```bash 45 | node -v 46 | npm -v 47 | ``` 48 | 49 | Other OS installation guides can be found [here](https://nodejs.org/en/download/package-manager/) 50 | 51 | #### Install Serverless 52 | 53 | ```bash 54 | # Install serverless globally 55 | npm install serverless -g 56 | ``` 57 | 58 | #### Clone Repository 59 | 60 | Clone the repository and follow the install dependencies steps. 61 | 62 | #### Install aws-cli 63 | 64 | ##### Using Python3 venv 65 | 66 | In the project directory create python3 venv 67 | 68 | ```bash 69 | # create venv with name tessenv 70 | python3 -m venv tessenv 71 | ``` 72 | 73 | activate the virtual env 74 | 75 | ```bash 76 | source ./tessenv/bin/activate 77 | ``` 78 | 79 | verify venv is active pip 80 | 81 | ```bash 82 | which pip 83 | #result somepath/tessenv/bin/pip 84 | ``` 85 | 86 | Install aws-cli 87 | 88 | ```bash 89 | pip install awscli 90 | ``` 91 | 92 | ##### Generate AWS access keys 93 | 94 | Follow the AWS [tutorial](https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/) to create access keys 95 | for your user. 96 | 97 | ##### Setup AWS access keys 98 | 99 | ```bash 100 | $ aws configure 101 | AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE(sample) 102 | AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY(sample) 103 | Default region name [None]: us-west-2 104 | Default output format [None]: json 105 | ``` 106 | 107 | Test aws access to list available s3 buckets 108 | 109 | ```bash 110 | aws s3 ls 111 | ``` 112 | 113 | Additional [documentation](https://serverless.com/framework/docs/providers/aws/guide/credentials/) 114 | 115 | ### Tesseract lamda layer 116 | 117 | #### Build custom lamda layer 118 | 119 | A previous version of that example packaged all dependencies 120 | into a zip file which made the deployment slow due to the large size. 121 | 122 | One solution is using lambda layer to decouple binary dependencies from the actual lambda code. Both component could be defined in one serverless file but to really leverage decoupelling seperation is recommended. 123 | 124 | [AWS Lambda Layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 125 | 126 | ```bash 127 | cd tesseract-layer 128 | ``` 129 | 130 | Build lambda layer using lambci/lambda docker container. 131 | 132 | ```bash 133 | ./build.sh 134 | ``` 135 | 136 | By default English best (slow) tesseract model will be 137 | bundled into Lambda layer, but you can override it using 138 | `-m` parameter (for model type) and `-l` parameter (comma-separated 139 | list of languages), for example: 140 | 141 | ```bash 142 | ./build.sh -l eng,por -m fast # downloads FAST models for English and Portugese 143 | ``` 144 | 145 | Verify the folder layer has been created and contains the following folders 146 | 147 | ```bash 148 | $ ls layer 149 | bin #compiled tesseract binary 150 | data #tesseract language package eng 151 | lib #compiled lib dependencies 152 | python #python dependencies 153 | ``` 154 | 155 | Package the lambda layer 156 | 157 | ```bash 158 | serverless package 159 | ``` 160 | 161 | Verify the tesseract-layer/.serverless directory has been created and contains a 38MB file `tesseractPython36.zip`. 162 | 163 | #### Deploy lambda layer 164 | 165 | Deploy tesseractPython36 layer to AWS (requires AWS-CLI with valid AWS access keys) 166 | 167 | ```bash 168 | $ serverless deploy 169 | Serverless: Packaging service... 170 | ... 171 | ... 172 | ... 173 | functions: 174 | None 175 | layers: 176 | tesseractPython36: arn:aws:lambda:ap-southeast-2:***************:layer:tesseractPython36:17 177 | ``` 178 | 179 | #### Update lambda function layer reference 180 | 181 | Every lambda layer deployment will bump up the lambda layer version. 182 | To make sure the lambda function is referencing the correct version update the version part of 183 | returned layer reference. The reference is output of the layer deployment. 184 | 185 | ```bash 186 | $ serverless deploy 187 | ... 188 | ... 189 | ... 190 | layers: 191 | tesseractPython36: arn:aws:lambda:ap-southeast-2:***************:layer:tesseractPython36:17 192 | ``` 193 | 194 | Alternative query the layer verion 195 | 196 | ```bash 197 | aws lambda get-layer-version --layer-name tesseractPython36 --version-number #versionNumber eg. 1 198 | ``` 199 | 200 | Find the and update the version number in the `serverless.yml` file in the root directory 201 | 202 | ```yml 203 | # serverless.yml 204 | . 205 | . 206 | . 207 | tesseract-layer: 208 | name: tesseractPython36 209 | version: 1 210 | . 211 | . 212 | . 213 | ``` 214 | 215 | ### Lambda Deployment 216 | 217 | Switch to the project root directory 218 | 219 | #### Install serverless plugin dependencies 220 | 221 | ```bash 222 | nmp install 223 | ``` 224 | 225 | #### Package lambda function 226 | 227 | ```bash 228 | serverless package 229 | ``` 230 | 231 | #### Deploy lambda function 232 | 233 | ```bash 234 | serverless deploy 235 | ``` 236 | 237 | ### Test OCR Lambda function 238 | 239 | The lambda function is accepting json post request 240 | 241 | ```json 242 | { 243 | "image64": "base64 endcoded image" 244 | } 245 | ``` 246 |
Lambda Test function 247 |

248 | 249 | #### Lambda Test function 250 | 251 | ```json 252 | { 253 | "image64": "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" 254 | } 255 | ``` 256 |

257 |
258 | 259 | ## Built With 260 | 261 | * [Tesseract Open Source OCR Engine](https://github.com/tesseract-ocr/tesseract) 262 | * [leptonica](http://www.leptonica.com/) 263 | * [Docker](https://www.docker.com/) 264 | * [Serverless](https://serverless.com/) 265 | 266 | ## Contributing 267 | 268 | Please feel free to comment or contribute especially if your integrating with [serverless](https://serverless.com/) or [AWS SAM](https://docs.aws.amazon.com/lambda/latest/dg/deploying-lambda-apps.html) 269 | 270 | ## Authors 271 | 272 | * **Gerd Wittchen** - *Initial work* - [Idea](https://gist.github.com/barbolo/e59aa45ec8e425a26ec4da1086acfbc7) 273 | 274 | ## License 275 | 276 | This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details 277 | -------------------------------------------------------------------------------- /lambda_function.py: -------------------------------------------------------------------------------- 1 | import pytesseract 2 | import PIL.Image 3 | import io 4 | import os 5 | import json 6 | from base64 import b64decode 7 | 8 | 9 | LAMBDA_TASK_ROOT = os.environ.get('LAMBDA_TASK_ROOT', os.path.dirname(os.path.abspath(__file__))) 10 | os.environ["PATH"] += os.pathsep + LAMBDA_TASK_ROOT 11 | 12 | 13 | def call(event, context): 14 | print("Event Passed to Handler: " + json.dumps(event)) 15 | image_base64 = json.loads(event['body'])['image64'] 16 | binary = b64decode(image_base64) 17 | image = PIL.Image.open(io.BytesIO(binary)) 18 | text = pytesseract.image_to_string(image, config='--psm 6') 19 | 20 | message = { 21 | 'test': text 22 | } 23 | return { 24 | 'statusCode': 200, 25 | 'headers': {'Content-Type': 'application/json'}, 26 | 'body': json.dumps(message) 27 | } 28 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ocr-test", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "appdirectory": { 8 | "version": "0.1.0", 9 | "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", 10 | "integrity": "sha1-62yBYyDnsqsW9e2ZfyjYIF31Y3U=", 11 | "dev": true 12 | }, 13 | "array-filter": { 14 | "version": "0.0.1", 15 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", 16 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", 17 | "dev": true 18 | }, 19 | "array-map": { 20 | "version": "0.0.0", 21 | "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", 22 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", 23 | "dev": true 24 | }, 25 | "array-reduce": { 26 | "version": "0.0.0", 27 | "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", 28 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", 29 | "dev": true 30 | }, 31 | "balanced-match": { 32 | "version": "1.0.0", 33 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 34 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 35 | "dev": true 36 | }, 37 | "bluebird": { 38 | "version": "3.5.3", 39 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", 40 | "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", 41 | "dev": true 42 | }, 43 | "brace-expansion": { 44 | "version": "1.1.11", 45 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 46 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 47 | "dev": true, 48 | "requires": { 49 | "balanced-match": "^1.0.0", 50 | "concat-map": "0.0.1" 51 | } 52 | }, 53 | "concat-map": { 54 | "version": "0.0.1", 55 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 56 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 57 | "dev": true 58 | }, 59 | "core-js": { 60 | "version": "2.3.0", 61 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", 62 | "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", 63 | "dev": true 64 | }, 65 | "core-util-is": { 66 | "version": "1.0.2", 67 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 68 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 69 | "dev": true 70 | }, 71 | "es6-promise": { 72 | "version": "3.0.2", 73 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", 74 | "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", 75 | "dev": true 76 | }, 77 | "fs-extra": { 78 | "version": "7.0.1", 79 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 80 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 81 | "dev": true, 82 | "requires": { 83 | "graceful-fs": "^4.1.2", 84 | "jsonfile": "^4.0.0", 85 | "universalify": "^0.1.0" 86 | } 87 | }, 88 | "fs.realpath": { 89 | "version": "1.0.0", 90 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 91 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 92 | "dev": true 93 | }, 94 | "glob": { 95 | "version": "7.1.3", 96 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 97 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 98 | "dev": true, 99 | "requires": { 100 | "fs.realpath": "^1.0.0", 101 | "inflight": "^1.0.4", 102 | "inherits": "2", 103 | "minimatch": "^3.0.4", 104 | "once": "^1.3.0", 105 | "path-is-absolute": "^1.0.0" 106 | } 107 | }, 108 | "glob-all": { 109 | "version": "3.1.0", 110 | "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", 111 | "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", 112 | "dev": true, 113 | "requires": { 114 | "glob": "^7.0.5", 115 | "yargs": "~1.2.6" 116 | } 117 | }, 118 | "graceful-fs": { 119 | "version": "4.1.15", 120 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 121 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", 122 | "dev": true 123 | }, 124 | "immediate": { 125 | "version": "3.0.6", 126 | "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 127 | "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", 128 | "dev": true 129 | }, 130 | "inflight": { 131 | "version": "1.0.6", 132 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 133 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 134 | "dev": true, 135 | "requires": { 136 | "once": "^1.3.0", 137 | "wrappy": "1" 138 | } 139 | }, 140 | "inherits": { 141 | "version": "2.0.3", 142 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 143 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 144 | "dev": true 145 | }, 146 | "is-wsl": { 147 | "version": "1.1.0", 148 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", 149 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", 150 | "dev": true 151 | }, 152 | "isarray": { 153 | "version": "1.0.0", 154 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 155 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 156 | "dev": true 157 | }, 158 | "jsonfile": { 159 | "version": "4.0.0", 160 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 161 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 162 | "dev": true, 163 | "requires": { 164 | "graceful-fs": "^4.1.6" 165 | } 166 | }, 167 | "jsonify": { 168 | "version": "0.0.0", 169 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 170 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 171 | "dev": true 172 | }, 173 | "jszip": { 174 | "version": "3.1.5", 175 | "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", 176 | "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", 177 | "dev": true, 178 | "requires": { 179 | "core-js": "~2.3.0", 180 | "es6-promise": "~3.0.2", 181 | "lie": "~3.1.0", 182 | "pako": "~1.0.2", 183 | "readable-stream": "~2.0.6" 184 | } 185 | }, 186 | "lie": { 187 | "version": "3.1.1", 188 | "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", 189 | "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", 190 | "dev": true, 191 | "requires": { 192 | "immediate": "~3.0.5" 193 | } 194 | }, 195 | "lodash.get": { 196 | "version": "4.4.2", 197 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 198 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", 199 | "dev": true 200 | }, 201 | "lodash.set": { 202 | "version": "4.3.2", 203 | "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", 204 | "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", 205 | "dev": true 206 | }, 207 | "lodash.uniqby": { 208 | "version": "4.7.0", 209 | "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", 210 | "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", 211 | "dev": true 212 | }, 213 | "lodash.values": { 214 | "version": "4.3.0", 215 | "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz", 216 | "integrity": "sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=", 217 | "dev": true 218 | }, 219 | "md5-file": { 220 | "version": "4.0.0", 221 | "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz", 222 | "integrity": "sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==", 223 | "dev": true 224 | }, 225 | "minimatch": { 226 | "version": "3.0.4", 227 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 228 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 229 | "dev": true, 230 | "requires": { 231 | "brace-expansion": "^1.1.7" 232 | } 233 | }, 234 | "minimist": { 235 | "version": "0.1.0", 236 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", 237 | "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", 238 | "dev": true 239 | }, 240 | "once": { 241 | "version": "1.4.0", 242 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 243 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 244 | "dev": true, 245 | "requires": { 246 | "wrappy": "1" 247 | } 248 | }, 249 | "pako": { 250 | "version": "1.0.7", 251 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz", 252 | "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==", 253 | "dev": true 254 | }, 255 | "path-is-absolute": { 256 | "version": "1.0.1", 257 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 258 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 259 | "dev": true 260 | }, 261 | "process-nextick-args": { 262 | "version": "1.0.7", 263 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 264 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 265 | "dev": true 266 | }, 267 | "readable-stream": { 268 | "version": "2.0.6", 269 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", 270 | "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", 271 | "dev": true, 272 | "requires": { 273 | "core-util-is": "~1.0.0", 274 | "inherits": "~2.0.1", 275 | "isarray": "~1.0.0", 276 | "process-nextick-args": "~1.0.6", 277 | "string_decoder": "~0.10.x", 278 | "util-deprecate": "~1.0.1" 279 | } 280 | }, 281 | "rimraf": { 282 | "version": "2.6.3", 283 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 284 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 285 | "dev": true, 286 | "requires": { 287 | "glob": "^7.1.3" 288 | } 289 | }, 290 | "serverless-plugin-existing-s3": { 291 | "version": "2.3.0", 292 | "resolved": "https://registry.npmjs.org/serverless-plugin-existing-s3/-/serverless-plugin-existing-s3-2.3.0.tgz", 293 | "integrity": "sha512-lFj/QHvfiYQgCiW6FwZNL537mS5BgM3GyzyzhlMaKulGPQs0Ja4vO/l9eQgjZXQeShLeGDrHlFKY0thVLyFQeg==" 294 | }, 295 | "serverless-pseudo-parameters": { 296 | "version": "2.4.0", 297 | "resolved": "https://registry.npmjs.org/serverless-pseudo-parameters/-/serverless-pseudo-parameters-2.4.0.tgz", 298 | "integrity": "sha512-lb9R62PUFdEAbbYH7pe1wzR7vtIpa8YI8OVcQ5LlLyE0+AxWG4bwEw33X5LE8+5oLwTy57Y/EevnxKnMeyiXxw==" 299 | }, 300 | "serverless-python-requirements": { 301 | "version": "4.2.5", 302 | "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-4.2.5.tgz", 303 | "integrity": "sha512-dmdgrSLWgJv2g/LIfFdBIkJFn2duNFRZc7De94AHf2ylZS7s+gKJ8Ga090YdaigWLhH65tMA50Ub06SUk0p6EQ==", 304 | "dev": true, 305 | "requires": { 306 | "appdirectory": "^0.1.0", 307 | "bluebird": "^3.0.6", 308 | "fs-extra": "^7.0.0", 309 | "glob-all": "^3.1.0", 310 | "is-wsl": "^1.1.0", 311 | "jszip": "^3.1.0", 312 | "lodash.get": "^4.4.2", 313 | "lodash.set": "^4.3.2", 314 | "lodash.uniqby": "^4.0.0", 315 | "lodash.values": "^4.3.0", 316 | "md5-file": "^4.0.0", 317 | "rimraf": "^2.6.2", 318 | "shell-quote": "^1.6.1" 319 | } 320 | }, 321 | "shell-quote": { 322 | "version": "1.6.1", 323 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", 324 | "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", 325 | "dev": true, 326 | "requires": { 327 | "array-filter": "~0.0.0", 328 | "array-map": "~0.0.0", 329 | "array-reduce": "~0.0.0", 330 | "jsonify": "~0.0.0" 331 | } 332 | }, 333 | "string_decoder": { 334 | "version": "0.10.31", 335 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 336 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 337 | "dev": true 338 | }, 339 | "universalify": { 340 | "version": "0.1.2", 341 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 342 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 343 | "dev": true 344 | }, 345 | "util-deprecate": { 346 | "version": "1.0.2", 347 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 348 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 349 | "dev": true 350 | }, 351 | "wrappy": { 352 | "version": "1.0.2", 353 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 354 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 355 | "dev": true 356 | }, 357 | "yargs": { 358 | "version": "1.2.6", 359 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", 360 | "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", 361 | "dev": true, 362 | "requires": { 363 | "minimist": "^0.1.0" 364 | } 365 | } 366 | } 367 | } 368 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ocr-test", 3 | "description": "", 4 | "version": "0.1.0", 5 | "dependencies": { 6 | "serverless-plugin-existing-s3": "^2.2.2", 7 | "serverless-pseudo-parameters": "^2.4.0" 8 | }, 9 | "devDependencies": { 10 | "serverless-python-requirements": "^4.2.5" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /requirements/requirements-dev.in: -------------------------------------------------------------------------------- 1 | cython==0.29.1 2 | pillow==5.3.0 3 | pytesseract==0.2.4 4 | tesserocr==2.3.1 5 | 6 | argparse 7 | requests 8 | 9 | -r requirements.in -------------------------------------------------------------------------------- /requirements/requirements.in: -------------------------------------------------------------------------------- 1 | # tessleract dependencies are provided from lambda-layer 2 | # for local development and testing install requirements-dev.txt -------------------------------------------------------------------------------- /serverless.yml: -------------------------------------------------------------------------------- 1 | service: ocr-test 2 | 3 | package: 4 | exclude: 5 | - .venv/** 6 | - node_modules/** 7 | - .git/** 8 | - '**/*.pyc' 9 | - tesseract-layer/** 10 | - requirements/** 11 | - tests/** 12 | - test* 13 | - .vscode/** 14 | - tessenv/** 15 | 16 | plugins: 17 | - serverless-python-requirements 18 | - serverless-plugin-existing-s3 19 | - serverless-pseudo-parameters 20 | custom: 21 | pythonRequirements: 22 | fileName: requirements/requirements.in 23 | zip: false 24 | dockerizePip: true 25 | app_acronym: ocr-test 26 | default_stage: dev 27 | tesseract-layer: 28 | name: tesseractPython36 29 | version: 1 30 | tessdata: /opt/data/tessdata 31 | stage: ${opt:stage, self:custom.default_stage} 32 | stack_name: ${self:custom.app_acronym}-${self:custom.stage} 33 | region: ${opt:region, self:provider.region} 34 | account_id: 35 | Value: Ref! "AWS::AccountId" 36 | # Put this here rather than in code (presigned URL TTL) 37 | url_default_ttl: 60 38 | 39 | provider: 40 | name: aws 41 | runtime: python3.6 42 | stage: ${opt:stage, 'dev'} 43 | region: ap-southeast-2 44 | environment: 45 | REGION: ${self:custom.region} 46 | URL_DEFAULT_TTL: ${self:custom.url_default_ttl} 47 | TESSDATA_PREFIX: ${self:custom.tessdata} 48 | 49 | functions: 50 | ocr-test: 51 | handler: lambda_function.call 52 | name: ${self:custom.stack_name}-ocr-test 53 | timeout: 60 54 | events: 55 | - http: 56 | method: post 57 | path: /ocr 58 | cors: true 59 | layers: 60 | - "arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:layer:${self:custom.tesseract-layer.name}:${self:custom.tesseract-layer.version}" 61 | -------------------------------------------------------------------------------- /tesseract-layer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM lambci/lambda:build-python3.6 2 | 3 | # define env 4 | ENV LEPTONICA_VERSION=leptonica-1.76.0 5 | ENV TESSERACT_VERSION=4.0.0 6 | ENV PYTHON_VERSION=3.6.1 7 | 8 | # tesseract data parameters 9 | ARG TESSERACT_LANG 10 | ARG TESSERACT_MODE 11 | 12 | ## install dependencies 13 | RUN yum -y clean expire-cache && yum -y makecache fast && yum -y update && yum -y install tar xz gcc gcc-c++ make autoconf aclocal automake libtool findutils \ 14 | libjpeg-devel libpng-devel libtiff-devel zlib-devel \ 15 | libzip-devel freetype-devel lcms2-devel libwebp-devel \ 16 | tcl-devel tk-devel wget tar diffutils autoconf automake \ 17 | libjpeg8-devel libtiff5-devel zlib1g-devel zip 18 | 19 | ## build python 20 | RUN curl -O https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz 21 | RUN tar xf Python-${PYTHON_VERSION}.tar.xz 22 | RUN mkdir -p /var/task/python 23 | WORKDIR Python-${PYTHON_VERSION} 24 | RUN ./configure --prefix=/var/task/python 25 | RUN make -j9 && make altinstall 26 | 27 | ## build leptonica 28 | RUN mkdir -p "/tmp/${LEPTONICA_VERSION}-build" 29 | WORKDIR "/tmp/${LEPTONICA_VERSION}-build" 30 | RUN curl -L -o "${LEPTONICA_VERSION}.tar.gz" "http://www.leptonica.org/source/${LEPTONICA_VERSION}.tar.gz" \ 31 | && tar -zxvf ${LEPTONICA_VERSION}.tar.gz \ 32 | && cd ${LEPTONICA_VERSION} && ./configure && make && make install 33 | 34 | # build tesseract 35 | RUN mkdir -p "/tmp/tesseract-${TESSERACT_VERSION}-build" 36 | WORKDIR "/tmp/${TESSERACT_VERSION}-build" 37 | RUN wget https://github.com/tesseract-ocr/tesseract/archive/${TESSERACT_VERSION}.tar.gz && tar -zxvf ${TESSERACT_VERSION}.tar.gz \ 38 | && cd tesseract-${TESSERACT_VERSION} && ./autogen.sh && \ 39 | LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" \ 40 | LIBLEPT_HEADERSDIR="/usr/local/include/leptonica" \ 41 | PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig" ./configure \ 42 | && LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include" make && make install 43 | 44 | RUN pip install \ 45 | --target=/var/task/python \ 46 | --global-option=build_ext --global-option="-L/var/lang/lib:/var/task/lib" \ 47 | --global-option=build_ext --global-option="-I/var/lang/include/python3.6m:/var/task/lib" \ tesserocr==2.3.1 48 | 49 | RUN pip install \ 50 | --target=/var/task/python/ pytesseract==0.2.5 51 | RUN pip install \ 52 | --target=/var/task/python/ --upgrade cython==0.29.1 53 | RUN pip install \ 54 | --target=/var/task/python/ --upgrade pillow==5.4.0 55 | 56 | RUN mkdir -p /var/task/tessdata 57 | RUN for lang in $TESSERACT_LANG; do wget https://github.com/tesseract-ocr/tessdata_${TESSERACT_MODE}/raw/master/$lang.traineddata -P /var/task/tessdata; done 58 | 59 | RUN rm -rf /var/task/Python-3.6.1* 60 | RUN ls /var/task/python/bin 61 | -------------------------------------------------------------------------------- /tesseract-layer/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | showHelp() { 4 | # `cat << EOF` This means that cat should stop reading when EOF is detected 5 | cat << EOF 6 | Usage: ./build -vnc [-hvnc] 7 | 8 | -h, Display help 9 | 10 | -c, clean rebuild docker container using no-cache 11 | 12 | -l, list of space-delimited tesseract languages (default: eng) 13 | 14 | -m, tesseract model: fast/best (default: best) 15 | 16 | EOF 17 | # EOF is found above and hence cat command stops reading. This is equivalent to echo but much neater when printing out. 18 | } 19 | 20 | 21 | 22 | export DOCKER_ARG="" 23 | TESSERACT_LANG="eng" 24 | TESSERACT_MODE="best" 25 | while getopts "m:l:hc" opt; do 26 | case ${opt} in 27 | h ) showHelp 28 | exit 0 29 | ;; 30 | c ) export DOCKER_ARG="--no-cache" 31 | ;; 32 | m ) TESSERACT_MODE=$OPTARG 33 | ;; 34 | l ) TESSERACT_LANG=$(echo $OPTARG | tr ',' ' ') 35 | ;; 36 | \? ) showHelp 37 | ;; 38 | esac 39 | done 40 | set -e 41 | 42 | echo "$DOCKER_ARG" 43 | 44 | # define required libs 45 | 46 | libarray=(/usr/local/lib/libtesseract.so.4 \ 47 | /usr/local/lib/liblept.so.5 \ 48 | /usr/lib64/libgomp.so.1 \ 49 | /usr/lib64/librt.so \ 50 | /usr/lib64/libz.so \ 51 | /usr/lib64/libm.so \ 52 | /usr/lib64/libpng12.so.0 \ 53 | /usr/lib64/libjpeg.so.62 \ 54 | /usr/lib64/libtiff.so.5 \ 55 | /usr/lib64/libpthread.so \ 56 | /usr/lib64/libstdc++.so.6 \ 57 | /usr/lib64/libjbig.so.2.0 \ 58 | /usr/lib64/libwebp.so.4) 59 | 60 | pythondeps=(tesserocr.cpython-36m-x86_64-linux-gnu.so \ 61 | pytesseract-0.2.5.dist-info \ 62 | pytesseract \ 63 | Pillow-5.4.0.dist-info \ 64 | PIL \ 65 | Cython \ 66 | Cython-0.29.1.dist-info \ 67 | cython.py \ 68 | pyximport) 69 | 70 | binaries=(/var/task/python/bin/cythonize \ 71 | /var/task/python/bin/cython \ 72 | /var/task/python/bin/cygdb ) 73 | 74 | 75 | LAMBDA_DIR=layer 76 | 77 | rm -rf layer 78 | mkdir -p layer/python/bin 79 | mkdir -p layer/{lib,bin,data} 80 | docker build $DOCKER_ARG --build-arg TESSERACT_LANG="$TESSERACT_LANG" --build-arg TESSERACT_MODE="$TESSERACT_MODE" -t tessleract-builder -f Dockerfile . 81 | CONTAINER=$(docker run -d tessleract-builder false) 82 | 83 | # copy libs 84 | for lib in "${libarray[@]}" 85 | do 86 | docker cp -L \ 87 | $CONTAINER:$lib $LAMBDA_DIR/lib 88 | done 89 | 90 | # copy python dependencies 91 | for dep in "${pythondeps[@]}" 92 | do 93 | docker cp \ 94 | $CONTAINER:/var/task/python/$dep $LAMBDA_DIR/python/. 95 | done 96 | 97 | 98 | # copy python binaries 99 | for bin in "${binaries[@]}" 100 | do 101 | docker cp -a \ 102 | $CONTAINER:$bin $LAMBDA_DIR/python/bin 103 | done 104 | 105 | 106 | docker cp \ 107 | $CONTAINER:/var/task/tessdata $LAMBDA_DIR/data/tessdata 108 | 109 | docker cp \ 110 | $CONTAINER:/usr/local/bin/tesseract $LAMBDA_DIR/bin/ 111 | 112 | docker rm $CONTAINER 113 | -------------------------------------------------------------------------------- /tesseract-layer/serverless.yml: -------------------------------------------------------------------------------- 1 | service: python-tesseract-layers 2 | frameworkVersion: ">=1.34.0 <2.0.0" 3 | 4 | custom: 5 | default_stage: dev 6 | stage: ${opt:stage, self:custom.default_stage} 7 | tessdata: tessdata 8 | region: ap-southeast-2 9 | 10 | provider: 11 | name: aws 12 | stage: ${opt:stage, 'dev'} 13 | region: ap-southeast-2 14 | environment: 15 | REGION: ${self:custom.region} 16 | TESSDATA_PREFIX: ${self:custom.tessdata} 17 | 18 | layers: 19 | tesseractPython36: 20 | path: layer 21 | description: A Layer to support tesseract in Python 3.6 Lambda functions 22 | compatibleRuntimes: 23 | - python3.6 -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import argparse 3 | 4 | parser = argparse.ArgumentParser() 5 | parser.add_argument("--url", help="aws lambda url") 6 | args = parser.parse_args() 7 | print(args.url) 8 | 9 | url = args.url 10 | 11 | payload = "{\"image64\": \"iVBORw0KGgoAAAANSUhEUgAAAlgAAABTCAIAAADMXO5hAACJM0lEQVR4nO29d3xUVfo/fqb3lkx6QlMEQVSEXV1RLOuuBTvoiojYwBU7it11LayLqKyoKBZE114XlVVQUFekY2ihhBBCejKZ3mfuvef3x/s3z+s6IUMymUS/rw/PH7wmw517n3vOc55eFJxzdhgOw2E4DIfhMPxfBeWvjcBhOAyH4TAchsPwa8JhQXgYDsNhOAyH4f80HBaEh+EwHIbDcBj+T8NhQXgYDsNhOAyH4f80HBaEh+EwHIbDcBj+T8NhQXgYDsNhOAyH4f80HBaEh+EwHIbDcBj+T0N/CEJRFGOxWDwel9csiqKID4lEIpFI4LMgCP2AzEG/TyaTjDFJkvCnHNVIJIIPhJ4oipzzfijBlCQpmUzKsSIcYrEYYUUXuN3uzDfknEuSRNf3P3g8HkmSsID4xufzJZNJzrnf78eXhCERhhxyvvJpd5Mkidb2kNAVORHIbxWPx8PhcDwe7ymGWUAsFutqlVwuF2MsEAj4/f5oNMoYo5XHn0C1N08XRRF7Fw6H6UuQLr7HcTsoCIIQi8XELoDeDhQi5xj0vnhEdnROp4k+iKKYdh/6MxQK+f1+xlg0GuWcB4NBznkgEAACctzkhzQnEIlE8L6cczmLwIdQKCRJUigUYozFYrFkMhkIBOLxuCRJgiDE4/FkMimKYjKZlCOJa7A1fc3fsG4APBE4E8Ekk8loNApeEQwG8WUikQANBINBvHU0GqUvAZzzQ57KzqDot4J6SZKUyl/IXVCz0WjEn5xzhULRP8gIgqBUKpVKJahcqVSqVCrGWDgc5pzr9Xq1Wk0XBwIBpVIp/zIajer1enzuI5yTyaRCocCKYY+USiWeJQiCKIo6nQ5XxuNxnU4Xi8U0Go1KpQJ9a7VapVIpCIL8RehWnPO0veh/iEQitPXJZFKj0dB/4d3TMJdDzkkF+gFo4JBXKhSKaDQaCAT0er3NZjskPrFYTK/X43xmeKncQigUMpvN+CxJUiQSUalUOp1OoVAoFIpwOKzRaLRaLWOsqampsLBQFMVwOCxJktlsxgX5+flZPBesVqPR4H3xAYuTSCTUanU0GjWZTLgYHJC2Hj9RqVSZNxc3FAQBzBpSBy8bDodNJhNORBbIM8aAAGNMfnai0ajBYEgkEkqlEsJDoVCYzWYgDEXZYDC0trZWVFQwxiKRiFar5ZxrNBpSmuUUniuA2Es7y5Ik+f1+8CuNRkOLzDmPxWJ4L/ABvV6fSCSSyaTFYmEyMu4H/gYIh8MqlUqlUmk0GpfLVVBQIIoi8T2W0mm0Wq0oitFo1Gw2E9/ALkPmEW9kKRbXU7T7XBASg8afgiBAGTGZTLFYTKFQ0Ir3G0DfNBqNCoUCauNB2VMkEonH4w6HgzEWj8dVKpX8Mvm69SmtAEOIbcaY1+sFStFoNBaL4TNoCLwPSr3BYDjo3QjtftM5OoNc7IFHRKNRbIf8GBBL6iPAUng8HrPZTHwT+HRfS0gkEjjJGa7B7si/SRP8fQTxeFwQBJI6af8VCASsVmskEnE4HM3NzaWlpeFwWK1Wy5cCGlUWz5XLoWg0qlKpkskkMPF4PFarFUcpFAoZDAYyPhQpyLAFCoUC9w+FQoIg2O12LCb+hSCE5tFTtAG4A71IIpGwWCwgRbBg+QVut9vhcAQCAbPZrFar4dwyGo2QlJFIBBiCPCRJwttlh1gaJBIJ+dbAVwQwGAxqtRoKcTKZxJ+4jKR7LBaLRqPgHmAvJCAVCkUsFpPvYF/wCs65z+cDAq2trU6nE+uTTCZ37tzZ1tZmsVgMBkMgEADliKJ4wgknKJVKrHM4HC4pKZEbV73kbH0uCAlXKN1yswZbklv6OCRwzuPxuFqtxtNBOjqdDkRssVgkSeKcw7RSKpWBQABaPwCMj1R7Qjvn+IOy8aA0Od1ZaQVrkDOgZDKJP3Fl3+HZU0gkEpABnTEB+wDCUFZUKhVOOy7OCfI8BfiMBYRyJueeXZ0Lct4yxmhfgsEgmV9pAN9OmjjpbKnnHOSyNhAIaLVarVZLfiej0Yh1xiJXVlYOGzbMYDBghXFOSeXqEcBQU6vVCoXC7/frdDoQcCKR4JxrtVpJkuLxeDQatVqtGo3moMc/gw4UjUaTyaTVaqVv5LoLfkjL2xtdigReXV3doEGDGGNQHfC/mzZtMplMkiTt37+/ra2toKBg586dZ5999ldfffWHP/xh3LhxCoWC1p/wSZNevYFgMAgzjnUiJ2jt8XjcZDJt3779q6+++s9//iMIQllZmdfr5ZxffPHFF110UX5+viRJFosFDC0cDttstmg0qtVqVSoVKLzv+AaUlWAwqFKpjEZjXV3dAw88oFQqW1tbKysrPR4PYwz2H1w1oiiee+65DQ0N77333jHHHMM66Vsgg6xFSf+5RlmKKeCJRBCxWAymMesvTVkOkUgEbk+5dwvRCEmSyJbtbLAT5fURrUCPVqvVeKggCIlEQhAEq9UKWSJJUiAQ0Ol0cBSAsIg4EJrS6/WIAShkkEMkswDybNBJjkajcIRGo1F8EwqFVCqVwWAgaskV/jgt0HUAWq0W98SOx+NxpVJpNBq7OhdyNQ7sQ6lUwkuW4XriyPDkyGmp7yAYDGo0mjTbCHQeCAT27t17++23v/322z/88MM111xz2mmnlZeX6/V6j8cTj8cVCoVOp3v99dftdnsWjyaO39HR4XQ6/X4/aZPJZFKlUuH1I5EIRCb+K7M/HAD1FD+Bl9JgMEiSlEgk2traSktLoUuRMzY7wUOhKa1WCxWntrb2qaeeqq2ttdvteXl5S5cubW9vlyQJB9Dr9VqtVigcyWRy6tSp999//4ABA3BgWYoAOoeHeg8w3CkqhuhsMBhcsWLFsmXLPv/8c8652WxGzBh8TKPRwHK96KKLIpHI9OnTzzjjDKPRiOXCNXT/PtWhoW1wzhcsWHDHHXcwxrRaLdyhGo1GqVQiVq3Vai0WSywWC4fDer1+9erVpaWlxcXFOYw19IcgTHM/IloLV34sFjMYDCBWxJNzpTFlQIalRB1oAqSJLQmFQmq1Wq/XRyIRMqco3AImDlZCHI39kkT6glxA6JDKCA5zzo1GI9Zqz549K1asaG9vP/nkk9va2oYOHXrCCScYDAYcY+AD3iH3pP9agDWkGC1CFFh5zjkEIYmN9vZ2m80G+Yfrey8IJRlgGTnnjY2NoihC8acrD3oHmOlEOTCAyHHdGTweDyJzSqWS3ID9oJEkEgkgifQHo9G4a9eujz/+2OfzxWKxAQMGLFy4MB6Pu1wui8UCHyBQohdXKpWIa/ToueFwOBKJtLS0GI3Gmpqa77///uSTTw6Hw1u3bv3Tn/40ZswYm83m8XhsNhsxhObm5h9//HH37t1INoEzoyvfPrkZnU6nKIpOp3PcuHFKpXLRokVKpfLJJ58EzR8y0NgV4JUjkYjFYhEEwev1CoLwyiuvrFq16n//+x+u0ev1UDShp0J+qFQqZG3AvVRQUDBv3rw//OEPFRUVtbW15eXlVqu1Nz7bNIDeBjUiHo8Hg0G9Xm82m+Px+Jw5c55//nmfz0cXw3VstVrD4TCoF1kFjLGCggKXyzV16tSXX345kUjodDqDwQC5zvqSv8H7qlAoDhw4MHv27OXLl2P38b84TXRMSH/VaDQ2m62jo2P27NlPPfVUa2ur1WqFwSA3/bNQOPpDECLOqVQqYawEg8FAIAA/jNFohH3QP1KQpcKzYGcmkwlucZfLVVhYyBh74403WlpadDpdU1MTkgXA6a699tqioqJQKOR0On0+n0KhIFdYGq3kkMFBWlMICnkBnPNIJIJMh59//nnRokVLly6VE73RaLz88ssnTJgwatSoYcOGIRCrTMGvLghZygQkjsA59/v9UAxhoBuNRsh7u90OBq2UQW8eDaUYTASCcPHixZs3b/76669VKtXFF188bNiw9vZ2v9/fVapIIpEYMGBALBZra2sbPnz4GWec0dbWtnTp0q40UxhA99xzj1KpxDv22xbU1tY6nU6r1frBBx/Mmzdvy5YtnHODwUAOUiij8EgTZ6SQAWMsHA5TQlM3wev1/v3vf1+wYIFCoXA4HH6/3+l0trW1wXVvMBiuv/76IUOGxGKxlpYWLHJlZeXq1asPmfAsB4PBoNFoAoEAYwwCJpFImM3mjo4OOEvwrCyoBTnDRqOxra2tqKhox44dp5xyit/vLyoqcrlc5DA0GAw6nc7r9RqNRti1IC2DwWC329va2pAmU1BQ8OWXX55wwgnRaDQYDFqt1lwJQiKkZDKJcxEKhbxe7x133LFu3bqWlha1Wk3GBmMMoiItGRgCsrCwsL293WAwPPHEEzfddBN82k6nE9f0EX8DZ/v0008//fTTL7/8kpJILRYLkrbocSShBg4ceODAAbpg1qxZzzzzDEgL20Erg3StniHE+xiQHYPPfr9/1apVd99996mnnvrDDz+0trbie8qU7WtkOOfwtgmCgIxnznldXd0nn3zy1FNPzZs3DxYJQiMQ1ThLt9122+LFi5ctWyYIQiQSEUWRQtOU2E28NVcgCAKyWDnniURizZo1L7/88qJFiyZPnozohc1moyhOeXm5zWYrKSmhnbVYLCeeeGIkEolGozAL+meFDwkQ55xzpIB//vnnJpNJo9EQz8WHwsLCf/3rX7AwwOkoAS9rQDkKfCxQyLCMON4WiwWq2EETTAjgwSMj+5DJMmq1OhQKoXyIzkJfA+JwNTU1DzzwAJQ2Ut0GDx5cUFCA+KtCocBb4xXsdjtMMWQdt7e39/S50WgUPq78/HybzWaxWPLz85VKZWlpKcQe1hZPwUMRGcGSwiWObJqugDFWUlJSVFTEGEPiLh4Ebkbnmv/SB959gMvK7/ffddddeITdbsfjQJxp8hUsGO8i14fMZrNKpXr22Wc3bdoUCASywCQDEGcARQmC8PTTTwMTrVarVqth0hmNRrVaTdFfUG9nch07dmxZWRlj7PLLL/f5fP3A35YuXfrwww+Ts6fzodNoNCTM5O4BrVZbUlICT/uECRPq6upaW1vBSQCiKMIP3CPIRhDiqYIgyHeX1gj2n5xtxePxzZs3X3HFFbCFWUrS1NTU4Jos8O4m0Knwer3gRMAfvHjbtm1Tp07FouPkgxdglbVaLfiCwWCgKCagrq6O1oFzHgwGES7iKc9bFqj6/X7CMJlMwlXodrvxzbJly84991wKj1ssFqiWZrPZ6XSCKSNcMWDAAFwzZMgQxthJJ53kdrsDgQCWmhaEiDubZc0KsDJpB9jr9dKLWK1WHAwcVKVSec0110hdQNZooJoKe3fttddi01EzgPNmNpupnIbOJEvpwlqtFusMLcRms5lMJr1ebzKZwPggxUk/xRtRzVYOSV2+FPBbIJCM/502bRrQtlgsFoulsLAQ/g/4DDUajclkkvMX+kysXKVSeTyenjLEYDD46KOPMsYKCgr0er3FYsEqmc3mkpKSvLw8i8VSVlZGlEzgcDiMRiNJa2T3gBiwpISYWq02Go06na68vBzpuCUlJeQ1gbnAZaLioIBwgyAI8MhxznFGcEwWLlxotVqtVmt+fn55eTk9V56dodPpyLyDhIYzA7RUXFwsX88pU6aAaYAAEokEHXaelXqEg4x9j0ajY8eOJVmCKCZjjHAghUOn05HSQyStUqmwjEqlEo6xQYMG1dXVyRlmT9EjEEUR9xEEgSyfefPmQeMcNGhQaWkpsKVTlmZ00jcOh8NkMmELysrKEL1WqVS4J1E+T1k7PYIeC0LyzuF5Bw4c4JzjwPAUFaK2JplM7tu3b+rUqeRlIjKy2+3HHXecx+PBdhKPlmtzvQRSwOWH1ufz4XEwCGbMmKFWq+XSRW6UdGYNLGWsnHPOOe+///5PP/2EB6FK2uVy8V+yp+4ADiRPaRIej6e1tRXIQxZGIpFnn33W6XSCdIAVnCH4BlxYoVAUFRVhhfEvmAhxlqamJq/XC6GIPepPQUjLAr4TiUTAp/773//iFTprqSqV6sYbb8yhIAyHw1S9g8166qmnsLm0SiqVChIORip2X6vVdsZQrhg5nU4oIlarlbLVkWcBgkHcizDpDWdJW0/4NuPxOBThn376admyZZMnTwa2nR1ENpuNCBuMW84Wi4uLYUmAN33yySdpgvCQ6y8IwsMPPwwixM2xIHiKTqdzOByIidjtdrPZTAoE3Ib5+fkajSYta0aj0VRUVBgMBr1er1AoysvLkVgA+h88eDBL5cFiW4EwTzGBgwL0dTCcUCjU1tZG/zVnzhxytEBPgpcVQg42lpxNUz6R0WiELetwOJxO54ABA+iQMsY+++wzuY+n9+DxeDjnbrd79uzZIFGwBb1e73A4oOswxijTNS2yAEvX6XSCRLHjSqUSTtGPPvqosbGRc97R0cE5b2trkyQJHKlHQEonT8mOH3/88ayzzsJZczqdKpUqPz8fom7w4MH/+Mc/1q9fT5JMFMX169f/4x//YIyBYLRabX5+vk6ng/ZfWFj4zDPPcM4jkUhTUxMekYW62eOUG7ASpVLpcrm0Wi3sD5ByLBarrKxsaGj4+uuvV65cqdVq6+rqtFqt0WiEMxp1CzqdzufzXXbZZQ6HAweMMcY5z21BIfKAqXQUyS82mw2JqXPnzl22bFlVVRV8pIwxrVZL/QtIwNjtdpTrpfVz+frrr7/99ltBEAYPHjxq1KgXXngBhbRy4N2LBqnVaqwnYwylGqjZ8Pl8BQUF33333d69ex9//HGFQiFJkk6nI2zhLWSMIYZsNpvb2toYYyaTCXmMcIomk8m8vLxAIDBhwoQ1a9ZQlhBPed67iWdvgMvi0BA5UEs3bty4adMmtVpN7VeQAYisReiSOUQDBJZIJAwGA5QzJGczWYMYs9kMMigtLQ0EAoIg5OfnU1cOtVoNSkCaDDiLIAgdHR1qtRrYIjpFlWR4aNoK9zI1Wr6eWq0WkaqOjo7ly5fPnDkT/UQYYxaLBe8Cbwdy0P1+v9FoxOsHAoFIJGI2m88+++wjjjji9ddfh0aL/2KMDRs2DLfqnDTRFaBkEOtgNBopP0CSJCQBAhlU+6nVap/Ph9ApnqhUKil4gUAyvPoNDQ30iJaWFkTjotFoYWHh/v37TSZTOBy2WCxpdfQZcg4gMPA5EolgQZA09NRTT/n9fqhEXq+3uLgYTU9QOJ+fnz9p0qQRI0ZAIUgmk6hb12q17e3ty5cvr6ys9Pl8eXl5jY2NkiQhAwWcBOmyvan3J4CwB87z58/HZ4g0o9EYCoWQIfXPf/7T6/VOnjy5rKxMo9FAB2psbPzmm2/effddpP+UlJREIhFULGi1WrfbPXDgwMsvv3zNmjV5eXn5+fmc88LCQnknhO4DOVokSUIi0qeffrpq1Spsmd/vh9WEEzFhwoS77roLu+b1ehljDofj97///fHHHz9y5MiLLrpIo9GUl5fv378ffgJBENrb29euXbt69epTTjkFvF2eotwD6KnkhLxFPQrId9u2bdu3b58zZ87JJ5+MeyLeQz46xGCQjQmljzFWXFy8b98+8kvwbB363UQYWonP59u0adMdd9xhMBiMRmNRURG2FiilSWIQK7602+2kTJlMpqKiIqT5QHOcPXv21q1bOedut7ubinMa+P1+qIrRaLS9vX3btm1jx44dNWoUVSsiOQr4FBYW0gmXs1SoS0C4oKCAqAG+hZKSkiOPPHLhwoWcc7jpoIX0tVFIS4GVwRHlnO/bt48ShuVri2Oj1+t1Ot2tt96ac3xIPxUE4dlnn8VzgQD0d0qyMJvNZrPZYrHAGoA7VKlUajQauJjwAZ9xH+wX/Ut1AvBA8FwQedp6iqLo8/mi0ejPP/9M2+10Ok0mE3nGAA6Hg9Y5Ly9v9uzZDQ0N4XC4urp6//79nHOfz7d48eKampp4PF5fX+9yudrb29M8ot3B/95778VTaFmKi4snTJhwySWX4BudTgezw2w2IzSlVCovuOCCWbNm3XfffTfddNM999wzc+bM+++/f9asWXffffesWbPy8vKuuuqqKVOm5OfnwwJDOBxGGBm1XGYFdtM/hgJiznlra6skSStWrGCMwS+K/YXb0Gw2P/jgg+vXrz9w4AAegV/Jn+L3+5ubmxcuXGiz2cBS5LQxZsyYbdu2yS0kmK3ZhY2R/8k5nzNnDsknEB4efeWVV2Ir6RGhUMjtdtPT6+vrf/rpJyISsAtEQIH266+/TsEvfMiCeoPBIMgGSjnn/PLLL2epCiJsJR76008/kQ8MXAIRIvI+7tmzZ8yYMSwVnlCpVBaLBYGMqVOnwhkAKzkLyEYQJhKJ3bt333TTTWecccbNN99cWFio0+kQ27TZbEVFRWgKADORTG+FrMIUsH37duwTjhmJq1wBPJY85RFta2u74YYb7HY7vCgQGPLKXPhIqaDiwgsvvPHGG88//3wcCSZzoGm12ry8PKQAwEj/05/+1NTUJO+R2E3GIUkSeZXb29tjsdjWrVsHDBiAPKiKioqSkhLIBlLoAAMHDsSHP/3pT3v27Fm4cOG11157xRVXzJo1C2UAeB3KiSgoKDCZTBaLBR7dNH9XDpc97e3SuLYoiuAgX3/9NWOMAjCIH1O9B5jjX//61xxiQiwSmlwsFtu5cyetJ3IKlErl5MmTb7jhhsLCwjPPPPPcc88Fl0FciqWUbsgV8B2bzTZhwoQrrrhi+vTp06ZNO+eccyixAkzQbrc3NjaSuwbJ7lm/Rdp64vuPPvooLy8PSweESasDhavV6gsvvHDGjBkzZ85ctmxZY2MjmE4ymXS73fF4nFRbinbzVCC5R1JQEIR77rkHjmJa29NOOw3xoS1btuzatevAgQO7d+9esGDB66+/ftFFF7333nstLS1yCUHsDNULnPNvv/02mUy2t7f/+OOPDQ0Nb775JmNMXu6i0+kKCwvTfGKZQy2hUAjmiCRJ4XAYvH7atGnYWRz20tJSHLEVK1aAfpArhw8478FgMBqN+v1+3CEcDj/zzDOIL4JCQDNKpfL222+H0ZlMJvEvIIsDCBxWrFhRUVEhLxeBojx+/Pj9+/fTPsKlgUJkehYiyuvXr3/wwQflbPmII47Iy8sDq5k6deru3btpR7KT2XTkOef19fWjR49mndrCbd68ORKJAE9cSQoKlyk3u3btmjBhAirHUCML+a3RaDZt2gT0sstLykYQbtq0CRklpInQHpC7HKlcWE2LxYIgJ7hJeXl5RUWFw+GAiwMRDlqyLPA5KGBR3G43DtLGjRuvu+46OXsaMGAA0kwQSIOKYTQa582bt2fPnsrKymAwGAqFQqHQnj17XnrpJRxsBJC0Wi00WcZYUVER7MLp06fDmdY5oJKB0PHKoVAIZ7itrW3hwoVYUrmFiiA2FvzUU08966yz8O+///1veeZONBoNhUKrV68mMW+xWEpLSxEMgFz83e9+B3eT3CjMuSyUvztWgyI3nPNNmzaNHz+e+PXw4cO1Wi1oWh5WueKKK3KFD3yb+IzgUCQSaWxsRM4n5X+WlZVt2LDB7Xbv2LEDraj37t27ffv27du3NzY2VldX19TUbN68ecuWLbW1tVVVVWvWrIE5RTQsSdLevXt37dq1bds2pLT9/PPPnPNAINCb+FBX6ykIAtmCcnFutVqRmcIYKykpefHFF3kqPZv/0qlDIIpiS0sLPoMapV9CN9f57rvvVigUoFXUeE2dOpVWnqfSWOQ3pFwB5PQSPpAT+IwohiRJgUAAWhROBIX233jjDb/fT8w6Q4CQy5JWOOeRSASRsPnz5xsMhsLCQspjhAa8du1a0l3ww2QySd+gpTVo2+Vy4VaPP/44YsYQhJQnuGvXLkQKgR7eSJ7o0U1IJBIrVqw49thjwWNtNhucGYyxM888k6fED+Q0RCCpNRDDqKzA69999916vR7KN6QLKAf8EDvVmWC6D+By+/fvnzJlCtFqaWnpyJEjtVrtrbfeCvbl8XiQwYB1JiKEbItGo4Ig1NfXv/nmmzabraCgoKCgAGnPBQUFxx133Jo1a6SsApk8O0H4/fff403y8vLkFhX54mCxwl9BVpROp6OcH8Sxtm7d2tHRIRd+xCh7D1g7zDpwuVyTJ08GGpQdDsHgcDgGDRo0ePDg999/f8OGDc3Nzfi5nDTxuaam5plnnpEroWhjYTab8/PzrVZrSUnJmjVreppcQP8liiLy1vbu3UtafFlZmVKpRH7BoEGDHnzwwc2bN9fW1tLPQ6EQldjL13Djxo3koZIDQuJr1qwBi+k7o7Arri0IQigUQj5FXl4e9InCwsLCwsIRI0YASdC32Wy+/vrrc4UP8Ue8Nec8FApVV1eD01GF5bnnnkv4i7KIvc/nk7sr4MCgC8h7g07/+J6kDv2Ji9Frvqf4d7WeiUTis88+w9ErLCyEV4ZO5cSJE5cuXXrgwIG0/HISyX6/H/I+FoulcRD82SMpiOtvu+02aBUIB2q12htvvBHOYXJ+4INc6yfo/A2wxSsgV37s2LHkdURa7PHHH4/1JzmamSHKxSQQ++mnn7CMarUaHxwOh9VqHTt2LCVvy00ibGtaLRBPmV/r1q1jjGk0GmqsCjNg8eLFaJVJF/OsLK1YLPaXv/wFuwz3ZkFBgcViueaaa5DkIn9BQhKUk7YISNC7+uqrjzzyyJKSErlLH9y7qqoqGAxmJwghd1HM89VXXwFhp9NJJWoqleq///0v55zylchJxjmXm7DQMHC+3njjDeRbUV8RxphCoWhoaOApF2CPoMeCMBgMrl69GvqCwWCQhyVJtFCMHZcplUo0VjAYDE6nE8HCY445pq2tjXwXck0wV+D1ekEBL730EvCEFNTpdJAH1N6iurqac97c3Oz3+6GVJBIJ+WpCq+KcNzQ0LFq0iI4K6I+lHFAPP/xwT9PNAcRSBUFwu92TJk0qKiqCngGb6bnnnquurgZ94Mi5XC60TuYp3ko5aXCXr1279qabbtLr9RQGQPBAo9H87ne/I0HYR5HCNA8eLQt8LKjQ0mq1SLIvKyu78cYbb7vtNnmuo0ajufbaa3OIDxRhnEyeYq9UqoEPt9xySygU2r9/P3U5EQSBeJxca0G6Jv7EDUEhaYYIuWuooCg7u7Cr9fzf//6H0mmr1QqOAJ+5Uql84oknQMZUDohHC7IqizRZ7vP5pFT2Mk8lXfeUNlCUTcdfq9VOnz6d/peeiJUhHYLLjC3oGWCg+C9yloZCof/85z+gZ+SX4iR+9NFHNTU1dGbFbtRlUVwGpsbMmTPpIJMIf+SRRxBKIOEtB9hVnf1Yfr+/tbV16dKlw4cPx900Gg1O36xZs8LhMPE9IJzF6UskEldddRXWwWq1mkwm5DFACsIzRFfyX0qUtPvgg9frjUQiKCejdUA69EsvveR2u1Ff2FM8CSKRyOrVq1UqVWlpKXga7PizzjoLLEh+sSAIxKDo5/iAKyl5SqfTkTLNGNu2bVt2SGZjEcIVo9frIQOoIScZf3q9/o477nj33XfXrl2Lt6qvr6daEOTaVVRUrF+/nu4pycqhcgUejwcnoXPXD6vVWlFRodfr58yZA9diOAWRFJADDXdraGjAafR6vZ988glUPEpQpt7QyEYJBAIQUWkFQwcFIZXqjePR1NT02GOPUajs7LPPhpueisoPCvKVlHPMSy65hCiGFD3G2HfffYfXoah7DmtXOt9NkiQ4JyVJevHFF9HqF4oRlm779u2zZs0CepT7cMstt8gt197g05knRqPRF198UT5dy2QyzZgxA66YvnAX9wagrECKA7F33nnHZDLBtZufn4/SAoSLFixYsHr16qamJvw2HA67XK6+q9ZNA7gi5F3Ib7zxxh7phXKg6yFy6uvrmaz4mvTRXbt21dXVUUwRP8zscoQ+gXPqdrv/+te/Uq4Z4KSTTuro6EgkEsgxkXOnzrpj2rnjnLe2tj722GPE8akdFawWaGaHtAWh48r9E5xzQRBqamqOPfZYlgq2Qdm9++67s1hnyuTq6OhwuVyIFOBUUoIxT9VZdueGciAfcjwev/rqq0ktwAorFIr3338fVx6S/9DrQHu45557WMqXA+VPoVBs3ryZHAOJRKLzHnV18x4Lwkgk8r///Q8RLGgNVGozfvz4119/He1X5BgfVBAyxj7++GMYhXLa7Sk+GfDknLe2tgaDQeSIolaJMVZWVoZE1vHjx2M2KWwFCl/L/Xgkxkilisfj7e3ts2fPxl4WFxcjkxD5Sw6Ho6OjA26E7ryOJMsRIG9bPB4/44wzGGOnnnrqzp07qS8Jl+UvdFMQVlZWTps2LS8vD8UkJBSfe+45uZgnn3AOQe4MxGTmQCDwpz/9CXEd9ARQKBRXXnnl3r17OeennnoqS5mDOIf33HNPrgQhhZrAH+EPXL16NRYErTc0Gs2oUaMQV/6tCUIA3ADhcNjn8z3xxBPwtuXn5yOypdfrtVrtv//9b1EUW1pakJvOU+Gi3GqZXUE8HsfRgH7scDgsFsv111+ftSDkqXMEK2fcuHEGgwGCkKJif/jDH8LhcJrPWZTlaHSGRCJBWRUwnmbPnq1Wq5HlgEjHZZddBhsa+nGPBCHUjtbW1osvvpjybgYMGJCfnz9z5kzcqjuqCdGt3IgXRXH79u1QCMDTIL/37t2bnSAkWzyZTN54441WqxVFk0qlsqCgQKPRfPTRRzwrXVm+FJhIpVQqUZubn5/vcDgkWfcDnMqu1gHDeLksUQgaBmpMoT1ffPHFYJUH7UWVS0HIOf/555+Ru6zRaM4666wVK1bgqYQx+V7IKu8sCDUaDZof9h1QKJhabIDrIStsy5YtJAYoR6Cr+8h91vhQX19/1113/fnPf8Y9zWYzqTm7du2C0keQ2WctJ1mv1wsFyuv1tre3Q6CmScoeCULOeXNz81133UVmFgpv7XY7kCRUc9v9Cx7/NI/3/fffD6e0QqEYPHgwkpXef//9ZDIZDoevvvrqoqIieT+Uyy67DNpJTvy3EIGSJEWjUcQbtmzZAomLhyKAvX//flLDe7kIOQS5I7Gpqenvf/87htFYrVbKzzzuuOPee+89OTFQwBJwSOdE7yEQCMyaNQup7Q6HA/bEmWee2VMGnUgk5JSDvNbq6mpKPoAgBFchq0IOaVZUGiCLEp+9Xm8ymayurmaMUcYvNOYtW7bg+PdUEEqSFAwGY7HY888/D2cM9RVRq9VVVVV+vx+py6FQKEMWMR4qpvqzxONxiO1vvvmG2I5CocjLy0NH056uM7zQ8m+2bdtWUVEBcYVHGAyG8847jxwMPQUIuccff5x2jazkf/zjH7gGIrY79AnLwe/379mzB8fWaDSi2io/P7+srKyurg7St88FoSRJ3377LXwRyHZpa2ujjiE8Jdgp/+egglCn0yEyB8isvmUHpF8wWbYugrSYNuL1ertDLnDrkZwQRZGSraPRKPXE0+v1AwcO1Ov1L7/8sjwJGE12Mt8fFMw5TyaTSDyD31KSJHhueWptpS5Afjf5gcSv1q9fTx3CqABgwYIFdGfoLr20utIACGApmpub77//fjza4XAUFhbi85AhQ8hDe/XVV6OiiDjd66+/TpZ67wUhlwl7RPgWL14sL+nBc/ft24dcvt+UIOSc+3w+r9cbDoeJp8AaUKlU8JE+9dRTuIySO+SQWTDkChKJBHqNwvWN0/GXv/wlC0sFBoocZ7/ff9ttt6GZGZUSKRSKurq6YDCI2BvI+JCPoNtCrjQ0NOzatYuqv6m8ddOmTYIgIFWqp65R/FtVVcVkPT/VavWkSZPSOH6GfaFbkSCEXEHzIKvVarfbIbGeeOIJ3qnipRvL/IsH4YCMGzcOxxM1mggfzJ07NzsWDZzz8/NhGZNfCt3S3W53d1Rw5NXLc7855zfffDOyzXFnJGlWVlZyztFgOW1hM6xzj7uzo+vHiSeeWF5eDkUJHeoEQfD7/Wi9gZl5FoslQyuK0tJStH0JBoP0ej1FJjNgxdevXy/PBvZ6vRgTiqgJ2n9QZ5ODAnLrhVRzGVEUPR6PRqPB6JMTTzwRflGdTnfgwIFYLPbMM89otVq0gCFXQFc3x3QFvV6PNjFIwwHRhEIhNJRiqX4lYqoBSvcBzB3NO5B6E4lEcM4rKipQ7mowGMAOsujWnwFEUUTGQSgUam5ufvLJJ/GOXq9Xq9XG4/HHHnts/fr1DocjGo1u3779rbfeQlEXdSkjg5v9cqBudsBl0WK05tmyZUsymaQKCixv5xl+vwUIBAIqlQppcjCMMLuKMYaBEpMmTbrjjjsCgQBq/yHL6ec4X33dQogxJgjCsGHDJk2adMUVV1x99dXTpk27/vrrKWe7RyBJErVAwr8bN25Ekxf5AMhjjz1Wr9fDvyem5oYqUhOGu7q5MjXmE9c4HI7nn3/eZDKhLQ76x0Jfz9xRPQNQuyjGGNr65OfnC4IwevRorVYLsYqnZ+A/PKXHAw3UkjPGqqqqJEnCBEQwN5Q89hJwxM444wy00dHpdKIoAlt50W33AaNbf/jhB7fbHYvFMGueMaZSqZ5//nmsMPJsWWrmyUEBJSic81gshphOIBA46aSTcP9oNIr/DYVCLpdL/joH/dwZetxijfpYcs7Ly8vxpyiKIE3Srw/JsM4555wBAwYgKoubwCjJ1SQmKESMsdbWVprxAYkVCoU0Gg1yXGnqtNjFfEFwc2p7zxhTqVR5eXkajQbbdtNNN02ZMkWv12s0muLiYow8hUsQFV06nU7qej5WWlMSxHKwjFSJ1djYCHEo9nzitlarjUQiitR4WLLLPR5PfX09jhCmp7Jfjr3uJdAEH1EUjUbjsmXL0IbKbDaHw+GmpiaVSnXppZeaTKZAIGA2m202Gxi92+3GYF7G2KJFi9CivvdMHLY7dC+IfAzKwf/SyhQUFCiVSvTN6vUa5BKsVivm7MRisc8//xyGMpo/YH9nzpxJ2bYajSYcDuMCSouFRtzX72UwGK6++urJkydTT2qfz2e32zPIpK6Ac46GbTQ37dtvv3377bfxdnTZuHHjrFarJElodUYHDVZRBt0OozExvNpgMAwdOhS0GggE0N+LMYaie4xu7yn+8Km+//77LNVmqLGxUaFQIDWXMebxeOAv7Wr4IvslL8IpUKlUMDnAY9vb21HviJyXnnZBI5aChdJoNLFY7Pzzz3/iiScwRYsxhhLwAQMGZNEaUKFQBAKB+vp6tMTjnFsslkAgUFZWdvXVV7tcLpvNptfrsSAZiIT6g1MgIB6PX3LJJYMHD96/fz/2EfrEm2++OXr0aKj+aTfJIJV6bAFA80KrXAhhUKq8cQxsjszmi8PhgN+DOPshx9n0CCRJwrjtCRMmUHOWcDgMJXru3Ll4utVq5Qebga74JdBtBUGgVsXo5zlixAjIcrit0Ey1o6MDEhePy2xpIYsEnymlRS2b3A0piEG7PV0HzrnRaISGiwRRPBGiGg4fSMGmpqZcSUGWmnXX3t6uUql27tw5f/58q9WKBhwIlT/yyCMjR46kGeU2m00URRpKJ4qi3W5HXhzZBHLjoKeAwwaBRzqp2WzW6/ViqtstkjuwLLlahxyCJEkmkwmRJyhhoijCprnjjjvGjx/f3NxM0h1uSSZjLopuzH/PCaCqio5/1n018UNIIJjpHo8nkUgg0w2+FqfTOX78eDSYRo8n/JZkRob7U60OcuJ+//vfI6uLpTqRon12dkwJCrTZbG5paVEoFDQl22Kx0AHHB3gyu7oP2rQyxhBAYYwlk8l9+/bBPoMSHw6HoehkcX4Vssm3hPnIkSPHjBljNpsTiYRKpQKXQHvYnt5fo9Hg5vgtnJMsJfvz8/PxCHmK3EEBSwQnKn2j1+vRvUGtVns8HmiE77zzzp49e3CN/L0y840eC0JIWnSBY4wpFApYtcS18cKHpEKo+Wg8gTc85E96BGq1OhQK5eXlqdXqb775xuFwlJWVCYIwduzYhQsX3nnnnT6fj2oeeGrIeGfJR72LENaGmslSk8+MRuPxxx9fWloK1gnJF4/HP/nkE/SopdH2GVDV6XRI0IIVC6zg52GMoRkukyX79Ajw6EgkgvwmcAoM8j311FMhGxhjgiCUlZXltsm1IAiFhYUtLS033HADWIxWqy0qKopGo8cdd9xtt90Wi8XsdnsymUS9CksVZeKQ+Hy+8847L+2eWbtGsYmQHzh1eHHsJvItGWOBQCA7haPf4L///W88Hgetopo4Ly/v2muvFUWxtLQUc6dhCZFmCb2n3zCUO1cYY9k9mjw6IIZAILBly5bXXnsN83gNBgPnHGN+J02aRAIeqQZIiaLs9INCMpnU6XTADU1V3n77bZVKhVAFUkgEQYAwzuIVcCuWyugRBAGMMRAIOJ1OxPlsNhvCH5kVFNA8CcJ4PN7U1ATEAoEAsvfxv1mcX0hQhGPxppIkaTSaE088sampCc+F/Z1MJrMLGTgcDrwvSzWC12q1YEHQFcAzWUrpOSiQZ5joymg0IowCI56lhK5SqSSDvvuQTUwIyibVCeED0Zxer0+bap1m3QOSySR1JWe97sffGSRJAn1IknT00Uc3NDTU19eLorh+/XoM9yksLJRnmhzyhnq9HkYweerQGp8xhugdXKZKpdJms916663yRTjkmG+lDPANJQQjzbI7gIwbCHK6G85YNBptaWnBCbTb7RqNJi8vD5OdYUNgU7JQ3rF9xCkwmhGftVptMpl89dVXd+/ejeOkUqlaW1uHDx/+5ptvRiIRlUoVCoXQq6+trc1ut7tcLoxzY4zp9fp3330X3JzUFNw5C3EI3xoJBsZYKBTSarWJREKpVMZiMYRDWltbf/jhB4PB0NDQQHEmURTpBePxODWoE2WdgxhjYMH0uCycgQcF0mrhOZg/fz5LjWGDZoZmgSBLSAJ5SBs+DLIOD4pYbsPz8gabLGW1EEGmKZpdAbEzYI60A4fDAQpHBEGtVt98881kZLBUZ135yL2uAIPscdzcbrff77/nnntOPPFElloNOC3b29uBDDJ0oK5BRtJbkEmAcQrBYFChUDQ3NxuNxr1798J0w1gVOD+8Xi/yJyBoM3vOwNkhnPD6yOE87rjj4PeOxWKBQCCZTM6ePdvn86GfEdz7NA4lw/39fj8oR6vVIrZF46lBNpRkAPXiENvWCcLhsNfrvfvuu3FbjEMRZBPkEfzW6XSZ42Lg0rStYqqB3J49e8LhMBzCOKR4C7S/xv6mxVkPCrlMjugR5Dw1pp8B7gJqQKpUKsVUv49QKLRgwQKM/2WMYcP6Gp9kMknnH2jEYrGOjg6dTheLxUAEoVAICqDZbIYnAWlKkDS9Ydw4eIwxpC+ylHv8rbfeeuSRR/x+vyRJCAZUVFTMnTv3yCOPxCgyTLphjC1evNjn82HkDdiNJEkbNmxIe1DWkUIwMvpTEIS8vLwLL7xQq9XixYPBIDj4Rx99xBgbMGAAbHGlUon4Iq7BuAmEG0lC4840IY8xhjS/3u+73BFUUFDw888/t7e3G41G0sBMJtMf//jHkpISpJZQbweMhcLYI41Gg8xbYuiMMfT+RqpaL5HsC+Cc5+fng29iGb/88ku32w2XO8Kfxx57LNhrFlQhimI0GsX9UewxcODAP/7xjyxVk+d2uzFDmDEmCALEG/kPsIb4k3xaGEcDz21JScmmTZtGjBjx888/U6dlCJuKigpkysAlSAO8MkDnF2xoaEimxrfhxD333HOYf8A5FwQBzQFCoVBm7Van02EsVCgUQj8X5Grs2bNHEASSHGApWawzHKpWqxV3NhqNWMZAIIAApNFohK2cHf+hJJUsfiuHX00QEnTTh/tbA7IDmpqayPMppYbb3XrrrWazGScEebZ9jQ/NPsWhQqgS1p5er3/kkUcQ3NVqtWj3xRhDryPy9Gbnl8bP4Y6D9goEYBC88847jLGSkhLYJeFweMyYMRdeeCECJPRbxtgjjzxy1FFHtba20hxwsq5YT+bhZQBqfAythTE2ZsyYRCIBxoe8PsZYWVkZtBx4p0ndYYxZLBa5/cFS/BQdX1F9iO9RPNBLV7/8QSqVKhwOP//88whhqlSqwsJCZCKYzWa4turq6kj3whg8JGrB307BMCCp0+lQrEnL8psCMEdoV5IkLV++/IUXXkByNSw5jUaDQQQsKz6ImhOEG5DKmEwmjzzySDwaAiYYDJ511lmBQECn00ESkNoExIiQWGpqDcqfEKy65pprBEHAhEuoUJFIZNKkSeeddx4MeqLq7sRu047AwoULDQYDxqBCyv7tb3+rra31+XzgPKCEQzJVVOC1tLSYzeb29nYoyo8//viOHTtYyvHAUg6VLOgkGo2uWrUqEAjgdGDdFArFkiVLkIIkSRKaGBx0Ovch4bjjjlMoFKAW/JwfrJXYIeHXF4R9BIoeQk/vj8LeUCi0b98+zB+AUCE3OtlY6DCeq/fiXQAFvelcKRQKNEzZvXv35s2bgRiKZxljaG8Gume9kzHwwkExR+UiWlx++eWXe/fuValULS0tELqc84suuojG04NxIImmoqKCIoLEXIB/GgvIbr9I3pPnhKVS27Fc8BKbTKZBgwah1WRpaSkcdHCjUR48nFrUMBo+c/w8Go0iXVOhUJBvKjuQK4j4vHPnztWrV6P7CRR5lUo1YsSI8847D6EdYI4BsPBLU3YlRDuUDLJmqKGSXOf4jQC22Gw2x+NxjUazaNEir9drMBiwpKh+oeqaXhq1kGFarfb4449HWAGuSMbY7t27Tz311KqqqsLCQph0lIvk9/sp6R/zRJmsTe6rr766a9cupVIZCoXsdjv0J7Va/c9//rO8vFwuVDKngsupnQ6CQqEoLy9XKBS1tbVDhgyxWq0w1+6//35k2OJ6v99vsVjkuWadAecCCQRlZWXoWvCvf/2ro6OD0KNHZ2G0wUtM66xWq1GbeMQRR7CUK5sdKmMoA4wdO5ac8KSwZiFQf03XKP9lEuD/WxYhS7WTh4MF2Z6IHhHhCqlp5v2ADE6aItUkEIBFnjhxIspR8aXRaAyHw6WlpfLoOuyhLGgRadzwy+GJCPJptdqHH364tbUV3SAjkUhbW9tDDz100UUXcc5NJhM4Dp4YiUSampp27tyJ2e5YN0pTYr+Ugtmtj0KWLAOAnNBoNKiFDYVC0El37NihVquRVAwjgDEWjUatVqvb7UbhNu0sot0ws+ADB7ukRLjs4KCHAk3hgRLn3O/3z5gx4/PPP0e6I5IqEUNSqVQQh1DCkOec5oKDUaVNQdao9hFAb0PxD2Osrq6OpaaWazQauJ2HDx8OP0R2PJRzjhptysIdMWJERUUFbBSU+hiNxj179nzzzTdQgyg0xWQ9fVD8YzQaURfR3t7e2Nj4yiuvYKaKwWBAYkgkEnnssceOOOKI9vZ2OR12J3TSmf7RI7ugoCASibS2tjqdTkEQPvnkE4hJ+H7oJxnq8zC4CoodY8zpdN555504F/LCZTjVs1hn1HXA8YD4JR7X1NREQUGsj1yEdx9QeYzPVIqdRXLTb6tYKofQ194e6NewGFBEiONENhYymrAlOUwF6kpdwHOJ3VNmNmKEYIuo9wAnveqqqzB7XX6T7Fx5sIQgw/DcnTt33nnnnVu2bEHNBlC67bbb7r//fnoKEjd0Oh0CP/n5+RgOzlKOVoB8H3uzp6TS4gMWxG63Y9EoTKhUKseMGYM+AxDh4Lm7d+82m82w+Ovr63fs2LFr1y50KEa7hunTpxcVFSExBBEgsjt7BPL9lWuKoih+8MEHPFU6ZjAYLBbL+PHjqQoWuVqSJKFuj0rTqMacMQZmpJDNcaUH/Qa9o4wxzrnD4Whra0O9L5Ik4SVGh0n0xMhO11QoFHCK0rg+zvmaNWsmTJhQU1MTDofz8vI8Hs+IESPuvPNOs9l8ww03BAIBtKZqa2srKiqCYAgGg6juUKvVX3zxxYMPPlhVVTVo0KCCgoKqqiqr1YqgAGMMZlA4HEamHkQUch27g63ceXPcccedfvrpa9asAW/xeDxQQF9//fXbb79dmRqiBGFD0cTO4HA4UE8pSVJra+v7779fWVnpcDh4qoUWPZFiGT0Cn8+3bNmyYDCYn58PzTKRSFx00UXjx48nW5C6FmRR51pVVYXkIPAT9MHJoujzVxOE/8/Zf2kAj4fP5/viiy8QfSF9pLi4mEQC+E7Oc2I7A9yScDai24LP5/vwww/XrFmDtntGoxHN3kwm0+233/7Xv/7VaDTyVLPBXvZSIWatVqsjkciCBQtWrFgBx2ZeXp7X6w2FQqNGjZIkCS1yKKYINq3X6/fs2QNDCrmvMDTlBJ0TTi0/ZlCcwYkgSGATT548ORqNFhYWHjhwoLKycvXq1fF4/L333kP2BIwqnupYRnd79tlnzz///GnTpp1++unglYyx3ixsmr9k9+7d7733HkqnfT4fUnj27t174YUXohIrFou1trYWFhaiev37779fuXJlfX19cXGxQqFobW1FMkhFRQWGS2MLRFFEs8rskOxTQNGYRqP55ptvGhsbGWMmk0mr1aJa98YbbyRbMIvzRbUNiObim3g87nQ6J06cOG/ePES7CwoKdu7cabVap0+fvmPHDofDcemll5rN5oKCAnJpwrO6fPlyjByIRCI6na6urs5qtZaXlzc2Nubl5SWTSY1Gc9xxx0mSBD8kkE/TSDIDyUJgXlhYCBFuNpu1Wq3H4ykpKZk3b97o0aNPPvlkn88HTQ7aeVf3dLvdUGRVKtV5551XWVmJ741GI/ztSPRFsXgWTFupVG7atIkxZrPZ4DvR6XR33HGHRqPx+/1oowHWhNrNnt4f+bdyD0qWxNyV7ziHIIoi9Rq12+0w3u+66y6wQupf1z/d8XsPsFSQcolBHETN2MgbbrghFArB84af9Ga4cxqIXQDnPBQKJRKJUCiE53700UeK1Jj7gQMHFhUVwQRUKpUvv/wyrg+Hwyhs4Nl2ZEYvU/wW5ib64sPzVl5eDmZx9913U7N/eQty9IMVRdHn86FHJfQGWNuzZ8+m+pZegrxxPgRALBbbtGkT0KPmGgaDAfPn3nnnHYo9yBv9ALDpnQ1olUo1cuTIe++9d8OGDdmtJ96XtlVIARqUlJSUgNKgTPznP/8JhUKBQAArj3fcs2fP008/jaRBEvwajQbdNxhj48aNW7x4cWNjI7Q3TBzr/QrnFuCaxh5h8J7BYEDBH2OsrKystbVVkiTMHM2CddByiak2njzVi7K2thZ9y1C5hPIwk8kE/Uaj0YwcOXLhwoV33333iy++OGfOnKeeeko+shvtKajqF/0Cx44dW1dXF4/H0Vm3ubk5a3YHCkkkEh9++CFjLD8/X94aRqFQWCyW3bt3x2IxmkPpdrsz8A0E9ZctWwbk5SNmwdNARY899lgWk7yQl6tWq7GM+BcD+NLuJmZsNy3+srkr0r6i0ajX66UOXFgHnU739ddf0wt2k4H0hyBMJBK7d+9G56eCggI6nCtXrqQTCIaY3czSfgMasY1mV6FQyGQyyY0MlUpltVpXr17NZaNEcz4HDpoy1Cu/3w9exjmPRCJofb5hw4axY8fSOWSMFRYWlpeXIztm2rRpeBcUKmACahbCBhQGz6H85xjWCI1VqVQ6nU6kdPPUjGn5z4lea2pqMHacpfR0xti0adNyJQhBWlKq8TQ2hcYwMVlPHwJk35F7ExE1udJKxgSJUvQAYowNGjTo22+/5Z0EMD5kVoyAG/5Fgb8gCG+++aZ8wh91XQETb2trW7Ro0b/+9a+5c+eCLyC+xWShVrnkBoufNGnSkiVLeIpWW1tbeYrF5LwDfjeBSIKntKvTTjsNGgAMqcGDBzPGqqqqIpEICC87idIVXYERffPNN0OHDmUpHUipVGJVbTbbqFGjsIbyuB36yZHhBa84ZOEjjzzy1Vdf4V38fn97ezsKFfC4rJkDahYfeOABehxIQq1WYy56VVUV57y9vT0cDsuHSBMgbN/c3Pz5558vWrTonHPOycvLI2cGnUEShPPmzcNIQrEn7e+bmpqwhiqVCvyHMbZp0yZssZSaypBhABOgK0E4Z84cJBww2WTcJUuW/OYEIQ1KvuCCC9BphSb63nDDDfgv4o85YXk5BxpwRXPqMX1i5cqVNLSFnDPff/89eB/NTkLydG7xwQ1pyACSNWKx2Pvvv3/RRRdBp3M6nfIehigQnjFjBkL6SPdHdk+PKBtAMTyeGryFz5WVlZdeeinxCGSFqdVql8uFA5l2B6LXpqYmEDQZXjqd7sEHH5Q/qJcgycYvgOSQz2az2XDUlUqlw+Eg5QZNK9CciMncqlS8leaRQ5cJo9FYUFCAer7ly5dzzn0+XzgcxpyW7rwIaAxZAPiXcw4/Mx6EbYUMSyaT+/fv37ZtGzxLaGeBp1NZtCo1NxtWjsFgAJuD7cIYs1gs8+bNE0URrZGABhFwf4L0ywEOKG6x2+0OhwN+Amgbzc3NRLeiKGZh0WYgqo0bN3LOW1tbZ82aRXENGiGA3Ver1Vht/KlUKu12e1FREc2CwJf33HMP5xxnDQjTEAmyR8WsRoIkk0m3293a2nrKKaekeRQxb1Wn02HIEXgFLODOC/Xyyy8zxlDAYLPZ0JwB96GTCHqbNWsWjYHr/nlEJYnFYqFTZjAYampquGxmL08RW4al6EoQbt68mdgvejsrFIoRI0b85gQhcZ8HH3wQigZN9IVpghIo/ls1B9P2Jh6Pt7a2JhKJtrY2xtjw4cNBRg6HQ6FQPPvss5xzOTfJOWCtEonEzp07jzzySJwBDHynQV8gCyS1gpoxwPqtt96iCZw9JRQ5SDLgso3D7E2Qu06nczgcdrsdVROcczE1E0p+E0Jjy5Yt8sNsNBoNBsOll16a9qxeAt0E6/Dhhx+SDQeaBOZICCQnJL6HQaZSqaDGyX/CGFMoFOAmqLJHgZfVav3hhx+4zC7sPBqmM+ACeK1poiclAeIpGo3mrbfewvVtbW2jR49mKS8cuhYUFBQUFxejfBDMGgE2nU6HQCN0fyim4CAff/wxT2mueG4/K6ZyksCj4RBGQbrVanU6nXl5eS+88AKuRzeAnDyUAOerra3N5XLt27dPTpN6vR6nKU3w0PfE32AjMsYuuOCC6upqQRDgpSTLLJlMkg2UtZYMyxKd4Sg9GGYoiBYncdKkSWvXrgVRRaPRtWvXLl++/PPPP58xYwYIA+4Bp9NZWFiIz+ecc8748eOJsHHDBx54gKckd/fPI8owgBiwysvLW7RoERaBwiWH9EB0JQg55++++y56KWMvMOnvNycIOed+vz8Wi7399tssNZcLS0ztkXgqStQPyGQBgUCgpaUlkUh4PB40jvH5fLfeeitIbfjw4dC4zzzzTIRq5JOUc+5igizBHNHux5bVavV1110XDAYDgYDL5eoNAsQySJmVJKmhoUGSpH/84x/g0RQgsVgsGK7EOUfL77T7EL1u376deD18enq9/tNPP5VTc074MlzKnHNBEG666SYmawYG8WCz2QYOHIgmHSzlGho1atRDDz30zDPPXHPNNTfccENxcTGOHJNVdwF/WDAsFSXV6/V79+6lokP5v5kBBcgQ2PX19cCQ+l2Vl5dXV1fDJQCeBf6r0WisVisktMVigbMIxisVj+NWQ4cOJUFeVlam0+kuvvhi0C3c5r1f6p4C6AExUc55OBzGCsu76zHGVqxYQT8hhHv/UGjkkUjE5XIdOHDglFNOKS0thYeA9hfKEBJBIf+gW5CZKPfBKBSKkpISm802d+7choYGnLt4PJ5mame31FgiVDCPGzdOp9Pl5eXJtx6pmHQShwwZMmLEiAEDBpCeSj5/9BbXaDTk36qpqYFiiiIKfDlu3DiENoWeTMmORCJjx45FMiflKJSXl2M1xFQ5StaCEF59g8FACiKw/S0KQux0XV0dQtDUAuqKK67ABb/xACFpc5xzv9+/du1aeOFBZHgjrVYLNwiAdHme0d7PApDbFgwGt27diiNKew9qQ8UPMXeEiOx2OxS6ZDJJwcssIE0KiqLocrmQAvDYY4+ZTCar1Yp0dpyfd955JxwO19TUdCb0tPvU1NSQ94+QX7p0aRpB90YWppmDnPNZs2bhQTil+EDJAieffPLixYvb29tbWlownjsSiUD2uFwuFD6+8MILDzzwwHXXXXfWWWcxxgoLC/FbuFXhZbrrrru4LBdJ6jQTXA40pJSi0dFo9Ntvv8WpoSDfn//8Z8653+9/4403WKpZuclkMhqNRUVFCG2C5cGDx1LePMZYaWlpGuXk5eVBp37qqadqa2vBqZuamnKY5HVIIGIAqw0Ggz/88ANjzOl0IsxsMpmKi4tNJtPatWvJksBy9QZPMZXTj4LCWCxWV1c3Z84crAwkMfJ0SMI5HA74n+VrSJ17TSZTSUkJigvxpUKhGDNmzO7du/FEn89HxEBlGz0FitFwzp9//nlClTEmL56BSwCjCqEkUS9fAFEsQidDhgx5++23MaONrrHZbAhDHjhwgARh92XhP//5T51OB0woUI1aIM45tvKQ69CVIET1JHEMCtP+FgUhiNXn88GEB2VoNJo333xTfuzTplH/RgAEV11dLUkS9uz222+Xkw5Y5w033AABI6YGPeOH8tzR3EJ1dTUOIciaVD+aA4fPIDubzWYwGJYuXUoL3lNCkbuP5AwLPGj79u2DBg0CFeJZarX6nnvu8fl8FJmgCKv8hoQGehMT5vhw8803px28rMUhkZYgCKSSz5w5k3VKvi8tLZ02bdqWLVsOHDiAvfP7/UgkiUQiUNo6OjrSohrNzc0YGsVSFoxCoXA4HBBgDz300EGR6Qxpvj4EmN98802W8i8hn3bv3r2SJEGe4V+LxUIJhKWlpQ8//PDOnTvb29vXr1+/Zs2a+vr6DRs23HbbbVdffXUaB0Q7TVRZ6PV6iNhoNArZ3z9AxIDtTiaT9fX1Rx99NJON5oGwf/HFF0VZULD3livMERr36vP5/vnPf0I5QEBBrVYXFBSkqQ5M1rGPAhDAVl6rYDabrVYrVKtjjjlm/fr1gUAAw8jwdEpz6ynaFGCLxWL79++/+uqrb7nllssvvxzPlad9oamvPKQNE5CEB0xbk8k0cuTI3bt3JxIJr9e7bt06DHyn+xQVFe3ZswcJAYKs43xmPKPR6KJFi8CmUAOq1WqNRuPjjz/u8XgkScJbSJKUOdCbwTX62muvkXHFZN1Hf3OCEHFa9IZA6h0IyO/3kzuUgsn9gE+PgPT31tbWZDJ51113Qb0CGZF7QZKk9vb2jo6ONLHn9/v7Qq2OxWJo5iv3Q8oFCRkQyJvHebBarQ888IDb7a6uru5pssxBpaAgCJiPM3jwYAg/BAWVSuUtt9xCOVCBQAAMK4NrdO3atYwxh8NByqxSqVy3bh09qJd2IeL8nHMMYsSXf/vb3+hZjDG73X7LLbds27aN8EQYhvJyoQklEomWlhaXy4VsW4wki0QiBw4cmDx5Mk1WQ7iorKwMmfc7duzAPSnX6aBAugLeEaWfr732mnxz1Wr1eeed9+WXXyoUiuHDhysUCnTfhlCcM2dOTU0NikfJcgL+uGdtbe3s2bMpOMpSRU1Go9FisQwZMsTv94uiWF9fTz/va5DTFVyU8iY46FqA0hFMvSam2fs0NGKpGFaKZFG1Wj106FCDwSB3dV599dWfffbZzz//vHXr1urq6q1bt27atKmysrKmpmb79u0//vjj9u3bDxw48OGHH06ePBk/gRE2ePBg+I1MJhMSGsPhMF4B5yILQYjDizROfIMykvfeew/HEAjk5eVB8FBDXWr7wFJhb8DIkSN37NgBPSwcDl955ZXAn2T8bbfdxlMpHd03CpPJ5NNPP40ltVqtkFVms3nZsmUImVEUKbNR2JUgbGtr++abb1inKXW/OUGIJrmc89bWVugF1K1/x44dYMc4b72Pe/cRoGIpGo1OmTIFq1xcXIxqBJVKpdPpvvjiCy5LY0GZNo50zpEhDy0mMyhTg5awpMQrrVar0WgcMmSITqczGo2IadH8xTPOOKOn5RNpcovkE+f8qaeeIs0AwXakifJUVg7ukKa8p91w0aJFwJOlSgnB9dIEYfcpuzOguBOf4eHcs2fP0KFDKyoqjj322FmzZq1bt44uoDgi5zyRSECFT3suSVZ8EATB5/Nde+21kOiUU4NlP+ecc8RUFkwGJPFEKTUvCfi89dZbcoHNUtkQcIZj0Z577rldu3ahQpQEGC0+ZD8cgLj/xo0bHQ6H1WrNz89Pa7F24okntre397NFKDcHIfupDgRUrdPp3nrrLehetE2HzDY8JIClRiKRUCiEERMkHmw2W1FRkUqlGjRo0M0330wLIqeNNJIgBn3//ffDJUCyHB/OOuss6DpyQZgF/tAAoLLQtgIWLFgwfPhwsvkwEAa+ZaQdGQwGWlX8e+mll27fvp1zji7BP//8MxGD2WwGgd19991cJgi7GSmMxWIPP/wwcpXR5N3pdI4ePZr+t/OSHhQyWITvvvsurTCCAqeffvpvThCKsnwK+BJhI6vV6sbGRiLoX6tuiYDEGOfc7XZj7TCryOVybdiwYcyYMYgkIcu/sLBQr9fffPPNkIKZAz+5Ba/X6/P53G733XffTQEt2Nlms/mss8568cUXly5d+te//pU4CFI/qHi8uLhYp9O9+OKLXGblZI4d4sRS8vfevXvxq9raWjBlo9EIw8JisXz22Wd0WuQyjCSHfN9RVlFTU2O1Wkn9xHu5XC5RFGOxGEZnYFMkSUK5SBpumcm9K0EeDoehDSBo35t9wUu53W54MmlsOvEUZI1nNmLkVASNinP+wQcfsF8CRBfFrjCeHgj4/X4YsgdVICRJgpUZjUbXrVunUqng4QDCaBSg0WgeeughDLfrzYJ0EzAuKu3Lxx9/HFKf8jVUKtUzzzyDtCMySrJ+KBXzBYPBaDTa2toaCASgrMtVDeSPbN68Gb6TzppQBgWRAo0Ai8Vy1FFHqVSq1157jQJjfVGjAl38p59+uvzyy6k7GkuNuUAVCgSG0Wh85JFHtmzZgikQ+Hk0Gn300UflxxBe9K+++io7+/uxxx4zm82lpaWo20FW58aNG+EOTCaT+JBZBGQQhG+//TbxDbA4h8PRUzrpj/IJzrnb7UZbHZ1Oh7Y6WFny2PzqgpAAbJGnqowTicT999+PMC+yzFkqXHHnnXeuWrUKThWxv7JeE4lEY2NjR0dHNBollyPnHJ2gRVEk5tXR0fHzzz9PmDChoKCA4gFgoODRd955J09t0CGlOOXx059tbW2c86VLl8L1T2GJV155BaWK3dHFRFmMDYhRAa9Wq21qagJtUOU4ANnnMK3C4TBeObMfryvXLvqqkIs4M7YZANIlGAz6fD6/3z9ixAjky2BNQDaPP/54W1sb4qZd3YdCyzyVQZBMJt944w0MuMDd0P5Dp9OBDo8++ug33njD5/O1t7fDD480/QzhVRBPPB6vqqpCFgMEdkFBAYyYCy+8kKpU+xTk0gVvDV/Cddddx2QeDnDkyy67LFeCkIBu8sYbb6QlxSDX6dlnn21oaMgsCDvTFcgVKVSISlCNrM1ma2trIydkBjMoC6CKVc55Q0PDihUr3n///TfffJNCwnl5eZdffvm7777b0NDAOff5fDQNhqfyFjGXET+BKC0vL89OCobDYUQ9mCyqqlKptm7dSivWnVTqrgShz+e75pprSJNDGcm0adN+c4IQSDQ1NaGG12w2IweMMfbwww8jgULOvn9FoL5HWHSXy9XS0oKMLCIjxlhJSYlSqRw0aFBDQwP4DkjkoIpt30F7eztauXPOo9EokRHazaDxDfBZu3YtNQmDSmg0GvPz8/Pz85977jkwZVyZgWIgKcVUyw8qhDrllFNAgoWFhShhBAOVu1Dkdgkxd7QvwedwOJxWs8UYO/3003ErXNMZN6CEsUf8ULJcLgnkPAuxFsRXsvO4ykEURfCUqVOnklWh0+kwtGvw4MGbN29G+U1XdwAFkgNTFMVgMLhkyRLSYEjhgMS67LLLlixZEo/HvV6vy+WiBIqupCBpTghJxOPxSy65hNYcNYhWq1Wj0Vx11VX9Rs94UxAzMHzyySflOj7giy++yJUgpN5+ODs1NTV//vOfoYcR14bQQp7UIQVhGl3hEd99993gwYMpfoGAsUqlqq+vF0Wxj2pU4N7gnKO6gLQueF/Qy5fL7FEM1MQ14XB4w4YN+fn5NEQFBamffPIJzzaxXxAEyuei3hRwpBHAzZOFa/S5556TV0NCLxRSU9J+Q4IQeLS3t2MhUHmDWO60adMwZZTLPKh9jU9XgD2GNkq5D2eeeSZjrLS0FBVCBQUFKAxQKBSoCU3jaP3QszGNVuSNFtF2svMaSpK0f/9+k8kEtRquMNCN3W5vamoKhUKiKPr9/u7jDyP4k08+GTp0KAXDwO5XrlyZWXkE0ROT9Xg8lZWVixYtMplM0MER0pg6deoXX3yxatWqlStXrly5ctWqVd9///0PP/zwww8/fP/999gvcjHhVofEP41ngfnSaek9+UmpJrT//e9/YYgj5xATBBljGzZsyOxFp6gkPoNbffvtt/ISafgzUc3W0NCAu/l8PnI+o2w/TQrKn4Lvg8Eg8mAvu+wyaHuovqcUif4xCqVf1holEonq6uoLLrgA6Q/QrgwGw/Tp07EyORGEIFH0aeOcL168WKlUIhhGWu/gwYNRs9ja2tqVIKRXSKMrsDWPx9Pc3Dxw4EBVahg97nzXXXeFw2Gv1ytXX3ICgiw1AYKwc/gtEonIXbJ4NUoiQ087yjkA09i0aRPPKoDV2tr6448/wmlEEW6tVjt69Gh0m3O5XPLgfVfQlSBESipjDDY3Y2zs2LGgqB7RSZ9Pn8BUBOTIJBIJnU4XDoe1Wq3BYIB7B23gsUZiz8dw5Aowpc/pdHq9XmB7/fXXr1q1Sq1WNzc3YzQXpvPk5+ffeuutEyZMYLI05WQySZ3u+hTwiGg0igJqlUoVCoWQBmYymQRBADVQc33GmEKhKCsr2759+5AhQ5xOZ0dHh9Pp9Pv9JpPJ5/N5vV5kB/BDtZZHZhMILhAILFiwYMGCBS0tLfhfdOaUJOnKK688+uijMTii8xw1KdWVjTFmNBpVKlVra2t9fT3GJaLLCebsfPLJJ++++y6IR175hOKEW2655dlnn41Go+iqIwgCBl9kbjIgn2WDD9SqmPV6wAXaoWGK+rnnnjtz5sxHH33UbDZzzlHwhIYj1HYkA2A0TzKZhEN+xIgR0WgU5aGBQMBkMqGs4uGHHy4pKaEKGcYYpvXSIPXO64/2/3hrzjkSIxcuXGixWN555x0Iwng8jmWU9xnvI8DoDLwvxhJ1dHTcddddX3zxBdqKYh6hJEl/+ctfcvhcs9mM2WF4RFVVlSRJra2tDocDWrter1+yZMmJJ54YCoWKiooSGWcXd6arZDJpMBgQrJo4ceKzzz6LkWR6vT4Wi3300UejRo2CBw+zlHP1XvF4XJkCKiFlvzSs8dZQs5BDhxpKrVbrcrl++OEHjOvC3CucR/TOzmLKB3hFLBaz2+2Y6ajVagVBCIVCUKARVQHnB3H26P6YCYNWIRhFd/zxxzc1NVFzgO5CTyV8FiBJUkNDA84etYowGo1vvPEGl6kqv7qDNBAIHDhwgHO+YcOG888/n+ZWI+cYy2W327ds2eL3+yVJwkhezjksqtz6+jMDdCjyi+JLueIjb+WFfjcHDhw46aSTqJEgS4VA/v3vf/NUgP2Qz5U/Ii8vLz8/n1YG0hQ6NU6dIgV0MqEVohKOpaL31MIR02QIPRTh4jNlGrNUxxbMtRdShYyojugm/aQFzHIIMJSxI36//+ijj5YzI5vNtnXr1swPJSpCIg/ZzfLm/YAjjzwSiY7kN0b1KsXdD/qOclMA4XCYfTt27GCMqdVq+fCBXC5NF0CRXXK7oaeJyWQaOHAgS6Xdq1QqlE7mMEYIxQUG3OTJk+HBxrlA5X5DQwPQg5WfwSIEpLlJsbwtLS2PPvoo5VSjrkaj0dx0002oL6KkhBwCxYCxVsANNp/cA0nOCeTNBoPBhx56CPY3eRptNtv1118vHCxFtpsQCoV0Ol1RURGFzBljQ4cODQQCyMeWupEj0pVFiCogEvMqlerrr7/mPfcc9PnwdEmSwA2hoqI8CIOnTzzxRPmVnPN+sKi6gkQiYbFYCgsLX3vttfvuu+/LL7/EwLZEIlFSUuLxeJRK5bnnnvvxxx8jiAImLqUmVVJr474GWE6I9lHrEMYYQh1yfKDlMcYMBkMikSgqKlq+fHksFisoKIBKiDaAGObCZKn5GZ7LUoPdGWMej4c0ZbVaHQqF8L807oCITM4daIAwkBcEAY2gJEkKh8NIKAB6/z+BKpVIb4PqirQOTGR96623qFEF9bjqzhoe0vLjPZ+7BpUZs+OhFVmt1ilTptAuMMZwODPfR6lUEtPBq8F6vvfeexljoVCIWsjeeeedaCWD2Y2MMUEQwMXk+Ke9rMFgAAeByYLWXC6Xy+PxMMbgIYfyB9ulp+vQU5DnE2FxKisrUW2cTCbtdjvm1f3xj38sLS2FrZYrMBgMmOmqVCrRICmZTBYWFgqC0NraOm3aNJ1OB351yF0DpPktsLzFxcXXX3897B6PxwMaEEXxuuuuQxY95ESuXgqoIr8d5wU8IRwOI+KAzYVQUaRmGqvVahDbCy+8gIxiGOJ6vd7v9x9//PEqlcrtdmfhMsHY7SuvvNLlcqEBN763WCyYZ240GuHZEmXTPbsP7e3t4ITUHr20tDSL89vnSh+0Y4/HQ3aVUqlEmIpqm3Dlr2sOAplt27ZRahP6zSMSo9Fobr/9ds45vKM8pU6SktJvtRM8Ze1hYem5acqaHDcaNxgKhcilzlJqlF6v37x5M8ypDMNQpFR/bSpdYDLXGVqoULCQUrQ1KdCmANEyrVZrs9nQuglCEb9FhROlluGE4FSbzWadToeTY7fb0c8eNENmU49iGF1ZhNlZivJfYWvq6upQCM8YQ+oBY2zNmjWHvBUqO8GXoTLH4/HFixcjhkcb9/XXX8NBCocEl52gzPYulgsRZXwjiuLGjRthBEDtANr9U1BPmZOCIPj9/okTJxoMhiFDhuD0qdXqwsJCtKnjuYsRykll5cqVNIQLMsnhcDQ0NMhjad2xCAG08oh3+v1+QRDQjgoLi03ct28fdEpJknrT9TAN5B4FfIA5SxdQ/wf5r1pbWxsbG3lqqi0WAWV/SqWysrISudlZ5EDgBd1uN+ifKv1ZalCUx+PpToi0K4uQpdwYqJJkjO3YsQPpQr8ti1Cv1wuC8Nlnn3HOOzo6hgwZwjlvbm7W6/U7duwIBAIajQY6b3YaQU8BGpMgCPgzmUwiL0atVi9fvvzYY49NJBJqtRphGJPJhBhVWVnZqaeeyhgzm83YNqTMAOdoNEo6Hd2ZMSZJkvzPXAHaOFGNIL5MU9bkcTUaAJ1MJtEwgmrwFQpFLBa75pprWlpa3G63fJxCGkBDhIKpUCiam5tvv/32cDgM+tPr9VCfEdNKJpNqtdpisSSTSbPZTJEzrVaL6eoajQZcBmPbNBpNOBwGJcRiMWAO81GtVsdisfz8fEmS4vE43svn8wmCUFRUpFAoWltbEXWAPdT9ZUwLPR7y+0PeDUtEau/AgQMRFGGM6XQ6UAIIJoOlxTnH/sKBjEl4KpWqsrKyvb0dfktknG3fvh1l0Tj/nHNyupBTuvP9EQrC2iIbBekVCNvgT1ALyyomlAUYjcZYLAYlTKfToduZ1+tljCkUioKCgo6ODrw45xx6FSyYzD6MzCBJEvaLMYZMBahuWMNQKESVmpxzlhpXmbakB0WAVh68W6FQxONxhAzwxGQyabFY8ESNRhMKhajuvvcgdxLiA6r36AIwNyQ9UPseSZLKysquuOIKlvIwwY0UDAZvvvnmYcOGSZLU+fW7A/gVYqU6nQ6OE8aYUqmsqqpKJBIOhwN7zTJa3mBWkiT5fD7681//+hdjzGq1QuIqFIpzzjln5MiR0Jh7RCd9LggZY2q1evTo0Xq9HhnDoIlTTz115MiRcLJpNJochoszg1arjcVikATIcGlpaRk4cOAnn3xyzjnnlJWVwQsXDoeLi4sxw/2ss87auXPnxIkTd+/ezRizWCzQMlB/JoqiwWAAHwG5gLzAa6DU94+MPyjgYOv1ekmS4GiaOHEi5UpwzhEL2bFjR2FhIbGGzgCJSzN9SktLTz31VLPZHIlEtFothsdiLrEkSYj2geiR18MYMxqN8Xjc6XTCC8oYU6lUiHQiqYyn8iQ553CI5eXlxeNxk8nU3NxMdZzhcFitVqO19L59+4qLixHmIffsrwU0CBduPcZYIpFAagy81qS+HNKF25njTJ8+/cgjj4Q3G8GVJ598MhAIeDweUBrUMmgSGe5M0VlilMAQOh8hJkkSiiiyWIcsADsLvaGyslKlUgUCAXCx1tbWiRMnTp8+naUCKzkBEJgoirFYrLi4mMbGklIei8XgolcoFN10jcohEonAFQk5+p///Ef+vyhXYCmGzrNw5fUcKIjOGOOpoIPf72eMlZSUrF+//oMPPsjLy0P0BE7jhx9++Omnn8buQJL19KHgAwqFAmECiolIkoQeoZFIBDPLoAJmvhu0t0AgEIlENBoNOAyYCTRmmCskbrsPfS4IQUNlZWUo0vT7/QhCDB48WK/XFxUVgVPjEIIK+xTAdvEZSzlo0KDFixdPnTq1pKSkqakJ/nGHwxEMBrVa7Q033PDVV1+pVKpEIjF8+PBQKATHOvgyrB9kmlAPVZ1OJ4oiNJc0daz/AVQCJBljSqXyzDPPlJvF8Xjc5/OhOl7eWTENSFnWaDRtbW1I08B59nq9Op1u9OjRyWTS6/XCiRSNRu+5554HH3wQSR+gXVgeYGfw/lFVLOpAKH9VpVKhp8/f/va3F198cdSoUUOHDjWZTBT1rKurmzdv3lFHHeX1esFx6Oe/FsAoJGevJEnffvstfLnJZBKGAmRkd8LJaYmso0aNguWHEK/NZvN4PFar1eFwQJ9gqday8myXzkB5TGlzhmOxGNaQ/NKBQKAv/BmdAYsDHvff//63ubkZZoTJZEJs/rzzzisuLpYkKYexNPBKlUqFiROiKDY2NiYSCcT20nw5WZie6LgbiUSsVqvH41m/fr38PlA+KH7cy3TlbgKkOxy8qJpljFmt1nA4HA6H161bxxhzu935+fmNjY0VFRXJZPL3v/+9VquFUpK1/Q3iPO+88xhjMILx/YoVKxDZYYwhryfDTeAQCgQC0LY1Gs28efNee+019MADVQuCgA4GaX1HuwWH9vL2DpCk1NjYOGnSJMRp4e2xWq0ffvih1+tFghMu7reh2C0tLdSyC41jWGqEN5O1VHjwwQc55+iMJUkSckoB8EHjMzUhDIfDzc3NVKCGXJtfZdK3HFAsFY/H29raEonE/PnzafdB3MXFxTt37jxkZxyKR8I5HAgE3njjjQULFtTX10Oaylud0d0aGxsDgcDLL788f/785ubm//3vf9ju3bt3v/zyyy+88AKaHH711Vco0yQhoVar//3vfydl4zIwD3Lx4sW7du3Ce1Ff736o4OwOUBNk7DtLVdOzlL34888/Zy4cBsjTiwChUAhj53Afm82m1WoXL16M6+mhPUWYMMH0D8YYfEo4CP0WI6R6vuOPP54yOFBdc9999/FUhLuPErOj0eg555zjcDjy8/NplAS118gaqDwOiUiIepKaQlOZ0OY0B69xKCB3ixwwcCMWi914442MsYqKCovFAho7//zzearBFl4ni3pH2tmPPvqIMYYO4CzlgH3ppZc45y0tLUAvQ2weHIynItz79+9HDoF8Ao9SqaytrYUi3lM8+2kM0/79+61WK3pRlpSUIG9CnjgA/2E/jCREByzOeTgcbmlpufTSS1lqHpvRaISz/uijj9ZqtTNmzECLSy5Lx0D3UbqbJEmNjY1Is5YkCU0oIA4xxfCgxNfPgHi1lBojtXjxYpbKc4Hefdppp8FQy3wgiUwpJxtL4XK50hJz5C1CAPS581lKJBKBQIA6y8jrDerq6tLEKk8l3FOtNzVh+S00bYfq43K53G43Ih9keCEbaMOGDVDMu3MruSyMx+Pz58+nUcAQEna7XT6lFspZ9zN9qABfkiSYLOj6hHRHhJazW4ceAQ23WrVqFUsFJqE95OfnL1u2LB6Pd3R05PYceb1eYvHbtm3D49AbGqpYR0dHFopFGtTX14fD4X/84x+Y+QzXBWPsiCOOaGlpQZOXHFbTZ4A0MePz+VpbW9E/ZM+ePTThnYZRDxs2bMSIEbREQmpUck+fS3f46quvcBCQ54x0hLy8PEEQwCp5xqFaJNtaW1tjsVhVVRWTTfAGXHDBBfA/ZZHs1h8xQjjB8/PzsZqBQMBqtSYSiQEDBsjjZygu7GtkdDqd1WqNxWJ6vX7+/PnLli1jjEEGG41GQRCGDh26Z8+eadOmLVq0COEB8Av8HKOcKQwD7bW8vBwVwSgngLCXR637weXbFQSDQaPRCAMF0U2UMMM/yTk3Go379u3buHEjRfUOCm63m9wp1CMDIXen06lQKBC+MhqNnHOFQpFMJsmXgpQofAbHkccqkFaDtAKEKGKxmNPpRFUAgq9y9zKMlby8PP7Livj+8S9lBs45TVxDRJkKWhQKBVpZKpVK+jIDyGvh8XnGjBklJSUsNXlVo9H4fL4tW7YkUu3CYcx1cx045wguiqLY3t7+7LPPGgyGYDCIcnuDwQA3b3br0H1AJwSNRiOK4rx583BYkGDCGLv//vvPO+88URTz8/N7kxrTGex2u91uR2aQ2WxOJBIGgwF9WBCm2bVrF2GYRYwQyTgVFRWxWMzj8SBqgPfSaDQnn3wycp4RLMjhe3UF8ldAkoTNZrPb7T6fD9OzIQI553q9fvDgwfX19bNmzXI4HFDlUXGRRZQH4adIJHLccccNGjSIpXgOksw9Hk9DQ0NBQQHcJxlCM2iy4fP5ioqKdDrdjh07kKDAGENcPBaLHXnkkeBsWfDbPheE0WgUcemzzz4bxI38QK1Wu2HDBsIYRy5DskauQK/X+3w+vV4/d+7cF154IR6PIxEUYiAvL2/fvn133HHHzTffjGg52hZgh6DBYdI3qpgZYxaLZdWqVY888sgNN9wwbdq0adOmLV68uLW1NS8vj3pc8X4Jhh8UIDaQiiKKYkdHxwcffIBCN4hqJFy4XC6UvnV1n/z8fKSMohMbYnuiKKpUqo6OjmQyifJ85HEgLxR1WrgtulcwxpCHTfwa9RgslZ5H+WOwAGh6GapWWIpCkBSDHyoUClTFUfrxrwJwhiPny2q1JpNJKtAERCKRo446CnZhN3m6XKQJgmA0GisqKoxGo9/vd7vdsVjMbDZ3dHQg4kCJJJT/mRlIrRFFsaWl5YMPPigsLMRNwCidTmc/0C2CqXq9vrKyctWqVUSBcHyNHj2aMYbB6DnMlGGp3FoUZVqt1vPOO89gMCDgZDQaJUl6/fXXoRdmIQUZY5xziBa1Wu33+1E2wDmH1lhRUSEIgsViwUyYfqBbymBgqUm8wWBw3bp1EydOfOWVVxhjfr8fmRBOp3PXrl3ffffdtddeC9kDOqGOqT0CqiouKSmZOXNmfn4+1V+hMgqjWnBwMp8L0AljLBgMfvzxx6FQyGQyobEUlpfYRTZpGT01IbMDQRBmzpyJ8aF5eXl4YZVK9cMPP9A1/eAX5ZxLklRbWytv1wTdhNZUp9NVVlbCy0R9qwlEWbt0INzU1FReXq5UKmnsJGNs+PDhzc3NuKA/Swy7AlQ9omCLMWaz2eRkfcoppwSDQfhJMoC8HCetpopS8Ol/OefBYJDenTwbyC/lvxxVGI/HKUZFgHwQRNQkSfJ6vXKPK7ZAkvXt/HXDhMANeQec882bNx9xxBHws1Hy4YUXXoicoB55+aguLRqNXnXVVZRqj1jOyJEjESiVL3V3YiTRaBQrFolEVq1ahQKY4uJiooqXX365f0gXvu5FixbJJ+SBP3z00Uc81ZKb5/QoxWIxmv6DFcCj7XZ7WVkZY0yj0SA5IGv/cCAQ2LRpEyVpo1EONu7zzz/nqT5EFOfuB6Dx1Hv37p0xYwZLldLDNYpCUo1Gs3HjRp4iJHkQJAvAaQV/iEajJ510Eks1h8JqGAwGuEZhQ3d1n0Rq5iJUwGnTpjGZBQlb87rrrkMpahZe9B4Lwp66X6koFaTGGCsqKkKA6sYbb5S/+SEZGQqMQLhAI4MTP40pIysH39x33304ZlA/S0pKkIanUqmmTZtWW1vLZYxb/gix0xgEXDZu3Li8vLyysjKIQ2hAxO8OuWLySnbMRklbDTylMxegOwMlQsztduPnaQyxo6OjtrYWrRwoAW/EiBH79+/nfZCpRAOSBEFAJzD+S/lHyCeTyb179+p0OvTaAEsCJxJSjfxxMQ0NoH2hjc4cHgPlBAIBl8tFkzSg03QztA4PDD1CrgogEEJ8c+vWrTNmzICrHzV/mE7+2GOPcc6zY3wwifbu3avVasGwKPOzoqJiz549aT3TEwcbrwiEaaYrvty4cSMxFBisRUVFN998cxZIZgHgbqgoRfYAYwxk8NBDD6FPGL1+Dp8LGpBSo4+3bt0KQw3JLFDWp0+fvnHjRlSag5jT2hTIx+oSnqIoUpLRmDFj5NYJRpnOmjWLp/rhdYdlpzFG+JnSRtrC8wTRnnYKIpFIW1sbxo3RwLgJEyYQB4B/jl786quv3r9/f3ZtJQ4KdB+XyxWNRs844wyDwUDtC1Qq1dChQ1999VW0F3C73fAq4Sfgotgm6PHJZBJ5PQRGoxHII0WD0mp6BD0WhEAFie+Q0jRBIjO8//77CMJTu9EZM2YAb5zJ3oem5ZBGrxjx6vV6ly9fPm7cOKPRiMM/aNAgsBWr1TpnzhziEbA/xNS8EnymXFAu01Aikcj333+PLSkrK+upIMTSyc0pVDIQYHflfSI68ziysbAXRAdIIcGZCQQCb7/99uTJk1kqJA5/wiWXXILXkU9jyQkQkl3ZKIIgoF+r3+9fs2YNXLU0CgftztOGduJN5XjK9YPMbMXv9xPr8Xq94XAYiXDyFwdKNCIKX5JFAsAK07YCAXr07t270ThJpVI5HA7ERHU6HSa6CYKQdRsRt9vt9/sxF4wKRaBZn3322R0dHe3t7bRQmE6FbcVUJmgPoLdgMEim9umnn84YKy4uRk0bwpCtra3JZBK019cAsUFTLaEll5WVbdiwgad2JOcPFQSBRpdAykI/prxcFN1iKeRdeLiskS+KieV0In8E3E7YIKvVajabCwoKKioqlixZQu6N7kBmti6mhprx1ImTHzev10upKBh2wTk//vjj2S8B8w/ACdva2jqL/KwBpdicczTZiUQiM2bMKCgoIDEM40Gn0/31r39FWju9NYZGgUohHd1u92233UYcTO6qXbNmTXNzc9YcLGeuUcgJUFVSBqhZ4ZzfddddLDXXAy9w3XXXcc7J04h1F7oAOXMXBAEFMZnxwYf6+np8uPfeeymXnQDi8LXXXvv4449B6x0dHRk8MHRbmgqLOBljbMCAAUw2DaT7FiGZMl6vFwZ0MBgk8k3Ltsfrd8Xx5c+inEBI2crKSix7YWGhxWKhXkePP/44tN26urrMePYI5NYqfU5bCpA4ZulJknTVVVdZrVakk4DKa2trE6nJavQTui0+kEbC+cFbXhEgZ4Fz/sUXX7z44ovLly8n93UymYR4k0spomf5K8gtyIRsWDEEdmVlJerh8AogtiFDhjDGPvvss46ODlyWhcYKt4Hf7+/o6CgvL5cXC6IlysKFC6k/S/cdsOg0BHeI2WyGDJg0aRI/WH5vXwDal8RiMXJUwBz8wx/+QHZ/zs1BAKnv6PtcXV1tt9tR3MxSzb4ZYw888MCePXsoiZfLCAN/SpIkX6tAINDe3n7VVVexTjlcarX64Ycf5jJzvDvCRpBNVqI9DQQCIF1Kn963bx8+UGZ7W1sbDg7oYevWrccddxyYFd4xPz+fCg9AsTfddBNPHcxcWYQAURShyW3fvh1kBn0RQuGoo47C54aGBpKFaEcO7S2ZTO7YsYM6K7FUfAc1V0ajEcwzEAh0MzSQBj0WhMCpRz/Bi916661gDVCOtFrtY489Jsn6jneT1snDdshBrPDI4c8vv/xy1KhRIM0jjjhCLgudTieabYqi2Nra2tbWJkkSjEh6ItEEzcKVu/g+++wz0lB6KgjTfLyg4OXLl3/66aek3RD3JF0hmeooD4OPLEKgmkYKqGc///zzzWYz9FOkyKvV6pEjRzY0NFBBfW6N8jSAisdTqg9OGplotbW1mIon5xr19fUIZYVCIeofSAuVSE3MSHajCyLyyvBcUAJj7Nhjj/3oo4/gMsJlUPDRwk34ZcZ5MpkkG4LQQGADyKxatSo/P9/pdJaXlx911FEYzQFmOnXqVC4T51mEw/FoOJeeffZZtIbR6XRqtRoxLcYYXCzyBSe+mWbUotvkmWeeabVaMYUVEzfBX3BqKJrbp4AV/uGHH8h4Akc+6aSTkJmFy+RrnhOgADZ22e12S5L0/vvvYwWoInv8+PGMsfvuu6+mpobG2MrDLnRIqVr3ySefxCuQ0QPjEuz7ySef5DL3OOWdZcaWnPlgksT65GoiTUCUb7SQ6sk5a9YsiJ+ioqKjjz7aYrFgu/Ev4pePPfYYNHuebcfdgwKN/kakXxAEn88nLxBAn0Wad3HllVd++umnK1asWLJkyUsvvfTee+8tW7Zs7ty5aGBSWlqq1+shRCnQ+N133x04cAD1iNnlmmRjEVJ5EzgyVHK59UbmIDwzra2tkiQ9+uijjDHqia5Wq7/77rtIJAIfjpjqIp3sAvx+PxTe7hf5hkKhtrY2URTnzJmD5Vampk2WlJSA1l999VVcLJccsViMYlppBpnc8RgKheBqEEXxggsuwLCYLCxCauQdj8fdbvc333yDUM19992Hhiw8RfFIHknTRej+mPslCII8RihJUnNz86hRo8gURt/3kSNHHn300ShmJ6u970rxqMo1Ho/7/X5iH6FQCE2l4/H4NddcA5Odenk3NzeTdIe7Mu22brcb5/aQznkMoAEOgwYNgnGMuZjHHHPMgAEDrr322pUrV9bU1MA6JL8ismqhaXLO0VQhLptyxTmvqqp68MEH0/q+UvbB+eefX19fL+eemS3Xg4KUmuPIOQ8EAkcffTRjDJ1lQNWYfscY++qrr9xudzAYhPGK4BDOLNyknHOv13vuuefK07uIM3755ZcgyP6pyxQEoaGh4ZJLLiG2aDabzWbzn//8Z7BO+c7m0HUPEUsqIzQMzvncuXPhLEEzYdKVGWOzZs368ccfV6xYsXz5ciiO+BeitKam5qWXXho7diz9CmTsdDrh8kUjsc8++8zlciGho/ssgmQJNqWqqmr58uXffffdjh07li1b9tVXX7333nujR4+ePn36woULR48e7XQ6hw4dWlRUdOSRRx5zzDFUeM5kg9IMBgNSWFmqASn0PzwxV4KQdHTgD0fX8uXLb7vttlNOOcXpdA4ePJgm15MGTNiithtVsw6Hg45YSUkJ+tDqdLqVK1fC78p7kTHXY0GIo4XICnkG5ByKfAiwsWCuRiKRhx56iOpJsfpIS0kDqQvgnCPIh6yhQ+KJCvdwOHzLLbfAA0A6iFqt1ul0Tqdz0KBBciFH7TmofDstAEBDpclEg/bR3Nx85JFHQkPpqSAk7yVY7Z49eyCxtFrtqFGjzjjjjEsuuWTJkiVw2ZGnCIhBPyCrF2p+LBYjnai2tvbhhx8uLy+Huwlxe2gASqXy3nvvpRA0CCi3wRhaOvTOiEajLpfr+++/J5IFw21oaPjss8+eeeYZco+ATjQazSeffBIKhTZs2PDjjz9u3Lhxw4YN//vf/9atWxcMBpubmznn7e3teFmikAz4kLA/4ogjaNghOgIzWfvN00477Yknnti/fz+x3Wg0mpaKVl9fD/m9efPmRYsWwcdQWFgImYT0Yxzmk08+GSWYXDZ7r5fZj8lkcsmSJZCyCOmRV9NkMjkcjjFjxmzbtg1PQd8WvP6uXbsuv/zy3//+92PHjsVYFdgraCVjMBgmTZqEjHk8qE89BIB4PP7qq6+yVHdmco0+99xzoEbahTSjNoeQlM31jMVimBmCSAcYNE40pb04HI5zzjnnsssuO+WUU04//fQ//elPv//97+WCnMiYyexLmsAKQHy6m28E+YejKoriW2+9RQVIaSUNJIYxSxWfwXXlDeoGDhxIzqG///3vn332Gbo1IUDIc2oRyhc5FAohViWK4htvvDFs2DClUgmfBLEmnU6HuTSsExChOp1Ok8l0+umn79+/n9wG5CXOwqvfY0Eo3zmozJlPC+LtjY2Nl1xyCeYMIHE/Ly9v+/btci7GM74ApC/Sf8lndUildfv27TRsCP/CVQUqb29vr6qqqq6ubmxsrK6urqqqqqura29vb2hoqK2tra2t3b17d1NTU3Nzc11d3Z49e6jrEmUP1tTUfPnll1OnToVnyW63Z2ERks4rSVJtbS05bykOpFarTz/99GuvvXb+/Pmcc3LlwXcE9grbFAu+Y8eOJUuWnH322SAmed4a2CWmWd5zzz0wxLGDOe+nJW/JFovFduzY8fe//z0/P//888+/4YYbzj///HPPPXfKlCnjx4/HSEK8KVKr8efIkSPPPPNM6ObItMJbnHjiiffcc09TUxMUss4r2Rncbjedk+HDh3euWLJYLE6nE/SJsoQpU6a8+uqr69at27Nnz969e2tra+vr6/fv34/+A83NzYsXL6bJUzAaQAMYGsUYO/PMM+PxeF1dncfjoQ1yu91ZCBgi9Ugk4vV6Q6HQ008/feKJJ2JDaVQC+ZeOPfbYiy666Nprr73iiiuuuOKK66+/fuLEiSeccALRAK0nrer111+PDEnOeUtLC9kffQ1z585lqaZxxNaRMEwIyB2SOQFyqsvlazgchjd+2bJlGBlG+dUkdRDGBpKwoTUaDTYdU0LlAqmsrAz85/XXX29vb+/o6KCGanAMJFM92DJjCwxxQuPxOBJGaN/pvNhsNphNSD/BNTBM8afVai0qKqqoqEDK8TXXXLN9+3boPT6fj9xdsMVzIgjBsWlaKr5saGjAcWhtbT3mmGPQ0hKmalo7COryzxjLy8uDtwB/nnXWWZAXab0h5Yls3YceNz73+XwYrFNdXb1u3brq6mpRFC0WC3pMM9lQU3wwm81nnHFGXV3dzJkzUTpK40anTJkCwQ4rE1XqXT1XkqSysrJx48Ydf/zx5MHHGKCDXh8MBtVq9fz58x955JEBAwbU1tbm5eWh6R8WN5lMzpgxA9qfIAjyHvCYUyOKYtps0hEjRpx88slOpxOdrHU63Zo1azBMymQylZWVVVdXW61WbI8gCCxVyX7IZh+4WK1WHzhwYPTo0V6vNy8vj1p3Op3OtrY2xpjVar3yyisNBsNRRx01ZsyY0tJSnBCkZUej0fnz5//rX/+SJAmDLgsLC71eL/43kUgAbcaYXq+fNGnSxIkTL774YnzjcrmIp+cK0NQGb6fT6T744INrrrkGnYhZ6gyjWhm9b9RqNbUgYIxhMCHnPJFImEwm1NrTrFTG2MqVK88880wsryAIarU6GAxm6LcLFUqn05WWlkIa4W4YZuTxeCRJwnwcPAIaG3pqQBNnqcyUWCyG9gIgEmyN3+/H3BK0aDnllFOWLl1qs9nQSsnr9UJYMsYkSeppn5RQKIRzl0gk0BTCbrdXVlaecMIJWCVUphuNRp1Oh7XCMlK+BkxemiMGkkObm8LCwosvvviZZ57BGfR6vYjBxOPxHPa57gqefvrpe++9V5IkJI6Gw+HzzjvvvffeQ/8pzDoGSaMhVE4eileLRqMQZvF4HKce43PNZvPSpUunTJmiVquj0ajZbEa3fQRlWardjCRJ6JsRiURMJhPmosTjcb1eT71BjjnmmNtuuw3F6TabDV2tCQ28YDdx9vv9NpstGo1eccUVn3/+OfSGSCSCru4FBQUulwvzHDjnaNsLjgr8tVotml1IknT66aefcMIJs2fPLi4uBrVjNZqamo488shgMAh5k5NuTVhb3Kqtra2oqAjSEagmk8m//OUvW7Zs8Xg8YOaIRnW+T0lJSUtLCz5ff/318+bNQ6LD/v37hw4dyhgDKwAD6XFTpCyEvN/vnz17ttwwp4Zb+JL69THGVF2AyWSS8wJ4wxDGOyjAJpgyZQrUIuQ+ZMYzGAw+//zzCoUCriqgB58b+h2gQRoNTaXRjiwVqGCpfCogIM8BI4aLzSAXCoxCNBbi3S67JG23qqoKi1NcXGwymZAfiMVEOVra9hFWer0eziXoeojCUvQIfhJYww6H49JLL6UQhZiCnDtD+C9NfFT/oAMZlFbU2IFkEScwGAxw2ZEXHRV40MQxWgHtftRq9RdffMFTWamURtQVJsiyQ7FdUVEReQhAAJi9hcE0wEqv15PkMJvNXc3nw4vAuWq1WgsLCyH7J0yYgLmjuQWKzVMkHq5vOkRMlvffFYA8LBYLugWBqHw+H8zrPkqQoSwzANJMvF5vbW3t7373O3SMgz3NGHv11Vf7hz47AygWJvvmzZvnz58/bNgwHCI68nl5eRjfPXjwYJbyM6FjmZxCNBrNlVdeCZcj72S4dBMoeYJzTiUEX3/9taILYKlOC/AnyTkGaHj48OHy/rS/IlCOxf79+88991zGGLLYQJaMMYzgJvzBkAcOHHjZZZcdNKzWG8iyfOL888+nxBPadcRFujNihjYGPLE7P8HMirlz58prLTJDIpFA0VVnRiCXGWlPlw9AgM5FwlsuFImwwNmxc2DlEIqQ091xgpEPqr29/cCBAzBSTSYTtaIoLi6WE8RBQa67YWEp6ALZTNPybrnlFi4rU5FzmRwymmSqMpKaYqOuwGQyFRQUkPUJqVNWVoY0aCglJAKhweB7iCXoLnivDRs2ICuE0M6QzxxPjWXnnL/zzjuzZ89GdI0xBumlVqupLAFtVlBShhiPfCYGcNDr9UajkRgfEiKMRuPEiRN//vnnZDLZF+UHFHonQZhIJBoaGj7//PMnnniCMWY2m8GO9V0AS/WgwhA+IL9ixQpkMFEGcs4hLRiGxi4ulwutRkAYWNU///nPe/bs6Wv67AqIXEluLVmyBKevsLCQtttkMmHAFmPM6XRiYUmzLykpufLKKyFvBEGgHg7ZJTTKQwzIhF+9erWmC4BKR+eLanMvvvjihQsXrly5sqqqCkrhITtJ9SlIv8yW37lz57p16xKJxPvvv//mm29OnjyZmjxYrdZjjjnm008//fjjj7/44gsKrHq93hx2GuqxazQcDjc1NQ0bNow8jTDj4JmVX2mxWBBL64pxk/0LHke+mq4eLUnSF198cdppp4EhZujQStc///zzd9xxh/xLuBE6+2ARGZJSc6upMzJ8m7hGvlacc5PJJLfilUoluiF3dHSYTKaWlhZSx3hG72g4HEbbPcbYvn37jjjiCJ/P98orrzz55JOiKMJNQd0jVbJ5qvIPPOXsApCwj0ajcNoYDIbp06fPnDlz0KBBiUQCZ5icZvTDnDhD2MF8PlOmTHn33XfpT6ywSqUqLy8/cOAAvkSXTqfT2d7ejn7QarVaEAT0gLZYLJFIBGOQNRpNVVWVPJFMkqRkMpnBldfS0kLRO8aYz+fbuHFjbW2tRqNZsWLFZ599JkmS3W5HIpJer+ecx1MT49IAaXjUhdLpdCLj7vXXX4f7lzEGn1X2K3gw4KlO5fQBvNVut7e1tVkslksvvXT58uUZ9FH4KsjLdNppp61atQpJsFA45JPnMtNtb94CC5tMJsePH79792673T5hwoTTTjtNqVSedNJJI0eOhCO67+jzkBAKhXQ6ncfjQaTwww8/5JyvXLny448/phADAC7HQYMGzZgxY9iwYaFQyGazXXTRRYwxVAeRrk+e2B5BMpmEAEYkSBTFmpqa4cOHd3X9kCFDJk2aVF1dPXjw4L/85S/Dhw+32WwdHR1OpzMWi+FYYZBqvw1ezgDQb0KhEBYcuTOMMXKDgzgxFpExhig4yD6X80ezEJ5r165FWzJk7zDGdDod1UHDLjxkF3z8HKq3PCLaFcAvsWPHDnn3hMwaQSQSgZoMDLVarfwpmD5IGhN9L7cIM3BVea88+hLuPsbY2Wef3U1PCKUD4ENzc7M8aWXu3LlXXHEFFX4ckgtAJcSbQr2AQ3Xs2LFvvvkmlg6eljSPU851bXlVAzKHt2/fzlJDWMgFDdfitGnTPvjggxdffPHGG2+kPH65112evAc49dRTd+3a5fF45C33MgOyy9AlBIiFQiEp1cZzzZo1r7zyyvz586+77jpKOaHn6vV6yHVygVgsFnmP8nPPPReTbDE2r7m5WcrYOzFrkBuFgiBQVbUkSXA0ffPNNwsWLOgqJEG2y4IFC+bOnUszHTFxLM2k7qMsTZ6aL+j3+10u19dff/3VV1/hRaBPQxfpZ1uQAAcEljH+Rdth/C8ZMSj6qqyslHOhUCiE9aRTTFw+iypvgJjqb0UGJVrSHxR46tCRZY9K846ODjRqodvG4/H+mTd5UCB/RjLVxQZ7TQfT5XJRNi/OFC5ub2/3+Xw5x7zHFqEoiqNGjUokEhggh+QCeDAokQGZGowxm83m9/u7eWc49A6qgDPGMB1tzZo1Y8eOhRDC8nXVEF0UxUAg8Morrzz22GMw8uDkjMfjhJ4coONjh1jK8IKajAt4SgfHnzqdLpFIWCyWYcOGbdy4UT76wGazLViw4MorrwRusBq7SuoBadL0IjzU4/FgalU0GtVqtT/++GN1dfXjjz8O2k2zBVlq0BXkJaQCY6yoqKi4uPjxxx8/4YQTUHMNqpIkiaK5nW+VK0BmL4ZOQJ/o6Oh4/fXXEd6PxWLl5eVer9dgMFx55ZVFRUX0+rW1teXl5YlEwmw2R6NRsmsVCgXMYlAIxujgWWKquU8G8Hg8EG9erxchPVI5MY2EJJwgCE1NTQMHDuSc79y5s7KysrGxEa5dZM3AAQ6XFyyYM844w2azxWIxqCA8VRt6SId2dkCnlzGmVCqbm5vtdjsIDIPmWSr9qjNEIhHYBwaDAc1c6urqBg0aFI/HoQLKCZ5z3tOknq5AFEV5HIunnGM4jDgpZDBRSl3f0echwe/3w0ukUqmAGOccI8zUajWkIMhAkSq8kQMS6Bhj8XgchgHrhZOAp9rZgEozGHPgHslkkvq2hEIhJBDAkEWOGEslD/+KAEGIJK9kMoktjsfjaPSaSCQUCgWYPMwqZC2Bn/h8Pp1OJ4pirozCHgvCRCJRWVl50kknGY1GeERBtXDuDxo0CGnoyDIvLi4m5ToNgsHguHHjfve730Wj0Z9++mnr1q2MsYKCgq4OsMfjOXDgwKOPPjp8+HBo4kJqTE8GqKur+/rrrxsaGljKW4gS/k2bNq1du9ZisVx22WXnnHNOYWFhYWFhRUVFMpmsrq6Ox+MlJSXJZLK2tvbEE0/ErfgvHaRffPHF3LlztVrtBx98AMYaCoUKCwsFQWhpaTn22GORHQBfn5y/ZAB0IMTIQ2RX6/V6uTvl2WefdblcB+UOOKKc83g8rlarBw4cOGbMmBEjRoAXS5KELla4OBAIyLMr+4LLHDLBj9LnkAsHOwCOu/z8fCRJspR3Dicf7lYSe8jGFEUxHo8f8lSDWnD2IK6QqAyGEgwGVSoV1BFwikAgAGNaniHFUxmqUPvS7s9krarIb5GFK+yQINfJRFEkvRCPzpzqiX3BNZxz5CcDf0IeQIIqJziD01GI96DXQE5gf+V8qZ+lIKoa5IoR5FAaPeNLsBRoluFwmNIF5BcgYZv6OmUBPFXYd8g7kJ4nSZLb7ZangoMRgWCwvKFQKEOWdZ9CMpmU+97oS9KNBEGAD4OYPCi8O2w/C+ixIJQkyePxVFdXz58//9prrx07dmw4HFYqldFodOjQoTC5dDodGsGgo11XAJsXWZ2HzNIOBAJer7ewsBDebbVanVld7ejoQFo8wsvIYcFp12q10Wi0rq6OMTZo0CDcEEKdpXxfCP/Ik/XZLxkQPBUmk8lqtYIjY3FguFgsFrnWliE2gIx/+EXlJ40sJPptU1NTWVmZJBv0Kv9A9IFkbjxdp9PRK8s1fTkx9RGXAdUic9rn8+Fw0ihKXBOJRJAdCmzlRQX01qFQCCHhNM+2HPCOiIZmQAnWkkKhoPglHDJpzOWQsUZwRvoVeSYgvGlt0xLlcwtyizASiSBkTtUj3Xm0z+fTaDQmk6mjoyM/Px/0JieGzB6XrNHGB3oQbALaWXR4sNvtna/sH+CysKhcGyNMYAvq9XpRFEmQpDF0OPFQDSL/vjflH1JqrGkGTYLQRiENVXp03sS0k/hrAVwsFMeh7+FtxqBN9ktSlPNS2qDeQ48FIeccHipo06Sky3UoXBaJRJAGdtD7+Hw+Cs6rUsMbOeddHTy4tjo6OiBjuvP+gUBAqVRi/DS2nFwcuAAsDxSGyjBsCXIXCSV6I/mfHo8Hsa5YLGa1WuEhwU20Wi14OrJgVKkmI10BTCLSH0mng3jAEzEl2OfzyXm93L0Jjxz7ZbYRCWaYOyylmEONYH3MZXAC8S/85zC58L/JZJJKCcEKyZSBR1qhUMiNGywp1gTRI4hYME1a/MwWjNw31VlskL+LLoPDEMcVOyvXb+RMU44qqTV9UZ1Jj8ZKQmbDZw6HSjQazaDmk2VMgQAU6rFOxNAXgpDuTE8MBoPI1CWyZ7KQRP97RDnn4XBYkiQKAEu/LPqErU/LAt4it54RzlCpVODmuXIJYMfBZzLzE6BE8o/wYb+UHH2RzNVTIO8Ooled8YGNKH9lKjjObaZPNq7Rg37f18pFV3j29Kh0lcWaK8hVTKUryNU6HIbDcBgOw2EA9Fjd62tGfxgOw2E4DIfhMPQn9FgQ5ip4fhgOw2E4DIfhMPwW4P8DD01WN5kTl5UAAAAASUVORK5CYII=\"\n}" 12 | headers = { 13 | 'content-type': "application/json", 14 | 'cache-control': "no-cache", 15 | 'postman-token': "97476aaa-a889-85e0-e409-d4010c29a662" 16 | } 17 | 18 | response = requests.request("POST", url, data=payload, headers=headers) 19 | 20 | print(response.text) --------------------------------------------------------------------------------