diff --git a/docs/Security-Compliance/boundary-diagram.md b/docs/Security-Compliance/boundary-diagram.md index e58c88ad4..d548a41b0 100644 --- a/docs/Security-Compliance/boundary-diagram.md +++ b/docs/Security-Compliance/boundary-diagram.md @@ -6,7 +6,11 @@ ### Data flow -Users with `OFA Admin` and (STT) `Data Analyst` roles can upload data on upload data files locally into the web application which will store the files in cloud.gov AWS S3 buckets only after the files are successfully scanned for viruses via [ClamAV](../Technical-Documentation/Architecture-Decision-Record/012-antivirus-strategy.md). Developers will deploy new code through GitHub, initiating the continuous integration process through Circle CI. +Users with `OFA Admin` and (STT) `Data Analyst` roles can upload data on upload data files locally into the web application which will store the files in cloud.gov AWS S3 buckets only after the files are successfully scanned for viruses via [ClamAV](../Technical-Documentation/Architecture-Decision-Record/012-antivirus-strategy.md). For lower environments, we use an NGINX server to function as a proxy, routing to the ClamAV-rest server in the production space. The NGINX server also functions as a gatekeeper, allowing documents for scanning to only come from backend servers, and only able to route them directly to the ClamAV-rest server. + +### Code Repository and CI Pipeline + +Developers will deploy new code through GitHub, initiating the continuous integration process through Circle CI. ### Environments/Spaces diff --git a/docs/Sprint-Review/sprint-86-summary.md b/docs/Sprint-Review/sprint-86-summary.md new file mode 100644 index 000000000..36b249411 --- /dev/null +++ b/docs/Sprint-Review/sprint-86-summary.md @@ -0,0 +1,69 @@ +# Sprint 86 Summary +11/08/23 - 11/21/23 + +Velocity (Dev): 6 + +## Sprint Goal +* Dev: + * Continue parsing engine development + * Review all SSP Sec (01-04) + * #2730 Resolve deployment blocker + * #2683 - ZAP CORS Misconfiguration + * Coordinate w/ OFA and draft dev contingency plan for future gov shutdown + - Document any further planning (if any beyond Andrew's use of ACF laptop) +* DevOps: + * 2429 - Singular Clam AV + * 2722 - Singular deployment workflow + * Scoped out of 2419 + * #2729 - Migrations via CircleCI + +--- + +## Tickets +### Completed/Merged +* [#2116 Container registry creation](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2116) +* [#2709 SSP Active Data (01) Validation](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2709) + + +### Ready to Merge +* [#1119 SSP Aggregate (03) Parsing](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/1119) + + + + +### Submitted (QASP Review, OCIO Review) +* [#2683 ZAP result - CORS config issue](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2683) +* [#1118 SSP Closed Data (02) Parsing](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/1118) +* [#1120 SSP Stratum (04) Parsing](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/1120) +* [#2748 Fix parser/preparser validation of empty strings](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2748) + +### Closed (not merged) +* [Debug migration deployments (resolved by other deployment fix work)](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2740) + +--- + +## Moved to Next Sprint (Blocked, Raft Review, In Progress, Current Sprint Backlog) +### In Progress +* [#2536 [spike] Cat 4 validation](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2536) +* [#2592 Deploy celery as a separate cloud.gov app](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2592) +* [#2729 - Migrations via CircleCI](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2729) + + + +### Blocked +* N/A + +### Raft Review + + +* [#2599 Readability enhancements for error reports](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2599) +* [#2722 simplify workflows and de-bloat pipeline code](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2722) +* [Spike - Investigate OWASP nightly scan findings](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/2663) +* [Tribal TANF Active Data (01) Parsing](https://app.zenhub.com/workspaces/sprint-board-5f18ab06dfd91c000f7e682e/issues/gh/raft-tech/tanf-app/1114) + +### Current Sprint Backlog + + +### Demo +* N/A + diff --git a/docs/User-Experience/Research-Syntheses/2023, Winter - TDP 3.0 Pilot Program copy.md b/docs/User-Experience/Research-Syntheses/2023, Winter - TDP 3.0 Pilot Program.md similarity index 100% rename from docs/User-Experience/Research-Syntheses/2023, Winter - TDP 3.0 Pilot Program copy.md rename to docs/User-Experience/Research-Syntheses/2023, Winter - TDP 3.0 Pilot Program.md diff --git a/scripts/deploy-backend.sh b/scripts/deploy-backend.sh index ec372396a..6e46fe93a 100755 --- a/scripts/deploy-backend.sh +++ b/scripts/deploy-backend.sh @@ -91,7 +91,7 @@ update_backend() cd tdrs-backend || exit cf unset-env "$CGAPPNAME_BACKEND" "AV_SCAN_URL" - if ["$CF_SPACE" = "tanf-prod" ]; then + if [ "$CF_SPACE" = "tanf-prod" ]; then cf set-env "$CGAPPNAME_BACKEND" AV_SCAN_URL "http://tanf-prod-clamav-rest.apps.internal:9000/scan" else # Add environment varilables for clamav @@ -100,7 +100,6 @@ update_backend() if [ "$1" = "rolling" ] ; then set_cf_envs - # Do a zero downtime deploy. This requires enough memory for # two apps to exist in the org/space at one time. cf push "$CGAPPNAME_BACKEND" --no-route -f manifest.buildpack.yml -t 180 --strategy rolling || exit 1 @@ -121,7 +120,7 @@ update_backend() # Add network policy to allow frontend to access backend cf add-network-policy "$CGAPPNAME_FRONTEND" "$CGAPPNAME_BACKEND" --protocol tcp --port 8080 - if ["$CF_SPACE" = "tanf-prod" ]; then + if [ "$CF_SPACE" = "tanf-prod" ]; then # Add network policy to allow backend to access tanf-prod services cf add-network-policy "$CGAPPNAME_BACKEND" clamav-rest --protocol tcp --port 9000 else diff --git a/scripts/deploy-frontend.sh b/scripts/deploy-frontend.sh old mode 100644 new mode 100755 diff --git a/scripts/zap-scanner.sh b/scripts/zap-scanner.sh index c3f534b84..d03259221 100755 --- a/scripts/zap-scanner.sh +++ b/scripts/zap-scanner.sh @@ -40,7 +40,7 @@ cd "$TARGET_DIR" || exit 2 if [[ $(docker network inspect external-net 2>&1 | grep -c Scope) == 0 ]]; then - docker network create external-net + docker network create external-net fi # Ensure the APP_URL is reachable from the zaproxy container @@ -112,10 +112,6 @@ ZAP_CLI_OPTIONS="\ -config globalexcludeurl.url_list.url\(14\).description='Site - FontAwesome.com' \ -config globalexcludeurl.url_list.url\(14\).enabled=true \ - -config globalexcludeurl.url_list.url\(15\).regex='^https:\/\/.*\.cloud.gov\/.*$' \ - -config globalexcludeurl.url_list.url\(15\).description='Site - Cloud.gov' \ - -config globalexcludeurl.url_list.url\(15\).enabled=true \ - -config globalexcludeurl.url_list.url\(16\).regex='^https:\/\/.*\.googletagmanager.com\/.*$' \ -config globalexcludeurl.url_list.url\(16\).description='Site - googletagmanager.com' \ -config globalexcludeurl.url_list.url\(16\).enabled=true \ @@ -140,7 +136,6 @@ ZAP_CLI_OPTIONS="\ -config globalexcludeurl.url_list.url\(21\).description='Site - IdentitySandbox.gov' \ -config globalexcludeurl.url_list.url\(21\).enabled=true \ -config spider.postform=true" - # How long ZAP will crawl the app with the spider process ZAP_SPIDER_MINS=10 diff --git a/tdrs-backend/Pipfile b/tdrs-backend/Pipfile index b360c8e31..89f316b60 100644 --- a/tdrs-backend/Pipfile +++ b/tdrs-backend/Pipfile @@ -58,7 +58,7 @@ django-elasticsearch-dsl = "==7.3" django-elasticsearch-dsl-drf = "==0.22.5" requests-aws4auth = "==1.1.2" cerberus = "==1.3.4" -xlsxwriter = "==3.0.1" +xlsxwriter = "==3.1.9" sendgrid = "==6.10.0" [requires] diff --git a/tdrs-backend/Pipfile.lock b/tdrs-backend/Pipfile.lock index bc99d280f..258f9f234 100644 --- a/tdrs-backend/Pipfile.lock +++ b/tdrs-backend/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0ef020105fbcbee223abce4021a7599bff6bea6bce8bd4285ba36d3a4fc7994d" + "sha256": "6e853152cf067206afe522c93538ef6922368a9a69928f16591fd275ede287c1" }, "pipfile-spec": 6, "requires": { @@ -34,10 +34,10 @@ }, "asttokens": { "hashes": [ - "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3", - "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c" + "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", + "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69" ], - "version": "==2.2.1" + "version": "==2.4.0" }, "backcall": { "hashes": [ @@ -86,6 +86,7 @@ "sha256:92c0631ab91b4c5aa0e18a90b4d12df361723c6df1ef7e346db71f2ad0803ab3" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.28.4" }, "botocore": { @@ -94,6 +95,7 @@ "sha256:f9738a23b03c55c2958ebdee65273afeda80deaeefebe595887fc3251e48293a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.31.4" }, "celery": { @@ -102,6 +104,7 @@ "sha256:da31f8eae7607b1582e5ee2d3f2d6f58450585afd23379491e3d9229d08102d0" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==5.2.6" }, "cerberus": { @@ -109,84 +112,74 @@ "sha256:d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c" ], "index": "pypi", + "markers": "python_version >= '2.7'", "version": "==1.3.4" }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "cffi": { "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" - ], - "version": "==1.15.1" + "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", + "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", + "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", + "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", + "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", + "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", + "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", + "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", + "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", + "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", + "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", + "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", + "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", + "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", + "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", + "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", + "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", + "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", + "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", + "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", + "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", + "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", + "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", + "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", + "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", + "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", + "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", + "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", + "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", + "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", + "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", + "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", + "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", + "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", + "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", + "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", + "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", + "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", + "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", + "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", + "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", + "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", + "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", + "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", + "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", + "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", + "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", + "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", + "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", + "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", + "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", + "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" + ], + "markers": "python_version >= '3.8'", + "version": "==1.16.0" }, "charset-normalizer": { "hashes": [ @@ -198,11 +191,11 @@ }, "click": { "hashes": [ - "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd", - "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], "markers": "python_version >= '3.7'", - "version": "==8.1.6" + "version": "==8.1.7" }, "click-didyoumean": { "hashes": [ @@ -259,6 +252,7 @@ "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.4.7" }, "decorator": { @@ -291,6 +285,7 @@ "sha256:f71934b1a822f14a86c9ac9634053689279cd04ae69cb6ade4a59471b886582b" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.2.15" }, "django-admin-508": { @@ -307,6 +302,7 @@ "sha256:aedb5df940d32c10423d65136343bc009727df8a5a49ed0196e65241d823a890" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==1.0.2" }, "django-celery-beat": { @@ -319,10 +315,10 @@ }, "django-colorfield": { "hashes": [ - "sha256:208e04dae669ed95f18c4aef02865e9c785873521ffbe5b46fb6ea7a1500c979", - "sha256:7df5486de759dce70e54a1854f69bafd0a1e1bf98b66b09661d4d84342f447fc" + "sha256:00ceb5ef55338a0af131c87a13eca3533a327a6206e02a6c2723c059bcd65ea5", + "sha256:1e862bef9e73308499f366ab61190554fba366aa54d5fb1eba378ed2a04bc93d" ], - "version": "==0.9.0" + "version": "==0.10.1" }, "django-configurations": { "hashes": [ @@ -338,6 +334,7 @@ "sha256:5f07e2ff8a95c887698e748588a4a0b2ad0ad1b5a292e2d33132f1253e2a97cb" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==3.12.0" }, "django-csp": { @@ -362,6 +359,7 @@ "sha256:fc0b3960e16f6c06de4f2ca4daf1134376fce4d496c1ddc218c23daddf6bcaa0" ], "index": "pypi", + "markers": "python_version >= '2.7'", "version": "==0.22.5" }, "django-extensions": { @@ -370,6 +368,7 @@ "sha256:5f0fea7bf131ca303090352577a9e7f8bfbf5489bd9d9c8aea9401db28db34a0" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.1.3" }, "django-filter": { @@ -378,6 +377,7 @@ "sha256:f4a6737a30104c98d2e2a5fb93043f36dd7978e0c7ddc92f5998e85433ea5063" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==21.1" }, "django-flat-responsive": { @@ -413,6 +413,7 @@ "sha256:a475edb2f0f04c4f7e548919a751ecd50117270833956ed5bd585c0575d2a5e7" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==1.12.3" }, "django-timezone-field": { @@ -437,6 +438,7 @@ "sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.13.1" }, "drf-yasg": { @@ -445,6 +447,7 @@ "sha256:d50f197c7f02545d0b736df88c6d5cf874f8fea2507ad85ad7de6ae5bf2d9e5a" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.20.0" }, "elasticsearch": { @@ -453,6 +456,7 @@ "sha256:5920df0ab2630778680376d86bea349dc99860977eec9b6d2bd0860f337313f2" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", "version": "==7.13.4" }, "elasticsearch-dsl": { @@ -463,12 +467,20 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==7.4.1" }, + "exceptiongroup": { + "hashes": [ + "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", + "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" + ], + "markers": "python_version < '3.11'", + "version": "==1.1.3" + }, "executing": { "hashes": [ - "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", - "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" + "sha256:06df6183df67389625f4e763921c6cf978944721abf3e714000200aab95b0657", + "sha256:0ff053696fdeef426cda5bd18eacd94f82c91f49823a2e9090124212ceea9b08" ], - "version": "==1.2.0" + "version": "==2.0.0" }, "flower": { "hashes": [ @@ -484,15 +496,16 @@ "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==20.1.0" }, "humanize": { "hashes": [ - "sha256:7ca0e43e870981fa684acb5b062deb307218193bca1a01f2b2676479df849b3a", - "sha256:df7c429c2d27372b249d3f26eb53b07b166b661326e0325793e0a988082e3889" + "sha256:8bc9e2bb9315e61ec06bf690151ae35aeb65651ab091266941edf97c90836404", + "sha256:9783373bf1eec713a770ecaa7c2d7a7902c98398009dfa3d8a2df91eec9311e8" ], "markers": "python_version >= '3.8'", - "version": "==4.7.0" + "version": "==4.8.0" }, "idna": { "hashes": [ @@ -515,15 +528,16 @@ "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5" ], "index": "pypi", + "markers": "python_version >= '2.7'", "version": "==0.13.9" }, "ipython": { "hashes": [ - "sha256:1d197b907b6ba441b692c48cf2a3a2de280dc0ac91a3405b39349a50272ca0a1", - "sha256:248aca623f5c99a6635bc3857677b7320b9b8039f99f070ee0d20a5ca5a8e6bf" + "sha256:0852469d4d579d9cd613c220af7bf0c9cc251813e12be647cb9d463939db9b1e", + "sha256:ad52f58fca8f9f848e256c629eff888efc0528c12fe0f8ec14f33205f23ef938" ], "markers": "python_version >= '3.7'", - "version": "==8.14.0" + "version": "==8.16.1" }, "itypes": { "hashes": [ @@ -534,11 +548,11 @@ }, "jedi": { "hashes": [ - "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e", - "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612" + "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", + "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0" ], "markers": "python_version >= '3.6'", - "version": "==0.18.2" + "version": "==0.19.1" }, "jinja2": { "hashes": [ @@ -561,15 +575,16 @@ "sha256:54b551b115ffb4d12b1f1ee93b8ba2a71bb8556ba3d85d62f707549613da877c" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.3.1" }, "kombu": { "hashes": [ - "sha256:48ee589e8833126fd01ceaa08f8a2041334e9f5894e5763c8486a550454551e9", - "sha256:fbd7572d92c0bf71c112a6b45163153dea5a7b6a701ec16b568c27d0fd2370f2" + "sha256:0ba213f630a2cb2772728aef56ac6883dc3a2f13435e10048f6e97d48506dbbd", + "sha256:b753c9cfc9b1e976e637a7cbc1a65d446a22e45546cd996ea28f932082b7dc9e" ], "markers": "python_version >= '3.8'", - "version": "==5.3.1" + "version": "==5.3.2" }, "markdown": { "hashes": [ @@ -577,6 +592,7 @@ "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.3.7" }, "markupsafe": { @@ -585,8 +601,11 @@ "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", @@ -594,6 +613,7 @@ "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", @@ -602,6 +622,7 @@ "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", @@ -609,9 +630,12 @@ "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", @@ -630,7 +654,9 @@ "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", - "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" ], "markers": "python_version >= '3.7'", "version": "==2.1.3" @@ -645,11 +671,11 @@ }, "packaging": { "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" ], "markers": "python_version >= '3.7'", - "version": "==23.1" + "version": "==23.2" }, "paramiko": { "hashes": [ @@ -684,65 +710,63 @@ }, "pillow": { "hashes": [ - "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5", - "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530", - "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d", - "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca", - "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891", - "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992", - "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7", - "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3", - "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba", - "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3", - "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3", - "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f", - "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538", - "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3", - "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d", - "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c", - "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017", - "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3", - "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223", - "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e", - "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3", - "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6", - "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640", - "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334", - "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1", - "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba", - "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa", - "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0", - "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396", - "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d", - "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485", - "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf", - "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43", - "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37", - "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2", - "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd", - "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86", - "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967", - "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629", - "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568", - "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed", - "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f", - "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551", - "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3", - "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614", - "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff", - "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d", - "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883", - "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684", - "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0", - "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de", - "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b", - "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3", - "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199", - "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51", - "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90" + "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d", + "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de", + "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616", + "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839", + "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099", + "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a", + "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219", + "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106", + "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b", + "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412", + "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b", + "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7", + "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2", + "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7", + "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14", + "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f", + "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27", + "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57", + "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262", + "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28", + "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610", + "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172", + "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273", + "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e", + "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d", + "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818", + "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f", + "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9", + "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01", + "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7", + "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651", + "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312", + "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80", + "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666", + "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061", + "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b", + "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992", + "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593", + "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4", + "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db", + "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba", + "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd", + "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e", + "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212", + "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb", + "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2", + "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34", + "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256", + "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f", + "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2", + "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38", + "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996", + "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a", + "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793" ], "markers": "python_version >= '3.8'", - "version": "==10.0.0" + "version": "==10.1.0" }, "prometheus-client": { "hashes": [ @@ -823,6 +847,7 @@ "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==2.9.3" }, "ptyprocess": { @@ -848,11 +873,11 @@ }, "pygments": { "hashes": [ - "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c", - "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1" + "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", + "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" ], "markers": "python_version >= '3.7'", - "version": "==2.15.1" + "version": "==2.16.1" }, "pyjwt": { "hashes": [ @@ -860,6 +885,7 @@ "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==2.4.0" }, "pynacl": { @@ -883,7 +909,6 @@ "sha256:b7ac34a23f63d77e27f67b6a81c9418243733f027eeb8a3061d965b2da7e5cab", "sha256:c5e8a37049866d4eabc711db9f1c09e1c02ab72ba290f5fd244939c9a188042f" ], - "index": "pypi", "version": "==1.3.0" }, "python-crontab": { @@ -916,7 +941,6 @@ ], "index": "pypi", "version": "==2022.1" - }, "redis": { "hashes": [ @@ -924,6 +948,7 @@ "sha256:f13eea4254e302485add677cadedaf1305c1b3a4e07535e23b7b239798ce9301" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==4.1.2" }, "requests": { @@ -932,6 +957,7 @@ "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==2.27.1" }, "requests-aws4auth": { @@ -952,63 +978,61 @@ }, "ruamel.yaml": { "hashes": [ - "sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447", - "sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2" + "sha256:8df81a51384f2e6af73d88bede63ec437df4854a5a74841f40e7622471298457", + "sha256:ee9a9178a231306d2b260e67ba497c136d4639d58b08775ab67f5fb0f21e73f0" ], "markers": "python_version >= '3'", - "version": "==0.17.32" + "version": "==0.17.39" }, "ruamel.yaml.clib": { "hashes": [ - "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e", - "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3", - "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5", - "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81", - "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497", - "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f", - "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac", - "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697", - "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763", - "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282", - "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94", - "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1", - "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072", - "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9", - "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5", - "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231", - "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93", - "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b", - "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb", - "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f", - "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307", - "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf", - "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8", - "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b", - "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b", - "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640", - "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7", - "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a", - "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71", - "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8", - "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122", - "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7", - "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80", - "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e", - "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab", - "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0", - "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646", - "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38" - ], - "markers": "python_version < '3.12' and platform_python_implementation == 'CPython'", - "version": "==0.2.7" + "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001", + "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462", + "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615", + "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15", + "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b", + "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675", + "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1", + "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7", + "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312", + "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f", + "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91", + "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa", + "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b", + "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3", + "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5", + "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe", + "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3", + "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed", + "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337", + "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248", + "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d", + "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279", + "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf", + "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512", + "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069", + "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb", + "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942", + "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d", + "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31", + "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92", + "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd", + "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5", + "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1", + "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2", + "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875", + "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412" + ], + "markers": "python_version < '3.13' and platform_python_implementation == 'CPython'", + "version": "==0.2.8" }, "s3transfer": { "hashes": [ - "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346", - "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9" + "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084", + "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861" ], "markers": "python_version >= '3.7'", - "version": "==0.6.1" + "version": "==0.6.2" }, "sendgrid": { "hashes": [ @@ -1016,15 +1040,16 @@ "sha256:9b15050c6f8826ee576f76a786efb15d956639f485478cbddd79ed69e8350ab8" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==6.10.0" }, "setuptools": { "hashes": [ - "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f", - "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235" + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" ], - "markers": "python_version >= '3.7'", - "version": "==68.0.0" + "markers": "python_version >= '3.8'", + "version": "==68.2.2" }, "six": { "hashes": [ @@ -1044,10 +1069,10 @@ }, "stack-data": { "hashes": [ - "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", - "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" + "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", + "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695" ], - "version": "==0.6.2" + "version": "==0.6.3" }, "starkbank-ecdsa": { "hashes": [ @@ -1065,36 +1090,36 @@ }, "tornado": { "hashes": [ - "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4", - "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf", - "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d", - "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba", - "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe", - "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411", - "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2", - "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0", - "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c", - "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f", - "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829" + "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f", + "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5", + "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d", + "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3", + "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2", + "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a", + "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16", + "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a", + "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17", + "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0", + "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe" ], "markers": "python_version >= '3.8'", - "version": "==6.3.2" + "version": "==6.3.3" }, "traitlets": { "hashes": [ - "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", - "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" + "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e", + "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae" ], - "markers": "python_version >= '3.7'", - "version": "==5.9.0" + "markers": "python_version >= '3.8'", + "version": "==5.11.2" }, "typing-extensions": { "hashes": [ - "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", - "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" ], "markers": "python_version < '3.11'", - "version": "==4.7.1" + "version": "==4.8.0" }, "uritemplate": { "hashes": [ @@ -1106,11 +1131,11 @@ }, "urllib3": { "hashes": [ - "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f", - "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14" + "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", + "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.16" + "version": "==1.26.18" }, "vine": { "hashes": [ @@ -1126,14 +1151,15 @@ "sha256:f219db8fd96819b026df1dc6d93fb380cf6d81f20450115200dd901dea4b0c8f" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.2.0" }, "wcwidth": { "hashes": [ - "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", - "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704", + "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4" ], - "version": "==0.2.6" + "version": "==0.2.8" }, "wrapt": { "hashes": [ @@ -1218,11 +1244,12 @@ }, "xlsxwriter": { "hashes": [ - "sha256:2f2af944d2b4b5f21cd3ac8e01b2417ec74c60e2ca11cae90b4f32ee172c99d6", - "sha256:3f39bf581c55f3ad1438bc170d7f4c4649cee8b6b7a80d21f79508118eeea52a" + "sha256:b61c1a0c786f82644936c0936ec96ee96cd3afb9440094232f7faef9b38689f0", + "sha256:de810bf328c6a4550f4ffd6b0b34972aeb7ffcf40f3d285a0413734f9b63a929" ], "index": "pypi", - "version": "==3.0.1" + "markers": "python_version >= '3.6'", + "version": "==3.1.9" } }, "develop": { @@ -1232,6 +1259,7 @@ "sha256:75371ea153548a5ce3a1e16c5036e87d631950e27df0e0dd734050c0ae00746b" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.29.4" }, "awscli-local": { @@ -1247,6 +1275,7 @@ "sha256:92c0631ab91b4c5aa0e18a90b4d12df361723c6df1ef7e346db71f2ad0803ab3" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.28.4" }, "botocore": { @@ -1255,15 +1284,16 @@ "sha256:f9738a23b03c55c2958ebdee65273afeda80deaeefebe595887fc3251e48293a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.31.4" }, "click": { "hashes": [ - "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd", - "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], "markers": "python_version >= '3.7'", - "version": "==8.1.6" + "version": "==8.1.7" }, "colorama": { "hashes": [ @@ -1278,69 +1308,61 @@ "toml" ], "hashes": [ - "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f", - "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2", - "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a", - "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a", - "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01", - "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6", - "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7", - "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f", - "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02", - "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c", - "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063", - "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a", - "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5", - "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959", - "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97", - "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6", - "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f", - "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9", - "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5", - "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f", - "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562", - "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe", - "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9", - "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f", - "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb", - "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb", - "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1", - "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb", - "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250", - "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e", - "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511", - "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5", - "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59", - "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2", - "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d", - "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3", - "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4", - "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de", - "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9", - "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833", - "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0", - "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9", - "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d", - "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050", - "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d", - "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6", - "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353", - "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb", - "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e", - "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8", - "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495", - "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2", - "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd", - "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27", - "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1", - "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818", - "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4", - "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e", - "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850", - "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3" + "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1", + "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63", + "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9", + "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312", + "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3", + "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb", + "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25", + "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92", + "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda", + "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148", + "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6", + "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216", + "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a", + "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640", + "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836", + "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c", + "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f", + "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2", + "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901", + "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed", + "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a", + "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074", + "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc", + "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84", + "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083", + "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f", + "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c", + "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c", + "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637", + "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2", + "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82", + "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f", + "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce", + "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef", + "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f", + "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611", + "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c", + "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76", + "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9", + "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce", + "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9", + "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf", + "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf", + "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9", + "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6", + "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2", + "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a", + "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a", + "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf", + "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738", + "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a", + "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4" ], - "markers": "python_version >= '3.7'", - "version": "==7.2.7" + "markers": "python_version >= '3.8'", + "version": "==7.3.2" }, "docutils": { "hashes": [ @@ -1352,11 +1374,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5", - "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f" + "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", + "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" ], "markers": "python_version < '3.11'", - "version": "==1.1.2" + "version": "==1.1.3" }, "factory-boy": { "hashes": [ @@ -1364,15 +1386,16 @@ "sha256:eb02a7dd1b577ef606b75a253b9818e6f9eaf996d94449c9d5ebb124f90dc795" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.2.1" }, "faker": { "hashes": [ - "sha256:4b7d5cd0c898f0b64f88fbf0a35aac66762f2273446ba4a4e459985a2e5c8f8c", - "sha256:d1eb772faf4a7c458c90b19d3626c40ae3460bd665ad7f5fb7b089e31d1a6dcf" + "sha256:a62a3fd3bfa3122d4f57dfa26a1cc37d76751a76c8ddd63cf9d24078c57913a4", + "sha256:e28090068293c5a83e7f4d636417d45fae1031ca8a8136cc2415549ebc2111e2" ], "markers": "python_version >= '3.8'", - "version": "==19.1.0" + "version": "==19.11.0" }, "flake8": { "hashes": [ @@ -1380,6 +1403,7 @@ "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181" ], "index": "pypi", + "markers": "python_full_version >= '3.8.1'", "version": "==6.0.0" }, "flake8-docstrings": { @@ -1388,6 +1412,7 @@ "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.7.0" }, "ghp-import": { @@ -1419,6 +1444,7 @@ "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6" ], "index": "pypi", + "markers": "python_full_version >= '3.8.0'", "version": "==5.12.0" }, "jinja2": { @@ -1439,9 +1465,9 @@ }, "localstack-client": { "hashes": [ - "sha256:3af9ab57d7744f64deb1912c1145b453db0233d8caaf6f71bd97380b5c4e45bb" + "sha256:377ed05e7854eb476dc73b0ab992c433c683bd1026aa84755eaa29f7561757c1" ], - "version": "==2.2" + "version": "==2.3" }, "markdown": { "hashes": [ @@ -1449,6 +1475,7 @@ "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.3.7" }, "markupsafe": { @@ -1457,8 +1484,11 @@ "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", @@ -1466,6 +1496,7 @@ "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", @@ -1474,6 +1505,7 @@ "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", @@ -1481,9 +1513,12 @@ "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", @@ -1502,7 +1537,9 @@ "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", - "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" ], "markers": "python_version >= '3.7'", "version": "==2.1.3" @@ -1529,23 +1566,24 @@ "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.4.3" }, "packaging": { "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" ], "markers": "python_version >= '3.7'", - "version": "==23.1" + "version": "==23.2" }, "pluggy": { "hashes": [ - "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849", - "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3" + "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", + "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" ], - "markers": "python_version >= '3.7'", - "version": "==1.2.0" + "markers": "python_version >= '3.8'", + "version": "==1.3.0" }, "pyasn1": { "hashes": [ @@ -1584,6 +1622,7 @@ "sha256:a97eb5ced266f45053ebb1f2c6c6d29091690503e3a5c14be7f908b37b06f2d4" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==1.11" }, "pyparsing": { @@ -1592,6 +1631,7 @@ "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea" ], "index": "pypi", + "markers": "python_full_version >= '3.6.8'", "version": "==3.1.0" }, "pytest": { @@ -1600,6 +1640,7 @@ "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==7.4.0" }, "pytest-cov": { @@ -1608,6 +1649,7 @@ "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==4.1.0" }, "pytest-django": { @@ -1616,6 +1658,7 @@ "sha256:d9076f759bb7c36939dbdd5ae6633c18edfc2902d1a69fdbefd2426b970ce6c2" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==4.5.2" }, "pytest-factoryboy": { @@ -1624,6 +1667,7 @@ "sha256:7275a52299b20c0f58b63fdf7326b3fd2b7cbefbdaa90fdcfc776bbe92197484" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.5.1" }, "pytest-mock": { @@ -1632,6 +1676,7 @@ "sha256:9f732204aff799161cea6f818366bd254b41dbdfb6fd8fee4e04d332aba011d4" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==3.11.0" }, "python-dateutil": { @@ -1644,7 +1689,9 @@ }, "pyyaml": { "hashes": [ + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", @@ -1652,7 +1699,10 @@ "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", @@ -1660,9 +1710,12 @@ "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", @@ -1677,7 +1730,9 @@ "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", @@ -1706,11 +1761,11 @@ }, "s3transfer": { "hashes": [ - "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346", - "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9" + "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084", + "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861" ], "markers": "python_version >= '3.7'", - "version": "==0.6.1" + "version": "==0.6.2" }, "six": { "hashes": [ @@ -1737,19 +1792,19 @@ }, "typing-extensions": { "hashes": [ - "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", - "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" ], "markers": "python_version < '3.11'", - "version": "==4.7.1" + "version": "==4.8.0" }, "urllib3": { "hashes": [ - "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f", - "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14" + "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", + "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.16" + "version": "==1.26.18" }, "watchdog": { "hashes": [ diff --git a/tdrs-backend/clamav-router/nginx.conf b/tdrs-backend/clamav-router/nginx.conf index 50cc6395b..35e95e7a7 100644 --- a/tdrs-backend/clamav-router/nginx.conf +++ b/tdrs-backend/clamav-router/nginx.conf @@ -4,14 +4,18 @@ events { worker_connections 1024; # This opens a route to clamav prod http{ server { + client_max_body_size 100m; listen {{port}}; + client_max_body_size 100m; location /scan { proxy_pass http://tanf-prod-clamav-rest.apps.internal:9000/scan; proxy_pass_request_headers on; } } server { + client_max_body_size 100m; listen 9000; + client_max_body_size 100m; location /scan { proxy_pass http://tanf-prod-clamav-rest.apps.internal:9000/scan; proxy_pass_request_headers on; diff --git a/tdrs-backend/docker-compose.yml b/tdrs-backend/docker-compose.yml index 69e08bc64..ca5c82aa2 100644 --- a/tdrs-backend/docker-compose.yml +++ b/tdrs-backend/docker-compose.yml @@ -45,12 +45,68 @@ services: # Copy in the Localstack setup script to configure any buckets needed - ../scripts/localstack-setup.sh:/docker-entrypoint-initaws.d/localstack-setup.sh + kibana: + image: elastic/kibana:7.17.10 + ports: + - 5601:5601 + environment: + - xpack.security.encryptionKey="something_at_least_32_characters" + - xpack.security.session.idleTimeout="1h" + - xpack.security.session.lifespan="30d" + volumes: + - ./kibana.yml:/usr/share/kibana/config/kibana.yml + depends_on: + - elastic + + # This task only needs to be performed once, during the *initial* startup of + # the stack. Any subsequent run will reset the passwords of existing users to + # the values defined inside the '.env' file, and the built-in roles to their + # default permissions. + # + # By default, it is excluded from the services started by 'docker compose up' + # due to the non-default profile it belongs to. To run it, either provide the + # '--profile=elastic_setup' CLI flag to Compose commands, or "up" the service by name + # such as 'docker compose up elastic_setup'. + elastic_setup: + profiles: + - elastic_setup + build: + context: elastic_setup/ + args: + ELASTIC_VERSION: "7.17.6" + init: true + environment: + ELASTIC_PASSWORD: ${ELASTIC_PASSWORD:-} + KIBANA_SYSTEM_PASSWORD: ${KIBANA_SYSTEM_PASSWORD:-} + DATA_ANALYST_PASSWORD: ${DATA_ANALYST_PASSWORD:-} + OFA_SYS_ADMIN_PASSWORD: ${OFA_SYS_ADMIN_PASSWORD:-} + ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-} + depends_on: + - elastic + network_mode: "host" + elastic: image: elasticsearch:7.17.6 environment: - discovery.type=single-node - - xpack.security.enabled=false - logger.discovery.level=debug + - xpack.security.enabled=true + # - xpack.security.authc.realms.oidc.hhsams # The name of our realm + # - xpack.security.authc.realms.oidc.hhsams.order=2 # Should be highest in the realm chain + # - xpack.security.authc.realms.oidc.hhsams.rp.client_id="the_client_id" # assigned to the Elastic Stack RP by the OP upon registration. + # - xpack.security.authc.realms.oidc.hhsams.rp.response_type=code # controls which OpenID Connect authentication flow this RP supports: code, token, id_token + # - xpack.security.authc.realms.oidc.hhsams.rp.redirect_uri="https://kibana.example.org:5601/api/security/oidc/callback" + # - xpack.security.authc.realms.oidc.hhsams.op.issuer="https://op.example.org" # Issuer Identifier is usually a case sensitive UR + # - xpack.security.authc.realms.oidc.hhsams.op.authorization_endpoint="https://op.example.org/oauth2/v1/authorize" # The URL for the Authorization Endpoint in the OP + # - xpack.security.authc.realms.oidc.hhsams.op.token_endpoint="https://op.example.org/oauth2/v1/token" # The URL for the Token Endpoint in the OpenID Connect Provider + # - xpack.security.authc.realms.oidc.hhsams.op.jwkset_path=oidc/jwkset.json # The path to a file or a URL containing a JSON Web Key Set with the key material that the OpenID Connect Provider uses for signing tokens and claims responses. OP should provide this. + # - xpack.security.authc.realms.oidc.hhsams.op.userinfo_endpoint="https://op.example.org/oauth2/v1/userinfo" # (Optional) The URL for the UserInfo Endpoint in the OpenID Connect Provider. + # - xpack.security.authc.realms.oidc.hhsams.op.endsession_endpoint="https://op.example.org/oauth2/v1/logout" # (Optional) The URL to the End Session Endpoint in the OpenID Connect Provider. + # - xpack.security.authc.realms.oidc.hhsams.rp.post_logout_redirect_uri="https://kibana.example.org:5601/security/logged_out" # (Optional) The Redirect URL where the OpenID Connect Provider should redirect the user after a successful Single Logout (assuming op.endsession_endpoint above is also set). + # - xpack.security.authc.realms.oidc.hhsams.claims.principal=sub + # - xpack.security.authc.realms.oidc.hhsams.claims.groups="http://example.info/claims/groups" + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD:-} + - KIBANA_SYSTEM_PASSWORD=${KIBANA_SYSTEM_PASSWORD:-} ports: - 9200:9200 - 9300:9300 diff --git a/tdrs-backend/elastic_setup/Dockerfile b/tdrs-backend/elastic_setup/Dockerfile new file mode 100644 index 000000000..32e6429f6 --- /dev/null +++ b/tdrs-backend/elastic_setup/Dockerfile @@ -0,0 +1,10 @@ +ARG ELASTIC_VERSION + +FROM docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION} + +COPY . / + +RUN ["chmod", "+x", "/entrypoint.sh"] +RUN ["chmod", "+x", "/util.sh"] + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/tdrs-backend/elastic_setup/entrypoint.sh b/tdrs-backend/elastic_setup/entrypoint.sh new file mode 100644 index 000000000..7dd25672a --- /dev/null +++ b/tdrs-backend/elastic_setup/entrypoint.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash + +set -eu +set -o pipefail + +source "${BASH_SOURCE[0]%/*}"/util.sh + + +# -------------------------------------------------------- +# Users declarations + +declare -A users_passwords +users_passwords=( + [kibana_system]="${KIBANA_SYSTEM_PASSWORD:-}" + [data_analyst]="${DATA_ANALYST_PASSWORD:-}" + [ofa_sys_admin]="${OFA_SYS_ADMIN_PASSWORD:-}" +) + +declare -A users_roles +users_roles=( + [kibana_system]='kibana_system' + [data_analyst]='editor' + [ofa_sys_admin]='kibana_admin' +) + +# -------------------------------------------------------- +# Roles declarations for custom roles + +declare -A roles_files +roles_files=( + +) + +# -------------------------------------------------------- + + +log 'Waiting for availability of Elasticsearch. This can take several minutes.' + +declare -i exit_code=0 +wait_for_elasticsearch || exit_code=$? + +if ((exit_code)); then + case $exit_code in + 6) + suberr 'Could not resolve host. Is Elasticsearch running?' + ;; + 7) + suberr 'Failed to connect to host. Is Elasticsearch healthy?' + ;; + 28) + suberr 'Timeout connecting to host. Is Elasticsearch healthy?' + ;; + *) + suberr "Connection to Elasticsearch failed. Exit code: ${exit_code}" + ;; + esac + + exit $exit_code +fi + +sublog 'Elasticsearch is running' + +log 'Waiting for initialization of built-in users' + +wait_for_builtin_users || exit_code=$? + +if ((exit_code)); then + suberr 'Timed out waiting for condition' + exit $exit_code +fi + +sublog 'Built-in users were initialized' + +for role in "${!roles_files[@]}"; do + log "Role '$role'" + + declare body_file + body_file="${BASH_SOURCE[0]%/*}/roles/${roles_files[$role]:-}" + if [[ ! -f "${body_file:-}" ]]; then + sublog "No role body found at '${body_file}', skipping" + continue + fi + + sublog 'Creating/updating' + ensure_role "$role" "$(<"${body_file}")" +done + +for user in "${!users_passwords[@]}"; do + log "User '$user'" + if [[ -z "${users_passwords[$user]:-}" ]]; then + sublog 'No password defined, skipping' + continue + fi + + declare -i user_exists=0 + user_exists="$(check_user_exists "$user")" + + if ((user_exists)); then + sublog 'User exists, setting password' + set_user_password "$user" "${users_passwords[$user]}" + else + if [[ -z "${users_roles[$user]:-}" ]]; then + suberr ' No role defined, skipping creation' + continue + fi + + sublog 'User does not exist, creating' + create_user "$user" "${users_passwords[$user]}" "${users_roles[$user]}" + fi +done + +log "Elastic setup completed. Exiting with code: $?" diff --git a/tdrs-backend/elastic_setup/util.sh b/tdrs-backend/elastic_setup/util.sh new file mode 100644 index 000000000..ce4c0720e --- /dev/null +++ b/tdrs-backend/elastic_setup/util.sh @@ -0,0 +1,241 @@ +#!/usr/bin/env bash + +# Log a message. +function log { + echo "[+] $1" +} + +# Log a message at a sub-level. +function sublog { + echo " ⠿ $1" +} + +# Log an error. +function err { + echo "[x] $1" >&2 +} + +# Log an error at a sub-level. +function suberr { + echo " ⠍ $1" >&2 +} + +# Poll the 'elasticsearch' service until it responds with HTTP code 200. +function wait_for_elasticsearch { + local elasticsearch_host="${ELASTICSEARCH_HOST:-elastic}" + + local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}' "http://${elasticsearch_host}:9200/" ) + + if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then + args+=( '-u' "elastic:${ELASTIC_PASSWORD}" ) + fi + + local -i result=1 + local output + + # retry for max 300s (60*5s) + echo Querying elastic with: curl "${args[@]}" + for _ in $(seq 1 60); do + local -i exit_code=0 + output="$(curl "${args[@]}")" || exit_code=$? + + if ((exit_code)); then + result=$exit_code + fi + + if [[ "${output: -3}" -eq 200 ]]; then + result=0 + break + fi + + sleep 5 + done + + if ((result)) && [[ "${output: -3}" -ne 000 ]]; then + echo -e "\n${output::-3}" + fi + + return $result +} + +# Poll the Elasticsearch users API until it returns users. +function wait_for_builtin_users { + local elasticsearch_host="${ELASTICSEARCH_HOST:-elastic}" + + local -a args=( '-s' '-D-' '-m15' "http://${elasticsearch_host}:9200/_security/user?pretty" ) + + if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then + args+=( '-u' "elastic:${ELASTIC_PASSWORD}" ) + fi + + local -i result=1 + + local line + local -i exit_code + local -i num_users + + # retry for max 30s (30*1s) + for _ in $(seq 1 30); do + num_users=0 + + # read exits with a non-zero code if the last read input doesn't end + # with a newline character. The printf without newline that follows the + # curl command ensures that the final input not only contains curl's + # exit code, but causes read to fail so we can capture the return value. + # Ref. https://unix.stackexchange.com/a/176703/152409 + while IFS= read -r line || ! exit_code="$line"; do + if [[ "$line" =~ _reserved.+true ]]; then + (( num_users++ )) + fi + done < <(curl "${args[@]}"; printf '%s' "$?") + + if ((exit_code)); then + result=$exit_code + fi + + # we expect more than just the 'elastic' user in the result + if (( num_users > 1 )); then + result=0 + break + fi + + sleep 1 + done + + return $result +} + +# Verify that the given Elasticsearch user exists. +function check_user_exists { + local username=$1 + + local elasticsearch_host="${ELASTICSEARCH_HOST:-elastic}" + + local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}' + "http://${elasticsearch_host}:9200/_security/user/${username}" + ) + + if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then + args+=( '-u' "elastic:${ELASTIC_PASSWORD}" ) + fi + + local -i result=1 + local -i exists=0 + local output + + output="$(curl "${args[@]}")" + if [[ "${output: -3}" -eq 200 || "${output: -3}" -eq 404 ]]; then + result=0 + fi + if [[ "${output: -3}" -eq 200 ]]; then + exists=1 + fi + + if ((result)); then + echo -e "\n${output::-3}" + else + echo "$exists" + fi + + return $result +} + +# Set password of a given Elasticsearch user. +function set_user_password { + local username=$1 + local password=$2 + + local elasticsearch_host="${ELASTICSEARCH_HOST:-elastic}" + + local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}' + "http://${elasticsearch_host}:9200/_security/user/${username}/_password" + '-X' 'POST' + '-H' 'Content-Type: application/json' + '-d' "{\"password\" : \"${password}\"}" + ) + + if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then + args+=( '-u' "elastic:${ELASTIC_PASSWORD}" ) + fi + + local -i result=1 + local output + + output="$(curl "${args[@]}")" + if [[ "${output: -3}" -eq 200 ]]; then + result=0 + fi + + if ((result)); then + echo -e "\n${output::-3}\n" + fi + + return $result +} + +# Create the given Elasticsearch user. +function create_user { + local username=$1 + local password=$2 + local role=$3 + + local elasticsearch_host="${ELASTICSEARCH_HOST:-elastic}" + + local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}' + "http://${elasticsearch_host}:9200/_security/user/${username}" + '-X' 'POST' + '-H' 'Content-Type: application/json' + '-d' "{\"password\":\"${password}\",\"roles\":[\"${role}\"]}" + ) + + if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then + args+=( '-u' "elastic:${ELASTIC_PASSWORD}" ) + fi + + local -i result=1 + local output + + output="$(curl "${args[@]}")" + if [[ "${output: -3}" -eq 200 ]]; then + result=0 + fi + + if ((result)); then + echo -e "\n${output::-3}\n" + fi + + return $result +} + +# Ensure that the given Elasticsearch role is up-to-date, create it if required. +function ensure_role { + local name=$1 + local body=$2 + + local elasticsearch_host="${ELASTICSEARCH_HOST:-elastic}" + + local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}' + "http://${elasticsearch_host}:9200/_security/role/${name}" + '-X' 'POST' + '-H' 'Content-Type: application/json' + '-d' "$body" + ) + + if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then + args+=( '-u' "elastic:${ELASTIC_PASSWORD}" ) + fi + + local -i result=1 + local output + + output="$(curl "${args[@]}")" + if [[ "${output: -3}" -eq 200 ]]; then + result=0 + fi + + if ((result)); then + echo -e "\n${output::-3}\n" + fi + + return $result +} \ No newline at end of file diff --git a/tdrs-backend/kibana.yml b/tdrs-backend/kibana.yml new file mode 100644 index 000000000..e300002ea --- /dev/null +++ b/tdrs-backend/kibana.yml @@ -0,0 +1,4 @@ +elasticsearch.hosts: ["http://elastic:9200"] +server.host: kibana +elasticsearch.username: kibana_system +elasticsearch.password: changeme diff --git a/tdrs-backend/tdpservice/parsers/fields.py b/tdrs-backend/tdpservice/parsers/fields.py index 1487cf498..acd94b14b 100644 --- a/tdrs-backend/tdpservice/parsers/fields.py +++ b/tdrs-backend/tdpservice/parsers/fields.py @@ -1,26 +1,28 @@ """Datafile field representations.""" import logging +from .validators import value_is_empty logger = logging.getLogger(__name__) -def value_is_empty(value, length): - """Handle 'empty' values as field inputs.""" - empty_values = [ - ' '*length, # ' ' - '#'*length, # '#####' - '_'*length, # '_____' - ] - - return value is None or value in empty_values - class Field: """Provides a mapping between a field name and its position.""" - def __init__(self, item, name, type, startIndex, endIndex, required=True, validators=[]): + def __init__( + self, + item, + name, + friendly_name, + type, + startIndex, + endIndex, + required=True, + validators=[], + ): self.item = item self.name = name + self.friendly_name = friendly_name self.type = type self.startIndex = startIndex self.endIndex = endIndex @@ -38,31 +40,41 @@ def __repr__(self): def parse_value(self, line): """Parse the value for a field given a line, startIndex, endIndex, and field type.""" value = line[self.startIndex:self.endIndex] + value_length = self.endIndex-self.startIndex - if value_is_empty(value, self.endIndex-self.startIndex): + if len(value) < value_length or value_is_empty(value, value_length): logger.debug(f"Field: '{self.name}' at position: [{self.startIndex}, {self.endIndex}) is empty.") return None match self.type: - case 'number': + case "number": try: value = int(value) return value except ValueError: logger.error(f"Error parsing field value: {value} to integer.") return None - case 'string': + case "string": return value case _: logger.warn(f"Unknown field type: {self.type}.") return None + class TransformField(Field): """Represents a field that requires some transformation before serializing.""" - def __init__(self, transform_func, item, name, type, startIndex, endIndex, required=True, + def __init__(self, transform_func, item, name, friendly_name, type, startIndex, endIndex, required=True, validators=[], **kwargs): - super().__init__(item, name, type, startIndex, endIndex, required, validators) + super().__init__( + item=item, + name=name, + type=type, + friendly_name=friendly_name, + startIndex=startIndex, + endIndex=endIndex, + required=required, + validators=validators) self.transform_func = transform_func self.kwargs = kwargs diff --git a/tdrs-backend/tdpservice/parsers/models.py b/tdrs-backend/tdpservice/parsers/models.py index 12c70a2c0..c0c15f4bf 100644 --- a/tdrs-backend/tdpservice/parsers/models.py +++ b/tdrs-backend/tdpservice/parsers/models.py @@ -93,7 +93,6 @@ class Status(models.TextChoices): def get_status(self): """Set and return the status field based on errors and models associated with datafile.""" errors = ParserError.objects.filter(file=self.datafile) - [print(error) for error in errors] # excluding row-level pre-checks and trailer pre-checks. precheck_errors = errors.filter(error_type=ParserErrorCategoryChoices.PRE_CHECK)\ diff --git a/tdrs-backend/tdpservice/parsers/parse.py b/tdrs-backend/tdpservice/parsers/parse.py index d6cc2ca06..cddf0078a 100644 --- a/tdrs-backend/tdpservice/parsers/parse.py +++ b/tdrs-backend/tdpservice/parsers/parse.py @@ -55,7 +55,6 @@ def parse_datafile(datafile): return errors - def bulk_create_records(unsaved_records, line_number, header_count, batch_size=10000, flush=False): """Bulk create passed in records.""" if (line_number % batch_size == 0 and header_count > 0) or flush: @@ -63,16 +62,21 @@ def bulk_create_records(unsaved_records, line_number, header_count, batch_size=1 try: num_created = 0 num_expected = 0 - for model, records in unsaved_records.items(): + num_indices_created = 0 + for model, doc_records_tuple in unsaved_records.items(): + document = doc_records_tuple[0] + records = doc_records_tuple[1] num_expected += len(records) - objs_created = model.objects.bulk_create(records) - for obj in objs_created: obj.save() - num_created += len(objs_created) + created_objs = model.objects.bulk_create(records) + num_indices_created += document().update(created_objs)[0] + num_created += len(created_objs) if num_created != num_expected: logger.error(f"Bulk create only created {num_created}/{num_expected}!") + elif num_indices_created != num_expected: + logger.error(f"Bulk Elastic Index create only created {num_indices_created}/{num_expected}!") else: logger.info(f"Created {num_created}/{num_expected} records.") - return num_created == num_expected, {} + return num_created == num_expected and num_indices_created == num_expected, {} except DatabaseError as e: logger.error(f"Encountered error while creating datafile records: {e}") return False, unsaved_records @@ -200,7 +204,7 @@ def parse_datafile_lines(datafile, program_type, section, is_encrypted): if record: s = schema_manager.schemas[i] record.datafile = datafile - unsaved_records.setdefault(s.model, []).append(record) + unsaved_records.setdefault(s.model, (s.document, []))[1].append(record) all_created, unsaved_records = bulk_create_records(unsaved_records, line_number, header_count,) unsaved_parser_errors, num_errors = bulk_create_errors(unsaved_parser_errors, num_errors) @@ -242,7 +246,7 @@ def manager_parse_line(line, schema_manager, generate_error, is_encrypted=False) records = schema_manager.parse_and_validate(line, generate_error) return records except AttributeError as e: - logging.error(e) + logger.error(e) return [(None, False, [ generate_error( schema=None, @@ -253,50 +257,6 @@ def manager_parse_line(line, schema_manager, generate_error, is_encrypted=False) ) ])] - -def get_schema_manager_options(program_type): - """Return the allowed schema options.""" - match program_type: - case 'TAN': - return { - 'A': { - 'T1': schema_defs.tanf.t1, - 'T2': schema_defs.tanf.t2, - 'T3': schema_defs.tanf.t3, - }, - 'C': { - 'T4': schema_defs.tanf.t4, - 'T5': schema_defs.tanf.t5, - }, - 'G': { - 'T6': schema_defs.tanf.t6, - }, - 'S': { - 'T7': schema_defs.tanf.t7, - }, - } - case 'SSP': - return { - 'A': { - 'M1': schema_defs.ssp.m1, - 'M2': schema_defs.ssp.m2, - 'M3': schema_defs.ssp.m3, - }, - 'C': { - # 'M4': schema_options.m4, - # 'M5': schema_options.m5, - }, - 'G': { - # 'M6': schema_options.m6, - }, - 'S': { - # 'M7': schema_options.m7, - }, - } - # case tribal? - return None - - def get_schema_manager(line, section, program_type): """Return the appropriate schema for the line.""" line_type = line[0:2] diff --git a/tdrs-backend/tdpservice/parsers/row_schema.py b/tdrs-backend/tdpservice/parsers/row_schema.py index 83885042c..184048da8 100644 --- a/tdrs-backend/tdpservice/parsers/row_schema.py +++ b/tdrs-backend/tdpservice/parsers/row_schema.py @@ -1,6 +1,7 @@ """Row schema for datafile.""" from .models import ParserErrorCategoryChoices -from .fields import Field, value_is_empty +from .fields import Field +from .validators import value_is_empty import logging logger = logging.getLogger(__name__) @@ -11,13 +12,15 @@ class RowSchema: def __init__( self, - model=dict, + model, + document, preparsing_validators=[], postparsing_validators=[], fields=[], - quiet_preparser_errors=False + quiet_preparser_errors=False, ): self.model = model + self.document = document self.preparsing_validators = preparsing_validators self.postparsing_validators = postparsing_validators self.fields = fields @@ -150,16 +153,18 @@ def run_postparsing_validators(self, instance, generate_error): errors = [] for validator in self.postparsing_validators: - validator_is_valid, validator_error = validator(instance) + validator_is_valid, validator_error, field_names = validator(instance) is_valid = False if not validator_is_valid else is_valid if validator_error: + # get field from field name + fields = [self.get_field_by_name(name) for name in field_names] errors.append( generate_error( schema=self, error_category=ParserErrorCategoryChoices.VALUE_CONSISTENCY, error_message=validator_error, record=instance, - field=None + field=fields, ) ) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/header.py b/tdrs-backend/tdpservice/parsers/schema_defs/header.py index 96ede4754..78207e4e4 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/header.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/header.py @@ -8,47 +8,123 @@ header = RowSchema( model=dict, + document=None, preparsing_validators=[ validators.hasLength( 23, - lambda value, length: f'Header length is {len(value)} but must be {length} characters.' + lambda value, length: f"Header length is {len(value)} but must be {length} characters.", ), - validators.startsWith('HEADER'), + validators.startsWith("HEADER"), ], postparsing_validators=[], fields=[ - Field(item="2", name='title', type='string', startIndex=0, endIndex=6, required=True, validators=[ - validators.matches('HEADER'), - ]), - Field(item="4", name='year', type='number', startIndex=6, endIndex=10, required=True, validators=[ - validators.isInLimits(2000, 2099) - ]), - Field(item="5", name='quarter', type='string', startIndex=10, endIndex=11, required=True, validators=[ - validators.oneOf(['1', '2', '3', '4']) - ]), - Field(item="6", name='type', type='string', startIndex=11, endIndex=12, required=True, validators=[ - validators.oneOf(['A', 'C', 'G', 'S']) - ]), - Field(item="1", name='state_fips', type='string', startIndex=12, endIndex=14, required=True, validators=[ - validators.oneOf(("01", "02", "04", "05", "06", "08", "09", "10", "11", "12", "13", "15", "16", "17", "18", - "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", - "34", "35", "36", "37", "38", "39", "40", "41", "42", "44", "45", "46", "47", "48", "49", - "50", "51", "53", "54", "55", "56", "66", "72", "78")) - ]), - Field(item="3", name='tribe_code', type='string', startIndex=14, endIndex=17, required=False, validators=[ - validators.isInStringRange(0, 999) - ]), - Field(item="7", name='program_type', type='string', startIndex=17, endIndex=20, required=True, validators=[ - validators.oneOf(['TAN', 'SSP']) - ]), - Field(item="8", name='edit', type='string', startIndex=20, endIndex=21, required=True, validators=[ - validators.oneOf(['1', '2']) - ]), - Field(item="9", name='encryption', type='string', startIndex=21, endIndex=22, required=False, validators=[ - validators.oneOf([' ', 'E']) - ]), - Field(item="10", name='update', type='string', startIndex=22, endIndex=23, required=True, validators=[ - validators.oneOf(['N', 'D', 'U']) - ]), + Field( + item="2", + name="title", + friendly_name="title", + type="string", + startIndex=0, + endIndex=6, + required=True, + validators=[ + validators.matches("HEADER"), + ], + ), + Field( + item="4", + name="year", + friendly_name="year", + type="number", + startIndex=6, + endIndex=10, + required=True, + validators=[validators.isInLimits(2000, 2099)], + ), + Field( + item="5", + name="quarter", + friendly_name="quarter", + type="string", + startIndex=10, + endIndex=11, + required=True, + validators=[validators.oneOf(["1", "2", "3", "4"])], + ), + Field( + item="6", + name="type", + friendly_name="type", + type="string", + startIndex=11, + endIndex=12, + required=True, + validators=[validators.oneOf(["A", "C", "G", "S"])], + ), + Field( + item="1", + name="state_fips", + friendly_name="state fips", + type="string", + startIndex=12, + endIndex=14, + required=True, + validators=[ + validators.oneOf(("01", "02", "04", "05", "06", "08", "09", "10", "11", "12", "13", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", + "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", + "40", "41", "42", "44", "45", "46", "47", "48", "49", "50", "51", "53", + "54", "55", "56", "66", "72", "78")) + ], + ), + Field( + item="3", + name="tribe_code", + friendly_name="tribe code", + type="string", + startIndex=14, + endIndex=17, + required=False, + validators=[validators.isInStringRange(0, 999)], + ), + Field( + item="7", + name="program_type", + friendly_name="program type", + type="string", + startIndex=17, + endIndex=20, + required=True, + validators=[validators.oneOf(["TAN", "SSP"])], + ), + Field( + item="8", + name="edit", + friendly_name="edit", + type="string", + startIndex=20, + endIndex=21, + required=True, + validators=[validators.oneOf(["1", "2"])], + ), + Field( + item="9", + name="encryption", + friendly_name="encryption", + type="string", + startIndex=21, + endIndex=22, + required=False, + validators=[validators.oneOf([" ", "E"])], + ), + Field( + item="10", + name="update", + friendly_name="update", + type="string", + startIndex=22, + endIndex=23, + required=True, + validators=[validators.oneOf(["N", "D", "U"])], + ), ], ) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/__init__.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/__init__.py index b3542bf07..ad448eef7 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/__init__.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/__init__.py @@ -1,9 +1,15 @@ from .m1 import m1 from .m2 import m2 from .m3 import m3 +from .m4 import m4 +from .m5 import m5 from .m6 import m6 +from .m7 import m7 m1 = m1 m2 = m2 m3 = m3 +m4 = m4 +m5 = m5 m6 = m6 +m7 = m7 diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m1.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m1.py index 479a243cf..ec0caafab 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m1.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m1.py @@ -1,16 +1,18 @@ """Schema for SSP M1 record type.""" -from ...util import SchemaManager -from ...fields import Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.fields import Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.ssp import SSP_M1 +from tdpservice.search_indexes.documents.ssp import SSP_M1DataSubmissionDocument m1 = SchemaManager( - schemas=[ + schemas=[ RowSchema( model=SSP_M1, + document=SSP_M1DataSubmissionDocument, preparsing_validators=[ validators.hasLength(150), ], @@ -73,175 +75,175 @@ ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), + friendly_name="record type", required=True, validators=[]), Field(item="3", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[ + friendly_name="reporting month and year", required=True, validators=[ validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid(), ]), Field(item="5", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[ + friendly_name="case number", required=True, validators=[ validators.isAlphaNumeric() ]), Field(item="2", name='COUNTY_FIPS_CODE', type='string', startIndex=19, endIndex=22, - required=True, validators=[ + friendly_name="county fips code", required=True, validators=[ validators.isNumber(), ]), Field(item="4", name='STRATUM', type='string', startIndex=22, endIndex=24, - required=False, validators=[ + friendly_name="stratum", required=False, validators=[ validators.isInStringRange(0, 99), ]), Field(item="6", name='ZIP_CODE', type='string', startIndex=24, endIndex=29, - required=True, validators=[ + friendly_name="zip code", required=True, validators=[ validators.isNumber(), ]), Field(item="7", name='DISPOSITION', type='number', startIndex=29, endIndex=30, - required=True, validators=[ + friendly_name="disposition", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="8", name='NBR_FAMILY_MEMBERS', type='number', startIndex=30, endIndex=32, - required=True, validators=[ + friendly_name="number of family members", required=True, validators=[ validators.isInLimits(1, 99), ]), Field(item="9", name='FAMILY_TYPE', type='number', startIndex=32, endIndex=33, - required=True, validators=[ + friendly_name="family type", required=True, validators=[ validators.isInLimits(1, 3), ]), Field(item="10", name='TANF_ASST_IN_6MONTHS', type='number', startIndex=33, endIndex=34, - required=True, validators=[ + friendly_name="tanf assistance in 6 months", required=True, validators=[ validators.isInLimits(1, 3), ]), Field(item="11", name='RECEIVES_SUB_HOUSING', type='number', startIndex=34, endIndex=35, - required=True, validators=[ + friendly_name="receives subsidized housing", required=True, validators=[ validators.isInLimits(1, 2), ]), Field(item="12", name='RECEIVES_MED_ASSISTANCE', type='number', startIndex=35, endIndex=36, - required=True, validators=[ + friendly_name="receives medical assistance", required=True, validators=[ validators.isInLimits(1, 2), ]), Field(item="13", name='RECEIVES_FOOD_STAMPS', type='number', startIndex=36, endIndex=37, - required=False, validators=[ + friendly_name="receives food assistance", required=False, validators=[ validators.isInLimits(0, 2), ]), Field(item="14", name='AMT_FOOD_STAMP_ASSISTANCE', type='number', startIndex=37, endIndex=41, - required=True, validators=[ + friendly_name="amount of food stamp assistance/stamps", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="15", name='RECEIVES_SUB_CC', type='number', startIndex=41, endIndex=42, - required=False, validators=[ + friendly_name="receives subsidized child care", required=False, validators=[ validators.isInLimits(0, 2), ]), Field(item="16", name='AMT_SUB_CC', type='number', startIndex=42, endIndex=46, - required=True, validators=[ + friendly_name="amount of subsidized child care", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="17", name='CHILD_SUPPORT_AMT', type='number', startIndex=46, endIndex=50, - required=True, validators=[ + friendly_name="child support amount", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="18", name='FAMILY_CASH_RESOURCES', type='number', startIndex=50, endIndex=54, - required=True, validators=[ + friendly_name="family cash resources", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="19A", name='CASH_AMOUNT', type='number', startIndex=54, endIndex=58, - required=True, validators=[ + friendly_name="cash amount", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="19B", name='NBR_MONTHS', type='number', startIndex=58, endIndex=61, - required=True, validators=[ + friendly_name="number of months", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="20A", name='CC_AMOUNT', type='number', startIndex=61, endIndex=65, - required=True, validators=[ + friendly_name="child care amount", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="20B", name='CHILDREN_COVERED', type='number', startIndex=65, endIndex=67, - required=True, validators=[ + friendly_name="children covered", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="20C", name='CC_NBR_MONTHS', type='number', startIndex=67, endIndex=70, - required=True, validators=[ + friendly_name="child care - number of months", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="21A", name='TRANSP_AMOUNT', type='number', startIndex=70, endIndex=74, - required=True, validators=[ + friendly_name="transportation amount", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="21B", name='TRANSP_NBR_MONTHS', type='number', startIndex=74, endIndex=77, - required=True, validators=[ + friendly_name="transportation number of months", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="22A", name='TRANSITION_SERVICES_AMOUNT', type='number', startIndex=77, endIndex=81, - required=False, validators=[ + friendly_name="transition services amount", required=False, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="22B", name='TRANSITION_NBR_MONTHS', type='number', startIndex=81, endIndex=84, - required=False, validators=[ + friendly_name="transition services number of months", required=False, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="23A", name='OTHER_AMOUNT', type='number', startIndex=84, endIndex=88, - required=False, validators=[ + friendly_name="other amount", required=False, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="23B", name='OTHER_NBR_MONTHS', type='number', startIndex=88, endIndex=91, - required=False, validators=[ + friendly_name="other number of months", required=False, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="24AI", name='SANC_REDUCTION_AMT', type='number', startIndex=91, endIndex=95, - required=True, validators=[ + friendly_name="sanction reduction amount", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="24AII", name='WORK_REQ_SANCTION', type='number', startIndex=95, endIndex=96, - required=True, validators=[ + friendly_name="work requirements sanction", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="24AIII", name='FAMILY_SANC_ADULT', type='number', startIndex=96, endIndex=97, - required=False, validators=[ + friendly_name="family sanction for adult", required=False, validators=[ validators.isInLimits(0, 9), ]), Field(item="24AIV", name='SANC_TEEN_PARENT', type='number', startIndex=97, endIndex=98, - required=True, validators=[ + friendly_name="sanction for teen parent", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="24AV", name='NON_COOPERATION_CSE', type='number', startIndex=98, endIndex=99, - required=True, validators=[ + friendly_name="non-cooperation with child support", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="24AVI", name='FAILURE_TO_COMPLY', type='number', startIndex=99, endIndex=100, - required=True, validators=[ + friendly_name="failure to comply", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="24AVII", name='OTHER_SANCTION', type='number', startIndex=100, endIndex=101, - required=True, validators=[ + friendly_name="other sanction", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="24B", name='RECOUPMENT_PRIOR_OVRPMT', type='number', startIndex=101, endIndex=105, - required=True, validators=[ + friendly_name="recoupment prior overpayment", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="24CI", name='OTHER_TOTAL_REDUCTIONS', type='number', startIndex=105, endIndex=109, - required=True, validators=[ + friendly_name="other total reductions", required=True, validators=[ validators.isLargerThanOrEqualTo(0), ]), Field(item="24CII", name='FAMILY_CAP', type='number', startIndex=109, endIndex=110, - required=True, validators=[ + friendly_name="family cap", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="24CIII", name='REDUCTIONS_ON_RECEIPTS', type='number', startIndex=110, endIndex=111, - required=True, validators=[ + friendly_name="reductions on receipts", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="24CIV", name='OTHER_NON_SANCTION', type='number', startIndex=111, endIndex=112, - required=True, validators=[ + friendly_name="other, non sanction", required=True, validators=[ validators.oneOf([1, 2]), ]), Field(item="25", name='WAIVER_EVAL_CONTROL_GRPS', type='number', startIndex=112, endIndex=113, - required=False, validators=[ + friendly_name="waiver evaluation experimental and control groups", required=False, validators=[ validators.isInLimits(0, 9), ]), Field(item="-1", name='BLANK', type='string', startIndex=113, endIndex=150, - required=False, validators=[]), + friendly_name="blank", required=False, validators=[]), ] ) - ] - ) + ] +) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m2.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m2.py index 58c99ccac..4c15f014d 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m2.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m2.py @@ -1,18 +1,20 @@ """Schema for SSP M1 record type.""" -from ...util import SchemaManager -from ...transforms import ssp_ssn_decryption_func -from ...fields import TransformField, Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.transforms import ssp_ssn_decryption_func +from tdpservice.parsers.fields import TransformField, Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.ssp import SSP_M2 +from tdpservice.search_indexes.documents.ssp import SSP_M2DataSubmissionDocument m2 = SchemaManager( - schemas=[ + schemas=[ RowSchema( model=SSP_M2, + document=SSP_M2DataSubmissionDocument, preparsing_validators=[ validators.hasLength(150), ], @@ -94,116 +96,119 @@ ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), + friendly_name="record type", required=True, validators=[]), Field(item="3", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[ + friendly_name="reporting month and year", required=True, validators=[ validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid(), ]), Field(item="5", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[ + friendly_name="case number", required=True, validators=[ validators.isAlphaNumeric() ]), Field(item="26", name='FAMILY_AFFILIATION', type='number', startIndex=19, endIndex=20, - required=True, validators=[ + friendly_name="family affiliation", required=True, validators=[ validators.oneOf([1, 2, 3, 5]) ]), Field(item="27", name='NONCUSTODIAL_PARENT', type='number', startIndex=20, endIndex=21, - required=True, validators=[ + friendly_name="noncustodial parent", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="28", name='DATE_OF_BIRTH', type='number', startIndex=21, endIndex=29, - required=True, validators=[ + friendly_name="date of birth", required=True, validators=[ validators.isLargerThan(0) ]), TransformField(transform_func=ssp_ssn_decryption_func, item="29", name='SSN', type='string', startIndex=29, endIndex=38, required=True, validators=[validators.validateSSN()], - is_encrypted=False), + friendly_name="social security number - ssn", is_encrypted=False), Field(item="30A", name='RACE_HISPANIC', type='number', startIndex=38, endIndex=39, required=False, - validators=[ + friendly_name="race hispanic", validators=[ validators.isInLimits(0, 2) ]), Field(item="30B", name='RACE_AMER_INDIAN', type='number', startIndex=39, endIndex=40, - required=False, validators=[ + friendly_name="race american indian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="30C", name='RACE_ASIAN', type='number', startIndex=40, endIndex=41, - required=False, validators=[ + friendly_name="race asian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="30D", name='RACE_BLACK', type='number', startIndex=41, endIndex=42, - required=False, validators=[ + friendly_name="race black", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="30E", name='RACE_HAWAIIAN', type='number', startIndex=42, endIndex=43, - required=False, validators=[ + friendly_name="race hawaiian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="30F", name='RACE_WHITE', type='number', startIndex=43, endIndex=44, - required=False, validators=[ + friendly_name="race white", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="31", name='GENDER', type='number', startIndex=44, endIndex=45, - required=True, validators=[ + friendly_name="gender", required=True, validators=[ validators.isLargerThanOrEqualTo(0) ]), Field(item="32A", name='FED_OASDI_PROGRAM', type='number', startIndex=45, endIndex=46, - required=True, validators=[ + friendly_name="federal old-age survivors and disability insurance program", required=True, + validators=[ validators.oneOf([1, 2]) ]), Field(item="32B", name='FED_DISABILITY_STATUS', type='number', startIndex=46, endIndex=47, - required=True, validators=[ + friendly_name="federal disability status", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="32C", name='DISABLED_TITLE_XIVAPDT', type='number', startIndex=47, endIndex=48, - required=True, validators=[ + friendly_name="receives aid to the permanently and totally disabled" + + " under title xiv-apdt of the social security act", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="32D", name='AID_AGED_BLIND', type='number', startIndex=48, endIndex=49, + friendly_name="receives from the aid to the aged, blind, and disabled program", required=False, validators=[ validators.isLargerThanOrEqualTo(0) ]), Field(item="32E", name='RECEIVE_SSI', type='number', startIndex=49, endIndex=50, - required=True, validators=[ + friendly_name="receives social security income", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="33", name='MARITAL_STATUS', type='number', startIndex=50, endIndex=51, - required=False, validators=[ + friendly_name="marital status", required=False, validators=[ validators.isInLimits(0, 5) ]), Field(item="34", name='RELATIONSHIP_HOH', type='string', startIndex=51, endIndex=53, - required=True, validators=[ + friendly_name="relationship to head of household", required=True, validators=[ validators.isInStringRange(1, 10) ]), Field(item="35", name='PARENT_MINOR_CHILD', type='number', startIndex=53, endIndex=54, - required=False, validators=[ + friendly_name="parent of minor child", required=False, validators=[ validators.isInLimits(0, 3) ]), Field(item="36", name='NEEDS_PREGNANT_WOMAN', type='number', startIndex=54, endIndex=55, - required=False, validators=[ + friendly_name="needs of pregnant woman", required=False, validators=[ validators.isInLimits(0, 9) ]), Field(item="37", name='EDUCATION_LEVEL', type='number', startIndex=55, endIndex=57, - required=False, validators=[ + friendly_name="education level", required=False, validators=[ validators.or_validators( validators.isInLimits(0, 16), validators.isInLimits(98, 99) ) ]), Field(item="38", name='CITIZENSHIP_STATUS', type='number', startIndex=57, endIndex=58, - required=False, validators=[ + friendly_name="citizenship status", required=False, validators=[ validators.oneOf([0, 1, 2, 3, 9]) ]), Field(item="39", name='COOPERATION_CHILD_SUPPORT', type='number', startIndex=58, endIndex=59, - required=False, validators=[ + friendly_name="cooperation with child support", required=False, validators=[ validators.oneOf([0, 1, 2, 9]) ]), Field(item="40", name='EMPLOYMENT_STATUS', type='number', startIndex=59, endIndex=60, - required=False, validators=[ + friendly_name="employment status", required=False, validators=[ validators.isInLimits(0, 3) ]), Field(item="41", name='WORK_ELIGIBLE_INDICATOR', type='number', startIndex=60, endIndex=62, - required=True, validators=[ + friendly_name="work eligible indicator", required=True, validators=[ validators.or_validators( validators.isInLimits(1, 4), validators.isInLimits(6, 9), @@ -211,158 +216,159 @@ ) ]), Field(item="42", name='WORK_PART_STATUS', type='number', startIndex=62, endIndex=64, - required=False, validators=[ + friendly_name="work participation status", required=False, validators=[ validators.oneOf([1, 2, 5, 7, 9, 15, 16, 17, 18, 19, 99]) ]), Field(item="43", name='UNSUB_EMPLOYMENT', type='number', startIndex=64, endIndex=66, - required=False, validators=[ + friendly_name="unsubsidized employment", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="44", name='SUB_PRIVATE_EMPLOYMENT', type='number', startIndex=66, endIndex=68, - required=False, validators=[ + friendly_name="subsidized private employment", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="45", name='SUB_PUBLIC_EMPLOYMENT', type='number', startIndex=68, endIndex=70, - required=False, validators=[ + friendly_name="subsidized public employment", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="46A", name='WORK_EXPERIENCE_HOP', type='number', startIndex=70, endIndex=72, - required=False, validators=[ + friendly_name="work experience - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="46B", name='WORK_EXPERIENCE_EA', type='number', startIndex=72, endIndex=74, - required=False, validators=[ + friendly_name="work experience - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="46C", name='WORK_EXPERIENCE_HOL', type='number', startIndex=74, endIndex=76, - required=False, validators=[ + friendly_name="work experience hours - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="47", name='OJT', type='number', startIndex=76, endIndex=78, - required=False, validators=[ + friendly_name="OJT", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="48A", name='JOB_SEARCH_HOP', type='number', startIndex=78, endIndex=80, - required=False, validators=[ + friendly_name="job search - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="48B", name='JOB_SEARCH_EA', type='number', startIndex=80, endIndex=82, - required=False, validators=[ + friendly_name="job search - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="48C", name='JOB_SEARCH_HOL', type='number', startIndex=82, endIndex=84, - required=False, validators=[ + friendly_name="job search - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="49A", name='COMM_SERVICES_HOP', type='number', startIndex=84, endIndex=86, - required=False, validators=[ + friendly_name="community services - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="49B", name='COMM_SERVICES_EA', type='number', startIndex=86, endIndex=88, - required=False, validators=[ + friendly_name="community services - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="49C", name='COMM_SERVICES_HOL', type='number', startIndex=88, endIndex=90, - required=False, validators=[ + friendly_name="community services - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="50A", name='VOCATIONAL_ED_TRAINING_HOP', type='number', startIndex=90, endIndex=92, - required=False, validators=[ + friendly_name="vocational education training - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="50B", name='VOCATIONAL_ED_TRAINING_EA', type='number', startIndex=92, endIndex=94, - required=False, validators=[ + friendly_name="vocational education training - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="50C", name='VOCATIONAL_ED_TRAINING_HOL', type='number', startIndex=94, endIndex=96, - required=False, validators=[ + friendly_name="vocational education training - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="51A", name='JOB_SKILLS_TRAINING_HOP', type='number', startIndex=96, endIndex=98, - required=False, validators=[ + friendly_name="job skills training - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="51B", name='JOB_SKILLS_TRAINING_EA', type='number', startIndex=98, endIndex=100, - required=False, validators=[ + friendly_name="job skills training - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="51C", name='JOB_SKILLS_TRAINING_HOL', type='number', startIndex=100, endIndex=102, - required=False, validators=[ + friendly_name="job skills training - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="52A", name='ED_NO_HIGH_SCHOOL_DIPL_HOP', type='number', startIndex=102, endIndex=104, + friendly_name="education no high school diploma - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="52B", name='ED_NO_HIGH_SCHOOL_DIPL_EA', type='number', startIndex=104, endIndex=106, - required=False, validators=[ + friendly_name="education no high school diploma - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="52C", name='ED_NO_HIGH_SCHOOL_DIPL_HOL', type='number', startIndex=106, endIndex=108, - required=False, validators=[ + friendly_name="education no high school diploma - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="53A", name='SCHOOL_ATTENDENCE_HOP', type='number', startIndex=108, endIndex=110, - required=False, validators=[ + friendly_name="school attendance - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="53B", name='SCHOOL_ATTENDENCE_EA', type='number', startIndex=110, endIndex=112, - required=False, validators=[ + friendly_name="school attendance - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="53C", name='SCHOOL_ATTENDENCE_HOL', type='number', startIndex=112, endIndex=114, - required=False, validators=[ + friendly_name="school attendance - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="54A", name='PROVIDE_CC_HOP', type='number', startIndex=114, endIndex=116, - required=False, validators=[ + friendly_name="provide child care - hours of participation", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="54B", name='PROVIDE_CC_EA', type='number', startIndex=116, endIndex=118, - required=False, validators=[ + friendly_name="provide child care - excused absence", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="54C", name='PROVIDE_CC_HOL', type='number', startIndex=118, endIndex=120, - required=False, validators=[ + friendly_name="provide child care - holiday", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="55", name='OTHER_WORK_ACTIVITIES', type='number', startIndex=120, endIndex=122, - required=False, validators=[ + friendly_name="other work activities", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="56", name='DEEMED_HOURS_FOR_OVERALL', type='number', startIndex=122, endIndex=124, - required=False, validators=[ + friendly_name="deemed hours for overall", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="57", name='DEEMED_HOURS_FOR_TWO_PARENT', type='number', startIndex=124, endIndex=126, - required=False, validators=[ + friendly_name="deemed hours for two parents", required=False, validators=[ validators.isInLimits(0, 99) ]), Field(item="58", name='EARNED_INCOME', type='number', startIndex=126, endIndex=130, - required=True, validators=[ + friendly_name="earned income", required=True, validators=[ validators.isInLimits(0, 9999) ]), Field(item="59A", name='UNEARNED_INCOME_TAX_CREDIT', type='number', startIndex=130, endIndex=134, - required=False, validators=[ + friendly_name="unearned income tax credit", required=False, validators=[ validators.isInLimits(0, 9999) ]), Field(item="59B", name='UNEARNED_SOCIAL_SECURITY', type='number', startIndex=134, endIndex=138, - required=True, validators=[ + friendly_name="unearned social security", required=True, validators=[ validators.isInLimits(0, 9999) ]), Field(item="59C", name='UNEARNED_SSI', type='number', startIndex=138, endIndex=142, - required=True, validators=[ + friendly_name="unearned ssi benefit", required=True, validators=[ validators.isInLimits(0, 9999) ]), Field(item="59D", name='UNEARNED_WORKERS_COMP', type='number', startIndex=142, endIndex=146, - required=True, validators=[ + friendly_name="unearned workers compensation", required=True, validators=[ validators.isInLimits(0, 9999) ]), Field(item="59E", name='OTHER_UNEARNED_INCOME', type='number', startIndex=146, endIndex=150, - required=True, validators=[ + friendly_name="other unearned income", required=True, validators=[ validators.isInLimits(0, 9999) ]), ], ) - ] - ) + ] +) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m3.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m3.py index 38e66ee35..92b0bfd87 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m3.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m3.py @@ -1,15 +1,17 @@ """Schema for SSP M1 record type.""" -from ...util import SchemaManager -from ...transforms import ssp_ssn_decryption_func -from ...fields import TransformField, Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.transforms import ssp_ssn_decryption_func +from tdpservice.parsers.fields import TransformField, Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.ssp import SSP_M3 +from tdpservice.search_indexes.documents.ssp import SSP_M3DataSubmissionDocument first_part_schema = RowSchema( model=SSP_M3, + document=SSP_M3DataSubmissionDocument, preparsing_validators=[ validators.notEmpty(start=19, end=60), ], @@ -65,90 +67,91 @@ ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), + friendly_name="record type", required=True, validators=[]), Field(item="3", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[ + friendly_name="reporting month and year", required=True, validators=[ validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid(), ]), Field(item="5", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[ + friendly_name="case number", required=True, validators=[ validators.isAlphaNumeric() ]), Field(item="60", name='FAMILY_AFFILIATION', type='number', startIndex=19, endIndex=20, - required=True, validators=[ + friendly_name="family affiliation", required=True, validators=[ validators.oneOf([1, 2, 4]) ]), Field(item="61", name='DATE_OF_BIRTH', type='string', startIndex=20, endIndex=28, - required=True, validators=[ + friendly_name="date of birth", required=True, validators=[ validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid(), ]), TransformField(transform_func=ssp_ssn_decryption_func, item="62", name='SSN', type='string', startIndex=28, - endIndex=37, required=True, is_encrypted=False, validators=[ + friendly_name="social security number - ssn", endIndex=37, required=True, is_encrypted=False, + validators=[ validators.validateSSN() ]), Field(item="63A", name='RACE_HISPANIC', type='number', startIndex=37, endIndex=38, - required=False, validators=[ + friendly_name="race hispanic", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63B", name='RACE_AMER_INDIAN', type='number', startIndex=38, endIndex=39, - required=False, validators=[ + friendly_name="race american indian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63C", name='RACE_ASIAN', type='number', startIndex=39, endIndex=40, - required=False, validators=[ + friendly_name="race asian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63D", name='RACE_BLACK', type='number', startIndex=40, endIndex=41, - required=False, validators=[ + friendly_name="race black", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63E", name='RACE_HAWAIIAN', type='number', startIndex=41, endIndex=42, - required=False, validators=[ + friendly_name="race hawaiian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63F", name='RACE_WHITE', type='number', startIndex=42, endIndex=43, - required=False, validators=[ + friendly_name="race white", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="64", name='GENDER', type='number', startIndex=43, endIndex=44, - required=True, validators=[ + friendly_name="gender", required=True, validators=[ validators.isInLimits(0, 9) ]), Field(item="65A", name='RECEIVE_NONSSI_BENEFITS', type='number', startIndex=44, endIndex=45, - required=True, validators=[ + friendly_name="receive non-ssi benefits", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="65B", name='RECEIVE_SSI', type='number', startIndex=45, endIndex=46, - required=True, validators=[ + friendly_name="receives ssi", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="66", name='RELATIONSHIP_HOH', type='number', startIndex=46, endIndex=48, - required=False, validators=[ + friendly_name="relationship to head of household", required=False, validators=[ validators.isInStringRange(0, 10) ]), Field(item="67", name='PARENT_MINOR_CHILD', type='number', startIndex=48, endIndex=49, - required=False, validators=[ + friendly_name="parent of minor child", required=False, validators=[ validators.oneOf([0, 2, 3]) ]), Field(item="68", name='EDUCATION_LEVEL', type='number', startIndex=49, endIndex=51, - required=True, validators=[ + friendly_name="education level", required=True, validators=[ validators.or_validators( validators.isInStringRange(0, 16), validators.isInStringRange(98, 99) ) ]), Field(item="69", name='CITIZENSHIP_STATUS', type='number', startIndex=51, endIndex=52, - required=False, validators=[ + friendly_name="citizenship status", required=False, validators=[ validators.oneOf([0, 1, 2, 3, 9]) ]), Field(item="70A", name='UNEARNED_SSI', type='number', startIndex=52, endIndex=56, - required=True, validators=[ + friendly_name="unearned ssi benefit", required=True, validators=[ validators.isInLimits(0, 9999) ]), Field(item="70B", name='OTHER_UNEARNED_INCOME', type='number', startIndex=56, endIndex=60, - required=True, validators=[ + friendly_name="other unearned income", required=True, validators=[ validators.isInLimits(0, 9999) ]) ] @@ -156,6 +159,7 @@ second_part_schema = RowSchema( model=SSP_M3, + document=SSP_M3DataSubmissionDocument, quiet_preparser_errors=True, preparsing_validators=[ validators.notEmpty(start=60, end=101), @@ -212,98 +216,95 @@ ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), + friendly_name="record type", required=True, validators=[]), Field(item="3", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[ + friendly_name="reporting month and year", required=True, validators=[ validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid(), ]), Field(item="5", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[ + friendly_name="case number", required=True, validators=[ validators.isAlphaNumeric() ]), Field(item="60", name='FAMILY_AFFILIATION', type='number', startIndex=60, endIndex=61, - required=True, validators=[ + friendly_name="family affiliation", required=True, validators=[ validators.oneOf([1, 2, 4]) ]), Field(item="61", name='DATE_OF_BIRTH', type='string', startIndex=61, endIndex=69, - required=True, validators=[ + friendly_name="date of birth", required=True, validators=[ validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid(), ]), TransformField(transform_func=ssp_ssn_decryption_func, item="62", name='SSN', type='string', startIndex=69, - endIndex=78, required=True, is_encrypted=False, validators=[ + endIndex=78, required=True, is_encrypted=False, friendly_name="social security number - ssn", + validators=[ validators.validateSSN() ]), Field(item="63A", name='RACE_HISPANIC', type='number', startIndex=78, endIndex=79, - required=False, validators=[ + friendly_name="race hispanic", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63B", name='RACE_AMER_INDIAN', type='number', startIndex=79, endIndex=80, - required=False, validators=[ + friendly_name="race american indian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63C", name='RACE_ASIAN', type='number', startIndex=80, endIndex=81, - required=False, validators=[ + friendly_name="race asian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63D", name='RACE_BLACK', type='number', startIndex=81, endIndex=82, - required=False, validators=[ + friendly_name="race black", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63E", name='RACE_HAWAIIAN', type='number', startIndex=82, endIndex=83, - required=False, validators=[ + friendly_name="race hawaiian", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="63F", name='RACE_WHITE', type='number', startIndex=83, endIndex=84, - required=False, validators=[ + friendly_name="race white", required=False, validators=[ validators.isInLimits(0, 2) ]), Field(item="64", name='GENDER', type='number', startIndex=84, endIndex=85, - required=True, validators=[ + friendly_name="gender", required=True, validators=[ validators.isInLimits(0, 9) ]), Field(item="65A", name='RECEIVE_NONSSI_BENEFITS', type='number', startIndex=85, endIndex=86, - required=True, validators=[ + friendly_name="receives non-ssi benefit", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="65B", name='RECEIVE_SSI', type='number', startIndex=86, endIndex=87, - required=True, validators=[ + friendly_name="receives ssi", required=True, validators=[ validators.oneOf([1, 2]) ]), Field(item="66", name='RELATIONSHIP_HOH', type='number', startIndex=87, endIndex=89, - required=False, validators=[ + friendly_name="relationship to head of household", required=False, validators=[ validators.isInLimits(0, 10) ]), Field(item="67", name='PARENT_MINOR_CHILD', type='number', startIndex=89, endIndex=90, - required=False, validators=[ + friendly_name="parent of minor child", required=False, validators=[ validators.oneOf([0, 2, 3]) ]), Field(item="68", name='EDUCATION_LEVEL', type='number', startIndex=90, endIndex=92, - required=True, validators=[ + friendly_name="education level", required=True, validators=[ validators.or_validators( validators.isInStringRange(0, 16), validators.isInStringRange(98, 99) ) ]), Field(item="69", name='CITIZENSHIP_STATUS', type='number', startIndex=92, endIndex=93, - required=False, validators=[ + friendly_name="citizenship status", required=False, validators=[ validators.oneOf([0, 1, 2, 3, 9]) ]), Field(item="70A", name='UNEARNED_SSI', type='number', startIndex=93, endIndex=97, + friendly_name="unearned ssi benefit", required=True, validators=[ validators.isInLimits(0, 9999) ]), Field(item="70B", name='OTHER_UNEARNED_INCOME', type='number', startIndex=97, endIndex=101, - required=True, validators=[ + friendly_name="other unearned income", required=True, validators=[ validators.isInLimits(0, 9999) ]) ] ) -m3 = SchemaManager( - schemas=[ - first_part_schema, - second_part_schema - ] -) +m3 = SchemaManager(schemas=[first_part_schema, second_part_schema]) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m4.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m4.py new file mode 100644 index 000000000..50936c38e --- /dev/null +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m4.py @@ -0,0 +1,161 @@ +"""Schema for SSP M1 record type.""" + + +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.fields import Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators +from tdpservice.search_indexes.models.ssp import SSP_M4 +from tdpservice.search_indexes.documents.ssp import SSP_M4DataSubmissionDocument + +m4 = SchemaManager( + schemas=[ + RowSchema( + model=SSP_M4, + document=SSP_M4DataSubmissionDocument, + preparsing_validators=[ + validators.hasLength(66), + ], + postparsing_validators=[], + fields=[ + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="3", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="5", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="2", + name="COUNTY_FIPS_CODE", + friendly_name="county fips code", + type="string", + startIndex=19, + endIndex=22, + required=True, + validators=[validators.isInStringRange(0, 999)], + ), + Field( + item="4", + name="STRATUM", + friendly_name="stratum", + type="string", + startIndex=22, + endIndex=24, + required=False, + validators=[validators.isInStringRange(0, 99)], + ), + Field( + item="6", + name="ZIP_CODE", + friendly_name="zip code", + type="string", + startIndex=24, + endIndex=29, + required=True, + validators=[validators.isInStringRange(0, 99999)], + ), + Field( + item="7", + name="DISPOSITION", + friendly_name="disposition", + type="number", + startIndex=29, + endIndex=30, + required=True, + validators=[validators.matches(1)], + ), + Field( + item="8", + name="CLOSURE_REASON", + friendly_name="closure reason", + type="string", + startIndex=30, + endIndex=32, + required=True, + validators=[ + validators.or_validators( + validators.isInStringRange(1, 19), validators.matches("99") + ) + ], + ), + Field( + item="9", + name="REC_SUB_HOUSING", + friendly_name="receives subsidized housing", + type="number", + startIndex=32, + endIndex=33, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="10`", + name="REC_MED_ASSIST", + friendly_name="receives medical assistance", + type="number", + startIndex=33, + endIndex=34, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="11", + name="REC_FOOD_STAMPS", + friendly_name="receives food stamps", + type="number", + startIndex=34, + endIndex=35, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="12", + name="REC_SUB_CC", + friendly_name="receives subsidized child care", + type="number", + startIndex=35, + endIndex=36, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="-1", + name="BLANK", + friendly_name="blank", + type="string", + startIndex=36, + endIndex=66, + required=False, + validators=[], + ), + ], + ) + ] +) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m5.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m5.py new file mode 100644 index 000000000..49eb0e2f6 --- /dev/null +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m5.py @@ -0,0 +1,396 @@ +"""Schema for SSP M1 record type.""" + + +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.transforms import ssp_ssn_decryption_func +from tdpservice.parsers.fields import TransformField, Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators +from tdpservice.search_indexes.models.ssp import SSP_M5 +from tdpservice.search_indexes.documents.ssp import SSP_M5DataSubmissionDocument + + +m5 = SchemaManager( + schemas=[ + RowSchema( + model=SSP_M5, + document=SSP_M5DataSubmissionDocument, + preparsing_validators=[ + validators.hasLength(66), + ], + postparsing_validators=[ + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="SSN", + result_function=validators.validateSSN(), + ), + validators.validate__FAM_AFF__SSN(), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_HISPANIC", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_AMER_INDIAN", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_ASIAN", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_BLACK", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_HAWAIIAN", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_WHITE", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="MARITAL_STATUS", + result_function=validators.isInLimits(1, 5), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 2), + result_field="PARENT_MINOR_CHILD", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="EDUCATION_LEVEL", + result_function=validators.or_validators( + validators.isInStringRange(1, 16), + validators.isInStringRange(98, 99), + ), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="CITIZENSHIP_STATUS", + result_function=validators.isInLimits(1, 3), + ), + validators.if_then_validator( + condition_field="DATE_OF_BIRTH", + condition_function=validators.olderThan(18), + result_field="REC_OASDI_INSURANCE", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="REC_FEDERAL_DISABILITY", + result_function=validators.isInLimits(1, 2), + ), + ], + fields=[ + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="3", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="5", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="13", + name="FAMILY_AFFILIATION", + friendly_name="family affiliation", + type="number", + startIndex=19, + endIndex=20, + required=True, + validators=[validators.isInLimits(1, 5)], + ), + Field( + item="14", + name="DATE_OF_BIRTH", + friendly_name="date of birth", + type="string", + startIndex=20, + endIndex=28, + required=True, + validators=[ + validators.dateYearIsLargerThan(1900), + validators.dateMonthIsValid(), + ], + ), + TransformField( + transform_func=ssp_ssn_decryption_func, + item="15", + name="SSN", + friendly_name="social security number - ssn", + type="string", + startIndex=28, + endIndex=37, + required=True, + validators=[validators.validateSSN()], + is_encrypted=False, + ), + Field( + item="16A", + name="RACE_HISPANIC", + friendly_name="race hispanic", + type="number", + startIndex=37, + endIndex=38, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="16B", + name="RACE_AMER_INDIAN", + friendly_name="race american indian", + type="number", + startIndex=38, + endIndex=39, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="16C", + name="RACE_ASIAN", + friendly_name="race asian", + type="number", + startIndex=39, + endIndex=40, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="16D", + name="RACE_BLACK", + friendly_name="race black", + type="number", + startIndex=40, + endIndex=41, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="16E", + name="RACE_HAWAIIAN", + friendly_name="race hawaiian", + type="number", + startIndex=41, + endIndex=42, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="16F", + name="RACE_WHITE", + friendly_name="race white", + type="number", + startIndex=42, + endIndex=43, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="17", + name="GENDER", + friendly_name="gender", + type="number", + startIndex=43, + endIndex=44, + required=True, + validators=[validators.isInLimits(0, 9)], + ), + Field( + item="18A", + name="REC_OASDI_INSURANCE", + friendly_name="receives old-age survivors and disability insurance", + type="number", + startIndex=44, + endIndex=45, + required=True, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="18B", + name="REC_FEDERAL_DISABILITY", + friendly_name="receives federal disability", + type="number", + startIndex=45, + endIndex=46, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="18C", + name="REC_AID_TOTALLY_DISABLED", + friendly_name="receives aid for totally disabled", + type="number", + startIndex=46, + endIndex=47, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="18D", + name="REC_AID_AGED_BLIND", + friendly_name="receives from the aid to the aged, blind, and disabled program", + type="number", + startIndex=47, + endIndex=48, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="18E", + name="REC_SSI", + friendly_name="receives social security income", + type="number", + startIndex=48, + endIndex=49, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="19", + name="MARITAL_STATUS", + friendly_name="marital status", + type="number", + startIndex=49, + endIndex=50, + required=False, + validators=[validators.isInLimits(0, 5)], + ), + Field( + item="20", + name="RELATIONSHIP_HOH", + friendly_name="relationship to head of household", + type="string", + startIndex=50, + endIndex=52, + required=True, + validators=[validators.isInStringRange(1, 10)], + ), + Field( + item="21", + name="PARENT_MINOR_CHILD", + friendly_name="parent of minor child", + type="number", + startIndex=52, + endIndex=53, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="22", + name="NEEDS_OF_PREGNANT_WOMAN", + friendly_name="needs of pregnant woman", + type="number", + startIndex=53, + endIndex=54, + required=False, + validators=[validators.isInLimits(0, 9)], + ), + Field( + item="23", + name="EDUCATION_LEVEL", + friendly_name="education level", + type="string", + startIndex=54, + endIndex=56, + required=False, + validators=[ + validators.or_validators( + validators.isInStringRange(0, 16), + validators.isInStringRange(98, 99), + ) + ], + ), + Field( + item="24", + name="CITIZENSHIP_STATUS", + friendly_name="citizenship status", + type="number", + startIndex=56, + endIndex=57, + required=False, + validators=[ + validators.or_validators( + validators.isInLimits(0, 3), validators.matches(9) + ) + ], + ), + Field( + item="25", + name="EMPLOYMENT_STATUS", + friendly_name="employment status", + type="number", + startIndex=57, + endIndex=58, + required=False, + validators=[validators.isInLimits(0, 3)], + ), + Field( + item="26", + name="AMOUNT_EARNED_INCOME", + friendly_name="amount of earned income", + type="string", + startIndex=58, + endIndex=62, + required=False, + validators=[validators.isInStringRange(0, 9999)], + ), + Field( + item="27", + name="AMOUNT_UNEARNED_INCOME", + friendly_name="amount of unearned income", + type="string", + startIndex=62, + endIndex=66, + required=False, + validators=[validators.isInStringRange(0, 9999)], + ), + ], + ) + ] +) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m6.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m6.py index 6bea60b11..8025055d8 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m6.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m6.py @@ -7,9 +7,11 @@ from ...row_schema import RowSchema from ... import validators from tdpservice.search_indexes.models.ssp import SSP_M6 +from tdpservice.search_indexes.documents.ssp import SSP_M6DataSubmissionDocument s1 = RowSchema( model=SSP_M6, + document=SSP_M6DataSubmissionDocument, preparsing_validators=[ validators.hasLength(259), ], @@ -21,38 +23,50 @@ ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), + friendly_name='record type', required=True, validators=[]), Field(item="2", name='CALENDAR_QUARTER', type='number', startIndex=2, endIndex=7, - required=True, validators=[validators.dateYearIsLargerThan(1998), - validators.quarterIsValid()]), + friendly_name='calendar quarter', required=True, validators=[validators.dateYearIsLargerThan(1998), + validators.quarterIsValid()]), TransformField(calendar_quarter_to_rpt_month_year(0), item="2B", name='RPT_MONTH_YEAR', type='number', + friendly_name='reporting month year', startIndex=2, endIndex=7, required=True, validators=[validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid()]), Field(item="3A", name='SSPMOE_FAMILIES', type='number', startIndex=7, endIndex=15, + friendly_name='ssp/moe families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="4A", name='NUM_2_PARENTS', type='number', startIndex=31, endIndex=39, + friendly_name='number of two-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="5A", name='NUM_1_PARENTS', type='number', startIndex=55, endIndex=63, + friendly_name='number of one-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="6A", name='NUM_NO_PARENTS', type='number', startIndex=79, endIndex=87, + friendly_name='number of no-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="7A", name='NUM_RECIPIENTS', type='number', startIndex=103, endIndex=111, + friendly_name='number of recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="8A", name='ADULT_RECIPIENTS', type='number', startIndex=127, endIndex=135, + friendly_name='number of adult recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="9A", name='CHILD_RECIPIENTS', type='number', startIndex=151, endIndex=159, + friendly_name='number of child recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="10A", name='NONCUSTODIALS', type='number', startIndex=175, endIndex=183, + friendly_name='number of noncustodial parents', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="11A", name='AMT_ASSISTANCE', type='number', startIndex=199, endIndex=211, + friendly_name='amount of assistance', required=True, validators=[validators.isInLimits(0, 999999999999)]), Field(item="12A", name='CLOSED_CASES', type='number', startIndex=235, endIndex=243, + friendly_name='number of closed cases', required=True, validators=[validators.isInLimits(0, 99999999)]), ], ) s2 = RowSchema( model=SSP_M6, + document=SSP_M6DataSubmissionDocument, preparsing_validators=[ validators.hasLength(259), ], @@ -64,38 +78,52 @@ ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, + friendly_name='record type', required=True, validators=[]), Field(item="2", name='CALENDAR_QUARTER', type='number', startIndex=2, endIndex=7, + friendly_name='calendar quarter', required=True, validators=[validators.dateYearIsLargerThan(1998), validators.quarterIsValid()]), TransformField(calendar_quarter_to_rpt_month_year(1), item="2B", name='RPT_MONTH_YEAR', type='number', + friendly_name='reporting month year', startIndex=2, endIndex=7, required=True, validators=[validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid()]), Field(item="3B", name='SSPMOE_FAMILIES', type='number', startIndex=15, endIndex=23, + friendly_name='ssp/moe families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="4B", name='NUM_2_PARENTS', type='number', startIndex=39, endIndex=47, + friendly_name='number of two-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="5B", name='NUM_1_PARENTS', type='number', startIndex=63, endIndex=71, + friendly_name='number of one-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="6B", name='NUM_NO_PARENTS', type='number', startIndex=87, endIndex=95, + friendly_name='number of no-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="7B", name='NUM_RECIPIENTS', type='number', startIndex=111, endIndex=119, + friendly_name='number of recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="8B", name='ADULT_RECIPIENTS', type='number', startIndex=135, endIndex=143, + friendly_name='number of adult recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="9B", name='CHILD_RECIPIENTS', type='number', startIndex=159, endIndex=167, + friendly_name='number of child recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="10B", name='NONCUSTODIALS', type='number', startIndex=183, endIndex=191, + friendly_name='number of noncustodial parents', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="11B", name='AMT_ASSISTANCE', type='number', startIndex=211, endIndex=223, + friendly_name='amount of assistance', required=True, validators=[validators.isInLimits(0, 999999999999)]), Field(item="12B", name='CLOSED_CASES', type='number', startIndex=243, endIndex=251, + friendly_name='number of closed cases', required=True, validators=[validators.isInLimits(0, 99999999)]), ], ) s3 = RowSchema( model=SSP_M6, + document=SSP_M6DataSubmissionDocument, preparsing_validators=[ validators.hasLength(259), ], @@ -107,32 +135,45 @@ ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, + friendly_name='record type', required=True, validators=[]), Field(item="2", name='CALENDAR_QUARTER', type='number', startIndex=2, endIndex=7, + friendly_name='calendar quarter', required=True, validators=[validators.dateYearIsLargerThan(1998), validators.quarterIsValid()]), TransformField(calendar_quarter_to_rpt_month_year(2), item="2B", name='RPT_MONTH_YEAR', type='number', + friendly_name='reporting month year', startIndex=2, endIndex=7, required=True, validators=[validators.dateYearIsLargerThan(1998), validators.dateMonthIsValid()]), Field(item="3C", name='SSPMOE_FAMILIES', type='number', startIndex=23, endIndex=31, + friendly_name='ssp/moe families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="4C", name='NUM_2_PARENTS', type='number', startIndex=47, endIndex=55, + friendly_name='number of two-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="5C", name='NUM_1_PARENTS', type='number', startIndex=71, endIndex=79, + friendly_name='number of one-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="6C", name='NUM_NO_PARENTS', type='number', startIndex=95, endIndex=103, + friendly_name='number of no-parent families', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="7C", name='NUM_RECIPIENTS', type='number', startIndex=119, endIndex=127, + friendly_name='number of recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="8C", name='ADULT_RECIPIENTS', type='number', startIndex=143, endIndex=151, + friendly_name='number of adult recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="9C", name='CHILD_RECIPIENTS', type='number', startIndex=167, endIndex=175, + friendly_name='number of child recipients', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="10C", name='NONCUSTODIALS', type='number', startIndex=191, endIndex=199, + friendly_name='number of noncustodial parents', required=True, validators=[validators.isInLimits(0, 99999999)]), Field(item="11C", name='AMT_ASSISTANCE', type='number', startIndex=223, endIndex=235, + friendly_name='amount of assistance', required=True, validators=[validators.isInLimits(0, 999999999999)]), Field(item="12C", name='CLOSED_CASES', type='number', startIndex=251, endIndex=259, + friendly_name='number of closed cases', required=True, validators=[validators.isInLimits(0, 99999999)]), ], ) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m7.py b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m7.py new file mode 100644 index 000000000..603e12b62 --- /dev/null +++ b/tdrs-backend/tdpservice/parsers/schema_defs/ssp/m7.py @@ -0,0 +1,111 @@ +"""Schema for TANF T7 Row.""" + +from ...util import SchemaManager +from ...fields import Field, TransformField +from ...row_schema import RowSchema +from ...transforms import calendar_quarter_to_rpt_month_year +from ... import validators +from tdpservice.search_indexes.models.ssp import SSP_M7 +from tdpservice.search_indexes.documents.ssp import SSP_M7DataSubmissionDocument + +schemas = [] + +validator_index = 7 +section_ind_index = 7 +stratum_index = 8 +families_index = 10 + +sub_item_labels = ["5A", "5B", "5C"] +families_item_numbers = [sub_item_labels[i % 3] for i in range(30)] + +for i in range(1, 31): + schemas.append( + RowSchema( + model=SSP_M7, + document=SSP_M7DataSubmissionDocument, + quiet_preparser_errors=i > 1, + preparsing_validators=[ + validators.hasLength(247), + validators.notEmpty(0, 7), + validators.notEmpty(validator_index, validator_index + 24), + ], + postparsing_validators=[], + fields=[ + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="2", + name="CALENDAR_QUARTER", + friendly_name="calendar quarter", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.quarterIsValid(), + ], + ), + TransformField( + transform_func=calendar_quarter_to_rpt_month_year((i - 1) % 3), + item="2A", + name="RPT_MONTH_YEAR", + friendly_name="reporting month year", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="3", + name="TDRS_SECTION_IND", + friendly_name="tdrs section indicator", + type="string", + startIndex=section_ind_index, + endIndex=section_ind_index + 1, + required=True, + validators=[validators.oneOf(["1", "2"])], + ), + Field( + item="4", + name="STRATUM", + friendly_name="stratum", + type="string", + startIndex=stratum_index, + endIndex=stratum_index + 2, + required=True, + validators=[validators.isInStringRange(0, 99)], + ), + Field( + item=families_item_numbers[i - 1], + name="FAMILIES_MONTH", + friendly_name="families month", + type="number", + startIndex=families_index, + endIndex=families_index + 7, + required=True, + validators=[validators.isInLimits(0, 9999999)], + ), + ], + ) + ) + + index_offset = 0 if i % 3 != 0 else 24 + validator_index += index_offset + section_ind_index += index_offset + stratum_index += index_offset + families_index += 7 if i % 3 != 0 else 10 + +m7 = SchemaManager(schemas=schemas) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py index f31bc892c..d99f78bf9 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py @@ -1,264 +1,675 @@ """Schema for t1 record types.""" -from ...util import SchemaManager -from ...fields import Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.fields import Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.tanf import TANF_T1 +from tdpservice.search_indexes.documents.tanf import TANF_T1DataSubmissionDocument -t1 = SchemaManager(schemas=[ - RowSchema( +t1 = SchemaManager( + schemas=[ + RowSchema( model=TANF_T1, + document = TANF_T1DataSubmissionDocument, preparsing_validators=[ - validators.hasLength(156), + validators.hasLength(156), ], postparsing_validators=[ - validators.if_then_validator( - condition_field='CASH_AMOUNT', condition_function=validators.isLargerThan(0), - result_field='NBR_MONTHS', result_function=validators.isLargerThan(0), - ), - validators.if_then_validator( - condition_field='CC_AMOUNT', condition_function=validators.isLargerThan(0), - result_field='CHILDREN_COVERED', result_function=validators.isLargerThan(0), - ), - validators.if_then_validator( - condition_field='CC_AMOUNT', condition_function=validators.isLargerThan(0), - result_field='CC_NBR_MONTHS', result_function=validators.isLargerThan(0), - ), - validators.if_then_validator( - condition_field='TRANSP_AMOUNT', condition_function=validators.isLargerThan(0), - result_field='TRANSP_NBR_MONTHS', result_function=validators.isLargerThan(0), - ), - validators.if_then_validator( - condition_field='TRANSITION_SERVICES_AMOUNT', condition_function=validators.isLargerThan(0), - result_field='TRANSITION_NBR_MONTHS', result_function=validators.isLargerThan(0), - ), - validators.if_then_validator( - condition_field='OTHER_AMOUNT', condition_function=validators.isLargerThan(0), - result_field='OTHER_NBR_MONTHS', result_function=validators.isLargerThan(0), - ), - validators.if_then_validator( - condition_field='SANC_REDUCTION_AMT', condition_function=validators.isLargerThan(0), - result_field='WORK_REQ_SANCTION', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='SANC_REDUCTION_AMT', condition_function=validators.isLargerThan(0), - result_field='FAMILY_SANC_ADULT', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='SANC_REDUCTION_AMT', condition_function=validators.isLargerThan(0), - result_field='SANC_TEEN_PARENT', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='SANC_REDUCTION_AMT', condition_function=validators.isLargerThan(0), - result_field='NON_COOPERATION_CSE', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='SANC_REDUCTION_AMT', condition_function=validators.isLargerThan(0), - result_field='FAILURE_TO_COMPLY', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='SANC_REDUCTION_AMT', condition_function=validators.isLargerThan(0), - result_field='OTHER_SANCTION', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='OTHER_TOTAL_REDUCTIONS', condition_function=validators.isLargerThan(0), - result_field='FAMILY_CAP', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='OTHER_TOTAL_REDUCTIONS', condition_function=validators.isLargerThan(0), - result_field='REDUCTIONS_ON_RECEIPTS', result_function=validators.oneOf((1, 2)), - ), - validators.if_then_validator( - condition_field='OTHER_TOTAL_REDUCTIONS', condition_function=validators.isLargerThan(0), - result_field='OTHER_NON_SANCTION', result_function=validators.oneOf((1, 2)), - ), - validators.sumIsLarger(("AMT_FOOD_STAMP_ASSISTANCE", "AMT_SUB_CC", "CASH_AMOUNT", "CC_AMOUNT", - "TRANSP_AMOUNT", "TRANSITION_SERVICES_AMOUNT", "OTHER_AMOUNT"), 0) + validators.if_then_validator( + condition_field="CASH_AMOUNT", + condition_function=validators.isLargerThan(0), + result_field="NBR_MONTHS", + result_function=validators.isLargerThan(0), + ), + validators.if_then_validator( + condition_field="CC_AMOUNT", + condition_function=validators.isLargerThan(0), + result_field="CHILDREN_COVERED", + result_function=validators.isLargerThan(0), + ), + validators.if_then_validator( + condition_field="CC_AMOUNT", + condition_function=validators.isLargerThan(0), + result_field="CC_NBR_MONTHS", + result_function=validators.isLargerThan(0), + ), + validators.if_then_validator( + condition_field="TRANSP_AMOUNT", + condition_function=validators.isLargerThan(0), + result_field="TRANSP_NBR_MONTHS", + result_function=validators.isLargerThan(0), + ), + validators.if_then_validator( + condition_field="TRANSITION_SERVICES_AMOUNT", + condition_function=validators.isLargerThan(0), + result_field="TRANSITION_NBR_MONTHS", + result_function=validators.isLargerThan(0), + ), + validators.if_then_validator( + condition_field="OTHER_AMOUNT", + condition_function=validators.isLargerThan(0), + result_field="OTHER_NBR_MONTHS", + result_function=validators.isLargerThan(0), + ), + validators.if_then_validator( + condition_field="SANC_REDUCTION_AMT", + condition_function=validators.isLargerThan(0), + result_field="WORK_REQ_SANCTION", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="SANC_REDUCTION_AMT", + condition_function=validators.isLargerThan(0), + result_field="FAMILY_SANC_ADULT", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="SANC_REDUCTION_AMT", + condition_function=validators.isLargerThan(0), + result_field="SANC_TEEN_PARENT", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="SANC_REDUCTION_AMT", + condition_function=validators.isLargerThan(0), + result_field="NON_COOPERATION_CSE", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="SANC_REDUCTION_AMT", + condition_function=validators.isLargerThan(0), + result_field="FAILURE_TO_COMPLY", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="SANC_REDUCTION_AMT", + condition_function=validators.isLargerThan(0), + result_field="OTHER_SANCTION", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="OTHER_TOTAL_REDUCTIONS", + condition_function=validators.isLargerThan(0), + result_field="FAMILY_CAP", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="OTHER_TOTAL_REDUCTIONS", + condition_function=validators.isLargerThan(0), + result_field="REDUCTIONS_ON_RECEIPTS", + result_function=validators.oneOf((1, 2)), + ), + validators.if_then_validator( + condition_field="OTHER_TOTAL_REDUCTIONS", + condition_function=validators.isLargerThan(0), + result_field="OTHER_NON_SANCTION", + result_function=validators.oneOf((1, 2)), + ), + validators.sumIsLarger( + ( + "AMT_FOOD_STAMP_ASSISTANCE", + "AMT_SUB_CC", + "CASH_AMOUNT", + "CC_AMOUNT", + "TRANSP_AMOUNT", + "TRANSITION_SERVICES_AMOUNT", + "OTHER_AMOUNT", + ), + 0, + ), ], fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="4", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[ - validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid(), - ]), - Field(item="6", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[validators.isAlphaNumeric()]), - Field(item="2", name='COUNTY_FIPS_CODE', type='string', startIndex=19, endIndex=22, - required=True, validators=[ - validators.isNumber(), - ]), - Field(item="5", name='STRATUM', type='string', startIndex=22, endIndex=24, - required=False, validators=[ - validators.isInStringRange(0, 99), - ]), - Field(item="7", name='ZIP_CODE', type='string', startIndex=24, endIndex=29, - required=True, validators=[ - validators.isNumber(), - ]), - Field(item="8", name='FUNDING_STREAM', type='number', startIndex=29, endIndex=30, - required=True, validators=[ - validators.isInLimits(1, 3), - ]), - Field(item="9", name='DISPOSITION', type='number', startIndex=30, endIndex=31, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="10", name='NEW_APPLICANT', type='number', startIndex=31, endIndex=32, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="11", name='NBR_FAMILY_MEMBERS', type='number', startIndex=32, endIndex=34, - required=True, validators=[ - validators.isLargerThan(0), - ]), - Field(item="12", name='FAMILY_TYPE', type='number', startIndex=34, endIndex=35, - required=True, validators=[ - validators.isInLimits(1, 3), - ]), - Field(item="13", name='RECEIVES_SUB_HOUSING', type='number', startIndex=35, endIndex=36, - required=True, validators=[ - validators.isInLimits(1, 3), - ]), - Field(item="14", name='RECEIVES_MED_ASSISTANCE', type='number', startIndex=36, endIndex=37, - required=True, validators=[ - validators.isInLimits(1, 2), - ]), - Field(item="15", name='RECEIVES_FOOD_STAMPS', type='number', startIndex=37, endIndex=38, - required=False, validators=[ - validators.isInLimits(0, 2), - ]), - Field(item="16", name='AMT_FOOD_STAMP_ASSISTANCE', type='number', startIndex=38, endIndex=42, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="17", name='RECEIVES_SUB_CC', type='number', startIndex=42, endIndex=43, - required=False, validators=[ - validators.isInLimits(0, 3), - ]), - Field(item="18", name='AMT_SUB_CC', type='number', startIndex=43, endIndex=47, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="19", name='CHILD_SUPPORT_AMT', type='number', startIndex=47, endIndex=51, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="20", name='FAMILY_CASH_RESOURCES', type='number', startIndex=51, endIndex=55, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="21A", name='CASH_AMOUNT', type='number', startIndex=55, endIndex=59, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="21B", name='NBR_MONTHS', type='number', startIndex=59, endIndex=62, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="22A", name='CC_AMOUNT', type='number', startIndex=62, endIndex=66, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="22B", name='CHILDREN_COVERED', type='number', startIndex=66, endIndex=68, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="22C", name='CC_NBR_MONTHS', type='number', startIndex=68, endIndex=71, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="23A", name='TRANSP_AMOUNT', type='number', startIndex=71, endIndex=75, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="23B", name='TRANSP_NBR_MONTHS', type='number', startIndex=75, endIndex=78, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="24A", name='TRANSITION_SERVICES_AMOUNT', type='number', startIndex=78, endIndex=82, - required=False, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="24B", name='TRANSITION_NBR_MONTHS', type='number', startIndex=82, endIndex=85, - required=False, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="25A", name='OTHER_AMOUNT', type='number', startIndex=85, endIndex=89, - required=False, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="25B", name='OTHER_NBR_MONTHS', type='number', startIndex=89, endIndex=92, - required=False, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="26AI", name='SANC_REDUCTION_AMT', type='number', startIndex=92, endIndex=96, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="26AII", name='WORK_REQ_SANCTION', type='number', startIndex=96, endIndex=97, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="26AIII", name='FAMILY_SANC_ADULT', type='number', startIndex=97, endIndex=98, - required=False, validators=[ - validators.oneOf([0, 1, 2]), - ]), - Field(item="26AIV", name='SANC_TEEN_PARENT', type='number', startIndex=98, endIndex=99, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="26AV", name='NON_COOPERATION_CSE', type='number', startIndex=99, endIndex=100, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="26AVI", name='FAILURE_TO_COMPLY', type='number', startIndex=100, endIndex=101, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="26AVII", name='OTHER_SANCTION', type='number', startIndex=101, endIndex=102, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="26B", name='RECOUPMENT_PRIOR_OVRPMT', type='number', startIndex=102, endIndex=106, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="26CI", name='OTHER_TOTAL_REDUCTIONS', type='number', startIndex=106, endIndex=110, - required=True, validators=[ - validators.isLargerThanOrEqualTo(0), - ]), - Field(item="26CII", name='FAMILY_CAP', type='number', startIndex=110, endIndex=111, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="26CIII", name='REDUCTIONS_ON_RECEIPTS', type='number', startIndex=111, endIndex=112, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="26CIV", name='OTHER_NON_SANCTION', type='number', startIndex=112, endIndex=113, - required=True, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="27", name='WAIVER_EVAL_CONTROL_GRPS', type='string', startIndex=113, endIndex=114, - required=False, validators=[ - validators.or_validators(validators.matches('9'), validators.isEmpty()), - validators.isAlphaNumeric(), - ]), - Field(item="28", name='FAMILY_EXEMPT_TIME_LIMITS', type='number', startIndex=114, endIndex=116, - required=True, validators=[ - validators.oneOf([1, 2, 3, 4, - 6, 7, 8, 9]) - ]), - Field(item="29", name='FAMILY_NEW_CHILD', type='number', startIndex=116, endIndex=117, - required=False, validators=[ - validators.oneOf([1, 2]), - ]), - Field(item="-1", name='BLANK', type='string', startIndex=117, endIndex=156, required=False, - validators=[]), + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="6", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="2", + name="COUNTY_FIPS_CODE", + friendly_name="county fips code", + type="string", + startIndex=19, + endIndex=22, + required=True, + validators=[ + validators.isNumber(), + ], + ), + Field( + item="5", + name="STRATUM", + friendly_name="stratum", + type="string", + startIndex=22, + endIndex=24, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="7", + name="ZIP_CODE", + friendly_name="zip code", + type="string", + startIndex=24, + endIndex=29, + required=True, + validators=[ + validators.isNumber(), + ], + ), + Field( + item="8", + name="FUNDING_STREAM", + friendly_name="funding stream", + type="number", + startIndex=29, + endIndex=30, + required=True, + validators=[ + validators.isInLimits(1, 3), + ], + ), + Field( + item="9", + name="DISPOSITION", + friendly_name="disposition", + type="number", + startIndex=30, + endIndex=31, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="10", + name="NEW_APPLICANT", + friendly_name="new applicant", + type="number", + startIndex=31, + endIndex=32, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="11", + name="NBR_FAMILY_MEMBERS", + friendly_name="number of family members", + type="number", + startIndex=32, + endIndex=34, + required=True, + validators=[ + validators.isLargerThan(0), + ], + ), + Field( + item="12", + name="FAMILY_TYPE", + friendly_name="family type", + type="number", + startIndex=34, + endIndex=35, + required=True, + validators=[ + validators.isInLimits(1, 3), + ], + ), + Field( + item="13", + name="RECEIVES_SUB_HOUSING", + friendly_name="receives subsidized housing", + type="number", + startIndex=35, + endIndex=36, + required=True, + validators=[ + validators.isInLimits(1, 3), + ], + ), + Field( + item="14", + name="RECEIVES_MED_ASSISTANCE", + friendly_name="receives medical assistance", + type="number", + startIndex=36, + endIndex=37, + required=True, + validators=[ + validators.isInLimits(1, 2), + ], + ), + Field( + item="15", + name="RECEIVES_FOOD_STAMPS", + friendly_name="receives food stamps", + type="number", + startIndex=37, + endIndex=38, + required=False, + validators=[ + validators.isInLimits(0, 2), + ], + ), + Field( + item="16", + name="AMT_FOOD_STAMP_ASSISTANCE", + friendly_name="amount of food stamp assistance", + type="number", + startIndex=38, + endIndex=42, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="17", + name="RECEIVES_SUB_CC", + friendly_name="receives subsidized child care", + type="number", + startIndex=42, + endIndex=43, + required=False, + validators=[ + validators.isInLimits(0, 3), + ], + ), + Field( + item="18", + name="AMT_SUB_CC", + friendly_name="amount of subsidized child care", + type="number", + startIndex=43, + endIndex=47, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="19", + name="CHILD_SUPPORT_AMT", + friendly_name="child support amount", + type="number", + startIndex=47, + endIndex=51, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="20", + name="FAMILY_CASH_RESOURCES", + friendly_name="family cash resources", + type="number", + startIndex=51, + endIndex=55, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="21A", + name="CASH_AMOUNT", + friendly_name="cash amount", + type="number", + startIndex=55, + endIndex=59, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="21B", + name="NBR_MONTHS", + friendly_name="number of months", + type="number", + startIndex=59, + endIndex=62, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="22A", + name="CC_AMOUNT", + friendly_name="child care amount", + type="number", + startIndex=62, + endIndex=66, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="22B", + name="CHILDREN_COVERED", + friendly_name="children covered", + type="number", + startIndex=66, + endIndex=68, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="22C", + name="CC_NBR_MONTHS", + friendly_name="child care number of months", + type="number", + startIndex=68, + endIndex=71, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="23A", + name="TRANSP_AMOUNT", + friendly_name="transportation amount", + type="number", + startIndex=71, + endIndex=75, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="23B", + name="TRANSP_NBR_MONTHS", + friendly_name="transportation number of months", + type="number", + startIndex=75, + endIndex=78, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="24A", + name="TRANSITION_SERVICES_AMOUNT", + friendly_name="transition services amount", + type="number", + startIndex=78, + endIndex=82, + required=False, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="24B", + name="TRANSITION_NBR_MONTHS", + friendly_name="transition services number of months", + type="number", + startIndex=82, + endIndex=85, + required=False, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="25A", + name="OTHER_AMOUNT", + friendly_name="other amount", + type="number", + startIndex=85, + endIndex=89, + required=False, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="25B", + name="OTHER_NBR_MONTHS", + friendly_name="other number of months", + type="number", + startIndex=89, + endIndex=92, + required=False, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="26AI", + name="SANC_REDUCTION_AMT", + friendly_name="sanction reduction amount", + type="number", + startIndex=92, + endIndex=96, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="26AII", + name="WORK_REQ_SANCTION", + friendly_name="work requirement sanction", + type="number", + startIndex=96, + endIndex=97, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="26AIII", + name="FAMILY_SANC_ADULT", + friendly_name="family sanction adult", + type="number", + startIndex=97, + endIndex=98, + required=False, + validators=[ + validators.oneOf([0, 1, 2]), + ], + ), + Field( + item="26AIV", + name="SANC_TEEN_PARENT", + friendly_name="sanctioned teen parent", + type="number", + startIndex=98, + endIndex=99, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="26AV", + name="NON_COOPERATION_CSE", + friendly_name="non-cooperation with child support", + type="number", + startIndex=99, + endIndex=100, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="26AVI", + name="FAILURE_TO_COMPLY", + friendly_name="failure to comply", + type="number", + startIndex=100, + endIndex=101, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="26AVII", + name="OTHER_SANCTION", + friendly_name="other, sanction", + type="number", + startIndex=101, + endIndex=102, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="26B", + name="RECOUPMENT_PRIOR_OVRPMT", + friendly_name="recoupment prior overpayment", + type="number", + startIndex=102, + endIndex=106, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="26CI", + name="OTHER_TOTAL_REDUCTIONS", + friendly_name="other total reductions", + type="number", + startIndex=106, + endIndex=110, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="26CII", + name="FAMILY_CAP", + friendly_name="family cap", + type="number", + startIndex=110, + endIndex=111, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="26CIII", + name="REDUCTIONS_ON_RECEIPTS", + friendly_name="reductions on receipts", + type="number", + startIndex=111, + endIndex=112, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="26CIV", + name="OTHER_NON_SANCTION", + friendly_name="other, non-sanction", + type="number", + startIndex=112, + endIndex=113, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="27", + name="WAIVER_EVAL_CONTROL_GRPS", + friendly_name="waiver evaluation control groups", + type="string", + startIndex=113, + endIndex=114, + required=False, + validators=[ + validators.or_validators( + validators.matches("9"), validators.isEmpty() + ), + validators.isAlphaNumeric(), + ], + ), + Field( + item="28", + name="FAMILY_EXEMPT_TIME_LIMITS", + friendly_name="family exempt time limits", + type="number", + startIndex=114, + endIndex=116, + required=True, + validators=[validators.oneOf([1, 2, 3, 4, 6, 7, 8, 9])], + ), + Field( + item="29", + name="FAMILY_NEW_CHILD", + friendly_name="family new child", + type="number", + startIndex=116, + endIndex=117, + required=False, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="-1", + name="BLANK", + friendly_name="blank", + type="string", + startIndex=117, + endIndex=156, + required=False, + validators=[], + ), ], - )] + ) + ] ) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py index 1f2088b38..653b174c5 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py @@ -1,243 +1,959 @@ """Schema for HEADER row of all submission types.""" -from ...util import SchemaManager -from ...transforms import tanf_ssn_decryption_func -from ...fields import TransformField, Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.transforms import tanf_ssn_decryption_func +from tdpservice.parsers.fields import TransformField, Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.tanf import TANF_T2 +from tdpservice.search_indexes.documents.tanf import TANF_T2DataSubmissionDocument -t2 = SchemaManager(schemas=[ - RowSchema( - model=TANF_T2, - preparsing_validators=[ - validators.hasLength(156), - ], - postparsing_validators=[ +t2 = SchemaManager( + schemas=[ + RowSchema( + model=TANF_T2, + document= TANF_T2DataSubmissionDocument, + preparsing_validators=[ + validators.hasLength(156), + ], + postparsing_validators=[ validators.validate__FAM_AFF__SSN(), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='SSN', result_function=validators.validateSSN(), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="SSN", + result_function=validators.validateSSN(), ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_HISPANIC', result_function=validators.isInLimits(1, 2), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_HISPANIC", + result_function=validators.isInLimits(1, 2), ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_AMER_INDIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_AMER_INDIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_ASIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_ASIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_BLACK', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_BLACK", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_HAWAIIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_HAWAIIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_WHITE', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_WHITE", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='MARITAL_STATUS', result_function=validators.isInLimits(1, 5), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="MARITAL_STATUS", + result_function=validators.isInLimits(1, 5), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 2), - result_field='PARENT_WITH_MINOR_CHILD', result_function=validators.isInLimits(1, 3), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 2), + result_field="PARENT_WITH_MINOR_CHILD", + result_function=validators.isInLimits(1, 3), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='EDUCATION_LEVEL', result_function=validators.or_validators( - validators.isInStringRange(0, 16), - validators.isInStringRange(98, 99) - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="EDUCATION_LEVEL", + result_function=validators.or_validators( + validators.isInStringRange(0, 16), + validators.isInStringRange(98, 99), ), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf((1, 2)), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="CITIZENSHIP_STATUS", + result_function=validators.oneOf((1, 2)), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='COOPERATION_CHILD_SUPPORT', result_function=validators.oneOf((1, 2, 9)), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="COOPERATION_CHILD_SUPPORT", + result_function=validators.oneOf((1, 2, 9)), + ), validators.validate__FAM_AFF__HOH__Fed_Time(), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='EMPLOYMENT_STATUS', result_function=validators.isInLimits(1, 3), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="EMPLOYMENT_STATUS", + result_function=validators.isInLimits(1, 3), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='WORK_ELIGIBLE_INDICATOR', result_function=validators.or_validators( - validators.isInStringRange(1, 9), - validators.oneOf(('11', '12')) - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="WORK_ELIGIBLE_INDICATOR", + result_function=validators.or_validators( + validators.isInStringRange(1, 9), validators.oneOf(("11", "12")) ), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='WORK_PART_STATUS', result_function=validators.oneOf(['01', '02', '05', '07', '09', - '15', '17', '18', '19', '99'] - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="WORK_PART_STATUS", + result_function=validators.oneOf( + ["01", "02", "05", "07", "09", "15", "17", "18", "19", "99"] ), + ), validators.if_then_validator( - condition_field='WORK_ELIGIBLE_INDICATOR', condition_function=validators.isInStringRange(1, 5), - result_field='WORK_PART_STATUS', result_function=validators.notMatches('99'), - ), + condition_field="WORK_ELIGIBLE_INDICATOR", + condition_function=validators.isInStringRange(1, 5), + result_field="WORK_PART_STATUS", + result_function=validators.notMatches("99"), + ), + ], + fields=[ + Field( + item="0", + name="RecordType", + friendly_name="record tsype", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="6", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="30", + name="FAMILY_AFFILIATION", + friendly_name="family affiliation", + type="number", + startIndex=19, + endIndex=20, + required=True, + validators=[validators.oneOf([1, 2, 3, 5])], + ), + Field( + item="31", + name="NONCUSTODIAL_PARENT", + friendly_name="noncustodial parent", + type="number", + startIndex=20, + endIndex=21, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="32", + name="DATE_OF_BIRTH", + friendly_name="date of birth", + type="number", + startIndex=21, + endIndex=29, + required=True, + validators=[ + validators.dateYearIsLargerThan(1900), + validators.dateMonthIsValid(), + ], + ), + TransformField( + transform_func=tanf_ssn_decryption_func, + item="33", + name="SSN", + friendly_name="social security number - ssn", + type="string", + startIndex=29, + endIndex=38, + required=True, + validators=[validators.validateSSN()], + is_encrypted=False, + ), + Field( + item="34A", + name="RACE_HISPANIC", + friendly_name="race hispanic", + type="number", + startIndex=38, + endIndex=39, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="34B", + name="RACE_AMER_INDIAN", + friendly_name="race american-indian", + type="number", + startIndex=39, + endIndex=40, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="34C", + name="RACE_ASIAN", + friendly_name="race asian", + type="number", + startIndex=40, + endIndex=41, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="34D", + name="RACE_BLACK", + friendly_name="race black", + type="number", + startIndex=41, + endIndex=42, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="34E", + name="RACE_HAWAIIAN", + friendly_name="race hawaiian", + type="number", + startIndex=42, + endIndex=43, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="34F", + name="RACE_WHITE", + friendly_name="race white", + type="number", + startIndex=43, + endIndex=44, + required=False, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="35", + name="GENDER", + friendly_name="gender", + type="number", + startIndex=44, + endIndex=45, + required=True, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="36A", + name="FED_OASDI_PROGRAM", + friendly_name="federal old age survivors and disability insurance program", + type="number", + startIndex=45, + endIndex=46, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="36B", + name="FED_DISABILITY_STATUS", + friendly_name="federal disability status", + type="number", + startIndex=46, + endIndex=47, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="36C", + name="DISABLED_TITLE_XIVAPDT", + friendly_name="Receives Aid to the Permanently and Totally Disabled" + + " Under Title XIV-APDT of the Social Security Act", + type="string", + startIndex=47, + endIndex=48, + required=True, + validators=[ + validators.or_validators( + validators.oneOf(["1", "2"]), validators.isBlank() + ) + ], + ), + Field( + item="36D", + name="AID_AGED_BLIND", + friendly_name="receives from the aid to the aged, blind, and disabled program", + type="number", + startIndex=48, + endIndex=49, + required=False, + validators=[ + validators.isLargerThanOrEqualTo(0), + ], + ), + Field( + item="36E", + name="RECEIVE_SSI", + friendly_name="receives social security income", + type="number", + startIndex=49, + endIndex=50, + required=True, + validators=[ + validators.oneOf([1, 2]), + ], + ), + Field( + item="37", + name="MARITAL_STATUS", + friendly_name="marital status", + type="number", + startIndex=50, + endIndex=51, + required=False, + validators=[ + validators.isInLimits(0, 5), + ], + ), + Field( + item="38", + name="RELATIONSHIP_HOH", + friendly_name="relationship to head of household", + type="string", + startIndex=51, + endIndex=53, + required=True, + validators=[ + validators.isInStringRange(1, 10), + ], + ), + Field( + item="39", + name="PARENT_WITH_MINOR_CHILD", + friendly_name="parent with minor child", + type="number", + startIndex=53, + endIndex=54, + required=False, + validators=[ + validators.isInLimits(0, 3), + ], + ), + Field( + item="40", + name="NEEDS_PREGNANT_WOMAN", + friendly_name="needs of pregnant woman", + type="number", + startIndex=54, + endIndex=55, + required=False, + validators=[ + validators.isInLimits(0, 9), + ], + ), + Field( + item="41", + name="EDUCATION_LEVEL", + friendly_name="education level", + type="string", + startIndex=55, + endIndex=57, + required=False, + validators=[ + validators.or_validators( + validators.isInStringRange(0, 16), + validators.isInStringRange(98, 99), + ) + ], + ), + Field( + item="42", + name="CITIZENSHIP_STATUS", + friendly_name="citizenship status", + type="number", + startIndex=57, + endIndex=58, + required=False, + validators=[validators.oneOf([0, 1, 2, 9])], + ), + Field( + item="43", + name="COOPERATION_CHILD_SUPPORT", + friendly_name="cooperation with child support", + type="number", + startIndex=58, + endIndex=59, + required=False, + validators=[ + validators.oneOf([0, 1, 2, 9]), + ], + ), + Field( + item="44", + name="MONTHS_FED_TIME_LIMIT", + friendly_name="countable months toward federal time limit", + type="string", + startIndex=59, + endIndex=62, + required=False, + validators=[ + validators.isInStringRange(0, 999), + ], + ), + Field( + item="45", + name="MONTHS_STATE_TIME_LIMIT", + friendly_name="months of state time limit", + type="string", + startIndex=62, + endIndex=64, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="46", + name="CURRENT_MONTH_STATE_EXEMPT", + friendly_name="current month state exempt", + type="number", + startIndex=64, + endIndex=65, + required=False, + validators=[ + validators.isInLimits(0, 9), + ], + ), + Field( + item="47", + name="EMPLOYMENT_STATUS", + friendly_name="employment status", + type="number", + startIndex=65, + endIndex=66, + required=False, + validators=[ + validators.isInLimits(0, 3), + ], + ), + Field( + item="48", + name="WORK_ELIGIBLE_INDICATOR", + friendly_name="work eligible indicator", + type="string", + startIndex=66, + endIndex=68, + required=True, + validators=[ + validators.or_validators( + validators.isInStringRange(0, 9), + validators.oneOf(("11", "12")), + ) + ], + ), + Field( + item="49", + name="WORK_PART_STATUS", + friendly_name="work participation status", + type="string", + startIndex=68, + endIndex=70, + required=False, + validators=[ + validators.oneOf( + [ + "01", + "02", + "05", + "07", + "09", + "15", + "16", + "17", + "18", + "19", + "99", + ] + ) + ], + ), + Field( + item="50", + name="UNSUB_EMPLOYMENT", + friendly_name="unsubsidized employment", + type="string", + startIndex=70, + endIndex=72, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="51", + name="SUB_PRIVATE_EMPLOYMENT", + friendly_name="subsidized private employment", + type="string", + startIndex=72, + endIndex=74, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="52", + name="SUB_PUBLIC_EMPLOYMENT", + friendly_name="subsidized public employment", + type="string", + startIndex=74, + endIndex=76, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="53A", + name="WORK_EXPERIENCE_HOP", + friendly_name="work experience hours of participation", + type="string", + startIndex=76, + endIndex=78, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="53B", + name="WORK_EXPERIENCE_EA", + friendly_name="work experience excused absence", + type="string", + startIndex=78, + endIndex=80, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="53C", + name="WORK_EXPERIENCE_HOL", + friendly_name="work experience - holiday", + type="string", + startIndex=80, + endIndex=82, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="54", + name="OJT", + friendly_name="on the job training", + type="string", + startIndex=82, + endIndex=84, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="55A", + name="JOB_SEARCH_HOP", + friendly_name="job search hours of participation", + type="string", + startIndex=84, + endIndex=86, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="55B", + name="JOB_SEARCH_EA", + friendly_name="job search excused absence", + type="string", + startIndex=86, + endIndex=88, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="55C", + name="JOB_SEARCH_HOL", + friendly_name="job search - holidays", + type="string", + startIndex=88, + endIndex=90, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="56A", + name="COMM_SERVICES_HOP", + friendly_name="community service hours of participation", + type="string", + startIndex=90, + endIndex=92, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="56B", + name="COMM_SERVICES_EA", + friendly_name="community service excused absence", + type="string", + startIndex=92, + endIndex=94, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="56C", + name="COMM_SERVICES_HOL", + friendly_name="community service hours of leave", + type="string", + startIndex=94, + endIndex=96, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="57A", + name="VOCATIONAL_ED_TRAINING_HOP", + friendly_name="vocational education training hours of participation", + type="string", + startIndex=96, + endIndex=98, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="57B", + name="VOCATIONAL_ED_TRAINING_EA", + friendly_name="vocational education training excused absence", + type="string", + startIndex=98, + endIndex=100, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="57C", + name="VOCATIONAL_ED_TRAINING_HOL", + friendly_name="vocational education training hours of leave", + type="string", + startIndex=100, + endIndex=102, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="58A", + name="JOB_SKILLS_TRAINING_HOP", + friendly_name="job skills training hours of participation", + type="string", + startIndex=102, + endIndex=104, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="58B", + name="JOB_SKILLS_TRAINING_EA", + friendly_name="job skills training excused absence", + type="string", + startIndex=104, + endIndex=106, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="58C", + name="JOB_SKILLS_TRAINING_HOL", + friendly_name="job skills training hours of leave", + type="string", + startIndex=106, + endIndex=108, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="59A", + name="ED_NO_HIGH_SCHOOL_DIPL_HOP", + friendly_name="education no high school diploma hours of participation", + type="string", + startIndex=108, + endIndex=110, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="59B", + name="ED_NO_HIGH_SCHOOL_DIPL_EA", + friendly_name="education no high school diploma excused absence", + type="string", + startIndex=110, + endIndex=112, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="59C", + name="ED_NO_HIGH_SCHOOL_DIPL_HOL", + friendly_name="education no high school diploma - holiday", + type="string", + startIndex=112, + endIndex=114, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="60A", + name="SCHOOL_ATTENDENCE_HOP", + friendly_name="school attendance hours of participation", + type="string", + startIndex=114, + endIndex=116, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="60B", + name="SCHOOL_ATTENDENCE_EA", + friendly_name="school attendance excused absence", + type="string", + startIndex=116, + endIndex=118, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="60C", + name="SCHOOL_ATTENDENCE_HOL", + friendly_name="school attendance - holiday", + type="string", + startIndex=118, + endIndex=120, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="61A", + name="PROVIDE_CC_HOP", + friendly_name="provide child care hours of participation", + type="string", + startIndex=120, + endIndex=122, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="61B", + name="PROVIDE_CC_EA", + friendly_name="provide child care excused absence", + type="string", + startIndex=122, + endIndex=124, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="61C", + name="PROVIDE_CC_HOL", + friendly_name="provide child care - holiday", + type="string", + startIndex=124, + endIndex=126, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="62", + name="OTHER_WORK_ACTIVITIES", + friendly_name="other work activities", + type="string", + startIndex=126, + endIndex=128, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="63", + name="DEEMED_HOURS_FOR_OVERALL", + friendly_name="deemed hours for overall", + type="string", + startIndex=128, + endIndex=130, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="64", + name="DEEMED_HOURS_FOR_TWO_PARENT", + friendly_name="deemed hours for two parent", + type="string", + startIndex=130, + endIndex=132, + required=False, + validators=[ + validators.isInStringRange(0, 99), + ], + ), + Field( + item="65", + name="EARNED_INCOME", + friendly_name="earned income", + type="string", + startIndex=132, + endIndex=136, + required=True, + validators=[ + validators.isInStringRange(0, 9999), + ], + ), + Field( + item="66A", + name="UNEARNED_INCOME_TAX_CREDIT", + friendly_name="unearned income tax credit", + type="string", + startIndex=136, + endIndex=140, + required=False, + validators=[ + validators.isInStringRange(0, 9999), + ], + ), + Field( + item="66B", + name="UNEARNED_SOCIAL_SECURITY", + friendly_name="unearned social security", + type="string", + startIndex=140, + endIndex=144, + required=True, + validators=[ + validators.isInStringRange(0, 9999), + ], + ), + Field( + item="66C", + name="UNEARNED_SSI", + friendly_name="unearned ssi benefit", + type="string", + startIndex=144, + endIndex=148, + required=True, + validators=[ + validators.isInStringRange(0, 9999), + ], + ), + Field( + item="66D", + name="UNEARNED_WORKERS_COMP", + friendly_name="unearned workers compensation", + type="string", + startIndex=148, + endIndex=152, + required=True, + validators=[ + validators.isInStringRange(0, 9999), + ], + ), + Field( + item="66E", + name="OTHER_UNEARNED_INCOME", + friendly_name="other unearned income", + type="string", + startIndex=152, + endIndex=156, + required=True, + validators=[ + validators.isInStringRange(0, 9999), + ], + ), ], - fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="4", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid(), - ]), - Field(item="6", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[validators.isAlphaNumeric()]), - Field(item="30", name='FAMILY_AFFILIATION', type='number', startIndex=19, endIndex=20, - required=True, validators=[validators.oneOf([1, 2, 3, 5])]), - Field(item="31", name='NONCUSTODIAL_PARENT', type='number', startIndex=20, endIndex=21, required=True, - validators=[validators.oneOf([1, 2])]), - Field(item="32", name='DATE_OF_BIRTH', type='number', startIndex=21, endIndex=29, required=True, - validators=[validators.isLargerThan(0),]), - TransformField(transform_func=tanf_ssn_decryption_func, item="33", name='SSN', type='string', startIndex=29, - endIndex=38, required=True, - validators=[validators.validateSSN()], is_encrypted=False), - Field(item="34A", name='RACE_HISPANIC', type='number', startIndex=38, endIndex=39, required=False, - validators=[validators.isInLimits(0, 2)]), - Field(item="34B", name='RACE_AMER_INDIAN', type='number', startIndex=39, endIndex=40, required=False, - validators=[validators.isInLimits(0, 2)]), - Field(item="34C", name='RACE_ASIAN', type='number', startIndex=40, endIndex=41, required=False, - validators=[validators.isInLimits(0, 2)]), - Field(item="34D", name='RACE_BLACK', type='number', startIndex=41, endIndex=42, required=False, - validators=[validators.isInLimits(0, 2)]), - Field(item="34E", name='RACE_HAWAIIAN', type='number', startIndex=42, endIndex=43, required=False, - validators=[validators.isInLimits(0, 2)]), - Field(item="34F", name='RACE_WHITE', type='number', startIndex=43, endIndex=44, required=False, - validators=[validators.isInLimits(0, 2)]), - Field(item="35", name='GENDER', type='number', startIndex=44, endIndex=45, required=True, - validators=[validators.isLargerThanOrEqualTo(0),]), - Field(item="36A", name='FED_OASDI_PROGRAM', type='number', startIndex=45, endIndex=46, required=True, - validators=[validators.oneOf([1, 2])]), - Field(item="36B", name='FED_DISABILITY_STATUS', type='number', startIndex=46, endIndex=47, required=True, - validators=[validators.oneOf([1, 2])]), - Field(item="36C", name='DISABLED_TITLE_XIVAPDT', type='string', startIndex=47, endIndex=48, required=True, - validators=[validators.or_validators(validators.oneOf(["1", "2"]), validators.isBlank())]), - Field(item="36D", name='AID_AGED_BLIND', type='number', startIndex=48, endIndex=49, required=False, - validators=[validators.isLargerThanOrEqualTo(0),]), - Field(item="36E", name='RECEIVE_SSI', type='number', startIndex=49, endIndex=50, required=True, - validators=[validators.oneOf([1, 2]),]), - Field(item="37", name='MARITAL_STATUS', type='number', startIndex=50, endIndex=51, required=False, - validators=[validators.isInLimits(0, 5),]), - Field(item="38", name='RELATIONSHIP_HOH', type='string', startIndex=51, endIndex=53, required=True, - validators=[validators.isInStringRange(1, 10),]), - Field(item="39", name='PARENT_WITH_MINOR_CHILD', type='number', startIndex=53, endIndex=54, required=False, - validators=[validators.isInLimits(0, 3),]), - Field(item="40", name='NEEDS_PREGNANT_WOMAN', type='number', startIndex=54, endIndex=55, required=False, - validators=[validators.isInLimits(0, 9),]), - Field(item="41", name='EDUCATION_LEVEL', type='string', startIndex=55, endIndex=57, required=False, - validators=[validators.or_validators(validators.isInStringRange(0, 16), - validators.isInStringRange(98, 99) - )]), - Field(item="42", name='CITIZENSHIP_STATUS', type='number', startIndex=57, endIndex=58, required=False, - validators=[validators.oneOf([0, 1, 2, 9])]), - Field(item="43", name='COOPERATION_CHILD_SUPPORT', type='number', startIndex=58, endIndex=59, - required=False, validators=[validators.oneOf([0, 1, 2, 9]),]), - Field(item="44", name='MONTHS_FED_TIME_LIMIT', type='string', startIndex=59, endIndex=62, required=False, - validators=[validators.isInStringRange(0, 999),]), - Field(item="45", name='MONTHS_STATE_TIME_LIMIT', type='string', startIndex=62, endIndex=64, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="46", name='CURRENT_MONTH_STATE_EXEMPT', type='number', startIndex=64, endIndex=65, - required=False, validators=[validators.isInLimits(0, 9),]), - Field(item="47", name='EMPLOYMENT_STATUS', type='number', startIndex=65, endIndex=66, required=False, - validators=[validators.isInLimits(0, 3),]), - Field(item="48", name='WORK_ELIGIBLE_INDICATOR', type='string', startIndex=66, endIndex=68, required=True, - validators=[validators.or_validators(validators.isInStringRange(0, 9), - validators.oneOf(('11', '12')) - )]), - Field(item="49", name='WORK_PART_STATUS', type='string', startIndex=68, endIndex=70, required=False, - validators=[validators.oneOf(['01', '02', '05', '07', '09', '15', '16', '17', '18', '19', '99'])]), - Field(item="50", name='UNSUB_EMPLOYMENT', type='string', startIndex=70, endIndex=72, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="51", name='SUB_PRIVATE_EMPLOYMENT', type='string', startIndex=72, endIndex=74, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="52", name='SUB_PUBLIC_EMPLOYMENT', type='string', startIndex=74, endIndex=76, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="53A", name='WORK_EXPERIENCE_HOP', type='string', startIndex=76, endIndex=78, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="53B", name='WORK_EXPERIENCE_EA', type='string', startIndex=78, endIndex=80, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="53C", name='WORK_EXPERIENCE_HOL', type='string', startIndex=80, endIndex=82, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="54", name='OJT', type='string', startIndex=82, endIndex=84, required=False, validators=[ - validators.isInStringRange(0, 99), - ]), - Field(item="55A", name='JOB_SEARCH_HOP', type='string', startIndex=84, endIndex=86, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="55B", name='JOB_SEARCH_EA', type='string', startIndex=86, endIndex=88, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="55C", name='JOB_SEARCH_HOL', type='string', startIndex=88, endIndex=90, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="56A", name='COMM_SERVICES_HOP', type='string', startIndex=90, endIndex=92, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="56B", name='COMM_SERVICES_EA', type='string', startIndex=92, endIndex=94, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="56C", name='COMM_SERVICES_HOL', type='string', startIndex=94, endIndex=96, required=False, - validators=[validators.isInStringRange(0, 99),]), - Field(item="57A", name='VOCATIONAL_ED_TRAINING_HOP', type='string', startIndex=96, endIndex=98, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="57B", name='VOCATIONAL_ED_TRAINING_EA', type='string', startIndex=98, endIndex=100, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="57C", name='VOCATIONAL_ED_TRAINING_HOL', type='string', startIndex=100, endIndex=102, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="58A", name='JOB_SKILLS_TRAINING_HOP', type='string', startIndex=102, endIndex=104, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="58B", name='JOB_SKILLS_TRAINING_EA', type='string', startIndex=104, endIndex=106, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="58C", name='JOB_SKILLS_TRAINING_HOL', type='string', startIndex=106, endIndex=108, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="59A", name='ED_NO_HIGH_SCHOOL_DIPL_HOP', type='string', startIndex=108, endIndex=110, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="59B", name='ED_NO_HIGH_SCHOOL_DIPL_EA', type='string', startIndex=110, endIndex=112, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="59C", name='ED_NO_HIGH_SCHOOL_DIPL_HOL', type='string', startIndex=112, endIndex=114, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="60A", name='SCHOOL_ATTENDENCE_HOP', type='string', startIndex=114, endIndex=116, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="60B", name='SCHOOL_ATTENDENCE_EA', type='string', startIndex=116, endIndex=118, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="60C", name='SCHOOL_ATTENDENCE_HOL', type='string', startIndex=118, endIndex=120, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="61A", name='PROVIDE_CC_HOP', type='string', startIndex=120, endIndex=122, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="61B", name='PROVIDE_CC_EA', type='string', startIndex=122, endIndex=124, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="61C", name='PROVIDE_CC_HOL', type='string', startIndex=124, endIndex=126, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="62", name='OTHER_WORK_ACTIVITIES', type='string', startIndex=126, endIndex=128, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="63", name='DEEMED_HOURS_FOR_OVERALL', type='string', startIndex=128, endIndex=130, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="64", name='DEEMED_HOURS_FOR_TWO_PARENT', type='string', startIndex=130, endIndex=132, - required=False, validators=[validators.isInStringRange(0, 99),]), - Field(item="65", name='EARNED_INCOME', type='string', startIndex=132, endIndex=136, - required=True, validators=[validators.isInStringRange(0, 9999),]), - Field(item="66A", name='UNEARNED_INCOME_TAX_CREDIT', type='string', startIndex=136, endIndex=140, - required=False, validators=[validators.isInStringRange(0, 9999),]), - Field(item="66B", name='UNEARNED_SOCIAL_SECURITY', type='string', startIndex=140, endIndex=144, - required=True, validators=[validators.isInStringRange(0, 9999),]), - Field(item="66C", name='UNEARNED_SSI', type='string', startIndex=144, endIndex=148, required=True, - validators=[validators.isInStringRange(0, 9999),]), - Field(item="66D", name='UNEARNED_WORKERS_COMP', type='string', startIndex=148, endIndex=152, required=True, - validators=[validators.isInStringRange(0, 9999),]), - Field(item="66E", name='OTHER_UNEARNED_INCOME', type='string', startIndex=152, endIndex=156, required=True, - validators=[validators.isInStringRange(0, 9999),]), - ], - )] + ) + ] ) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py index 66daa1e59..33934a458 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py @@ -1,274 +1,621 @@ """Schema for HEADER row of all submission types.""" -from ...util import SchemaManager -from ...transforms import tanf_ssn_decryption_func -from ...fields import TransformField, Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.transforms import tanf_ssn_decryption_func +from tdpservice.parsers.fields import TransformField, Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.tanf import TANF_T3 +from tdpservice.search_indexes.documents.tanf import TANF_T3DataSubmissionDocument child_one = RowSchema( model=TANF_T3, + document=TANF_T3DataSubmissionDocument, preparsing_validators=[ validators.notEmpty(start=19, end=60), ], postparsing_validators=[ validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='SSN', result_function=validators.validateSSN(), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="SSN", + result_function=validators.validateSSN(), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_HISPANIC', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_HISPANIC", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_AMER_INDIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_AMER_INDIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_ASIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_ASIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_BLACK', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_BLACK", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_HAWAIIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_HAWAIIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_WHITE', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_WHITE", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RELATIONSHIP_HOH', result_function=validators.isInStringRange(4, 9), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RELATIONSHIP_HOH", + result_function=validators.isInStringRange(4, 9), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='PARENT_MINOR_CHILD', result_function=validators.oneOf((2, 3)), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="PARENT_MINOR_CHILD", + result_function=validators.oneOf((2, 3)), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='EDUCATION_LEVEL', result_function=validators.notMatches('99'), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="EDUCATION_LEVEL", + result_function=validators.notMatches("99"), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf((1, 2)), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="CITIZENSHIP_STATUS", + result_function=validators.oneOf((1, 2)), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(2), - result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf((1, 2, 9)), - ), - ], + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(2), + result_field="CITIZENSHIP_STATUS", + result_function=validators.oneOf((1, 2, 9)), + ), + ], fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="4", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[]), - Field(item="6", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[validators.isAlphaNumeric()]), - Field(item="67", name='FAMILY_AFFILIATION', type='number', startIndex=19, endIndex=20, - required=True, validators=[ - validators.oneOf([1, 2, 4]) - ]), - Field(item="68", name='DATE_OF_BIRTH', type='number', startIndex=20, endIndex=28, - required=True, validators=[ - validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid(), - ]), - TransformField(transform_func=tanf_ssn_decryption_func, item="69", name='SSN', type='string', startIndex=28, - endIndex=37, required=True, validators=[validators.validateSSN()], - is_encrypted=False), - Field(item="70A", name='RACE_HISPANIC', type='number', startIndex=37, endIndex=38, - required=False, validators=[validators.validateRace()]), - Field(item="70B", name='RACE_AMER_INDIAN', type='number', startIndex=38, endIndex=39, - required=False, validators=[validators.validateRace()]), - Field(item="70C", name='RACE_ASIAN', type='number', startIndex=39, endIndex=40, - required=False, validators=[validators.validateRace()]), - Field(item="70D", name='RACE_BLACK', type='number', startIndex=40, endIndex=41, - required=False, validators=[validators.validateRace()]), - Field(item="70E", name='RACE_HAWAIIAN', type='number', startIndex=41, endIndex=42, - required=False, validators=[validators.validateRace()]), - Field(item="70F", name='RACE_WHITE', type='number', startIndex=42, endIndex=43, - required=False, validators=[validators.validateRace()]), - Field(item="71", name='GENDER', type='number', startIndex=43, endIndex=44, - required=True, validators=[ - validators.isInLimits(0, 9) - ]), - Field(item="72A", name='RECEIVE_NONSSA_BENEFITS', type='number', startIndex=44, endIndex=45, - required=True, validators=[ - validators.oneOf([1, 2]) - ]), - Field(item="72B", name='RECEIVE_SSI', type='number', startIndex=45, endIndex=46, - required=True, validators=[ - validators.oneOf([1, 2]) - ]), - Field(item="73", name='RELATIONSHIP_HOH', type='string', startIndex=46, endIndex=48, - required=False, validators=[ - validators.isInStringRange(0, 10) - ]), - Field(item="74", name='PARENT_MINOR_CHILD', type='number', startIndex=48, endIndex=49, - required=False, validators=[ - validators.oneOf([0, 2, 3]) - ]), - Field(item="75", name='EDUCATION_LEVEL', type='string', startIndex=49, endIndex=51, - required=True, validators=[ - validators.or_validators( - validators.isInStringRange(0, 16), - validators.isInStringRange(98, 99) - ) - ]), - Field(item="76", name='CITIZENSHIP_STATUS', type='number', startIndex=51, endIndex=52, - required=False, validators=[ - validators.oneOf([0, 1, 2, 9]) - ]), - Field(item="77A", name='UNEARNED_SSI', type='string', startIndex=52, endIndex=56, - required=False, validators=[ - validators.isInStringRange(0, 9999) - ]), - Field(item="77B", name='OTHER_UNEARNED_INCOME', type='string', startIndex=56, endIndex=60, - required=False, validators=[ - validators.isInStringRange(0, 9999) - ]), + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[], + ), + Field( + item="6", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="67", + name="FAMILY_AFFILIATION", + friendly_name="family affiliation", + type="number", + startIndex=19, + endIndex=20, + required=True, + validators=[validators.oneOf([1, 2, 4])], + ), + Field( + item="68", + name="DATE_OF_BIRTH", + friendly_name="date of birth", + type="number", + startIndex=20, + endIndex=28, + required=True, + validators=[ + validators.dateYearIsLargerThan(1950), + validators.dateMonthIsValid(), + ], + ), + TransformField( + transform_func=tanf_ssn_decryption_func, + item="69", + name="SSN", + friendly_name="social security number - ssn", + type="string", + startIndex=28, + endIndex=37, + required=True, + validators=[validators.validateSSN()], + is_encrypted=False, + ), + Field( + item="70A", + name="RACE_HISPANIC", + friendly_name="race hispanic", + type="number", + startIndex=37, + endIndex=38, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70B", + name="RACE_AMER_INDIAN", + friendly_name="race american indian", + type="number", + startIndex=38, + endIndex=39, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70C", + name="RACE_ASIAN", + friendly_name="race asian", + type="number", + startIndex=39, + endIndex=40, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70D", + name="RACE_BLACK", + friendly_name="race black", + type="number", + startIndex=40, + endIndex=41, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70E", + name="RACE_HAWAIIAN", + friendly_name="race hawaiian", + type="number", + startIndex=41, + endIndex=42, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70F", + name="RACE_WHITE", + friendly_name="race white", + type="number", + startIndex=42, + endIndex=43, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="71", + name="GENDER", + friendly_name="gender", + type="number", + startIndex=43, + endIndex=44, + required=True, + validators=[validators.isInLimits(0, 9)], + ), + Field( + item="72A", + name="RECEIVE_NONSSA_BENEFITS", + friendly_name="receives non-social security act benefits", + type="number", + startIndex=44, + endIndex=45, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="72B", + name="RECEIVE_SSI", + friendly_name="receives social security income", + type="number", + startIndex=45, + endIndex=46, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="73", + name="RELATIONSHIP_HOH", + friendly_name="relationship to head of household", + type="string", + startIndex=46, + endIndex=48, + required=False, + validators=[validators.isInStringRange(0, 10)], + ), + Field( + item="74", + name="PARENT_MINOR_CHILD", + friendly_name="parent of minor child", + type="number", + startIndex=48, + endIndex=49, + required=False, + validators=[validators.oneOf([0, 2, 3])], + ), + Field( + item="75", + name="EDUCATION_LEVEL", + friendly_name="education level", + type="string", + startIndex=49, + endIndex=51, + required=True, + validators=[ + validators.or_validators( + validators.isInStringRange(0, 16), + validators.isInStringRange(98, 99), + ) + ], + ), + Field( + item="76", + name="CITIZENSHIP_STATUS", + friendly_name="citizenship status", + type="number", + startIndex=51, + endIndex=52, + required=False, + validators=[validators.oneOf([0, 1, 2, 9])], + ), + Field( + item="77A", + name="UNEARNED_SSI", + friendly_name="unearned ssi benefit", + type="string", + startIndex=52, + endIndex=56, + required=False, + validators=[validators.isInStringRange(0, 9999)], + ), + Field( + item="77B", + name="OTHER_UNEARNED_INCOME", + friendly_name="other unearned income", + type="string", + startIndex=56, + endIndex=60, + required=False, + validators=[validators.isInStringRange(0, 9999)], + ), ], ) child_two = RowSchema( model=TANF_T3, + document=TANF_T3DataSubmissionDocument, quiet_preparser_errors=True, preparsing_validators=[ validators.notEmpty(start=60, end=101), ], postparsing_validators=[ validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='SSN', result_function=validators.validateSSN(), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="SSN", + result_function=validators.validateSSN(), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_HISPANIC', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_HISPANIC", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_AMER_INDIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_AMER_INDIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_ASIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_ASIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_BLACK', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_BLACK", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_HAWAIIAN', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_HAWAIIAN", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RACE_WHITE', result_function=validators.isInLimits(1, 2), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RACE_WHITE", + result_function=validators.isInLimits(1, 2), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='RELATIONSHIP_HOH', result_function=validators.isInStringRange(4, 9), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="RELATIONSHIP_HOH", + result_function=validators.isInStringRange(4, 9), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), - result_field='PARENT_MINOR_CHILD', result_function=validators.oneOf((2, 3)), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.oneOf((1, 2)), + result_field="PARENT_MINOR_CHILD", + result_function=validators.oneOf((2, 3)), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='EDUCATION_LEVEL', result_function=validators.notMatches('99'), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="EDUCATION_LEVEL", + result_function=validators.notMatches("99"), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf((1, 2)), - ), + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="CITIZENSHIP_STATUS", + result_function=validators.oneOf((1, 2)), + ), validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(2), - result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf((1, 2, 9)), - ), - ], + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(2), + result_field="CITIZENSHIP_STATUS", + result_function=validators.oneOf((1, 2, 9)), + ), + ], fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="4", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[]), - Field(item="6", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[validators.isAlphaNumeric()]), - Field(item="67", name='FAMILY_AFFILIATION', type='number', startIndex=60, endIndex=61, - required=True, validators=[ - validators.oneOf([1, 2, 4]) - ]), - Field(item="68", name='DATE_OF_BIRTH', type='number', startIndex=61, endIndex=69, - required=True, validators=[ - validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid(), - ]), - TransformField(transform_func=tanf_ssn_decryption_func, item="69", name='SSN', type='string', startIndex=69, - endIndex=78, required=True, validators=[validators.validateSSN()], - is_encrypted=False), - Field(item="70A", name='RACE_HISPANIC', type='number', startIndex=78, endIndex=79, - required=False, validators=[validators.validateRace()]), - Field(item="70B", name='RACE_AMER_INDIAN', type='number', startIndex=79, endIndex=80, - required=False, validators=[validators.validateRace()]), - Field(item="70C", name='RACE_ASIAN', type='number', startIndex=80, endIndex=81, - required=False, validators=[validators.validateRace()]), - Field(item="70D", name='RACE_BLACK', type='number', startIndex=81, endIndex=82, - required=False, validators=[validators.validateRace()]), - Field(item="70E", name='RACE_HAWAIIAN', type='number', startIndex=82, endIndex=83, - required=False, validators=[validators.validateRace()]), - Field(item="70F", name='RACE_WHITE', type='number', startIndex=83, endIndex=84, - required=False, validators=[validators.validateRace()]), - Field(item="71", name='GENDER', type='number', startIndex=84, endIndex=85, - required=True, validators=[ - validators.isInLimits(0, 9) - ]), - Field(item="72A", name='RECEIVE_NONSSA_BENEFITS', type='number', startIndex=85, endIndex=86, - required=True, validators=[ - validators.oneOf([1, 2]) - ]), - Field(item="72B", name='RECEIVE_SSI', type='number', startIndex=86, endIndex=87, - required=True, validators=[ - validators.oneOf([1, 2]) - ]), - Field(item="73", name='RELATIONSHIP_HOH', type='string', startIndex=87, endIndex=89, - required=False, validators=[ - validators.isInStringRange(0, 10) - ]), - Field(item="74", name='PARENT_MINOR_CHILD', type='number', startIndex=89, endIndex=90, - required=False, validators=[ - validators.oneOf([0, 2, 3]) - ]), - Field(item="75", name='EDUCATION_LEVEL', type='string', startIndex=90, endIndex=92, - required=True, validators=[ - validators.or_validators( - validators.isInStringRange(0, 16), - validators.oneOf(['98', '99']) - ) - ]), - Field(item="76", name='CITIZENSHIP_STATUS', type='number', startIndex=92, endIndex=93, - required=False, validators=[ - validators.oneOf([0, 1, 2, 9]) - ]), - Field(item="77A", name='UNEARNED_SSI', type='string', startIndex=93, endIndex=97, - required=False, validators=[ - validators.isInStringRange(0, 9999) - ]), - Field(item="77B", name='OTHER_UNEARNED_INCOME', type='string', startIndex=97, endIndex=101, - required=False, validators=[ - validators.isInStringRange(0, 9999) - ]), + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[], + ), + Field( + item="6", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="67", + name="FAMILY_AFFILIATION", + friendly_name="family affiliation", + type="number", + startIndex=60, + endIndex=61, + required=True, + validators=[validators.oneOf([1, 2, 4])], + ), + Field( + item="68", + name="DATE_OF_BIRTH", + friendly_name="date of birth", + type="number", + startIndex=61, + endIndex=69, + required=True, + validators=[ + validators.dateYearIsLargerThan(1950), + validators.dateMonthIsValid(), + ], + ), + TransformField( + transform_func=tanf_ssn_decryption_func, + item="69", + name="SSN", + friendly_name="social security number - ssn", + type="string", + startIndex=69, + endIndex=78, + required=True, + validators=[validators.validateSSN()], + is_encrypted=False, + ), + Field( + item="70A", + name="RACE_HISPANIC", + friendly_name="race hispanic", + type="number", + startIndex=78, + endIndex=79, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70B", + name="RACE_AMER_INDIAN", + friendly_name="race american indian", + type="number", + startIndex=79, + endIndex=80, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70C", + name="RACE_ASIAN", + friendly_name="race asian", + type="number", + startIndex=80, + endIndex=81, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70D", + name="RACE_BLACK", + friendly_name="race black", + type="number", + startIndex=81, + endIndex=82, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70E", + name="RACE_HAWAIIAN", + friendly_name="race hawaiian", + type="number", + startIndex=82, + endIndex=83, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="70F", + name="RACE_WHITE", + friendly_name="race white", + type="number", + startIndex=83, + endIndex=84, + required=False, + validators=[validators.validateRace()], + ), + Field( + item="71", + name="GENDER", + friendly_name="gender", + type="number", + startIndex=84, + endIndex=85, + required=True, + validators=[validators.isInLimits(0, 9)], + ), + Field( + item="72A", + name="RECEIVE_NONSSA_BENEFITS", + friendly_name="receives non-ssa benefits", + type="number", + startIndex=85, + endIndex=86, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="72B", + name="RECEIVE_SSI", + friendly_name="receives social security income", + type="number", + startIndex=86, + endIndex=87, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="73", + name="RELATIONSHIP_HOH", + friendly_name="relationship to head of household", + type="string", + startIndex=87, + endIndex=89, + required=False, + validators=[validators.isInStringRange(0, 10)], + ), + Field( + item="74", + name="PARENT_MINOR_CHILD", + friendly_name="parent of minor child", + type="number", + startIndex=89, + endIndex=90, + required=False, + validators=[validators.oneOf([0, 2, 3])], + ), + Field( + item="75", + name="EDUCATION_LEVEL", + friendly_name="education level", + type="string", + startIndex=90, + endIndex=92, + required=True, + validators=[ + validators.or_validators( + validators.isInStringRange(0, 16), validators.oneOf(["98", "99"]) + ) + ], + ), + Field( + item="76", + name="CITIZENSHIP_STATUS", + friendly_name="citizenship status", + type="number", + startIndex=92, + endIndex=93, + required=False, + validators=[validators.oneOf([0, 1, 2, 9])], + ), + Field( + item="77A", + name="UNEARNED_SSI", + friendly_name="unearned ssi benefit", + type="string", + startIndex=93, + endIndex=97, + required=False, + validators=[validators.isInStringRange(0, 9999)], + ), + Field( + item="77B", + name="OTHER_UNEARNED_INCOME", + friendly_name="other unearned income", + type="string", + startIndex=97, + endIndex=101, + required=False, + validators=[validators.isInStringRange(0, 9999)], + ), ], ) -t3 = SchemaManager( - schemas=[ - child_one, - child_two - ] -) +t3 = SchemaManager(schemas=[child_one, child_two]) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t4.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t4.py index d09aaa0cd..dee278e66 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t4.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t4.py @@ -1,50 +1,162 @@ """Schema for HEADER row of all submission types.""" -from ...util import SchemaManager -from ...fields import Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.fields import Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.tanf import TANF_T4 +from tdpservice.search_indexes.documents.tanf import TANF_T4DataSubmissionDocument t4 = SchemaManager( - schemas=[ + schemas=[ RowSchema( - model=TANF_T4, - preparsing_validators=[ - validators.hasLength(71), - ], - postparsing_validators=[], - fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="4", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid()]), - Field(item="6", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[validators.isAlphaNumeric()]), - Field(item="2", name='COUNTY_FIPS_CODE', type='string', startIndex=19, endIndex=22, - required=True, validators=[validators.isInStringRange(1, 999)]), - Field(item="5", name='STRATUM', type='string', startIndex=22, endIndex=24, - required=True, validators=[validators.isInStringRange(0, 99)]), - Field(item="7", name='ZIP_CODE', type='string', startIndex=24, endIndex=29, - required=True, validators=[]), - Field(item="8", name='DISPOSITION', type='number', startIndex=29, endIndex=30, - required=True, validators=[validators.oneOf([1, 2])]), - Field(item="9", name='CLOSURE_REASON', type='string', startIndex=30, endIndex=32, - required=True, validators=[validators.or_validators(validators.isInStringRange(1, 19), - validators.matches("99"))]), - Field(item="10", name='REC_SUB_HOUSING', type='number', startIndex=32, endIndex=33, - required=True, validators=[validators.isInLimits(1, 3)]), - Field(item="11", name='REC_MED_ASSIST', type='number', startIndex=33, endIndex=34, - required=True, validators=[validators.isInLimits(1, 2)]), - Field(item="12", name='REC_FOOD_STAMPS', type='number', startIndex=34, endIndex=35, - required=True, validators=[validators.isInLimits(1, 2)]), - Field(item="13", name='REC_SUB_CC', type='number', startIndex=35, endIndex=36, - required=True, validators=[validators.isInLimits(1, 3)]), - Field(item="14", name='BLANK', type='string', startIndex=36, endIndex=71, required=False, validators=[]), - ], + model=TANF_T4, + document=TANF_T4DataSubmissionDocument, + preparsing_validators=[ + validators.hasLength(71), + ], + postparsing_validators=[], + fields=[ + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="6", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="2", + name="COUNTY_FIPS_CODE", + friendly_name="county fips code", + type="string", + startIndex=19, + endIndex=22, + required=True, + validators=[validators.isInStringRange(1, 999)], + ), + Field( + item="5", + name="STRATUM", + friendly_name="stratum", + type="string", + startIndex=22, + endIndex=24, + required=True, + validators=[validators.isInStringRange(0, 99)], + ), + Field( + item="7", + name="ZIP_CODE", + friendly_name="zip code", + type="string", + startIndex=24, + endIndex=29, + required=True, + validators=[], + ), + Field( + item="8", + name="DISPOSITION", + friendly_name="disposition", + type="number", + startIndex=29, + endIndex=30, + required=True, + validators=[validators.oneOf([1, 2])], + ), + Field( + item="9", + name="CLOSURE_REASON", + friendly_name="closure reason", + type="string", + startIndex=30, + endIndex=32, + required=True, + validators=[ + validators.or_validators( + validators.isInStringRange(1, 19), validators.matches("99") + ) + ], + ), + Field( + item="10", + name="REC_SUB_HOUSING", + friendly_name="receives subsidized housing", + type="number", + startIndex=32, + endIndex=33, + required=True, + validators=[validators.isInLimits(1, 3)], + ), + Field( + item="11", + name="REC_MED_ASSIST", + friendly_name="receives medical assistance", + type="number", + startIndex=33, + endIndex=34, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="12", + name="REC_FOOD_STAMPS", + friendly_name="receives food stamps", + type="number", + startIndex=34, + endIndex=35, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="13", + name="REC_SUB_CC", + friendly_name="receives subsidized child care", + type="number", + startIndex=35, + endIndex=36, + required=True, + validators=[validators.isInLimits(1, 3)], + ), + Field( + item="14", + name="BLANK", + friendly_name="blank", + type="string", + startIndex=36, + endIndex=71, + required=False, + validators=[], + ), + ], ) - ] - ) + ] +) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t5.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t5.py index 43c97225f..128f82d59 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t5.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t5.py @@ -1,144 +1,417 @@ """Schema for HEADER row of all submission types.""" -from ...util import SchemaManager -from ...transforms import tanf_ssn_decryption_func -from ...fields import TransformField, Field -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.transforms import tanf_ssn_decryption_func +from tdpservice.parsers.fields import TransformField, Field +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.tanf import TANF_T5 +from tdpservice.search_indexes.documents.tanf import TANF_T5DataSubmissionDocument t5 = SchemaManager( - schemas=[ + schemas=[ RowSchema( - model=TANF_T5, - preparsing_validators=[ - validators.hasLength(71), - ], - postparsing_validators=[ - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='SSN', result_function=validators.validateSSN() - ), - validators.validate__FAM_AFF__SSN(), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_HISPANIC', result_function=validators.isInLimits(1, 2) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_AMER_INDIAN', result_function=validators.isInLimits(1, 2) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_ASIAN', result_function=validators.isInLimits(1, 2) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_BLACK', result_function=validators.isInLimits(1, 2) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_HAWAIIAN', result_function=validators.isInLimits(1, 2) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='RACE_WHITE', result_function=validators.isInLimits(1, 2) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='MARITAL_STATUS', result_function=validators.isInLimits(1, 5) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 2), - result_field='PARENT_MINOR_CHILD', result_function=validators.isInLimits(1, 3) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), - result_field='EDUCATION_LEVEL', result_function=validators.or_validators( - validators.isInStringRange(1, 16), - validators.isInStringRange(98, 99) - ) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='CITIZENSHIP_STATUS', result_function=validators.isInLimits(1, 2) - ), - validators.validate__FAM_AFF__HOH__Count_Fed_Time(), - validators.if_then_validator( - condition_field='DATE_OF_BIRTH', condition_function=validators.olderThan(18), - result_field='REC_OASDI_INSURANCE', result_function=validators.isInLimits(1, 2) - ), - validators.if_then_validator( - condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), - result_field='REC_FEDERAL_DISABILITY', result_function=validators.isInLimits(1, 2) - ), - ], - fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="4", name='RPT_MONTH_YEAR', type='number', startIndex=2, endIndex=8, - required=True, validators=[validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid()]), - Field(item="6", name='CASE_NUMBER', type='string', startIndex=8, endIndex=19, - required=True, validators=[validators.isAlphaNumeric()]), - Field(item="14", name='FAMILY_AFFILIATION', type='number', startIndex=19, endIndex=20, - required=True, validators=[validators.isInLimits(1, 5)]), - Field(item="15", name='DATE_OF_BIRTH', type='number', startIndex=20, endIndex=28, - required=True, validators=[validators.isLargerThan(0)]), - TransformField(transform_func=tanf_ssn_decryption_func, item="16", name='SSN', type='string', - startIndex=28, endIndex=37, required=True, validators=[validators.isNumber()], - is_encrypted=False), - Field(item="17A", name='RACE_HISPANIC', type='number', startIndex=37, endIndex=38, - required=True, validators=[validators.validateRace()]), - Field(item="17B", name='RACE_AMER_INDIAN', type='number', startIndex=38, endIndex=39, - required=True, validators=[validators.validateRace()]), - Field(item="17C", name='RACE_ASIAN', type='number', startIndex=39, endIndex=40, - required=True, validators=[validators.validateRace()]), - Field(item="17D", name='RACE_BLACK', type='number', startIndex=40, endIndex=41, - required=True, validators=[validators.validateRace()]), - Field(item="17E", name='RACE_HAWAIIAN', type='number', startIndex=41, endIndex=42, - required=True, validators=[validators.validateRace()]), - Field(item="17F", name='RACE_WHITE', type='number', startIndex=42, endIndex=43, - required=True, validators=[validators.validateRace()]), - Field(item="18", name='GENDER', type='number', startIndex=43, endIndex=44, - required=True, validators=[validators.isInLimits(0, 9)]), - Field(item="19A", name='REC_OASDI_INSURANCE', type='number', startIndex=44, endIndex=45, - required=True, validators=[validators.isInLimits(0, 2)]), - Field(item="19B", name='REC_FEDERAL_DISABILITY', type='number', startIndex=45, endIndex=46, - required=True, validators=[validators.isInLimits(1, 2)]), - Field(item="19C", name='REC_AID_TOTALLY_DISABLED', type='number', startIndex=46, endIndex=47, - required=True, validators=[validators.isInLimits(0, 2)]), - Field(item="19D", name='REC_AID_AGED_BLIND', type='number', startIndex=47, endIndex=48, - required=True, validators=[validators.isInLimits(0, 2)]), - Field(item="19E", name='REC_SSI', type='number', startIndex=48, endIndex=49, - required=True, validators=[validators.isInLimits(1, 2)]), - Field(item="20", name='MARITAL_STATUS', type='number', startIndex=49, endIndex=50, - required=True, validators=[validators.isInLimits(0, 5)]), - Field(item="21", name='RELATIONSHIP_HOH', type='string', startIndex=50, endIndex=52, - required=True, validators=[validators.isInStringRange(1, 10)]), - Field(item="22", name='PARENT_MINOR_CHILD', type='number', startIndex=52, endIndex=53, - required=True, validators=[validators.isInLimits(0, 2)]), - Field(item="23", name='NEEDS_OF_PREGNANT_WOMAN', type='number', startIndex=53, endIndex=54, - required=True, validators=[validators.isInLimits(0, 9)]), - Field(item="24", name='EDUCATION_LEVEL', type='string', startIndex=54, endIndex=56, - required=True, validators=[validators.or_validators(validators.isInStringRange(0, 16), - validators.isInStringRange(98, 99))]), - Field(item="25", name='CITIZENSHIP_STATUS', type='number', startIndex=56, endIndex=57, - required=True, validators=[validators.or_validators(validators.isInLimits(0, 2), - validators.matches(9))]), - Field(item="26", name='COUNTABLE_MONTH_FED_TIME', type='string', startIndex=57, endIndex=60, - required=True, validators=[validators.isInStringRange(0, 999)]), - Field(item="27", name='COUNTABLE_MONTHS_STATE_TRIBE', type='string', startIndex=60, endIndex=62, - required=True, validators=[validators.isInStringRange(0, 99)]), - Field(item="28", name='EMPLOYMENT_STATUS', type='number', startIndex=62, endIndex=63, - required=True, validators=[validators.isInLimits(0, 3)]), - Field(item="29", name='AMOUNT_EARNED_INCOME', type='string', startIndex=63, endIndex=67, - required=True, validators=[validators.isInStringRange(0, 9999)]), - Field(item="30", name='AMOUNT_UNEARNED_INCOME', type='string', startIndex=67, endIndex=71, - required=True, validators=[validators.isInStringRange(0, 9999)]), - ], + model=TANF_T5, + document=TANF_T5DataSubmissionDocument, + preparsing_validators=[ + validators.hasLength(71), + ], + postparsing_validators=[ + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="SSN", + result_function=validators.validateSSN(), + ), + validators.validate__FAM_AFF__SSN(), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_HISPANIC", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_AMER_INDIAN", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_ASIAN", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_BLACK", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_HAWAIIAN", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="RACE_WHITE", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="MARITAL_STATUS", + result_function=validators.isInLimits(1, 5), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 2), + result_field="PARENT_MINOR_CHILD", + result_function=validators.isInLimits(1, 3), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.isInLimits(1, 3), + result_field="EDUCATION_LEVEL", + result_function=validators.or_validators( + validators.isInStringRange(1, 16), + validators.isInStringRange(98, 99), + ), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="CITIZENSHIP_STATUS", + result_function=validators.isInLimits(1, 2), + ), + validators.validate__FAM_AFF__HOH__Count_Fed_Time(), + validators.if_then_validator( + condition_field="DATE_OF_BIRTH", + condition_function=validators.olderThan(18), + result_field="REC_OASDI_INSURANCE", + result_function=validators.isInLimits(1, 2), + ), + validators.if_then_validator( + condition_field="FAMILY_AFFILIATION", + condition_function=validators.matches(1), + result_field="REC_FEDERAL_DISABILITY", + result_function=validators.isInLimits(1, 2), + ), + ], + fields=[ + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=8, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="6", + name="CASE_NUMBER", + friendly_name="case number", + type="string", + startIndex=8, + endIndex=19, + required=True, + validators=[validators.isAlphaNumeric()], + ), + Field( + item="14", + name="FAMILY_AFFILIATION", + friendly_name="family affiliation", + type="number", + startIndex=19, + endIndex=20, + required=True, + validators=[validators.isInLimits(1, 5)], + ), + Field( + item="15", + name="DATE_OF_BIRTH", + friendly_name="date of birth", + type="number", + startIndex=20, + endIndex=28, + required=True, + validators=[ + validators.dateYearIsLargerThan(1900), + validators.dateMonthIsValid(), + ], + ), + TransformField( + transform_func=tanf_ssn_decryption_func, + item="16", + name="SSN", + friendly_name="social security number - ssn", + type="string", + startIndex=28, + endIndex=37, + required=True, + validators=[validators.isNumber()], + is_encrypted=False, + ), + Field( + item="17A", + name="RACE_HISPANIC", + friendly_name="race hispanic", + type="number", + startIndex=37, + endIndex=38, + required=True, + validators=[validators.validateRace()], + ), + Field( + item="17B", + name="RACE_AMER_INDIAN", + friendly_name="race american indian", + type="number", + startIndex=38, + endIndex=39, + required=True, + validators=[validators.validateRace()], + ), + Field( + item="17C", + name="RACE_ASIAN", + friendly_name="race asian", + type="number", + startIndex=39, + endIndex=40, + required=True, + validators=[validators.validateRace()], + ), + Field( + item="17D", + name="RACE_BLACK", + friendly_name="race black", + type="number", + startIndex=40, + endIndex=41, + required=True, + validators=[validators.validateRace()], + ), + Field( + item="17E", + name="RACE_HAWAIIAN", + friendly_name="race hawaiian", + type="number", + startIndex=41, + endIndex=42, + required=True, + validators=[validators.validateRace()], + ), + Field( + item="17F", + name="RACE_WHITE", + friendly_name="race white", + type="number", + startIndex=42, + endIndex=43, + required=True, + validators=[validators.validateRace()], + ), + Field( + item="18", + name="GENDER", + friendly_name="gender", + type="number", + startIndex=43, + endIndex=44, + required=True, + validators=[validators.isInLimits(0, 9)], + ), + Field( + item="19A", + name="REC_OASDI_INSURANCE", + friendly_name="receives old-age survivors and disability insurance", + type="number", + startIndex=44, + endIndex=45, + required=True, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="19B", + name="REC_FEDERAL_DISABILITY", + friendly_name="receives federal disability", + type="number", + startIndex=45, + endIndex=46, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="19C", + name="REC_AID_TOTALLY_DISABLED", + friendly_name="receives aid for totally disabled", + type="number", + startIndex=46, + endIndex=47, + required=True, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="19D", + name="REC_AID_AGED_BLIND", + friendly_name="receives from the aid to the aged, blind, and disabled program", + type="number", + startIndex=47, + endIndex=48, + required=True, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="19E", + name="REC_SSI", + friendly_name="receives social security income", + type="number", + startIndex=48, + endIndex=49, + required=True, + validators=[validators.isInLimits(1, 2)], + ), + Field( + item="20", + name="MARITAL_STATUS", + friendly_name="marital status", + type="number", + startIndex=49, + endIndex=50, + required=True, + validators=[validators.isInLimits(0, 5)], + ), + Field( + item="21", + name="RELATIONSHIP_HOH", + friendly_name="relationship to head of household", + type="string", + startIndex=50, + endIndex=52, + required=True, + validators=[validators.isInStringRange(1, 10)], + ), + Field( + item="22", + name="PARENT_MINOR_CHILD", + friendly_name="parent of minor child", + type="number", + startIndex=52, + endIndex=53, + required=True, + validators=[validators.isInLimits(0, 2)], + ), + Field( + item="23", + name="NEEDS_OF_PREGNANT_WOMAN", + friendly_name="needs of pregnant woman", + type="number", + startIndex=53, + endIndex=54, + required=True, + validators=[validators.isInLimits(0, 9)], + ), + Field( + item="24", + name="EDUCATION_LEVEL", + friendly_name="educational level", + type="string", + startIndex=54, + endIndex=56, + required=True, + validators=[ + validators.or_validators( + validators.isInStringRange(0, 16), + validators.isInStringRange(98, 99), + ) + ], + ), + Field( + item="25", + name="CITIZENSHIP_STATUS", + friendly_name="citizenship status", + type="number", + startIndex=56, + endIndex=57, + required=True, + validators=[ + validators.or_validators( + validators.isInLimits(0, 2), validators.matches(9) + ) + ], + ), + Field( + item="26", + name="COUNTABLE_MONTH_FED_TIME", + friendly_name="countable months toward federal time", + type="string", + startIndex=57, + endIndex=60, + required=True, + validators=[validators.isInStringRange(0, 999)], + ), + Field( + item="27", + name="COUNTABLE_MONTHS_STATE_TRIBE", + friendly_name="countable months remaining under state tribe", + type="string", + startIndex=60, + endIndex=62, + required=True, + validators=[validators.isInStringRange(0, 99)], + ), + Field( + item="28", + name="EMPLOYMENT_STATUS", + friendly_name="employment status", + type="number", + startIndex=62, + endIndex=63, + required=True, + validators=[validators.isInLimits(0, 3)], + ), + Field( + item="29", + name="AMOUNT_EARNED_INCOME", + friendly_name="amount earnedof income", + type="string", + startIndex=63, + endIndex=67, + required=True, + validators=[validators.isInStringRange(0, 9999)], + ), + Field( + item="30", + name="AMOUNT_UNEARNED_INCOME", + friendly_name="amount of unearned income", + type="string", + startIndex=67, + endIndex=71, + required=True, + validators=[validators.isInStringRange(0, 9999)], + ), + ], ) - ] + ] ) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t6.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t6.py index 8140322c2..60bc2cab7 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t6.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t6.py @@ -1,171 +1,620 @@ """Schema for HEADER row of all submission types.""" -from ...util import SchemaManager -from ...transforms import calendar_quarter_to_rpt_month_year -from ...fields import Field, TransformField -from ...row_schema import RowSchema -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.transforms import calendar_quarter_to_rpt_month_year +from tdpservice.parsers.fields import Field, TransformField +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers import validators from tdpservice.search_indexes.models.tanf import TANF_T6 +from tdpservice.search_indexes.documents.tanf import TANF_T6DataSubmissionDocument s1 = RowSchema( model=TANF_T6, + document=TANF_T6DataSubmissionDocument, preparsing_validators=[ validators.hasLength(379), ], postparsing_validators=[ validators.sumIsEqual("NUM_APPLICATIONS", ["NUM_APPROVED", "NUM_DENIED"]), - validators.sumIsEqual("NUM_FAMILIES", ["NUM_2_PARENTS", "NUM_1_PARENTS", "NUM_NO_PARENTS"]), - validators.sumIsEqual("NUM_RECIPIENTS", ["NUM_ADULT_RECIPIENTS", "NUM_CHILD_RECIPIENTS"]), + validators.sumIsEqual( + "NUM_FAMILIES", ["NUM_2_PARENTS", "NUM_1_PARENTS", "NUM_NO_PARENTS"] + ), + validators.sumIsEqual( + "NUM_RECIPIENTS", ["NUM_ADULT_RECIPIENTS", "NUM_CHILD_RECIPIENTS"] + ), ], fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="3", name='CALENDAR_QUARTER', type='number', startIndex=2, endIndex=7, - required=True, validators=[validators.dateYearIsLargerThan(1998), - validators.quarterIsValid()]), - TransformField(calendar_quarter_to_rpt_month_year(0), item="4", name='RPT_MONTH_YEAR', type='number', - startIndex=2, endIndex=7, required=True, validators=[validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid()]), - Field(item="4A", name='NUM_APPLICATIONS', type='number', startIndex=7, endIndex=15, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="5A", name='NUM_APPROVED', type='number', startIndex=31, endIndex=39, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="6A", name='NUM_DENIED', type='number', startIndex=55, endIndex=63, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="7A", name='ASSISTANCE', type='number', startIndex=79, endIndex=91, - required=True, validators=[validators.isInLimits(0, 999999999999)]), - Field(item="8A", name='NUM_FAMILIES', type='number', startIndex=115, endIndex=123, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="9A", name='NUM_2_PARENTS', type='number', startIndex=139, endIndex=147, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="10A", name='NUM_1_PARENTS', type='number', startIndex=163, endIndex=171, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="11A", name='NUM_NO_PARENTS', type='number', startIndex=187, endIndex=195, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="12A", name='NUM_RECIPIENTS', type='number', startIndex=211, endIndex=219, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="13A", name='NUM_ADULT_RECIPIENTS', type='number', startIndex=235, endIndex=243, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="14A", name='NUM_CHILD_RECIPIENTS', type='number', startIndex=259, endIndex=267, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="15A", name='NUM_NONCUSTODIALS', type='number', startIndex=283, endIndex=291, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="16A", name='NUM_BIRTHS', type='number', startIndex=307, endIndex=315, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="17A", name='NUM_OUTWEDLOCK_BIRTHS', type='number', startIndex=331, endIndex=339, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="18A", name='NUM_CLOSED_CASES', type='number', startIndex=355, endIndex=363, - required=True, validators=[validators.isInLimits(0, 99999999)]), + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="3", + name="CALENDAR_QUARTER", + friendly_name="calendar quarter", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.quarterIsValid(), + ], + ), + TransformField( + calendar_quarter_to_rpt_month_year(0), + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="4A", + name="NUM_APPLICATIONS", + friendly_name="total number of applications", + type="number", + startIndex=7, + endIndex=15, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="5A", + name="NUM_APPROVED", + friendly_name="total number of approved applications", + type="number", + startIndex=31, + endIndex=39, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="6A", + name="NUM_DENIED", + friendly_name="total number of denied applications", + type="number", + startIndex=55, + endIndex=63, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="7A", + name="ASSISTANCE", + friendly_name="total amount of assistance", + type="number", + startIndex=79, + endIndex=91, + required=True, + validators=[validators.isInLimits(0, 999999999999)], + ), + Field( + item="8A", + name="NUM_FAMILIES", + friendly_name="number of families", + type="number", + startIndex=115, + endIndex=123, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="9A", + name="NUM_2_PARENTS", + friendly_name="total number of two-parent families", + type="number", + startIndex=139, + endIndex=147, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="10A", + name="NUM_1_PARENTS", + friendly_name="total number of one-parent families", + type="number", + startIndex=163, + endIndex=171, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="11A", + name="NUM_NO_PARENTS", + friendly_name="total number of no parent families", + type="number", + startIndex=187, + endIndex=195, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="12A", + name="NUM_RECIPIENTS", + friendly_name="total number of recipients", + type="number", + startIndex=211, + endIndex=219, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="13A", + name="NUM_ADULT_RECIPIENTS", + friendly_name="total number of adult recipients", + type="number", + startIndex=235, + endIndex=243, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="14A", + name="NUM_CHILD_RECIPIENTS", + friendly_name="total number of child recipients", + type="number", + startIndex=259, + endIndex=267, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="15A", + name="NUM_NONCUSTODIALS", + friendly_name="total number of noncustodial parents participating in work activities", + type="number", + startIndex=283, + endIndex=291, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="16A", + name="NUM_BIRTHS", + friendly_name="total number of births", + type="number", + startIndex=307, + endIndex=315, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="17A", + name="NUM_OUTWEDLOCK_BIRTHS", + friendly_name="total number of out-of-wedlock births", + type="number", + startIndex=331, + endIndex=339, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="18A", + name="NUM_CLOSED_CASES", + friendly_name="total number of closed cases", + type="number", + startIndex=355, + endIndex=363, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), ], ) s2 = RowSchema( model=TANF_T6, + document=TANF_T6DataSubmissionDocument, preparsing_validators=[ validators.hasLength(379), ], postparsing_validators=[ validators.sumIsEqual("NUM_APPLICATIONS", ["NUM_APPROVED", "NUM_DENIED"]), - validators.sumIsEqual("NUM_FAMILIES", ["NUM_2_PARENTS", "NUM_1_PARENTS", "NUM_NO_PARENTS"]), - validators.sumIsEqual("NUM_RECIPIENTS", ["NUM_ADULT_RECIPIENTS", "NUM_CHILD_RECIPIENTS"]), + validators.sumIsEqual( + "NUM_FAMILIES", ["NUM_2_PARENTS", "NUM_1_PARENTS", "NUM_NO_PARENTS"] + ), + validators.sumIsEqual( + "NUM_RECIPIENTS", ["NUM_ADULT_RECIPIENTS", "NUM_CHILD_RECIPIENTS"] + ), ], fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="3", name='CALENDAR_QUARTER', type='number', startIndex=2, endIndex=7, - required=True, validators=[]), - TransformField(calendar_quarter_to_rpt_month_year(1), item="4", name='RPT_MONTH_YEAR', type='number', - startIndex=2, endIndex=7, required=True, validators=[]), - Field(item="4B", name='NUM_APPLICATIONS', type='number', startIndex=15, endIndex=23, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="5B", name='NUM_APPROVED', type='number', startIndex=39, endIndex=47, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="6B", name='NUM_DENIED', type='number', startIndex=63, endIndex=71, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="7B", name='ASSISTANCE', type='number', startIndex=91, endIndex=103, - required=True, validators=[validators.isInLimits(0, 999999999999)]), - Field(item="8B", name='NUM_FAMILIES', type='number', startIndex=123, endIndex=131, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="9B", name='NUM_2_PARENTS', type='number', startIndex=147, endIndex=155, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="10B", name='NUM_1_PARENTS', type='number', startIndex=171, endIndex=179, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="11B", name='NUM_NO_PARENTS', type='number', startIndex=195, endIndex=203, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="12B", name='NUM_RECIPIENTS', type='number', startIndex=219, endIndex=227, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="13B", name='NUM_ADULT_RECIPIENTS', type='number', startIndex=243, endIndex=251, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="14B", name='NUM_CHILD_RECIPIENTS', type='number', startIndex=267, endIndex=275, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="15B", name='NUM_NONCUSTODIALS', type='number', startIndex=291, endIndex=299, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="16B", name='NUM_BIRTHS', type='number', startIndex=315, endIndex=323, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="17B", name='NUM_OUTWEDLOCK_BIRTHS', type='number', startIndex=339, endIndex=347, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="18B", name='NUM_CLOSED_CASES', type='number', startIndex=363, endIndex=371, - required=True, validators=[validators.isInLimits(0, 99999999)]), + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="3", + name="CALENDAR_QUARTER", + friendly_name="calendar quarter", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[], + ), + TransformField( + calendar_quarter_to_rpt_month_year(1), + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[], + ), + Field( + item="4B", + name="NUM_APPLICATIONS", + friendly_name="total number of applications", + type="number", + startIndex=15, + endIndex=23, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="5B", + name="NUM_APPROVED", + friendly_name="total number of approved cases", + type="number", + startIndex=39, + endIndex=47, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="6B", + name="NUM_DENIED", + friendly_name="total number of denied", + type="number", + startIndex=63, + endIndex=71, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="7B", + name="ASSISTANCE", + friendly_name="assistance", + type="number", + startIndex=91, + endIndex=103, + required=True, + validators=[validators.isInLimits(0, 999999999999)], + ), + Field( + item="8B", + name="NUM_FAMILIES", + friendly_name="total of number of families", + type="number", + startIndex=123, + endIndex=131, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="9B", + name="NUM_2_PARENTS", + friendly_name="total number of two-parent families", + type="number", + startIndex=147, + endIndex=155, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="10B", + name="NUM_1_PARENTS", + friendly_name="total number of one-parent families", + type="number", + startIndex=171, + endIndex=179, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="11B", + name="NUM_NO_PARENTS", + friendly_name="total number of no-parent family", + type="number", + startIndex=195, + endIndex=203, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="12B", + name="NUM_RECIPIENTS", + friendly_name="total number of recipients", + type="number", + startIndex=219, + endIndex=227, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="13B", + name="NUM_ADULT_RECIPIENTS", + friendly_name="total number of adult recipients", + type="number", + startIndex=243, + endIndex=251, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="14B", + name="NUM_CHILD_RECIPIENTS", + friendly_name="total number of child recipients", + type="number", + startIndex=267, + endIndex=275, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="15B", + name="NUM_NONCUSTODIALS", + friendly_name="total number of noncustodial parents", + type="number", + startIndex=291, + endIndex=299, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="16B", + name="NUM_BIRTHS", + friendly_name="total number of births", + type="number", + startIndex=315, + endIndex=323, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="17B", + name="NUM_OUTWEDLOCK_BIRTHS", + friendly_name="total number of out wedlock births", + type="number", + startIndex=339, + endIndex=347, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="18B", + name="NUM_CLOSED_CASES", + friendly_name="total number of closed assets", + type="number", + startIndex=363, + endIndex=371, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), ], ) s3 = RowSchema( model=TANF_T6, + document=TANF_T6DataSubmissionDocument, preparsing_validators=[ validators.hasLength(379), ], postparsing_validators=[ validators.sumIsEqual("NUM_APPLICATIONS", ["NUM_APPROVED", "NUM_DENIED"]), - validators.sumIsEqual("NUM_FAMILIES", ["NUM_2_PARENTS", "NUM_1_PARENTS", "NUM_NO_PARENTS"]), - validators.sumIsEqual("NUM_RECIPIENTS", ["NUM_ADULT_RECIPIENTS", "NUM_CHILD_RECIPIENTS"]), + validators.sumIsEqual( + "NUM_FAMILIES", ["NUM_2_PARENTS", "NUM_1_PARENTS", "NUM_NO_PARENTS"] + ), + validators.sumIsEqual( + "NUM_RECIPIENTS", ["NUM_ADULT_RECIPIENTS", "NUM_CHILD_RECIPIENTS"] + ), ], fields=[ - Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="3", name='CALENDAR_QUARTER', type='number', startIndex=2, endIndex=7, - required=True, validators=[]), - TransformField(calendar_quarter_to_rpt_month_year(2), item="4", name='RPT_MONTH_YEAR', type='number', - startIndex=2, endIndex=7, required=True, validators=[]), - Field(item="4C", name='NUM_APPLICATIONS', type='number', startIndex=23, endIndex=31, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="5C", name='NUM_APPROVED', type='number', startIndex=47, endIndex=55, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="6C", name='NUM_DENIED', type='number', startIndex=71, endIndex=79, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="7C", name='ASSISTANCE', type='number', startIndex=103, endIndex=115, - required=True, validators=[validators.isInLimits(0, 999999999999)]), - Field(item="8C", name='NUM_FAMILIES', type='number', startIndex=131, endIndex=139, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="9C", name='NUM_2_PARENTS', type='number', startIndex=155, endIndex=163, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="10C", name='NUM_1_PARENTS', type='number', startIndex=179, endIndex=187, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="11C", name='NUM_NO_PARENTS', type='number', startIndex=203, endIndex=211, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="12C", name='NUM_RECIPIENTS', type='number', startIndex=227, endIndex=235, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="13C", name='NUM_ADULT_RECIPIENTS', type='number', startIndex=251, endIndex=259, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="14C", name='NUM_CHILD_RECIPIENTS', type='number', startIndex=275, endIndex=283, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="15C", name='NUM_NONCUSTODIALS', type='number', startIndex=299, endIndex=307, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="16C", name='NUM_BIRTHS', type='number', startIndex=323, endIndex=331, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="17C", name='NUM_OUTWEDLOCK_BIRTHS', type='number', startIndex=347, endIndex=355, - required=True, validators=[validators.isInLimits(0, 99999999)]), - Field(item="18C", name='NUM_CLOSED_CASES', type='number', startIndex=371, endIndex=379, - required=True, validators=[validators.isInLimits(0, 99999999)]), + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="3", + name="CALENDAR_QUARTER", + friendly_name="calendar quarter", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[], + ), + TransformField( + calendar_quarter_to_rpt_month_year(2), + item="4", + name="RPT_MONTH_YEAR", + friendly_name="reporting month and year", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[], + ), + Field( + item="4C", + name="NUM_APPLICATIONS", + friendly_name="total number of applications", + type="number", + startIndex=23, + endIndex=31, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="5C", + name="NUM_APPROVED", + friendly_name="total number of approved applications", + type="number", + startIndex=47, + endIndex=55, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="6C", + name="NUM_DENIED", + friendly_name="total number of denied applications", + type="number", + startIndex=71, + endIndex=79, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="7C", + name="ASSISTANCE", + friendly_name="total amount of assistance", + type="number", + startIndex=103, + endIndex=115, + required=True, + validators=[validators.isInLimits(0, 999999999999)], + ), + Field( + item="8C", + name="NUM_FAMILIES", + friendly_name="total number of families", + type="number", + startIndex=131, + endIndex=139, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="9C", + name="NUM_2_PARENTS", + friendly_name="total number of two parents families", + type="number", + startIndex=155, + endIndex=163, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="10C", + name="NUM_1_PARENTS", + friendly_name="total number of one parent families", + type="number", + startIndex=179, + endIndex=187, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="11C", + name="NUM_NO_PARENTS", + friendly_name="total number of no parent families", + type="number", + startIndex=203, + endIndex=211, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="12C", + name="NUM_RECIPIENTS", + friendly_name="total number of recipients", + type="number", + startIndex=227, + endIndex=235, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="13C", + name="NUM_ADULT_RECIPIENTS", + friendly_name="total number of adult recipients", + type="number", + startIndex=251, + endIndex=259, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="14C", + name="NUM_CHILD_RECIPIENTS", + friendly_name="total number of child recipients", + type="number", + startIndex=275, + endIndex=283, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="15C", + name="NUM_NONCUSTODIALS", + friendly_name="total number of noncustodial parents", + type="number", + startIndex=299, + endIndex=307, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="16C", + name="NUM_BIRTHS", + friendly_name="total number of births", + type="number", + startIndex=323, + endIndex=331, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="17C", + name="NUM_OUTWEDLOCK_BIRTHS", + friendly_name="total number of out wedlock births", + type="number", + startIndex=347, + endIndex=355, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), + Field( + item="18C", + name="NUM_CLOSED_CASES", + friendly_name="total number of closed cases", + type="number", + startIndex=371, + endIndex=379, + required=True, + validators=[validators.isInLimits(0, 99999999)], + ), ], ) -t6 = SchemaManager( - schemas=[ - s1, - s2, - s3 - ] - ) +t6 = SchemaManager(schemas=[s1, s2, s3]) diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t7.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t7.py index 2fcb4e0fd..a3d5311f2 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t7.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t7.py @@ -1,11 +1,12 @@ """Schema for TANF T7 Row.""" -from ...util import SchemaManager -from ...fields import Field, TransformField -from ...row_schema import RowSchema -from ...transforms import calendar_quarter_to_rpt_month_year -from ... import validators +from tdpservice.parsers.util import SchemaManager +from tdpservice.parsers.fields import Field, TransformField +from tdpservice.parsers.row_schema import RowSchema +from tdpservice.parsers.transforms import calendar_quarter_to_rpt_month_year +from tdpservice.parsers import validators from tdpservice.search_indexes.models.tanf import TANF_T7 +from tdpservice.search_indexes.documents.tanf import TANF_T7DataSubmissionDocument schemas = [] @@ -15,45 +16,90 @@ families_index = 10 for i in range(1, 31): month_index = (i - 1) % 3 - sub_item_labels = ['A', 'B', 'C'] + sub_item_labels = ["A", "B", "C"] families_value_item_number = f"6{sub_item_labels[month_index]}" schemas.append( - RowSchema( - model=TANF_T7, - quiet_preparser_errors=i > 1, - preparsing_validators=[ - validators.notEmpty(0, 7), - validators.notEmpty(validator_index, validator_index + 24), - ], - postparsing_validators=[], - fields=[ - Field(item="0", name="RecordType", type='string', startIndex=0, endIndex=2, - required=True, validators=[]), - Field(item="3", name='CALENDAR_QUARTER', type='number', startIndex=2, endIndex=7, - required=True, validators=[validators.dateYearIsLargerThan(1998), - validators.quarterIsValid()]), - TransformField( - transform_func=calendar_quarter_to_rpt_month_year(month_index), - item="3A", - name='RPT_MONTH_YEAR', - type='number', - startIndex=2, - endIndex=7, - required=True, - validators=[ - validators.dateYearIsLargerThan(1998), - validators.dateMonthIsValid() - ] - ), - Field(item="4", name='TDRS_SECTION_IND', type='string', startIndex=section_ind_index, - endIndex=section_ind_index + 1, required=True, validators=[validators.oneOf(['1', '2'])]), - Field(item="5", name='STRATUM', type='string', startIndex=stratum_index, - endIndex=stratum_index + 2, required=True, validators=[validators.isInStringRange(1, 99)]), - Field(item=families_value_item_number, name='FAMILIES_MONTH', type='number', startIndex=families_index, - endIndex=families_index + 7, required=True, validators=[validators.isInLimits(0, 9999999)]), - ] - ) + RowSchema( + model=TANF_T7, + document=TANF_T7DataSubmissionDocument, + quiet_preparser_errors=i > 1, + preparsing_validators=[ + validators.hasLength(247), + validators.notEmpty(0, 7), + validators.notEmpty(validator_index, validator_index + 24), + ], + postparsing_validators=[], + fields=[ + Field( + item="0", + name="RecordType", + friendly_name="record type", + type="string", + startIndex=0, + endIndex=2, + required=True, + validators=[], + ), + Field( + item="3", + name="CALENDAR_QUARTER", + friendly_name="calendar quarter", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.quarterIsValid(), + ], + ), + TransformField( + transform_func=calendar_quarter_to_rpt_month_year(month_index), + item="3A", + name="RPT_MONTH_YEAR", + friendly_name="reporting month year", + type="number", + startIndex=2, + endIndex=7, + required=True, + validators=[ + validators.dateYearIsLargerThan(1998), + validators.dateMonthIsValid(), + ], + ), + Field( + item="4", + name="TDRS_SECTION_IND", + friendly_name="tdrs section indicator", + type="string", + startIndex=section_ind_index, + endIndex=section_ind_index + 1, + required=True, + validators=[validators.oneOf(["1", "2"])], + ), + Field( + item="5", + name="STRATUM", + friendly_name="stratum", + type="string", + startIndex=stratum_index, + endIndex=stratum_index + 2, + required=True, + validators=[validators.isInStringRange(1, 99)], + ), + Field( + item=families_value_item_number, + name="FAMILIES_MONTH", + friendly_name="families month", + type="number", + startIndex=families_index, + endIndex=families_index + 7, + required=True, + validators=[validators.isInLimits(0, 9999999)], + ), + ], + ) ) index_offset = 0 if i % 3 != 0 else 24 diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/trailer.py b/tdrs-backend/tdpservice/parsers/schema_defs/trailer.py index 46a440508..ab9fbcf06 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/trailer.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/trailer.py @@ -8,23 +8,51 @@ trailer = RowSchema( model=dict, + document=None, preparsing_validators=[ validators.hasLength( 23, - lambda value, length: f'Trailer length is {len(value)} but must be {length} characters.' + lambda value, length: f"Trailer length is {len(value)} but must be {length} characters.", ), - validators.startsWith('TRAILER') + validators.startsWith("TRAILER"), ], postparsing_validators=[], fields=[ - Field(item="1", name='title', type='string', startIndex=0, endIndex=7, required=True, validators=[ - validators.matches('TRAILER') - ]), - Field(item="2", name='record_count', type='number', startIndex=7, endIndex=14, required=True, validators=[ - validators.between(0, 9999999) - ]), - Field(item="-1", name='blank', type='string', startIndex=14, endIndex=23, required=False, validators=[ - validators.matches(' ') - ]), + Field( + item="1", + name='title', + friendly_name='title', + type='string', + startIndex=0, + endIndex=7, + required=True, + validators=[ + validators.matches('TRAILER') + ] + ), + Field( + item="2", + name='record_count', + friendly_name='record count', + type='number', + startIndex=7, + endIndex=14, + required=True, + validators=[ + validators.between(0, 9999999) + ] + ), + Field( + item="-1", + name='blank', + friendly_name='blank', + type='string', + startIndex=14, + endIndex=23, + required=False, + validators=[ + validators.matches(' ') + ] + ), ], ) diff --git a/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM1.TS53_fake b/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM1.TS53_fake.txt similarity index 100% rename from tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM1.TS53_fake rename to tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM1.TS53_fake.txt diff --git a/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM2.MS24 b/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM2.MS24 new file mode 100644 index 000000000..54051bd5d --- /dev/null +++ b/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM2.MS24 @@ -0,0 +1,8943 @@ +HEADER20184C24 SSP1EU +M42018101111111116120000406911161113 +M520181011111111161119791106WTTTY0ZB922212222222210112111112970000 +M520181011111111161120150623WTTTYT#0W222122222222 0422981 0000 +M520181011111111161120090507WTTTP0#WP222122122222 0422021 0000 +M42018101111111116720600401981991113 +M520181011111111167119830512WTTT00BTB12222112222210212121112430000 +M520181011111111167119810726WTTT#0#9Y12222222222220112111127770000 +M520181011111111167120130123WTTT0#0B@222222122222 0422981 0000 +M520181011111111167120090106WTTTP0#WB122221122222 0422031 0000 +M520181011111111167120020126WTTTP9@PT122222222222 0422101 0000 +M42018101111111117121100401551162113 +M520181011111111171119940626WTTTY9##012222122222210112121100000000 +M520181011111111171120170623WTTT#9PTP122222222222 0422981 0000 +M520181011111111171120120121WTTTY9YBT122221222222 0422981 0000 +M42018101111111117722400400881163113 +M520181011111111177119810119WTTT###WZ22222122222220212111200000000 +M520181011111111177119680701WTTTP0PYZ222221122222201121112####0000 +M520181011111111177120170802WTTTP#@9P222222122222 0422981 0000 +M520181011111111177120100701WTTTP#@WW222221222222 0422021 0000 +M520181011111111177120051119WTTTPZYZ@222221222222 0422061 0000 +M520181011111111177120040616WTTTYBP0P222221222222 0422081 0000 +M42018101111111123320000405551162113 +M520181011111111233120000101WTTTYZWBB22222122222210112131119910000 +M520181011111111233120040126WTTTPP#0@222122222222 0422081 0000 +M42018101111111123921100401181163113 +M520181011111111239119820619WTTTYTTYZ12222222222220112161104680000 +M520181011111111239120150115WTTT#WTBB122221122222 0422981 0000 +M520181011111111239120110603WTTTPYZPB122222222222 0422011 0000 +M42018101111111146020600405471163113 +M520181011111111460119940801WTTTP0BW#22212222222210112081118080000 +M520181011111111460120140626WTTTYPB90222122222222 0422981 0000 +M42018101111111154920600400871162113 +M520181011111111549119830619WTTTPYW@012222222222250112121116060000 +M520181011111111549120050503WTTT#WPZ#122222122222 0422071 0000 +M520181011111111549120030115WTTTYP9WB122222122222 0422091 0130 +M42018101111111157421100406001162113 +M520181011111111574119900802WTTTYPYB#12222222222210112121125500000 +M520181011111111574120150106WTTTYP0#9122222122222 0422981 0000 +M520181011111111574120070114WTTTYYP09122222122222 0422041 0000 +M42018101111111233620500402421162113 +M520181011111112336119721101WTTTBT99Y22222122222210112121113400000 +M520181011111112336120140808WTTT#YWW#222221222222 0422981 0000 +M42018101111111254020600405171163113 +M520181011111112540119850102WTTT0P#YP12222222222210112131123870000 +M520181011111112540120121106WTTTPP@#0122222122222 0422981 0000 +M520181011111112540120080526WTTTY@BYB122221222222 0422041 0000 +M42018101111111261521100406391163113 +M520181011111112615119810114WTTTP#WW012222222222210112112120240000 +M520181011111112615120100602WTTTPWYB9122222222222 0422022 0000 +M42018101111111263821700402341163113 +M520181011111112638119820601WTTT0YWB912222222222250112111115600000 +M520181011111112638120080506WTTT#@BB#222222222221 0422031 0780 +M520181011111112638120041126WTTTYP@@Y122222222221 0422071 0780 +M42018101111111337120600401421163113 +M520181011111113371119980712WTTTPW00022222122222210412121111730000 +M520181011111113371120150115WTTTPT9YP222122122222 0622981 0000 +M42018101111111338722700400681992113 +M520181011111113387119990126WTTT#WBZT12222222222210112121117520000 +M520181011111113387120170102WTTT#T@YY122221222222 0422981 0000 +M42018101111111371320000402891163113 +M520181011111113713119770112WTTT0WT0#22222122222210112121114300000 +M520181011111113713120100815WTTT0WBZ9222221122222 0422021 0000 +M42018101111111374820000404041161113 +M520181011111113748119860626WTTT#WZYW22222122222210112081117550000 +M520181011111113748120120501WTTT00PYW222221222222 0422981 0000 +M520181011111113748120110102WTTT#@#PB222221122222 0422011 0000 +M520181011111113748120080615WTTTP##PY222222122222 0422041 0000 +M42018101111111378722400402111163113 +M520181011111113787219830601WTTT#9@PT22222122222220212113200000000 +M520181011111113787119750518WTTT#W0YP22222112222220112111114300000 +M520181011111113787120150706WTTT00B@Z222222222222 0422981 0000 +M520181011111113787120130702WTTTPPT@0222221122222 0422981 0000 +M42018101111111386021100406541161113 +M520181011111113860119930115WTTT#ZTWP22212122222210112121118270000 +M520181011111113860120111115WTTTPZ#TZ212121222222 0422981 0000 +M42018101111111434320000401371163113 +M520181011111114343119850121WTTT#9YW#22222122222230112121119010000 +M520181011111114343120130808WTTTP@TB0222221122222 0422981 0000 +M520181011111114343120100802WTTT#W#B@222221122222 0422021 0000 +M520181011111114343120031119WTTT#9BT9222221122222 0422081 0000 +M42018101111111434621400403481163113 +M520181011111114346119840523WTTTP@W0Z22222122222210112121120380000 +M520181011111114346120160722WTTT#Y00T222221122222 0422981 0000 +M520181011111114346120051119WTTTY9BTP222221222222 0422061 0000 +M520181011111114346120020702WTTTYTWYW222221222222 0422101 0000 +M42018101111111468521400400351163113 +M520181011111114685119960606WTTTYW0Y022212222222210112111110400000 +M520181011111114685120150502WTTT#PTB@222122222222 0422981 0000 +M42018101111111475321700405821163113 +M520181011111114753119900101WTTTPW@9W12222222222210112111130140000 +M520181011111114753120121106WTTT#@WYP122221222222 0422981 0000 +M520181011111114753120090601WTTTPT9ZP122222122222 0422031 0000 +M520181011111114753120060108WTTTPT0TP122222222222 0422061 0000 +M42018101111111489522700403941161113 +M520181011111114895119930507WTTT0B0W022222122222210112081126000000 +M520181011111114895120130119WTTTY0ZY9122221122222 0422981 0000 +M42018101111111493320900406421162113 +M520181011111114933119810101WTTTYBT0T12212222222210112112117080000 +M520181011111114933120170101WTTTY#Y9#122222122222 0422981 0000 +M520181011111114933120120606WTTTP0WTT122122222222 0422981 0000 +M42018101111111497621100405971013113 +M520181011111114976119780621WTTT#Y9@T12222222222230112111136870000 +M520181011111114976120160602WTTT#YY##122221122222 0422981 0000 +M520181011111114976120070603WTTT#990Z122222122222 0422051 0000 +M520181011111114976120030115WTTTY#W#W122222222222 0422091 0000 +M42018101111111510021100406001163113 +M520181011111115100119920106WTTT#Z0@W12222222222220112111100000000 +M520181011111115100120110802WTTT0#@P#122222222222 0422011 0000 +M42018101111111527422400400121163113 +M520181011111115274119861101WTTT0TWYW22212212222210112121115990000 +M520181011111115274120110115WTTTYYTZW222222122222 0422011 0000 +M520181011111115274120060102WTTT09PYB222222122222 0422051 0000 +M42018101111111533320900402921163113 +M520181011111115333119770612WTTT0W0Z912222222222250112111121670000 +M520181011111115333120140119WTTTYP@@0122222222222 0422981 0000 +M520181011111115333120120519WTTT0TBP@222222122222 0422981 0000 +M520181011111115333120110119WTTTP@@ZT222222122222 0422011 0000 +M520181011111115333120020115WTTT#ZBY0222222122222 0422091 0000 +M42018101111111533922700402221013113 +M520181011111115339119860601WTTT#ZP@B22222122222220112111123910000 +M520181011111115339120101106WTTTPY9P#222221122222 0422011 0200 +M520181011111115339120070718WTTTPWB#Y222221122222 0422051 0200 +M42018101111111543120600401421013113 +M520181011111115431119910515WTTT#@@0012222222222210112121124560000 +M520181011111115431120131101WTTTP9BZP222222122222 0422981 0000 +M42018101111111568920000406951161113 +M520181011111115689119801114WTTT#W0W922212222222210112121127730000 +M520181011111115689120040122WTTTYW9WZ222122222222 0422071 0000 +M520181011111115689120040122WTTT0B9WT222122122222 0422071 0000 +M42018101111111602622700400671161113 +M520181011111116026119820101WTTT0WWW#22222222222210112121117500000 +M520181011111116026120080526WTTT#@WT0222221122222 0422041 0000 +M520181011111116026120020119WTTT0Z#W0222222122222 0422091 0000 +M42018101111111602822700403941163113 +M520181011111116028119910126WTTT0WYP#22222122222210112121114450000 +M520181011111116028120170809WTTTP#99@222222222222 0422981 0000 +M520181011111116028120130116WTTTPWYBW222221222222 0422981 0300 +M42018101111111611521700404101163113 +M520181011111116115119890121WTTT00@W012222222222210112121110200000 +M520181011111116115120140708WTTT#Z0PY222222122222 0422981 0000 +M42018101111111622620900400391163113 +M520181011111116226119830123WTTT##WTZ12222222222210112082111620000 +M520181011111116226120130712WTTTPYYBY122222122222 0422981 0000 +M520181011111116226120110121WTTT0B@TT122222122222 0422981 0000 +M42018101111111632220600401151991113 +M520181011111116322119760607WTTTYTZZT12222122222210112121114980000 +M520181011111116322120060518WTTTYZ#0Z122222122222 0422061 0000 +M520181011111116322120010106WTTT0BT@9122222122222 0422101 0000 +M42018101111111633420500402421163113 +M520181011111116334119860818WTTTPBZ0W12222212222210112981126110000 +M520181011111116334120120819WTTTYYT@Y222221122222 0422981 0000 +M520181011111116334120050718WTTT0B#ZB122222122222 0422071 0000 +M42018101111111657720900400501161113 +M520181011111116577119700718WTTTYWTZY22122222222210112111113850000 +M520181011111116577120120506WTTTYWW@@221222122222 0422981 0000 +M42018101111111684021700401121163113 +M520181011111116840119880119WTTT0PBP922212222222220112111124040000 +M520181011111116840120150815WTTTP#PZP222222122222 0422981 0000 +M520181011111116840120130715WTTTPW00B222222122222 0422981 0000 +M42018101111111708221100401181163113 +M520181011111117082119900103WTTTYYPWZ22222122222210112111113360000 +M520181011111117082120130116WTTT#PBYZ222221222222 0422981 0000 +M520181011111117082120090615WTTT0BZBZ222221222222 0422031 0000 +M42018101111111756321100401181161113 +M520181011111117563119880109WTTTY0Z9#22212222222210112131114890000 +M520181011111117563120130801WTTT0PBB0222122122222 0422981 0000 +M520181011111117563120100726WTTT00BB@222222122222 0422021 0000 +M42018101111111784322700400671163113 +M520181011111117843119760822WTTTYY@@P22212222222210112111123710000 +M520181011111117843120110606WTTT#9Z9Y222122222222 0422011 0000 +M520181011111117843120051115WTTT0BWBZ222122122222 0422061 0000 +M42018101111111788620000403011163113 +M520181011111117886119830701WTTT#@YY#22222222222220212111105200000 +M520181011111117886119760518WTTT0BTYZ22222212222220112111121840000 +M520181011111117886120061107WTTT099TT222222222222 0422051 0000 +M520181011111117886120061107WTTT#BBBZ222222122222 0422051 0000 +M42018101111111798020000403951163113 +M520181011111117980119760719WTTT0TP9P12222222222210112981128050000 +M520181011111117980120031126WTTTYW09#122222122221 0422081 0361 +M42018101111111805921400402181163113 +M520181011111118059119900806WTTT#BPB#22222122222230112111111260000 +M520181011111118059120150619WTTT#Z#PY222221222222 0422981 0250 +M520181011111118059120120623WTTT0YPWT222221222222 0422981 0250 +M42018101111111824721700405291993113 +M520181011111118247119820507WTTT00#9Y22222122222230112131123240000 +M520181011111118247120110701WTTT0BPPT222221122222 0422011 0000 +M520181011111118247120090714WTTTYPBBT222221222221 0422031 0375 +M520181011111118247120031106WTTT0PWWT222221122222 0422081 0000 +M520181011111118247120020523WTTT#B9Z9222221222222 0422101 0000 +M42018101111111841020900406421991113 +M520181011111118410119930121WTTTP#@0022222222222210112111115820000 +M520181011111118410120170601WTTTYTPWB122222122222 0422981 0000 +M520181011111118410120160607WTTTPP0ZB222122222222 0422981 0000 +M42018101111111843222700406761013113 +M520181011111118432119940509WTTTYB#9Z22222122222210112111116200000 +M520181011111118432120160115WTTT#@#BT222221122222 0422981 0000 +M42018101111111847720600401151993113 +M520181011111118477119930816WTTTYBTT912222222222210112121118300000 +M520181011111118477120160716WTTTYW9#T122222122222 0422981 0000 +M520181011111118477120150506WTTTY0#BY122222122222 0422981 0000 +M42018101111111887520600405341991113 +M520181011111118875119930501WTTT#Y9@912222222222250112121113230000 +M520181011111118875120150715WTTT0PBBT122221222222 0422981 0000 +M42018101111111915120600402031993113 +M520181011111119151119940123WTTT#9PZY22222122222210112111112800000 +M520181011111119151120140123WTTTPT@W#222221122222 0422981 0000 +M42018101111111971321100406001163113 +M520181011111119713119731123WTTTY#0TZ12222222222210112121118160000 +M520181011111119713120010508WTTTYTTWZ122222122222 0422101 0000 +M42018101111111981822700403941163113 +M520181011111119818119900601WTTTPP@@T22222122222210112121116170000 +M520181011111119818120150119WTTT0P0#Z222221222222 0422981 0000 +M520181011111119818120140114WTTT0T@9#222121122222 0422981 0000 +M42018101111111982322700403611161113 +M520181011111119823119860721WTTT0#9TZ12222222222210112111100000000 +M520181011111119823120170126WTTTYYT#Z122222222222 0422981 0000 +M520181011111119823120111113WTTT#TB#0122222222222 0422981 0000 +M520181011111119823120080515WTTTP@Z@B122222122222 0422031 0000 +M42018101111111995222400406441163113 +M520181011111119952119840107WTTTY9@T022212222222210112121131260000 +M520181011111119952120150119WTTT#WZ9P222122122222 0422981 0000 +M520181011111119952120100515WTTT0Z9PP222122222222 0422021 0000 +M520181011111119952120040706WTTT0P#TZ222222222222 0422081 0000 +M42018101111112006721400402181163113 +M520181011111120067119950519WTTTPBY9Y22222122222210122121114640000 +M520181011111120067120140816WTTT0YWT#222221222222 0722981 0000 +M42018101111112024720600400871161113 +M520181011111120247119940115WTTTYZBZ#12222222222210112081110100000 +M520181011111120247120170516WTTT0W9TW122222122222 0422981 0000 +M42018101111112030220600404951163113 +M520181011111120302119900715WTTT#0P0W12222222222210112131127280000 +M520181011111120302120150516WTTT#ZPYB222222222222 0422981 0000 +M520181011111120302120130812WTTT0YY@B122222222222 0422981 0000 +M42018101111112047820900403031123113 +M520181011111120478119950513WTTT#WBW#22212222222210112111126930000 +M520181011111120478120140822WTTT#W0YT222122222222 0422981 0000 +M42018101111112053821700405541163113 +M520181011111120538119700602WTTTYY9PT22222122222250112111121330000 +M520181011111120538120050702WTTT#P#9#222222222222 0422071 0000 +M520181011111120538120030802WTTTP#TW0222222122222 0422091 0000 +M42018101111112054220600402981011113 +M520181011111120542119810709WTTT0YB@Y22212222222210112111124870000 +M520181011111120542120130123WTTT099#9222222122222 0422981 0000 +M520181011111120542120120116WTTT00Y#B222222222222 0422981 0000 +M42018101111112062620600400871162113 +M520181011111120626119900516WTTTYT00912222122222210112121129880000 +M520181011111120626120170616WTTT0TTZZ222222122222 0422981 0000 +M520181011111120626120100709WTTTYYWZB122221222222 0422021 0000 +M42018101111112070420000406011163113 +M520181011111120704119800115WTTT#P9YT22222111222210112121111080599 +M520181011111120704120141112WTTT0BTP9222221222222 0422981 0000 +M42018101111112088120000406721162113 +M520181011111120881119970701WTTT#ZZ@012221222222210112111127500000 +M520181011111120881120170618WTTTYP9W@122222122222 0422981 0000 +M42018101111112122621100404791992113 +M520181011111121226119900126WTTT0WT#Z22212222222210112121124260000 +M520181011111121226120170615WTTTY0Y9#222222222222 0422981 0000 +M520181011111121226120111119WTTTP9PBY222121222222 0422981 0000 +M42018101111112124221100401461012113 +M520181011111121242119930521WTTTY9PZW12222222222210112081127220000 +M520181011111121242120150718WTTTY0#@9122222222222 0422981 0000 +M520181011111121242120131101WTTTYYTT#122222222222 0422981 0000 +M42018101111112148721700404101993113 +M520181011111121487119780703WTTTY09P@12222222222220112111200000000 +M520181011111121487119710122WTTT0YPB012222212222210212121238590000 +M520181011111121487120110101WTTT#0#Y#122222122222 0422011 0000 +M520181011111121487120030103WTTT00W@Y122222222222 0422081 0000 +M520181011111121487120000515WTTT#TT0W122222222222 0422111 0000 +M42018101111112149720900403031191113 +M520181011111121497119870102WTTTYZYYW22222222222210112111124330000 +M520181011111121497120091115WTTTPWBW9222221222222 0422021 0100 +M520181011111121497120071101WTTT#P0@W222122122222 0422041 0100 +M42018101111112153722700400441161113 +M520181011111121537119940501WTTTYW9@Z12222122222210112121100000000 +M520181011111121537120130626WTTTP90BT122221122222 0422981 0000 +M520181011111121537120100101WTTT#ZPW0122221122222 0422011 0000 +M42018101111112158920900401031161113 +M520181011111121589119800102WTTTPY0TP22212222222210112121117890000 +M520181011111121589120070112WTTT0BT@Y222122222222 0422041 0000 +M520181011111121589120010506WTTT#@BYT222122122222 0422101 0000 +M42018101111112186120900406421161113 +M520181011111121861119750608WTTT0TZ9Z12222222222250112141131150000 +M520181011111121861120061126WTTT0@B00122222222222 0422051 0000 +M42018101111112193621700405121161113 +M520181011111121936119780801WTTT0PPW#22212222222210112111118200000 +M520181011111121936120090626WTTT#BBYP222122122222 0422031 0000 +M520181011111121936120060613WTTT#WPYT222122222222 0422061 0000 +M520181011111121936120040508WTTTYPP9#222122122222 0422071 0000 +M42018101111112212721700406571163113 +M520181011111122127119870715WTTTP#T9Z22222122222230112111114540000 +M520181011111122127120170606WTTT#Z#BB222221222222 0422981 0250 +M520181011111122127120170606WTTTPT0B0222221122222 0422981 0250 +M42018101111112236321100402161162113 +M520181011111122363119870721WTTTPTBP#22222212222230112111123110000 +M520181011111122363120110619WTTT##WYZ222222222222 0422011 0000 +M520181011111122363120080616WTTTP9TW0222222122222 0422041 0000 +M42018101111112242321400400351162113 +M520181011111122423119850601WTTTP@W9B22222222222220112112115340000 +M520181011111122423120140806WTTT#@#T0122222222222 0422981 0051 +M520181011111122423120070121WTTTBTT#W222222222222 0422052 0051 +M520181011111122423120051123WTTT#TY#Z222122122222 0422062 0051 +M42018101111112257221700406891162113 +M520181011111122572119750723WTTTPTZYY12222222222210112111118650000 +M520181011111122572120090521WTTT0@P9Z122222122222 0422021 0000 +M520181011111122572120060115WTTTYP9WZ222222222222 0422061 0000 +M42018101111112275722700402801163113 +M520181011111122757119790121WTTTBTZ0W12222222222250112121122090000 +M520181011111122757120080806WTTTP9Z#@122222222221 0422041 0677 +M42018111111111155222400400551161113 +M520181111111111552119820118WTTT0B9B#22212222222210112121125650000 +M520181111111111552120170621WTTT#9WB#222122122221 0422981 0864 +M520181111111111552120070719WTTT#0@WY222122222222 0422051 0000 +M42018111111111168820900404431163113 +M520181111111111688119700803WTTT#BY@922222122222230112131127200000 +M520181111111111688120050618WTTT#YTYY222222122222 0422071 0000 +M42018111111111186921400400351163113 +M520181111111111869119870707WTTTY99@922222222222220112082118410000 +M520181111111111869120180102WTTTY900Y222222122222 0422981 0000 +M520181111111111869120160801WTTT0P#B#222122122222 0422981 0000 +M520181111111111869120110507WTTT#PZWY222222122222 0422011 0130 +M520181111111111869120100101WTTT0Y0B#222222122222 0422021 0130 +M42018111111111202620600401421163113 +M520181111111112026119801109WTTT#@@ZB22222122222250112121122770000 +M520181111111112026120040521WTTT#ZTT9222221222222 0422081 0141 +M520181111111112026120010709WTTT#Y0T9222222222222 0422111 0297 +M42018111111111209020600400291163113 +M520181111111112090119810118WTTT0YW0T22222222222220112082120110000 +M520181111111112090120121126WTTTY@Y#P222222122222 0422982 0000 +M520181111111112090120020101WTTT0YP09222222122222 0422102 0000 +M42018111111111210821700405321161113 +M520181111111112108119840521WTTT0T0YP12222222222230112111119680000 +M520181111111112108120140102WTTTY@B9P122222222222 0422981 0000 +M520181111111112108120110619WTTT##TTW122222222222 0422011 0000 +M520181111111112108120080622WTTT0PB@Y122222122222 0422041 0000 +M520181111111112108120030106WTTTPY##T122222122222 0422081 0000 +M42018111111111216221700402341163113 +M520181111111112162119910602WTTT#B@#Y12222222222210112121113910000 +M520181111111112162120120514WTTT00B9@122222222222 0422981 0000 +M520181111111112162120100102WTTTP0#WZ122222122222 0422011 0000 +M42018111111111227021400406791163113 +M520181111111112270119781101WTTT0@ZB#22222122222210112111122970000 +M520181111111112270120010521WTTTPBP9Z222221222222 0422111 0000 +M42018111111111261022700400681991113 +M520181111111112610119750101WTTT#BB@Z12222122222230112111116320000 +M520181111111112610120140706WTTTPW0Z0122221222222 0422981 0000 +M520181111111112610120070721WTTT00BYT122221122222 0422051 0000 +M42018111111111265621100406001163113 +M520181111111112656119830108WTTTPTYTP12222222222210212081117120000 +M520181111111112656119530718WTTT#ZWT012222211222220112121200000358 +M520181111111112656120091101WTTTYW#09122222122222 0422021 0000 +M520181111111112656120060115WTTT0#00P122222222222 0422061 0000 +M520181111111112656120040126WTTT0W9#B222222222222 0422081 0000 +M42018111111111288720900401881161113 +M520181111111112887119770619WTTT0BTBY22212222222210112121112530000 +M520181111111112887120120101WTTTYWBBY222122222222 0422981 0000 +M42018111111111328320900406421161113 +M520181111111113283119860615WTTT00@T@12222222222210112121117160000 +M520181111111113283120130619WTTTYTWBB122222122222 0422981 0000 +M520181111111113283120100713WTTTPT999122222122222 0422021 0000 +M42018111111111333521100406001163113 +M520181111111113335119840626WTTT#0@@P12222222222210112112118070000 +M520181111111113335120060513WTTTPBPTY122222222222 0422061 0000 +M520181111111113335120040121WTTTPYTWW122222122222 0422071 0000 +M42018111111111334522700401931163113 +M520181111111113345119910703WTTTYY@0@22212122222210112111122100000 +M520181111111113345120170123WTTT#0ZBZ222121222222 0422981 0000 +M42018111111111348022700402401163113 +M520181111111113480119930121WTTTP@09Z22222122222210112111120390000 +M520181111111113480120120116WTTTPP00T222221122222 0422981 0075 +M42018111111111359522700405651163113 +M520181111111113595119910606WTTTYYBB922222122222210112121118530000 +M520181111111113595120140121WTTTPZWY@222221222221 0422981 0864 +M42018111111111372621400405841163113 +M520181111111113726119850713WTTT#PWZ@22222122222210112131115120000 +M520181111111113726120070615WTTT0T@YZ222221122222 0422051 0000 +M42018111111111383020000401401162113 +M520181111111113830119870126WTTT0YP#922212222222210112121122460000 +M520181111111113830120170116WTTTP#T0#222122222222 0422981 0000 +M520181111111113830120080126WTTTY9BBT222122122222 0422031 0000 +M42018111111111405821700402381161113 +M520181111111114058119820706WTTTPT0BY22222122222220112111129140000 +M520181111111114058120060522WTTTP@B9#222221222222 0422061 0000 +M520181111111114058120040119WTTTYP@Y9222221122222 0422071 0000 +M520181111111114058120020621WTTTPWY0W222221122222 0422101 0000 +M42018111111111418120900403071163113 +M520181111111114181119790812WTTTPBW0012222122222250112112121520000 +M520181111111114181120070526WTTTPZ0BP122222122222 0422051 0000 +M520181111111114181120030606WTTTY@@99122222222222 0422091 0000 +M42018111111111426420000403951161113 +M520181111111114264119880707WTTT0Y@WT12222222222210112112114950000 +M520181111111114264120150706WTTTPWBYY222222122222 0422981 0000 +M520181111111114264120080715WTTTPPPTZ122222222222 0422041 0000 +M42018111111111453921100401551163113 +M520181111111114539119771118WTTT0B#PZ12222222222230112161117200000 +M520181111111114539120140101WTTTYTZY9122222122222 0422981 0000 +M520181111111114539120100119WTTT#PTY#122222222222 0422011 0000 +M42018111111111459821400400351993113 +M520181111111114598220050103WTTTYB0BW12222212222110412081200000277 +M520181111111114598119850118WTTTYTZ#T12222222222210112121129460000 +M520181111111114598120161106WTTT0#0T@222221222222 0422981 0000 +M42018111111111466022700403941162113 +M520181111111114660119880603WTTT#0YY022212222222210112111118780000 +M520181111111114660120120102WTTT0BWTZ122212222222 0422981 0000 +M520181111111114660120080101WTTTP9#@9222222222222 0422041 0000 +M42018111111111494720600400291161113 +M520181111111114947119830701WTTTYY09W22222122222210112111123440000 +M520181111111114947120171109WTTTPZZ9W122221122222 0422981 0000 +M520181111111114947120130121WTTTYW@@P222222222222 0422981 0000 +M520181111111114947120070623WTTTPPT0T122221122222 0422051 0000 +M42018111111111502121100401461163113 +M520181111111115021119850123WTTTY#YWY22222122222210112111121150000 +M520181111111115021120120608WTTTPBT@W222222122222 0422981 0000 +M520181111111115021120010118WTTT##YB0122222122222 0422101 0000 +M42018111111111503620900402921162113 +M520181111111115036119760119WTTT0TPYB22212222222220112121126040000 +M520181111111115036120080601WTTT##9T@222122122222 0422041 0000 +M520181111111115036120050518WTTT#T##Z222122122222 0422071 0000 +M520181111111115036120040801WTTT0Y#BT222122222222 0422081 0000 +M42018111111111504820600401981161113 +M520181111111115048119950723WTTTPB0PP12222222222210112121113030000 +M520181111111115048120160102WTTT0PW0Y222222122222 0422981 0000 +M42018111111111508220600402661163113 +M520181111111115082119870726WTTT#@0BT22222122222210112111113930000 +M520181111111115082120140512WTTTY9TZW222221222222 0422981 0000 +M42018111111111512021700402861163113 +M520181111111115120119830716WTTTP@99Z22222212222210112111124370000 +M520181111111115120120160101WTTT0BBZB222221122222 0422981 0000 +M520181111111115120120130618WTTTYPWBP222221122222 0422981 0000 +M520181111111115120120080723WTTT#B0WY222222122222 0422041 0000 +M42018111111111513820900403031163113 +M520181111111115138119900508WTTT#TB9922212222222220112121122380000 +M520181111111115138120141106WTTTPPYB9222122122222 0422981 0000 +M520181111111115138120080115WTTT0#90#222122122222 0422042 0000 +M42018111111111543821700405121163113 +M520181111111115438119890107WTTT0P@BT22222122222210112081116730000 +M520181111111115438120120723WTTTY@BZ#122222122222 0422981 0000 +M520181111111115438120070101WTTTP09P@122222222222 0422041 0000 +M42018111111111593220600406381162113 +M520181111111115932119891102WTTT0WP9@22222122222210112121113090000 +M520181111111115932120120119WTTTP0BTW122222122222 0422981 0000 +M520181111111115932120080802WTTT#PYBB222222122222 0422041 0000 +M42018111111111641821100403821162113 +M520181111111116418119881101WTTTPW#YW12222222222210112131132060000 +M520181111111116418120110507WTTTPPYPP122222122222 0422011 0000 +M520181111111116418120100509WTTTYYB##222222222222 0422021 0000 +M520181111111116418120060115WTTT0YT00122222122222 0422061 0000 +M42018111111111649420000404171163113 +M520181111111116494119860606WTTTP099#22212222222210112131119820000 +M520181111111116494120130101WTTTY@YPZ222122122222 0422981 0000 +M520181111111116494120090523WTTTPP#PB222122222222 0422031 0150 +M42018111111111652121100403821163113 +M520181111111116521119890113WTTTPYYZY22212222222210112121120890000 +M520181111111116521120150615WTTT0#WWP221122122222 0422981 0000 +M42018111111111697321700404341163113 +M520181111111116973119960101WTTTPZ9##22222122222210112111110800000 +M520181111111116973120170122WTTTY@B9B222221122222 0422981 0000 +M42018111111111698222700403941011113 +M520181111111116982119940719WTTTP9WW@22212122222210112081114630000 +M520181111111116982120150522WTTTP#@ZT222222222222 0422981 0000 +M42018111111111738921100401181163113 +M520181111111117389119870701WTTT00#B@12222222222210112111113050000 +M520181111111117389120140501WTTTYWZ0@222221122222 0422981 0000 +M520181111111117389120120119WTTT0BPBB222222222222 0422981 0000 +M42018111111111739122400401011163113 +M520181111111117391119820118WTTT#Y#@W22222122222230112111119720000 +M520181111111117391120100702WTTT#ZWW@222221122222 0422021 0000 +M42018111111111745020600403391163113 +M520181111111117450119860115WTTTYY#PP12222222222210112121127170000 +M520181111111117450120090106WTTTP99#0222222222222 0422031 0000 +M520181111111117450120050626WTTTY9TZP122222222222 0422071 0000 +M520181111111117450120010721WTTT0@YZZ122222122222 0422111 0000 +M42018111111111754120900402921993113 +M520181111111117541119600109WTTTYPP9P22212222222230212111124960000 +M520181111111117541119540113WTTT#0TY@22212211222220112111200001349 +M520181111111117541120020101WTTTYYZ@Y222122222222 0422101 0000 +M42018111111111790320900400501163113 +M520181111111117903119600121WTTTP0Y@#22212212222210112121121950000 +M520181111111117903120040703WTTTPY##Z222122122222 0422081 0000 +M42018111111111795022400401011162113 +M520181111111117950119680603WTTTY##WP22222122222220112132117610000 +M520181111111117950219530801WTTT0T9@#22222112222120212112200000687 +M520181111111117950120010715WTTT00#Z@222221222222 0422111 0000 +M42018111111111798820600405471162113 +M520181111111117988119900801WTTTPT0T912222122222230112141118320000 +M520181111111117988120140115WTTTYY#9#122222122221 0422981 0780 +M520181111111117988120140106WTTTPBYTZ122222122221 0422981 0780 +M520181111111117988120080521WTTTY9@YW122222222222 0422041 0000 +M42018111111111825621100401551162113 +M520181111111118256119770501WTTTY0@#012222222222210112112124430000 +M520181111111118256120140126WTTT0T@TB122222222222 0422981 0000 +M520181111111118256120060615WTTTYY9ZP122222122222 0422062 0000 +M42018111111111831320000403551163113 +M520181111111118313119890703WTTT0PWYZ22212122222210112111113560000 +M520181111111118313120160701WTTTYTYBB222221122222 0422981 0000 +M520181111111118313120160701WTTT#9ZWY222221122222 0422981 0000 +M520181111111118313120150819WTTT09##Z222121222222 0422981 0000 +M42018111111111840622700400681163113 +M520181111111118406119830109WTTTPY09W22222122222210112121121790000 +M520181111111118406120110126WTTT#ZYWB222222122222 0422011 0000 +M520181111111118406120060501WTTT0TTB#222221222222 0422061 0000 +M42018111111111863820000402281013113 +M520181111111118638119880506WTTTP#BBP22212222222210112111133990000 +M520181111111118638120180113WTTTP@TT9222222122222 0422981 0000 +M520181111111118638120070719WTTT#T#P@122122222222 0422051 0000 +M42018111111111884821400400351163113 +M520181111111118848119890706WTTT0YZ0Y22212222222210112111116920000 +M520181111111118848120150723WTTT#9WPP222122222222 0422981 0000 +M42018111111111900420000401061163113 +M520181111111119004119870101WTTTYWPT922212222222210112111124160000 +M520181111111119004120170618WTTTYBWB#222222222222 0422981 0000 +M520181111111119004120150521WTTT#YY@@222122222222 0422981 0000 +M42018111111111907621700401091163113 +M520181111111119076119830626WTTT0P0@W22222122222250112121119750000 +M520181111111119076120140709WTTT0@@##222221122222 0422981 0000 +M520181111111119076120060701WTTT0@YP9222221222222 0422061 0000 +M520181111111119076120050115WTTTYTZ0@222221222222 0422071 0000 +M42018111111111916520500402971163113 +M520181111111119165119770121WTTTY#@WB22222122222220212111227640000 +M520181111111119165119750509WTTT#ZW0W22222112222220112111200000000 +M520181111111119165120130515WTTTP#@ZW222221122222 0422981 0000 +M520181111111119165120061113WTTT#9PT9222221122222 0422051 0000 +M42018111111111924022200401591163113 +M520181111111119240119910812WTTT#WWZB22222112222211012121192300000 +M520181111111119240119880723WTTT#9P9Z22222122222210112131118050000 +M520181111111119240120160101WTTT0W@TB222221122222 0422981 0000 +M520181111111119240120120501WTTT00YWY222221222222 0422981 0000 +M42018111111111931320600405471992113 +M520181111111119313119860119WTTTPB0@#12222222222210112121116480000 +M520181111111119313120110509WTTTYY9Y#122222222222 0422011 0000 +M520181111111119313120040119WTTT#9TWB122222222222 0422081 0000 +M42018111111111956322700403241161113 +M520181111111119563119931103WTTTPT00Z12222222222210112121116120000 +M520181111111119563120130502WTTTPPPW9122222222222 0422981 0000 +M520181111111119563120090808WTTTPP#WY122222222222 0422031 0000 +M520181111111119563120090808WTTTP9Y9Z122222122222 0422031 0000 +M42018111111111961720900400391161113 +M520181111111119617119820602WTTT##BBW12222222222210112111100000359 +M520181111111119617120160523WTTT#9@PZ222222222222 0422981 0000 +M520181111111119617120080508WTTTPT@@P122212222222 0422041 0000 +M520181111111119617120020116WTTT#09W@222122222221 0422101 0764 +M42018111111111972420000406821163113 +M520181111111119724119890501WTTTYW@BZ22212222222210112131146880000 +M520181111111119724120061126WTTTYY9W0222122122222 0422051 0000 +M42018111111112007020900401881993113 +M520181111111120070119960123WTTT#0P@Y22212222222210112081113480126 +M520181111111120070120170102WTTTYZ@Z@222122122222 0422981 0000 +M42018111111112007321100401181163113 +M520181111111120073119710102WTTTP0#W#12222212222230112112126000000 +M520181111111120073120050806WTTT#ZYZB122222222222 0422072 0000 +M520181111111120073120010716WTTTPPBBB122222122222 0422112 0000 +M42018111111112017420500402421161113 +M520181111111120174119900115WTTT0BY9W22212222222210112131119810000 +M520181111111120174120130519WTTTY#P90222122222222 0422981 0000 +M42018111111112041220600401421163113 +M520181111111120412119740119WTTTY9B9922221222222220112111119730000 +M520181111111120412120110126WTTT0BZ90222222222222 0422011 0000 +M520181111111120412120060802WTTTPZWYZ222122222222 0422061 0000 +M42018111111112046320900401031162113 +M520181111111120463119830701WTTT#T##Y12222222222210112131122670000 +M520181111111120463120110501WTTT#P09B222122122222 0422011 0000 +M520181111111120463120070106WTTTYY@9Y222222222222 0422051 0000 +M42018111111112068720900406131163113 +M520181111111120687119890715WTTT#@Y#Y12222222222210112121126910000 +M520181111111120687120070516WTTTYPP0Y222221122222 0422051 0000 +M42018111111112070521700402341163113 +M520181111111120705119830126WTTTYZ@0P22212222222220112122116630000 +M520181111111120705120050618WTTTY@WWP222122122222 0422072 0000 +M42018111111112072821700402861163113 +M520181111111120728119810502WTTT#PZTT22222122222250112111117600000 +M520181111111120728120050119WTTTPW#PY222222122222 0422071 0000 +M42018111111112077922700400671163113 +M520181111111120779119760701WTTT0PWBP22222212222210112121124100000 +M520181111111120779120011106WTTT#W#@@222221222222 0422101 0000 +M42018111111112088622700400441163113 +M520181111111120886119880719WTTTY#B9022222122222210112111113140000 +M520181111111120886120131102WTTT0Z9@Y222221222222 0422981 0000 +M42018111111112112121200404821163113 +M520181111111121121119920601WTTT0PPZB22222122222220112081117290000 +M520181111111121121120160121WTTTPPWZ#222221122222 0422981 0200 +M520181111111121121120120512WTTT#9Z#Z222221122222 0422981 0200 +M42018111111112129120900406131161113 +M520181111111121291119820619WTTTP###P12222222222250112112126000000 +M520181111111121291120160506WTTTY@BTZ122222122222 0422981 0000 +M520181111111121291120140119WTTT0#Y9Z122222222222 0422981 0000 +M520181111111121291120080612WTTT0W@#B222222222222 0422041 0000 +M520181111111121291120030126WTTT#BPWY122221122222 0422081 0000 +M42018111111112139421100401871163113 +M520181111111121394119771116WTTT#PBT022222122222230112111143800000 +M520181111111121394120160123WTTT0BPWW222221122222 0422981 0000 +M520181111111121394120100123WTTTP#YWB222221222222 0422011 0000 +M520181111111121394120090107WTTTY9PB9222221222222 0422031 0000 +M520181111111121394120070518WTTTY0PP#222221222222 0422051 0000 +M520181111111121394120050106WTTT#YBZ#222221222222 0422061 0000 +M42018111111112159321100403821163113 +M520181111111121593119850723WTTTPW9ZZ12222222222210112131121331050 +M520181111111121593120120126WTTT#TZWW122222122222 0422981 0000 +M520181111111121593120091121WTTT#0#YT122222222222 0422021 0000 +M520181111111121593120030114WTTTP#@ZP122222222222 0422081 0000 +M42018111111112170522700402801163113 +M520181111111121705119870801WTTTPT#ZW22222122222210112121113050000 +M520181111111121705120171113WTTTYWZZY222221222222 0422981 0000 +M520181111111121705120160718WTTT#BZTP222222122222 0422981 0000 +M520181111111121705120140601WTTTPW@B@222222222222 0422981 0000 +M520181111111121705120110115WTTTP0TBZ222221222222 0422011 0000 +M42018111111112171721100403821161113 +M520181111111121717119920501WTTT#W@W@12222222222210112121128640000 +M520181111111121717120150823WTTTYB#00122221222222 0422981 0000 +M520181111111121717120130818WTTT099PP122222122222 0422981 0000 +M42018111111112198921700403151163113 +M520181111111121989119911123WTTTYP@@B22222122222210112111125650000 +M520181111111121989120120815WTTTYY@#@222221122222 0422981 0000 +M42018111111112264520600405471162113 +M520181111111122645119870107WTTTY0@9#12222222222210112121120860000 +M520181111111122645120140119WTTTPYBT@222222222222 0422981 0000 +M520181111111122645120090721WTTT0PZP#122222122222 0422031 0268 +M42018111111112276221700404181163113 +M520181111111122762119910503WTTTYB0BB22222112222210112121117750000 +M520181111111122762120130719WTTT0@BZ#222222222222 0422981 0000 +M42018111111112279821200404541163113 +M520181111111122798119741115WTTTPYY@022222122222250112111131750000 +M520181111111122798120040122WTTT0Y0@W222221122222 0422071 0025 +M520181111111122798120020626WTTTPBW#B222221122222 0422101 0025 +M42018121111111111220900403071163113 +M520181211111111112119840601WTTTP9TZW22212222222250112112114140000 +M520181211111111112120140703WTTTYYWYY222122222222 0422981 0000 +M520181211111111112120120118WTTT0Z0@B222122122222 0422983 0000 +M520181211111111112120080115WTTT0T9TP222122122222 0422033 0000 +M42018121111111111620900400391161113 +M520181211111111116119900723WTTTPY@0P12222122222210112131116670000 +M520181211111111116120160615WTTTY@WW@122122222222 0422981 0000 +M520181211111111116120140718WTTT0TWZY122122222222 0422981 0000 +M520181211111111116120100615WTTTP#B@W122221222222 0422022 0000 +M42018121111111147820900402921163113 +M520181211111111478119940819WTTTYY9T922222222222210112121120070000 +M520181211111111478120170508WTTT0WTW@222122122222 0422981 0000 +M42018121111111180920900403031163113 +M520181211111111809219830122WTTT0WBYB22122222222220212113200000000 +M520181211111111809119830501WTTT#ZYBY22212212222210112111125700000 +M520181211111111809120180623WTTT090ZZ222222222222 0422981 0000 +M42018121111111198120000401751013113 +M520181211111111981119830101WTTT0B09P22222122222220112111133900000 +M520181211111111981120100619WTTTY9W0@222122222222 0422021 0000 +M520181211111111981120050723WTTTYWWB9222122222222 0422071 0000 +M42018121111111198520600402661162113 +M520181211111111985119870102WTTT00@#Y22222122222210112131125510000 +M520181211111111985120080607WTTT0T0TT222221122222 0422041 0000 +M42018121111111264822400400881163113 +M520181211111112648119860101WTTTY0#Z922222122222210112131123730000 +M520181211111112648120070507WTTT0@YP@222222122222 0422051 0000 +M42018121111111295222400401011161113 +M520181211111112952119930508WTTT0T@TW22212222222210112131125280000 +M520181211111112952120130118WTTT#9BZB222122122222 0422981 0000 +M42018121111111312621400400351163113 +M520181211111113126119900112WTTT09#Z922212222222210112112120800000 +M520181211111113126120150601WTTT0YW9T222222222222 0422981 0000 +M520181211111113126120130503WTTTPT9Z9222122222222 0422981 0000 +M42018121111111314521400403171162113 +M520181211111113145119790701WTTT0TW#Z22222122222250112111112820000 +M520181211111113145120150121WTTT0PYZT222221222222 0422981 0000 +M520181211111113145120130815WTTT#W0W@222221122222 0422981 0000 +M42018121111111323120600401981163113 +M520181211111113231119890515WTTTYYB@B12222222222210112121129080000 +M520181211111113231120150114WTTTY@0W9122122122222 0422981 0000 +M520181211111113231120090619WTTT#0TYP122221222222 0422031 0000 +M42018121111111333220500402421163113 +M520181211111113332219880506WTTT##YW012222122222220112113200000000 +M520181211111113332119810615WTTTYWW9W12222112222250212111128000000 +M520181211111113332120121123WTTT##T@Y222221122222 0422981 0000 +M520181211111113332120090621WTTTP9P@9122221222222 0422031 0000 +M42018121111111374021700406831013113 +M520181211111113740119940122WTTTPP9W#12222222222210112081113440000 +M520181211111113740120131101WTTTP#P@#222222122222 0422981 0000 +M42018121111111375321100401541993113 +M520181211111113753119870702WTTT#W0BP22222122222210212111110780000 +M520181211111113753119851106WTTTY###Y22222112222210112111130080000 +M520181211111113753120180601WTTTPPTTZ222221122222 0422981 0000 +M520181211111113753120130519WTTTYZ9B9222221122222 0422981 0000 +M42018121111111388421100406001161113 +M520181211111113884119850118WTTT#0T#B12222222222210112111131710000 +M520181211111113884120141107WTTT0Z9B#222222222222 0422981 0000 +M520181211111113884120100613WTTTYY###122222122222 0422021 0000 +M520181211111113884120070821WTTTPY@9P222222122222 0422051 0112 +M42018121111111406521100404791163113 +M520181211111114065119920123WTTTYB@BY22212122222210112111110860000 +M520181211111114065120130101WTTTP0#P9222121222222 0422981 0000 +M42018121111111411922700402581163113 +M520181211111114119119851115WTTTY#B0Y22212222222210112131120780000 +M520181211111114119120040115WTTTYW@YZ222122222222 0422081 0000 +M520181211111114119120010109WTTTP#9WP222122122222 0422101 0000 +M42018121111111417822700400681191113 +M520181211111114178119870606WTTTPTTW@22212222222250112111119000000 +M520181211111114178120160519WTTTY00WP222222222222 0422981 0000 +M520181211111114178120140713WTTTPYB@Y222222122222 0422981 0000 +M520181211111114178120081106WTTTP99YW222222222222 0422031 0348 +M42018121111111453022700400441163113 +M520181211111114530119840112WTTTP#B9@22222122222210112111122100000 +M520181211111114530120150806WTTT#99B0222121122222 0422981 0000 +M520181211111114530120050815WTTTP##9T222221222222 0422071 0000 +M42018121111111467820000402891163113 +M520181211111114678119720102WTTTY9@YY22222112222220112121121670000 +M520181211111114678120121114WTTTYW#BY222221222222 0422981 0000 +M520181211111114678120100708WTTT0ZYZ9222221222222 0422021 0000 +M520181211111114678120070719WTTTY#0WY222221222222 0422051 0000 +M520181211111114678120060107WTTTP9WT#222221122222 0422061 0000 +M42018121111111534420000402101163113 +M520181211111115344119951119WTTTPB9@911222122222210112111120010000 +M520181211111115344120170814WTTTYB99Y121222222222 0422981 0000 +M520181211111115344120170814WTTTPT@@T121222222222 0422981 0000 +M520181211111115344120130615WTTT0ZWBY222222122222 0422981 0000 +M42018121111111544221700404201163113 +M520181211111115442119850522WTTT#@@ZP22222122222210112141125500000 +M520181211111115442120160512WTTT0P9@T222221222222 0422981 0000 +M520181211111115442120141118WTTT0P9@P222222222222 0422981 0000 +M520181211111115442120100113WTTTP@#WB222221222222 0422021 0000 +M42018121111111555322700400991163113 +M520181211111115553119621106WTTTY0T@9222221222222501121111####0000 +M520181211111115553120010801WTTTYYT#0222221222222 0422111 0000 +M42018121111111571120000404271162113 +M520181211111115711119870126WTTTP@#B022122222222210112111125360000 +M520181211111115711120131123WTTT0@WP#221222122222 0422981 0000 +M520181211111115711120060608WTTTP0#TY221222122222 0422061 0000 +M42018121111111574420900403071163113 +M520181211111115744119790106WTTTBT@WT12222222222210112131113250000 +M520181211111115744120150601WTTT0WTTT122122122222 0422981 0000 +M42018121111111587420600402981163113 +M520181211111115874119870121WTTTP9WPT22222122222210112111124510000 +M520181211111115874120090701WTTT0#9WP222222122222 0422031 0000 +M42018121111111589320600401421163113 +M520181211111115893119910126WTTT#000912222222222210112121113110000 +M520181211111115893120121108WTTTYWPBP222221222222 0422981 0000 +M42018121111111611521700404101163113 +M520181211111116115119890121WTTT00@W012222222222210112121119990000 +M520181211111116115120140708WTTT#Z0PY222222122222 0422981 0000 +M42018121111111615621400402181163113 +M520181211111116156119950602WTTT0@Y0W22212222222210112111111290000 +M520181211111116156120160513WTTTYZ#B9222222122222 0422981 0096 +M520181211111116156120110121WTTTPYB0T222221222222 0422981 0123 +M42018121111111616121400400351163113 +M520181211111116161119880515WTTT0@0T@22212212222211012122115660000 +M520181211111116161219830803WTTTPYB#@22212222222210112113200000000 +M520181211111116161120151123WTTT0YB0P222222122222 0422981 0000 +M42018121111111637220900404651161113 +M520181211111116372119890701WTTT#00Z#12222222222210112111112810000 +M520181211111116372120161103WTTT#T#TT122222122222 0422981 0000 +M520181211111116372120040121WTTT0T#BW122222122222 0422071 0000 +M42018121111111669021700404341163113 +M520181211111116690119820723WTTT#@T#@22222121222220112111200000384 +M520181211111116690119790519WTTTYPWZZ22222112222220212111124290000 +M520181211111116690120140501WTTTPPTYW222221222222 0422981 0000 +M520181211111116690120120615WTTTPZBZB222221122221 0422981 0372 +M42018121111111693021700406571163113 +M520181211111116930119980512WTTT##ZB022222222222210412081111810000 +M520181211111116930120170121WTTT#WPZW222222222222 0622981 0000 +M42018121111111693622700405651993113 +M520181211111116936119810114WTTTY#9@#22222122222250112111118490600 +M520181211111116936120130519WTTTP9W09222221122222 0422981 0000 +M520181211111116936120040518WTTTPW@9B222221222222 0422081 0000 +M520181211111116936120030103WTTTPBTY#222221222222 0422091 0000 +M520181211111116936120020801WTTT0P###222221222222 0422101 0000 +M42018121111111693820600402031163113 +M520181211111116938119810119WTTT#PZZZ22222122222210112111119750000 +M520181211111116938120170115WTTTYYY@@212121222222 0422981 0000 +M520181211111116938120020716WTTTPTWYP222221122222 0422101 0275 +M42018121111111694822700402801993113 +M520181211111116948119960119WTTT#PZ#922212222222210112122125530000 +M520181211111116948120160701WTTTY9YYB222122122222 0422981 0000 +M520181211111116948120160701WTTT0PZPW222122222222 0422981 0000 +M42018121111111697520600404951011113 +M520181211111116975119840815WTTT#TBY922212222222230112131118550000 +M520181211111116975120150121WTTTP@0B#222122222222 0422981 0000 +M42018121111111719121100405971163113 +M520181211111117191119791102WTTTPZB#B12222221222220112082120340205 +M520181211111117191120131123WTTT0ZYZB122222222222 0422981 0205 +M520181211111117191120090119WTTTP900P122222122222 0422031 0205 +M42018121111111723520600403391163113 +M520181211111117235119880502WTTT#PYT012222222122210112121129830269 +M520181211111117235120111101WTTT#BTY@122222122222 0422981 0000 +M520181211111117235120100103WTTT0T9#P122222222222 0422021 0000 +M42018121111111726620900406601163113 +M520181211111117266119650115WTTT0TZB022222122222250112111124400000 +M520181211111117266120001126WTTT#P@TP222221122222 0422111 0400 +M42018121111111735120900403031163113 +M520181211111117351119640516WTTT##ZT022212222222250112122120840000 +M520181211111117351120041121WTTT0BYBW222122122222 0422071 0000 +M42018121111111737720600401981163113 +M520181211111117377119820106WTTT00#BY12222222222210112131117100000 +M520181211111117377120050614WTTT#0B@B122222222222 0422071 0000 +M42018121111111742121700406341162113 +M520181211111117421119850626WTTTYPZYB12222222222220112081126890000 +M520181211111117421219831109WTTT#TZZZ22212212222210212111200000000 +M520181211111117421120160115WTTTPWWYP222221222222 0422981 0000 +M520181211111117421120150723WTTTPWY9B222222122222 0422981 0000 +M520181211111117421120130615WTTTY999@122222222222 0422981 0000 +M520181211111117421120110819WTTT0@Z9#222122122222 0422011 0000 +M520181211111117421120070116WTTT#Y##T122222222222 0422041 0000 +M520181211111117421120040109WTTT0YTBP122222222222 0422081 0000 +M520181211111117421120020107WTTTYZP0W122222122222 0422101 0000 +M520181211111117421120010801WTTTYZ##0122222222222 0422111 0000 +M42018121111111745521100406541163113 +M520181211111117455119920112WTTT#BZPT12222222222210112121123620000 +M520181211111117455120140508WTTT0#W0Y122222122222 0422981 0000 +M520181211111117455120130526WTTT09@Z#122222122222 0422981 0000 +M42018121111111766322700400671163113 +M520181211111117663119890621WTTTPB0BY22222122222210112111119250121 +M520181211111117663120130519WTTT0PW#W222222122222 0422981 0000 +M42018121111111771221400400351163113 +M520181211111117712119870712WTTTPYPYB12222222222210112111121810000 +M520181211111117712120091114WTTTPTW0Z222222122222 0422021 0000 +M520181211111117712120061101WTTTYYY9W122221222222 0422051 0000 +M42018121111111791221100401461013113 +M520181211111117912119800122WTTTP@WPY12222222222210112111140730000 +M520181211111117912120110106WTTT#BPZW222222222222 0422011 0000 +M520181211111117912120110106WTTTYYPYZ222222122222 0422011 0000 +M520181211111117912120110106WTTT0TTBW222222222222 0422011 0000 +M42018121111111808920000402101163113 +M520181211111118089119920115WTTTYP0PB12222222222210112111125840000 +M520181211111118089120130122WTTTPTZ@W122222122222 0422981 0000 +M42018121111111824821100401691992113 +M520181211111118248119910702WTTT0B@W012222222222210112121107810000 +M520181211111118248119860106WTTT#Z@BP12222212222211012111120210000 +M520181211111118248120160513WTTT0#@#T122222122222 0422981 0000 +M520181211111118248120150502WTTT#TTW0122222122222 0422981 0000 +M42018121111111833321100402211163113 +M520181211111118333119780723WTTTPBYW#22222122222220112121117900000 +M520181211111118333120050116WTTT099BY222221222222 0422071 0000 +M42018121111111845321700406891163113 +M520181211111118453119930819WTTTYTW#Y22222122222230112131112530000 +M520181211111118453120131119WTTTY9W#9222221222222 0422981 0000 +M42018121111111874721100402161163113 +M520181211111118747119880119WTTT#WT9W12222222222210112121131160000 +M520181211111118747120170715WTTT0YWW0122222122222 0422981 0000 +M520181211111118747120130121WTTT00B0P122222122222 0422981 0000 +M520181211111118747120120115WTTT0YTPT122222122222 0422981 0000 +M42018121111111936120900406131192113 +M520181211111119361119870108WTTT#BBY012222122222220112112116420000 +M520181211111119361119700526WTTT0WW9#22222112222220212111121420000 +M520181211111119361120090606WTTTYP9@W222221222222 0422031 0000 +M520181211111119361120050514WTTT#P@YW222221122222 0422071 0000 +M42018121111111936920000406281012113 +M520181211111119369119830123WTTTYTZ#W22222122222220112161133330000 +M520181211111119369119760702WTTT00Z@W22212212222220212082113410000 +M520181211111119369120160515WTTT#@@PY222222222222 0422981 0000 +M520181211111119369120130501WTTTPW#T#222222222222 0422981 0000 +M520181211111119369120130501WTTTPW9Z9222222122222 0422981 0000 +M42018121111111939220900401031161113 +M520181211111119392119700118WTTTYP#@922122222222220112111124430000 +M520181211111119392119641119WTTT#BWYY22122212222220212111108000000 +M520181211111119392120050826WTTTP0BZY221222122222 0422071 0000 +M520181211111119392120030121WTTTPPWWY221222222222 0422091 0000 +M42018121111111943220000401751012113 +M520181211111119432119840126WTTTPYBBP22212222222210112142137430000 +M520181211111119432120130701WTTTPP0@@222122222222 0422981 0000 +M520181211111119432120040119WTTT0B9#@222122222222 0422081 0000 +M42018121111111966220500402421161113 +M520181211111119662119870115WTTTYB0Y912222222222210112121100000000 +M520181211111119662120171118WTTTBTTZ0122222222222 0422981 0000 +M520181211111119662120140126WTTTY0Y#9122222122222 0422981 0000 +M42018121111111980921100406391991113 +M520181211111119809119761123WTTTPY#PP12222222222230112131123220000 +M520181211111119809120080113WTTTP@YY@122222222222 0422041 0000 +M520181211111119809120050106WTTT#B@YB122222222222 0422071 0000 +M42018121111112028421100404791161113 +M520181211111120284119780106WTTTY@0@W21222122222210112111117320017 +M520181211111120284120081112WTTT0Y#TW222221122222 0422031 0000 +M520181211111120284120061108WTTT0B0BW222221222222 0422051 0000 +M520181211111120284120020122WTTTP9#Y9122222122222 0422091 0000 +M42018121111112032522700403941163113 +M520181211111120325119740102WTTTY0WTP22222122222250112131121610000 +M520181211111120325120130619WTTT0YYB#222222122222 0422981 0000 +M520181211111120325120071107WTTTP9WTY222221222222 0422041 0000 +M42018121111112043221100406001162113 +M520181211111120432119900101WTTTYYZY@12222222222210112131114790000 +M520181211111120432120101119WTTT#W0T0122222222222 0422011 0000 +M42018121111112057122200400911163113 +M520181211111120571119880515WTTTP#TPY22212212222210112121117210000 +M520181211111120571120170615WTTTY0Y0#222222122222 0422981 0000 +M520181211111120571120150619WTTT0PWBT222222222222 0422981 0000 +M42018121111112073821400401841163113 +M520181211111120738119840815WTTTY0#YP22212222222210112111128430000 +M520181211111120738120120523WTTT0W9@0222122122221 0422981 0484 +M520181211111120738120091119WTTTYYTZY222122122222 0422021 0000 +M42018121111112097020600401421163113 +M520181211111120970119870101WTTTPYB#T22122222222210112111122240000 +M520181211111120970120050101WTTTY#9BW122222222222 0422061 0000 +M520181211111120970120030506WTTTP#YB9222222122222 0422091 0000 +M42018121111112136220600405341123113 +M520181211111121362119980123WTTTY#9BP12222122222210112081119460000 +M520181211111121362120150819WTTTYWT9P122221222222 0422981 0000 +M42018121111112150920600400871163113 +M520181211111121509119780119WTTT09PW@12222212222230112111119750000 +M520181211111121509120070721WTTTYB@PY122222222222 0422051 0000 +M520181211111121509120040603WTTTYP9YY122222122222 0422081 0000 +M42018121111112169521700406571163113 +M520181211111121695119910101WTTTYZ@BB22222222222210112121100000000 +M520181211111121695120150601WTTTYPWW@222222222222 0422981 0000 +M42018121111112175621700406891163113 +M520181211111121756219831115WTTTY9Z9P22222121222110112111200000800 +M520181211111121756119820101WTTT#PWBB12222212222211012111120430000 +M520181211111121756120070119WTTTY#ZZ0222221122222 0422041 0000 +M42018121111112176821700403151161113 +M520181211111121768119820503WTTTP#ZZT22212222222210112082120190000 +M520181211111121768120160519WTTT0YZ#T222122122222 0422981 0000 +M520181211111121768120140121WTTT#9W0Y222122222222 0422981 0000 +M520181211111121768120110101WTTTYPP9Y222122122222 0422981 0000 +M520181211111121768120020714WTTTY00WW222122222222 0422102 0000 +M42018121111112200121400401841163113 +M520181211111122001119740102WTTTY#WTY22222122222220112161127210000 +M520181211111122001120100608WTTTPZ#TY222221222222 0422021 0000 +M520181211111122001120090119WTTT0TT0T222221222222 0422031 0000 +M520181211111122001120090119WTTTYY@WY222221122222 0422031 0000 +M520181211111122001120070719WTTTYT0YW222221222222 0422051 0000 +M520181211111122001120020103WTTT#YT0B222221222222 0422101 0000 +M520181211111122001120020103WTTTYT9PZ222221222222 0422101 0000 +M42018121111112211821100403821162113 +M520181211111122118119820506WTTT#P9Y012222222222210112082128590000 +M520181211111122118120050802WTTTYWBTY122222122222 0422071 0000 +M520181211111122118120030103WTTTP#@#Z122222122222 0422081 0000 +M520181211111122118120010513WTTT0Z0B0122222122222 0422111 0000 +M42018121111112215121400406791993113 +M520181211111122151119940613WTTT#B9WP12222222222210112111122640000 +M520181211111122151120100101WTTT09@@P222222122222 0422011 0000 +M42018121111112242720600400871161113 +M520181211111122427119950126WTTT#TP#W12222222222210112111100000000 +M520181211111122427120120123WTTTPP90Y122222222222 0422981 0000 +M42018121111112248221700405291163113 +M520181211111122482119840606WTTT0WPY#22222122222211012121141700000 +M520181211111122482219750821WTTTPWB9T12222211222130112111200000800 +M520181211111122482120170601WTTT#ZBT0122221122222 0422981 0000 +M520181211111122482120070115WTTTP9TPB222221222222 0422051 0000 +M520181211111122482120030109WTTTYB@9T222221122222 0422091 0000 +M42018121111112266520600401421163113 +M520181211111122665219970109WTTT0#B0B22222212222110412082200000530 +M520181211111122665119760118WTTT#0BT@22222222222230112082121240000 +M520181211111122665120030514WTTTPP@PB222222222222 0422092 0000 +M42019011111111120521400400351161113 +M520190111111111205120000501WTTTP0YP012222222222210412081118290000 +M520190111111111205119831106WTTTPZYY#12222222222210112111115940000 +M520190111111111205120041102WTTT#Y@0W122222222222 0422081 0000 +M42019011111111125820600405341163113 +M520190111111111258119910113WTTTY9@ZB12222122222210112121129390000 +M520190111111111258120170618WTTTYPW9Y222222222222 0422981 0000 +M520190111111111258120100122WTTTP90P#122222122222 0422021 0000 +M42019011111111142420600402031163113 +M520190111111111424119880113WTTT0W90@22222222222210112111129030000 +M520190111111111424120150107WTTTY9W@B222222222222 0422981 0000 +M520190111111111424120050523WTTTPTPTP222222222222 0422071 0000 +M42019011111111152620000406911163113 +M520190111111111526119750519WTTT0@Z0#22212222222220112131125150000 +M520190111111111526120040815WTTT0@TZY222122222222 0422081 0000 +M520190111111111526120030521WTTT#@T0P222122222222 0422091 0000 +M520190111111111526120011119WTTTY@9#0222122222222 0422111 0000 +M42019011111111161521100406541013113 +M520190111111111615119870119WTTTYZTB012222212222230112111120500000 +M520190111111111615120140115WTTTYP9ZZ122222122222 0422981 0000 +M42019011111111182221100401181161113 +M520190111111111822119850602WTTTP@YTP12222222222210112121124350000 +M520190111111111822120110823WTTT#YZ#9222122122222 0422011 0000 +M42019011111111186420600401161161113 +M520190111111111864119900626WTTTPPTP022212222222210112081116790000 +M520190111111111864120050619WTTTPZ9YB222122122222 0422071 0000 +M42019011111111205820300403511993113 +M520190111111112058119920521WTTT#Z9W022212122222210112121120460000 +M520190111111112058120180521WTTTY9ZPB222222122222 0422981 0000 +M520190111111112058120140807WTTT#TB@9222221222222 0422981 0000 +M42019011111111244421100403821163113 +M520190111111112444119860812WTTTPTBWZ22222222222210112121118910000 +M520190111111112444120110113WTTTYWYTT222222222222 0422981 0000 +M42019011111111262120000400361161113 +M520190111111112621119680606WTTT#WP@912222222222250112081125460000 +M520190111111112621120060726WTTT#Y99@222222222222 0422061 0000 +M520190111111112621120031121WTTT#ZY@#122222122222 0422091 0000 +M42019011111111290920000403951162113 +M520190111111112909119880619WTTTY#W#022222122222210112121116770000 +M520190111111112909120140101WTTTPY9PY222221122222 0422981 0000 +M42019011111111333921700401121162113 +M520190111111113339119900121WTTT0@ZP@22222122222210112081116420000 +M520190111111113339120180726WTTT#@#B9122221122222 0422981 0000 +M520190111111113339120160814WTTTY#PY9122221222222 0422981 0000 +M520190111111113339120150709WTTT09000122221122222 0422981 0000 +M42019011111111348621700400981163113 +M520190111111113486119771121WTTTP@YYY22222122222250112121125480000 +M520190111111113486120080619WTTT#0B0#222221222222 0422041 0200 +M520190111111113486120030719WTTT#P@99222221122222 0422091 0200 +M42019011111111356222400401011163113 +M520190111111113562119860501WTTTP#TP022122212222220112161131690000 +M520190111111113562219851119WTTTP00P@22122222222220212123207080000 +M520190111111113562120170722WTTTY9ZY0221222122222 0422981 0000 +M520190111111113562120160109WTTTPBPTT221222122222 0422981 0000 +M42019011111111363121100406001163113 +M520190111111113631119900501WTTT#PWY912222222222210112111119530000 +M520190111111113631120120106WTTTY#Y@B122222122222 0422981 0133 +M520190111111113631120070121WTTTY#@PP122222122222 0422051 0133 +M520190111111113631120041113WTTT#9ZT0122222222222 0422081 0133 +M42019011111111377822700400671162113 +M520190111111113778119940615WTTT#Z@@B12222222222210112121118390000 +M520190111111113778120150601WTTTP90YP122222122222 0422981 0000 +M42019011111111382922400401281163113 +M520190111111113829119750707WTTTPB@ZW22222122222220112141117710050 +M520190111111113829119740721WTTTYP@P@22222112222220212981141790000 +M520190111111113829120160801WTTTY@TT#222221222222 0422981 0000 +M520190111111113829120160801WTTT0WT9Y222221222222 0422981 0000 +M520190111111113829120150102WTTT#9@TY222221122222 0422981 0000 +M42019011111111386720000403951163113 +M520190111111113867119860823WTTTBTZTY12222222222210112111116780000 +M520190111111113867120180508WTTTY09BB222222122222 0422981 0000 +M42019011111111407622700402531163113 +M520190111111114076119780119WTTT#ZWB#22222122222210112121115070000 +M520190111111114076120080815WTTT#W9##222222222222 0422041 0000 +M520190111111114076120060107WTTT#PB9#222221222222 0422051 0000 +M520190111111114076120040123WTTTPWZ99222221222222 0422081 0000 +M42019011111111426621100402441163113 +M520190111111114266119910526WTTT#PTYW12222222222210112131127710000 +M520190111111114266120150601WTTTPW@W0122222122222 0422981 0000 +M520190111111114266120140123WTTTYWYB9222222122222 0422981 0000 +M42019011111111433120900406421161113 +M520190111111114331119780619WTTTPTWB012222222222210112161120210000 +M520190111111114331120160512WTTT#09YT122222122222 0422981 0000 +M520190111111114331120030519WTTTYTT0B222222122222 0422091 0000 +M520190111111114331120020602WTTTPYYP@122222122222 0422101 0000 +M42019011111111448021100406471163113 +M520190111111114480119840503WTTTPZZ9Y12222222222220112141123910000 +M520190111111114480120131113WTTT#PBWT122222122222 0422981 0000 +M520190111111114480120090115WTTTYZWP#122222122222 0422021 0000 +M520190111111114480120070109WTTT#00TP122222222222 0422051 0000 +M520190111111114480120060619WTTT0YBW9122222122222 0422061 0000 +M42019011111111448620900406741163113 +M520190111111114486119860122WTTT0P9@B12222222222210112141100000000 +M520190111111114486120150713WTTTPBZW@122222122222 0422981 0000 +M42019011111111466520900403031161113 +M520190111111114665119820602WTTT0PTY912222222222210112141119740000 +M520190111111114665120040501WTTTP#W9B122222222222 0422081 0000 +M42019011111111473021400400351163113 +M520190111111114730119700114WTTT##T#T22212222222210112112118350000 +M520190111111114730120050602WTTTY0P9T222122122222 0422072 0000 +M520190111111114730120020103WTTTPT9@Y222122122222 0422102 0000 +M42019011111111490121700401091163113 +M520190111111114901119960501WTTT#Y9T#22222122222210112111126850000 +M520190111111114901120180119WTTT#9WW9222222122222 0422981 0000 +M520190111111114901120140114WTTTYP0#W222222122222 0422981 0000 +M42019011111111504420600401421163113 +M520190111111115044119940506WTTTYZZY#12222122222210112121115700000 +M520190111111115044120171122WTTT0ZYW0222221222222 0422981 0000 +M520190111111115044120160701WTTTYTT9Z122222222222 0422981 0000 +M520190111111115044120110801WTTTPZ#T0122122222222 0422011 0000 +M42019011111111514920900403071161113 +M520190111111115149119760613WTTT#Z9TP22222222222210112111133030000 +M520190111111115149120130822WTTTY9#@9222122222222 0422981 0000 +M520190111111115149120130822WTTT#9P9#222122222222 0422981 0000 +M42019011111111517821400406791163113 +M520190111111115178119660119WTTTY#@#T12212222222230112111119590000 +M520190111111115178120020106WTTTP0@99222122122222 0422101 0000 +M42019011111111533422400403421163113 +M520190111111115334119920109WTTTYZ@WT22222122222210112131115390000 +M520190111111115334120130621WTTTP9YY9222221122222 0422981 0000 +M42019011111111536920900400391161113 +M520190111111115369119730726WTTT#PZPW22212222222230112121118090000 +M520190111111115369120131103WTTTYPWZB222122222222 0422981 0000 +M42019011111111538020900403031163113 +M520190111111115380119920719WTTT0PWYB12222222222210112111115280000 +M520190111111115380120180601WTTTP0#B9222222222222 0422981 0000 +M42019011111111555820000403181162113 +M520190111111115558119900618WTTTPY#@922212222222210112111116190000 +M520190111111115558120170101WTTT0T#B9222122222222 0422981 0000 +M520190111111115558120110512WTTTPP0YW222122122222 0422011 0156 +M520190111111115558120080819WTTT09P#W222122122222 0422041 0232 +M520190111111115558120070714WTTT#T#ZW222122222222 0422051 0076 +M42019011111111559620000404271163113 +M520190111111115596119870114WTTTP@@YP22222122222250112111119350000 +M520190111111115596120100702WTTTPYPT0222221122222 0422021 0000 +M520190111111115596120040721WTTT0@99W222221122222 0422081 0000 +M42019011111111598720000406951013113 +M520190111111115987119750701WTTTYB#0Y22212222222210112111125510000 +M520190111111115987120130115WTTTYWBPB222122222222 0422981 0108 +M520190111111115987120060106WTTT0Y@BW222222222222 0422061 0000 +M42019011111111604520900406601163113 +M520190111111116045219780822WTTT0Y@W012222222222220112113200000000 +M520190111111116045119770619WTTT#0BBB12222112222220212111125310000 +M520190111111116045120160115WTTTPT#0B122221222222 0422981 0000 +M42019011111111641920900402921161113 +M520190111111116419119870519WTTTPTWT@22212222222210112112114850000 +M520190111111116419120160801WTTT0##Z#122122222222 0422981 0000 +M520190111111116419120110715WTTTY#PP@222122122222 0422011 0000 +M520190111111116419120070719WTTT#0BTW222222122222 0422051 0000 +M42019011111111659122700402231013113 +M520190111111116591119840119WTTTPWYYT22222122222250112111120800000 +M520190111111116591120170113WTTT##Y@@222221122222 0422981 0000 +M520190111111116591120130722WTTT0T@0Z222221222222 0422981 0000 +M42019011111111680221100406391013113 +M520190111111116802119760115WTTTP@#9012222222222210112121115521206 +M520190111111116802120070102WTTTPPBPY122222122222 0422041 0000 +M42019011111111684720900400501163113 +M520190111111116847119890623WTTT0P#@#22212222222210112121121250000 +M520190111111116847120150522WTTT0BTWW222122222222 0422981 0000 +M520190111111116847120090101WTTTP@YWZ222122122222 0422031 0375 +M42019011111111705021100406391163113 +M520190111111117050120000802WTTT0B9@Y12222222222210412081110990000 +M520190111111117050120160723WTTT0@BZT122222222222 0622981 0000 +M42019011111111715821700404101163113 +M520190111111117158119920702WTTT0TYTP12222222222210112111119040000 +M520190111111117158120150523WTTTYP09P122222222222 0422981 0000 +M520190111111117158120130723WTTTP@YZB122222122222 0422981 0000 +M42019011111111724820900404651163113 +M520190111111117248119840115WTTTY@@9P22222122222210112121121480000 +M520190111111117248120150501WTTT#ZT0Z222221222222 0422981 0000 +M520190111111117248120120623WTTTP#9P@122221222222 0422981 0000 +M520190111111117248120100114WTTT0TZ0Y122221122222 0422021 0000 +M42019011111111726321100403821163113 +M520190111111117263119900113WTTTYW9PB12222222222250112111129210000 +M520190111111117263120160613WTTTYP0YY222222122222 0422981 0000 +M520190111111117263120130106WTTT0YW@T122221222222 0422981 0000 +M42019011111111729321700402341163113 +M520190111111117293119940809WTTTY90Y922222122222210112081116320150 +M520190111111117293120180515WTTTY#B#W222221122222 0422981 0000 +M42019011111111733321400400351161113 +M520190111111117333119830515WTTTYBW0#22212222222210112112121440700 +M520190111111117333120100821WTTT#ZPPT222222222222 0422021 0000 +M520190111111117333120090819WTTTP0009222222222222 0422031 0000 +M520190111111117333120040519WTTTYPYY0222222122222 0422083 0000 +M42019011111111758920600403391163113 +M520190111111117589119730815WTTTYZBWP22222122222250112131120210000 +M520190111111117589120070623WTTTY#ZBB222221222222 0422051 0000 +M520190111111117589120041108WTTTYP9@Y222221122222 0422081 0000 +M42019011111111766420900403431161113 +M520190111111117664119890614WTTT#@P@W12222222222210112111100000000 +M520190111111117664120071112WTTTPBTZB122222222222 0422051 0000 +M42019011111111782121100404711163113 +M520190111111117821119860512WTTT0#@9@22222122222210112111112280000 +M520190111111117821120160116WTTTP@#9B222221122222 0422981 0000 +M520190111111117821120150714WTTT#TTB#222221122222 0422981 0000 +M520190111111117821120041121WTTTPW9T0222221122222 0422081 0000 +M42019011111111783322700403611163113 +M520190111111117833119780726WTTTY0PPZ22222122222210112111105180000 +M520190111111117833120180108WTTT0T00Y222222122222 0422981 0000 +M520190111111117833120110126WTTT0BBYW222221222222 0422011 0000 +M42019011111111783621700404101163113 +M520190111111117836119811106WTTTP0@TY22222122222210112111120770000 +M520190111111117836120070123WTTT#0B#T222221122222 0422041 0000 +M520190111111117836120070123WTTTPT0P#222221122222 0422041 0000 +M42019011111111789721700403151162113 +M520190111111117897119910119WTTTYW0PW12222222222210112121116860000 +M520190111111117897120160819WTTT#P@9P122221122222 0422981 0000 +M42019011111111792820600405471163113 +M520190111111117928119841102WTTTPWTB@22212222222210112132114200000 +M520190111111117928120170702WTTT#PPYT222222222222 0422981 0000 +M520190111111117928120150115WTTTYYPZZ222122222222 0422981 0000 +M42019011111111822620600401981163113 +M520190111111118226119840714WTTT0B9T922222112222210112121123740000 +M520190111111118226120081122WTTT#P0WB222221122222 0422041 0000 +M520190111111118226120070707WTTT#PP9B222221222222 0422051 0000 +M42019011111111844021200402561163113 +M520190111111118440119830118WTTT0YWW922222112222220212111125040000 +M520190111111118440119790821WTTTP9Y@P22222121222230112111200000926 +M520190111111118440120110512WTTTPBPY@222221222222 0422011 0136 +M520190111111118440120090121WTTT00YW9222221122222 0422031 0136 +M42019011111111887921400406651163113 +M520190111111118879119891126WTTT#BZ9P22222122222210112111113220000 +M520190111111118879120170526WTTT0T#@9222221122222 0422981 0000 +M42019011111111895821100406001163113 +M520190111111118958119820601WTTTY#0Z@12222222222210112112115250130 +M520190111111118958120081126WTTTYT9WZ122221222222 0422042 0000 +M520190111111118958120040821WTTTPW00P122221122222 0422082 0000 +M520190111111118958120020115WTTT#0#BW122221122222 0422102 0000 +M42019011111111905221100405971163113 +M520190111111119052219760121WTTT#WBTW22212222222220212112200000000 +M520190111111119052119670103WTTTPB#@@22212212222220112112121530000 +M520190111111119052120120112WTTT0##BP222122222222 0422982 0000 +M520190111111119052120080106WTTT0P#Y#222122122222 0422042 0000 +M520190111111119052120060116WTTTYT0@P222122122222 0422062 0000 +M520190111111119052120030515WTTTYT@@Y222122122222 0422092 0000 +M42019011111111939021400400351163113 +M520190111111119390220030601WTTTY#0TP22212222222210412113200000000 +M520190111111119390119840118WTTT#WWZW22212222222220112112126060000 +M520190111111119390120160802WTTT0@ZTZ122221222222 0422981 0670 +M520190111111119390120061112WTTTY9B@Z222122122222 0422063 0000 +M42019011111111940720600401981163113 +M520190111111119407119940102WTTTP99#B12222122222210112111115500000 +M520190111111119407120130126WTTTPBYTP122221222222 0422981 0000 +M42019011111111949620600405471992113 +M520190111111119496119920126WTTT0TZTZ12222222222210112121117310000 +M520190111111119496120130608WTTTPT#BW122222122221 0422981 0864 +M520190111111119496120100106WTTTYZWWT122222222222 0422021 0000 +M520190111111119496120080822WTTT##9ZB122222222222 0422041 0000 +M42019011111111973322700401931163113 +M520190111111119733119900126WTTT#Y00022222122222210112121128030000 +M520190111111119733120140107WTTT0ZZZ9222221122222 0422981 0000 +M520190111111119733120120715WTTT#WWPZ222221222222 0422981 0000 +M42019011111111973521700401121162113 +M520190111111119735119950715WTTTYZY9P12222222222210112981119500000 +M520190111111119735120150801WTTTPP099122221222222 0422981 0000 +M42019011111111974420600405341163113 +M520190111111119744119951126WTTTPB@YB22222222222210112081123940000 +M520190111111119744120160723WTTTYWTZ@222221122222 0422981 0000 +M42019011111111991320900406421162113 +M520190111111119913119871101WTTT#PTT@22222222222210112112113700000 +M520190111111119913120160603WTTTP9#YP122221222222 0422981 0200 +M520190111111119913120140116WTTT0WY9#122222222222 0422981 0200 +M520190111111119913120120114WTTT0YW0W222222122222 0422981 0200 +M520190111111119913120080719WTTTPZYY@122222122222 0422041 0200 +M42019011111112001322700400671163113 +M520190111111120013119830512WTTTYT@Y#22122222222210112111139900000 +M520190111111120013120050509WTTT#B@9#221222222222 0422071 0000 +M520190111111120013120040101WTTTPP#ZP221222122222 0422081 0000 +M520190111111120013120020819WTTTYT9P#221222122222 0422101 0000 +M520190111111120013120010714WTTTPWZ#B221222122222 0422111 0000 +M42019011111112008420000406951163113 +M520190111111120084119750702WTTTP0#TB22222222222250112111130930000 +M520190111111120084120050501WTTTPPYYB222122122222 0422071 0000 +M42019011111112009322700403941123113 +M520190111111120093119910114WTTT#PW0T22222122222210112121118960000 +M520190111111120093120170719WTTT0WZT0222222122222 0422981 0000 +M42019011111112029422700403241163113 +M520190111111120294119921102WTTTPY@0022222122222210112121121990000 +M520190111111120294120170115WTTTY#WZT222222122222 0422981 0000 +M520190111111120294120111115WTTT0WWP9122222222222 0422011 0000 +M42019011111112055122700400681161113 +M520190111111120551119810116WTTT0Z#B@12222222222210112131120080000 +M520190111111120551120100522WTTT##TYT122222122222 0422021 0000 +M520190111111120551120060615WTTTPZY09122222222222 0422061 0000 +M42019011111112069520600402121991113 +M520190111111120695119940501WTTT09Y0T22222122222210112111118020000 +M520190111111120695120121119WTTT#0@@9122221122222 0422981 0000 +M520190111111120695120110513WTTT#BB#Y122222222222 0422011 0000 +M42019011111112077720600405471161113 +M520190111111120777119831114WTTT090P@22222122222210112131115240000 +M520190111111120777120090702WTTTP9ZZP222221222222 0422031 0000 +M520190111111120777120040519WTTT0W#PZ222221122222 0422081 0000 +M42019011111112088922400402481163113 +M520190111111120889119980626WTTT#WZ0W22222122222210122081112670000 +M520190111111120889120180123WTTT#T#YY222221122222 0422981 0000 +M42019011111112096821100404801162113 +M520190111111120968119780613WTTT0BPZY22222122222210112111124820000 +M520190111111120968120040109WTTTP@#0Y222222222222 0422081 0000 +M42019011111112142621400400351163113 +M520190111111121426119930812WTTTYB90Y22212222222210112121100000149 +M520190111111121426120141116WTTTYP990222122122222 0422981 0000 +M42019011111112142921100403821163113 +M520190111111121429119840102WTTT#YWZ912222222222210112112100000000 +M520190111111121429120020614WTTTPTYZT122222122222 0422102 0000 +M520190111111121429120000101WTTTY0PZ#122222122222 0422112 0000 +M42019011111112145120000403721162113 +M520190111111121451119840719WTTT##9Y@22212222222210112121126000000 +M520190111111121451120160602WTTT#WT9Y222122122222 0422981 0000 +M520190111111121451120050526WTTTY##Y0222122122222 0422071 0000 +M42019011111112147720600405171161113 +M520190111111121477119810715WTTT#W9WT22222122222210112121119340000 +M520190111111121477120150118WTTT#B@0B222221122222 0422981 0000 +M520190111111121477120040618WTTT#ZT#9222122122222 0422081 0000 +M42019011111112161022700403241161113 +M520190111111121610119870101WTTTY0BWY22222222222230112111114530000 +M520190111111121610120141119WTTTBTTYT222222222222 0422981 0000 +M520190111111121610120120121WTTT0#PB0222222122222 0422981 0000 +M42019011111112174420600402121163113 +M520190111111121744119900819WTTT099WY22222122222210112121111800000 +M520190111111121744120160701WTTTPZZW0222221122222 0422981 0000 +M42019011111112195520600401151163113 +M520190111111121955119950802WTTT0YB9W12222222222210112111113440000 +M520190111111121955120140818WTTT#0ZT#122222122222 0422981 0000 +M520190111111121955120120706WTTT0BY0#122222222222 0422981 0000 +M42019011111112195921100406541163113 +M520190111111121959119870119WTTT09#YB22122222222210112111122880000 +M520190111111121959120180101WTTTY09ZZ222222122222 0422981 0000 +M520190111111121959120130702WTTTPPTBZ222222122222 0422981 0000 +M42019011111112213822700403351993113 +M520190111111122138119670707WTTTYBT#922222122222220122111308470000 +M520190111111122138119650123WTTT#@PTZ22222111222220222111133011594 +M520190111111122138120001123WTTTYTY0@222221122222 0422121 0797 +M42019011111112222022700403611161113 +M520190111111122220119920514WTTTP9B0@11222222222210112121121500000 +M520190111111122220120100618WTTT#@9BY122221122222 0422021 0000 +M520190111111122220120080823WTTT0ZTT#122122122222 0422041 0188 +M42019011111112225220500402421991113 +M520190111111122252119950123WTTT#0PZ@22212222222210112111118930149 +M520190111111122252120160102WTTTYY@9P222122222222 0422981 0000 +M42019011111112233820600400291163113 +M520190111111122338119910506WTTTPY9PW12222222222210112111114620000 +M520190111111122338120130103WTTT#0P9P122222122222 0422981 0000 +M520190111111122338120110101WTTT#@900122221122222 0422011 0000 +M520190111111122338120080715WTTT00Z9#122222122222 0422041 0000 +M520190111111122338120060126WTTTYZWTP122222122221 0422061 0864 +M42019011111112247521700406571162113 +M520190111111122475119810715WTTT0TBZW12222222222220112121119740313 +M520190111111122475120160123WTTT0Z09T122222222222 0422981 0000 +M520190111111122475120080106WTTTY@P#9122221222222 0422041 0000 +M42019011111112254420600401981161113 +M520190111111122544119870501WTTTYP9PZ12222222222210112121115550000 +M520190111111122544120080119WTTTYBT@T222222122222 0422031 0000 +M42019011111112271422200404361163113 +M520190111111122714119920613WTTT#9T@@22222122222210112111117980000 +M520190111111122714120160119WTTT0#00Y222221222222 0422981 0000 +M42019011111112276020600405941163113 +M520190111111122760119911102WTTT#TYTP22222122222230112121128930000 +M520190111111122760120150109WTTTPZYW0222222122222 0422981 0000 +M520190111111122760120120519WTTTPYW0@222221222222 0422981 0000 +M42019011111112289522400400121993113 +M520190111111122895119790815WTTTPP#0B22222222222210112111136400000 +M520190111111122895120180621WTTT#WBY#122222222222 0422981 0000 +M520190111111122895120180621WTTT0P9@Y122222222222 0422981 0000 +M42019021111111117921400400351163113 +M520190211111111179219870114WTTTY#Z9Y22222222222220112113200000000 +M520190211111111179119800726WTTT#0#9@22222212222210212112121670000 +M520190211111111179120180521WTTTPYB#W222122122222 0422981 0000 +M520190211111111179120130615WTTTY@YBW222222222222 0422983 0000 +M520190211111111179120080126WTTT0ZB9T222222222222 0422043 0000 +M42019021111111129220900406601162113 +M520190211111111292119730102WTTTYTPTW22222122222230112111121440000 +M520190211111111292120070606WTTTP##@#222221122222 0422051 0000 +M42019021111111174220600402031163113 +M520190211111111742119680126WTTT##BZ#22212222222230112121118570000 +M520190211111111742120030615WTTTPZTWP222122122222 0422091 0000 +M42019021111111201121400400351163113 +M520190211111112011119670626WTTTY@0@Z22212222222220112111123060000 +M520190211111112011120070618WTTTY@#YP222122122222 0422051 0000 +M42019021111111212520000401451163113 +M520190211111112125119880703WTTT#BT9P22222122222210112121112780000 +M520190211111112125120170715WTTT#PTB0222222122222 0422981 0000 +M520190211111112125120100502WTTT0WPTB222222222222 0422021 0000 +M42019021111111216920900406131162113 +M520190211111112169119780112WTTTYYZ@P22212222222210112121129230000 +M520190211111112169120030712WTTTP@0##122222222222 0422091 0000 +M520190211111112169120010715WTTT0WZ0@222221122222 0422111 0000 +M42019021111111217020600402031163113 +M520190211111112170119830614WTTT090Y922212222222210112121125810000 +M520190211111112170120110121WTTT0##PW222122122222 0422011 0304 +M520190211111112170120030506WTTTY9TB@222122122222 0422091 0000 +M42019021111111274321700401121163113 +M520190211111112743119960709WTTTYP#WY22212222222210112121115980000 +M520190211111112743120170801WTTTPT#PT222122122222 0422981 0000 +M520190211111112743120160121WTTT0T0Y@222122222222 0422981 0000 +M42019021111111285920600402121163113 +M520190211111112859119790118WTTTBTT@022122212222220112082124890000 +M520190211111112859119781126WTTTY@#TZ22122222222220212112117080000 +M520190211111112859120080101WTTTYB0WB221222122222 0422042 0000 +M520190211111112859120060113WTTTYWB#0221222222222 0422062 0000 +M520190211111112859120030626WTTTP##Y#221222122222 0422092 0000 +M42019021111111301420900403031163113 +M520190211111113014119780626WTTTP0PP922212222222210112112116820000 +M520190211111113014120130107WTTTPW@PT222222222222 0422981 0000 +M520190211111113014120120515WTTTYZ99B222222122222 0422981 0000 +M520190211111113014120081114WTTT0@T9W222122122221 0422041 0789 +M42019021111111315221100401181163113 +M520190211111113152119840507WTTT0YP0Y12222222222230112122119590000 +M520190211111113152120130723WTTTY#B@#222222122222 0422981 0000 +M520190211111113152120090121WTTT0TWT0122222122222 0422031 0000 +M42019021111111323720500404091163113 +M520190211111113237119810109WTTT#B0T@22222122222220112111115220000 +M520190211111113237119800516WTTTYBZZW22222112222210212111116900000 +M520190211111113237120160119WTTT0ZTP#222222222222 0422981 0000 +M520190211111113237120071108WTTT00T0W222221222222 0422051 0000 +M520190211111113237120010123WTTT#TPPY222221122222 0422111 0000 +M42019021111111335322700402581163113 +M520190211111113353119850121WTTT#PPB012222222222210112111114040000 +M520190211111113353120160516WTTTYWPW0122221222222 0422981 0000 +M42019021111111356721700403911163113 +M520190211111113567119900615WTTT00B9W22222112222210112111115330000 +M520190211111113567120130603WTTTYZ#@Y222221122222 0422981 0000 +M42019021111111385620900404651163113 +M520190211111113856119910615WTTT#0PPT22212222222210112081118680000 +M520190211111113856120130526WTTT#@TTT222122222222 0422981 0000 +M42019021111111429021700406571161113 +M520190211111114290119920115WTTTPYZZB12222222222210112111116900000 +M520190211111114290120160701WTTT#Z@Z0122222122222 0422981 0000 +M520190211111114290120110516WTTT0WTWP122222122222 0422011 0000 +M42019021111111449222700400671163113 +M520190211111114492119930112WTTT#W#ZP12222222222210112111127250000 +M520190211111114492120170519WTTT#BP0Y122222122222 0422981 0000 +M42019021111111476221100404801162113 +M520190211111114762119800702WTTTPT9YY12222222222210112111119680000 +M520190211111114762120130101WTTT0YZPT122222122222 0422981 0000 +M520190211111114762120040621WTTT#090T122222122222 0422081 0000 +M42019021111111491822200402941163113 +M520190211111114918119840616WTTTY@0@P22222122222210112111117740000 +M520190211111114918120160626WTTT#WBYT222222122222 0422981 0000 +M520190211111114918120130106WTTTYP@#0222222122222 0422981 0000 +M42019021111111497121100406001163113 +M520190211111114971119910715WTTTP9@Y@12222222222210112081120320000 +M520190211111114971120170121WTTT#TB90122222122222 0422981 0000 +M520190211111114971120160113WTTT0Z@90222222222222 0422981 0000 +M520190211111114971120070519WTTT0T#W0122222122222 0422051 0000 +M42019021111111527720900403071013113 +M520190211111115277119721101WTTTYPW9#22212222222210112111121290000 +M520190211111115277120060609WTTTYT0BY222122222222 0422061 0768 +M42019021111111552520000404271163113 +M520190211111115525119800715WTTT0ZP9Y22122222222210112112129020000 +M520190211111115525120120501WTTT0ZYWY222222222222 0422981 0000 +M520190211111115525120090515WTTTPT#ZP221222222222 0422031 0000 +M520190211111115525120030626WTTTYTZWZ222222222222 0422091 0230 +M42019021111111553621700401091163113 +M520190211111115536119890123WTTTYWTTW22222122222210112111119530000 +M520190211111115536120170721WTTT0@ZPP222221222222 0422981 0000 +M520190211111115536120120514WTTT0WYWB222221122222 0422981 0000 +M42019021111111556821700402381163113 +M520190211111115568119900101WTTT0TPWY12222222222230112121122580000 +M520190211111115568120160723WTTTP9@WB122222222222 0422981 0000 +M520190211111115568120110109WTTT##@#@222121122222 0422011 0000 +M42019021111111565120600400871162113 +M520190211111115651119910715WTTT0B@W912222222222210112111126400000 +M520190211111115651120130103WTTTPT#@@122222222222 0422981 0000 +M42019021111111584521100403821993113 +M520190211111115845119870118WTTTYWTB@12212222222210112112119240000 +M520190211111115845120130102WTTT0WP9B222222122222 0422981 0000 +M520190211111115845120120115WTTTP#T9B222222122222 0422981 0000 +M42019021111111596720900404621161113 +M520190211111115967119920123WTTTYTZ9@22222222222210112081112300050 +M520190211111115967120160721WTTT#Z00B222222122222 0422981 0000 +M42019021111111619620300404191993113 +M520190211111116196119920701WTTT#YYYP22222122222210112111118440000 +M520190211111116196120160819WTTTY@YT9222221122221 0422981 0141 +M42019021111111634421700405821163113 +M520190211111116344119970815WTTTPT9T#12222122222220112111118310000 +M520190211111116344120140606WTTTP9TP@122221122222 0422981 0000 +M42019021111111643822700400671162113 +M520190211111116438119830614WTTT#@09P12222222222210112121128810000 +M520190211111116438120160115WTTTPY9ZT222222222222 0422981 0000 +M520190211111116438120060706WTTT0009T122222222222 0422061 0000 +M42019021111111646221400400351161113 +M520190211111116462119800619WTTTYBWWB12222222222210112121118350000 +M520190211111116462120130108WTTTP0ZY@122222222222 0422981 0000 +M520190211111116462120030601WTTTPYTPB122222222222 0422091 0000 +M42019021111111672520000404071161113 +M520190211111116725119870121WTTTPY9@@12222222222210112122125590000 +M520190211111116725120181116WTTT#ZTP0222222222222 0422981 0000 +M520190211111116725120100606WTTTY#@#B222122122222 0422021 0000 +M520190211111116725120050119WTTT0B0PZ122222122222 0422071 0000 +M42019021111111678022700402321163113 +M520190211111116780119900702WTTTY009Y22222122222210112111113610000 +M520190211111116780120150503WTTT#W9BB222222222222 0422981 0000 +M42019021111111710020900406131161113 +M520190211111117100119830709WTTTY90##12222222222210112081120500000 +M520190211111117100120130115WTTTYW@9#122222222222 0422981 0000 +M520190211111117100120060522WTTTY0WP#122222222222 0422061 0000 +M520190211111117100120040715WTTT0TP99122222222222 0422081 0000 +M520190211111117100120010802WTTT#BW0@122222222222 0422111 0000 +M42019021111111728921100401691993113 +M520190211111117289119900716WTTTY09#B22222212222220222111200000000 +M520190211111117289119860723WTTT0ZT@922222122222210112141115190000 +M520190211111117289120130107WTTTYT9WP222221122222 0422981 0000 +M42019021111111806022700403941162113 +M520190211111118060119860801WTTT0W@9022212222222210112121119100000 +M520190211111118060120130601WTTTYTWW@222122122222 0422981 0000 +M520190211111118060120090612WTTTP0YT#222122122222 0422031 0000 +M42019021111111836921100401691163113 +M520190211111118369119780115WTTT#PZW022222122222220112121124270000 +M520190211111118369120041101WTTT0Z@0Y222221122222 0422081 0000 +M42019021111111857320600401151162113 +M520190211111118573119900701WTTTYP0BP12222222222210112131113220000 +M520190211111118573120170519WTTTYT#B@222222222222 0422981 0000 +M520190211111118573120130101WTTTY#PZ9122222222222 0422981 0400 +M42019021111111870121100401691163113 +M520190211111118701119880107WTTTYPPTP22212222222210112122117470149 +M520190211111118701120161101WTTTYBY@#222222222222 0422981 0000 +M42019021111111880020000406951163113 +M520190211111118800119850108WTTT#P@##22212222222210112131118120000 +M520190211111118800120150501WTTT0Z9BB222122122222 0422981 0000 +M42019021111111900222700403611161113 +M520190211111119002119850819WTTTYZWBT22222122222210112121117660000 +M520190211111119002120100619WTTT#090@122222222222 0422021 0000 +M520190211111119002120080121WTTTYTWZT122221222222 0422041 0000 +M520190211111119002120050114WTTT0T@0T222221222222 0422071 0000 +M42019021111111904520600405341162113 +M520190211111119045119830118WTTTP#@T912222222222210112111109530000 +M520190211111119045120170523WTTT#YTWY222221122222 0422981 0000 +M42019021111111912921700404101163113 +M520190211111119129119850101WTTTY9#Z@12222122222210112111120870000 +M520190211111119129120040706WTTT0YYPW122221222222 0422081 0000 +M520190211111119129120030801WTTTPPP9Y122221122222 0422091 0000 +M42019021111111917821400400351163113 +M520190211111119178119741126WTTT0B@Y@22212222222220112112118880250 +M520190211111119178120110819WTTTP9YPB222122222222 0422011 0000 +M42019021111111932520600402981013113 +M520190211111119325119930123WTTT#YZW#22212222222210112131116450000 +M520190211111119325120130815WTTTYP@ZP222122222222 0422981 0000 +M42019021111111944620900406421162113 +M520190211111119446119860602WTTTPPZTP12222222222210112121109530000 +M520190211111119446120130701WTTTY09YZ122222222222 0422981 0000 +M520190211111119446120070107WTTT00T99222222222222 0422051 0000 +M520190211111119446120020112WTTT0B##@122222222222 0422101 0000 +M42019021111111944721100401181161113 +M520190211111119447119850126WTTT00@0Y22222122222210112111116600000 +M520190211111119447120120102WTTT00WTB122221122222 0422981 0000 +M520190211111119447120051108WTTTY0PZB222122222222 0422071 0000 +M42019021111111969021200404541163113 +M520190211111119690119850626WTTTYT09Y12222122222230112131119760000 +M520190211111119690120140102WTTT#@#@W122221122222 0422981 0845 +M42019021111111975120900402921162113 +M520190211111119751119880615WTTT#B@0W22212222222210112121119670000 +M520190211111119751120170115WTTT09P9Y222222222222 0422981 0000 +M520190211111119751120070121WTTTP@0B@222122222222 0422051 0000 +M42019021111112013820600401421163113 +M520190211111120138119800502WTTT0PZ9B12222222222230112111121810000 +M520190211111120138120060116WTTTPWW@B122222122222 0422061 0000 +M520190211111120138120040115WTTT0##ZB122222222222 0422081 0000 +M520190211111120138120020701WTTT0@WBT122222222222 0422101 0000 +M42019021111112016621700403971163113 +M520190211111120166119660615WTTT0#@0P22222122222250112111125920000 +M520190211111120166120050814WTTT0TBY#222221222222 0422071 0000 +M42019021111112028820900403071163113 +M520190211111120288119720102WTTT#B#0W22212222222210112121117960000 +M520190211111120288120101114WTTT0YBBY222122122222 0422021 0000 +M520190211111120288120060701WTTTYB0TB222122222222 0422061 0000 +M520190211111120288120020801WTTTP#TW#222122122222 0422101 0000 +M42019021111112036621100401461163113 +M520190211111120366119890619WTTTPBT#@22222122222210112111122530000 +M520190211111120366120110109WTTTY9W@W222221122222 0422011 0000 +M42019021111112043321400406901163113 +M520190211111120433219800101WTTTP@P@Z22222222222220212113200000000 +M520190211111120433119750119WTTT00BWZ22222112222210112111125750000 +M520190211111120433120170512WTTT#9ZZB222221222222 0422981 0000 +M520190211111120433120150814WTTTYYB0W222222222222 0422981 0000 +M42019021111112062120900406601161113 +M520190211111120621119900501WTTT#9@@@12222222222210112121125730000 +M520190211111120621120160616WTTTPWZ#Z122221122222 0422981 0000 +M520190211111120621120110615WTTT0Z9WP122221122222 0422011 0035 +M520190211111120621120100115WTTT#W9WB122221122222 0422021 0035 +M42019021111112084620000403951163113 +M520190211111120846119860118WTTTP0WZ@22212222222210112121129310000 +M520190211111120846120160512WTTT#9@0Z222222222222 0422981 0000 +M520190211111120846120111115WTTTY9B#B222122122222 0422011 0462 +M520190211111120846120050718WTTTPZZP0222122222222 0422071 0000 +M42019021111112088821100406001163113 +M520190211111120888119911108WTTT0ZPYP22222122222230112121119460000 +M520190211111120888120130114WTTT0ZP0Z222221222222 0422981 0000 +M42019021111112110720000404071163113 +M520190211111121107119870101WTTT09PYZ22212222222210112131114990000 +M520190211111121107120160703WTTTYZZ9Z222222122222 0422981 0000 +M520190211111121107120080101WTTT0@W@#222122122222 0422041 0000 +M42019021111112120920600400871161113 +M520190211111121209119890723WTTTPPZZW12222222222210112111119750000 +M520190211111121209120150606WTTT0P#9T122222222222 0422981 0000 +M520190211111121209120131113WTTTY9#BT122222122222 0422981 0000 +M520190211111121209120120621WTTTPB@0Z122222222222 0422981 0000 +M42019021111112154120900402921162113 +M520190211111121541119920123WTTTPTB0Y22212222222210112081127220000 +M520190211111121541120160122WTTTPT9@P222222222222 0422981 0000 +M42019021111112174621700406571193113 +M520190211111121746119850701WTTTPY9#@22212222222210112142129200000 +M520190211111121746120110615WTTTY00@#222121222222 0422011 0000 +M520190211111121746120090526WTTT#ZW#@222122122222 0422031 0000 +M42019021111112215820000406951163113 +M520190211111122158119870719WTTT00PBP22222122222210112121113690000 +M520190211111122158120140123WTTTBT9#P222122222222 0422981 0000 +M520190211111122158120060616WTTT#ZTZY222221122222 0422061 0000 +M42019021111112254021400400351162113 +M520190211111122540119840126WTTTYYZ0#22222122222210112111130640000 +M520190211111122540120160102WTTTYWB#@222221222222 0422981 0000 +M520190211111122540120140718WTTT0P0Z9222222122222 0422981 0000 +M520190211111122540120061107WTTTPYYYW222221122222 0422061 0000 +M520190211111122540120050103WTTTYT@TP222221222222 0422071 0000 +M42019021111112287121100406001163113 +M520190211111122871119930806WTTTP09YY12222222222220112112117690000 +M520190211111122871120161119WTTT0PB09122222122222 0422981 0000 +M42019021111112296722700402581162113 +M520190211111122967119930119WTTTYP9PT22222122222210112111100000000 +M520190211111122967120170715WTTTP#@WY222221222222 0422981 0000 +M520190211111122967120150601WTTTP#BWB222222222222 0422981 0000 +M42019031111111140420600403391161113 +M520190311111111404119770701WTTTYTYPW12222222222210112121122160000 +M520190311111111404120120801WTTT0WZWT122222122222 0422981 0000 +M520190311111111404120050102WTTTP90ZW122222222222 0422071 0000 +M520190311111111404120040615WTTTPTWY9222122222221 0422081 0885 +M42019031111111163320900402921161113 +M520190311111111633119860102WTTTYB##T12222222222210112982112630000 +M520190311111111633120160103WTTTYPTYT122122122222 0422981 0000 +M520190311111111633120060815WTTT##PWZ122222122222 0422061 0700 +M520190311111111633120040609WTTT009P@122222222222 0422082 0000 +M42019031111111188321100402161162113 +M520190311111111883119730719WTTTYYY#022222122222210112111117160000 +M520190311111111883120130507WTTTY9ZY#222222122222 0422981 0000 +M520190311111111883120070722WTTTYP@W9222221222222 0422051 0000 +M520190311111111883120050502WTTTP#B@B222221122222 0422071 0000 +M520190311111111883120030101WTTTPW@09222221222222 0422091 0000 +M42019031111111222020600405171161113 +M520190311111112220119940618WTTTP0PWW12222222222210112111113520000 +M520190311111112220120150123WTTTYTW9Y122222122222 0422981 0000 +M520190311111112220120130501WTTT#PW@0122222222222 0422981 0000 +M42019031111111239722700405241163113 +M520190311111112397119830619WTTT#9#0B22222122222210112131119920000 +M520190311111112397120170603WTTTY#ZBP222221222222 0422981 0000 +M520190311111112397120090703WTTT#0Z@@222221222222 0422031 0063 +M42019031111111240421100401551163113 +M520190311111112404119850119WTTT0YTB#12222222222210112111123440000 +M520190311111112404120120119WTTT#TBY#222222122222 0422981 0000 +M520190311111112404120091119WTTT#PPT9222222122222 0422031 0000 +M520190311111112404120040519WTTT##@TY122222122222 0422081 0148 +M42019031111111245520600401151161113 +M520190311111112455119860113WTTTP#PZ012222222222210112131136600000 +M520190311111112455120100502WTTT#BZPP122222122222 0422021 0000 +M42019031111111248320600401981193113 +M520190311111112483119920106WTTT09@Z012222222222210112081119450000 +M520190311111112483120140806WTTT0BYBY222222222222 0422981 0000 +M520190311111112483120100714WTTTYWPYZ122222122222 0422021 0000 +M42019031111111249720900400501163113 +M520190311111112497119760507WTTTP@WB922212222222210112121123400000 +M520190311111112497120140826WTTT#@#99222122122222 0422981 0000 +M520190311111112497120090526WTTTPB#9#222122222222 0422031 0000 +M42019031111111257521100401181161113 +M520190311111112575119860112WTTTPW@#912222222222210112111114630000 +M520190311111112575120150601WTTT0BZ09122222222222 0422981 0000 +M520190311111112575120080123WTTTP0T@W222222122222 0422041 0000 +M42019031111111275320000400801163113 +M520190311111112753119800513WTTTYBZPB22122222222220212112116670000 +M520190311111112753119740701WTTT#@T9B22122212222220112112128320000 +M520190311111112753120171102WTTT#9BYB222222122222 0422981 0000 +M520190311111112753120140713WTTT00B9P221222122222 0422981 0000 +M520190311111112753120110626WTTTYPY@B221222122222 0422011 0000 +M520190311111112753120081107WTTT#BZ@W221222122222 0422041 0000 +M42019031111111303320600402031013113 +M520190311111113033119860103WTTT##W0Z22212222222210112121121880000 +M520190311111113033120130113WTTTYY9T0222122222222 0422981 0000 +M520190311111113033120090122WTTT#0Y0P222122122222 0422031 0000 +M42019031111111313920000403721993113 +M520190311111113139119790519WTTTPT@P912222122222210112111118990000 +M520190311111113139120160609WTTTPB#WB222222222222 0422981 0000 +M42019031111111316020600401151163113 +M520190311111113160119760112WTTT0Z@#W12222222222250112111119470000 +M520190311111113160120060126WTTTP9ZW@222222122222 0422061 0221 +M520190311111113160120030115WTTT0T#9T222222122222 0422091 0221 +M42019031111111325421700402341163113 +M520190311111113254119710709WTTTPYPB#12222222222230122121126760000 +M520190311111113254120090101WTTTYZYPZ122222222222 0622041 0000 +M42019031111111362521200404681163113 +M520190311111113625119950101WTTTY#TBW12222222222210112111118510000 +M520190311111113625120171115WTTT#PBBY222222222222 0422981 0000 +M520190311111113625120090101WTTTPB9TB122222222222 0422031 0092 +M42019031111111392920600401421162113 +M520190311111113929119940626WTTTPB@#Z12222222222210112121118620000 +M520190311111113929120150121WTTTPPZZ#122222222222 0422981 0000 +M520190311111113929120110701WTTT0YP0P222222222221 0422011 0801 +M42019031111111410722700403941163113 +M520190311111114107119700115WTTT00ZY022222122222250122141114260000 +M520190311111114107120140126WTTTPYZY#222221222222 0622981 0000 +M520190311111114107120100818WTTTYZTY@222221222221 0622021 0602 +M42019031111111414321400403641162113 +M520190311111114143119770113WTTTPPWY#22212212222210112111131590000 +M520190311111114143120080122WTTT09@ZP222222222222 0422041 0000 +M520190311111114143120060816WTTTYW0T0122222122222 0422061 0000 +M520190311111114143120050526WTTT0WBPY222122122222 0422071 0000 +M520190311111114143120010506WTTT0BYT#222122122222 0422111 0000 +M42019031111111438721100406001163113 +M520190311111114387119930515WTTTYT09922221222222230112111118680000 +M520190311111114387120170106WTTT0@BPY122222122222 0422981 0000 +M520190311111114387120140103WTTTPZTY#222222222222 0422981 0000 +M42019031111111454822700400671013113 +M520190311111114548119700602WTTTYPPYY22222122222250112121119860000 +M520190311111114548120040715WTTT0T@P@222221122222 0422081 0022 +M42019031111111505721700406341163113 +M520190311111115057119860119WTTT##ZP@22222222222210112131121240000 +M520190311111115057120160112WTTTYBBP0222222222222 0422981 0000 +M520190311111115057120070602WTTT0W@TY222222222222 0422051 0000 +M42019031111111513620600400871163113 +M520190311111115136119930601WTTTYPPPZ12222222222210112111123200000 +M520190311111115136120130715WTTTP9WW9122222122222 0422981 0000 +M520190311111115136120120606WTTT#9W@#122222122222 0422981 0000 +M42019031111111521720600403391163113 +M520190311111115217119860115WTTTP@PP#12222222222210112111125290000 +M520190311111115217120130615WTTTPP99#222122122222 0422981 0000 +M42019031111111529721400406791161113 +M520190311111115297119891109WTTT0T0ZT12222222222210112131118110000 +M520190311111115297120160719WTTTYWZWW222222222222 0422981 0000 +M520190311111115297120140107WTTT0PYPW122221222222 0422981 0000 +M520190311111115297120100707WTTTPTWT9122222122222 0422021 0000 +M42019031111111564920600406321013113 +M520190311111115649219890619WTTT0PT9@22212222222220112113200000000 +M520190311111115649119870102WTTT0#@TZ22212212222220212111139470000 +M520190311111115649120181119WTTTYBT#Y222222122222 0422981 0000 +M520190311111115649120170715WTTTP0B90222122122222 0422981 0000 +M42019031111111567422400402111993113 +M520190311111115674119940523WTTT0#BW#22212222222210112112114990000 +M520190311111115674120180619WTTTY@TBZ222122222222 0422981 0000 +M42019031111111575221700404101162113 +M520190311111115752119811112WTTTY0ZZ922212222222230112121116650000 +M520190311111115752120180101WTTTPWTT0222222122222 0422981 0000 +M520190311111115752120080814WTTTYT0#T222122222222 0422041 0000 +M520190311111115752120030801WTTT0ZZ@B222122122222 0422091 0000 +M42019031111111599021200406661163113 +M520190311111115990119860709WTTTYZ@YT22222122222210112131121460000 +M520190311111115990120150523WTTT00ZW@222222122222 0422981 0000 +M520190311111115990120150523WTTT#9WTB222222122222 0422981 0000 +M520190311111115990120050518WTTTYPTZ0222221222222 0422071 0121 +M42019031111111636522200402491163113 +M520190311111116365119710726WTTT0TZWT22222112222230112131121410000 +M520190311111116365120060706WTTTY00Y0222221122222 0422061 0000 +M520190311111116365120040719WTTTP0PPP222221122222 0422081 0000 +M42019031111111639921100405971163113 +M520190311111116399119871115WTTT#9@9T12222122222210112111132320000 +M520190311111116399120140121WTTTYWW#B122222122222 0422981 0000 +M520190311111116399120100712WTTTP@YPW122222222222 0422021 0000 +M520190311111116399120050102WTTTP@9B@122221122222 0422071 0000 +M42019031111111641321100401181163113 +M520190311111116413119830101WTTT#9YT912222222222210112122124390500 +M520190311111116413120091109WTTTYYZZZ122222222222 0422031 0000 +M520190311111116413120070121WTTT0W@@#122222122222 0422051 0000 +M520190311111116413120060815WTTTPBYZP122222122222 0422061 0000 +M520190311111116413120020602WTTTP#99B122222122222 0422101 0000 +M42019031111111642120000400921163113 +M520190311111116421119840118WTTT0PWWP22212222222250112121116430000 +M520190311111116421120140126WTTT0ZW0Z222122122222 0422981 0000 +M520190311111116421120120601WTTTYWTBW222122122222 0422981 0000 +M520190311111116421120080701WTTTYZW#0222122122222 0422041 0000 +M42019031111111651922400401471993113 +M520190311111116519119790712WTTT#WBB022222122222250112111125220000 +M520190311111116519120080706WTTT0ZWT#222221222222 0422041 0000 +M520190311111116519120030708WTTTY9TYY222221222222 0422091 0000 +M42019031111111653321700406831163113 +M520190311111116533119880612WTTT#Z@PY22222112222210112111122390000 +M520190311111116533120090601WTTT0@P#P222221222222 0422031 0000 +M42019031111111685320900406421161113 +M520190311111116853119830118WTTTYT0Y922212222222230112122200000000 +M520190311111116853119610118WTTT0Y00022212212222220212981229050000 +M520190311111116853120151102WTTT0@##Y222122122222 0422981 0000 +M520190311111116853120130723WTTT00Z9B222222222222 0422981 0000 +M520190311111116853120120715WTTTP@B#T222222122222 0422981 0000 +M520190311111116853120090815WTTT#BZ99222122122222 0422031 0000 +M520190311111116853120060516WTTTY9TBY222122222222 0422061 0000 +M520190311111116853120020601WTTTBTZPW222122122222 0422102 0000 +M42019031111111704721400400351163113 +M520190311111117047119860102WTTTPTPZY22222122222230112111116120000 +M520190311111117047120170115WTTTYW###222222222222 0422981 0000 +M42019031111111716321400406791991113 +M520190311111117163119890607WTTTYPW@@12222222222210112131115910000 +M520190311111117163120150702WTTT0T#T0122222122222 0422981 0000 +M42019031111111750420900402921163113 +M520190311111117504119870109WTTTYWZBP22212222222210112131121650000 +M520190311111117504120110719WTTT##YWP222222122222 0422011 0000 +M42019031111111791321400400351163113 +M520190311111117913119660101WTTT#TT0Y22212222222230112111123180000 +M520190311111117913120020606WTTT0WP##222122122222 0422101 0000 +M42019031111111819821200402291163113 +M520190311111118198119910123WTTTY@#T922222222222210112131112830241 +M520190311111118198120150107WTTTYYW09222222222222 0422981 0000 +M42019031111111860720000401061163113 +M520190311111118607119860115WTTT00ZTB12222122222210112131131740000 +M520190311111118607120150806WTTTYT9Z#222222122222 0422981 0000 +M520190311111118607120120501WTTT#PYWT122221222222 0422981 0000 +M42019031111111869322700403941993113 +M520190311111118693119790119WTTTY9TBT22222122222210112111127580000 +M520190311111118693120150521WTTTY@W0P222221222222 0422981 0000 +M520190311111118693120110518WTTT#BT00222221222222 0422021 0000 +M42019031111111894922700403611162113 +M520190311111118949119900101WTTTPTTWY22222122222210112121114900000 +M520190311111118949120140119WTTTPW9Z@222121122222 0422981 0000 +M520190311111118949120110121WTTT0P0YW222222222222 0422011 0000 +M520190311111118949120070102WTTTPT0YY222221122222 0422051 0000 +M42019031111111910120900400501163113 +M520190311111119101119910801WTTTPW9#022212222222210112081115840149 +M520190311111119101120180101WTTTY9ZB9222122222222 0422981 0000 +M42019031111111923121700402381013113 +M520190311111119231119920622WTTT0W9ZT22222112222210112111123890000 +M520190311111119231120110621WTTT0W@Y9222222122222 0422011 0000 +M42019031111111933021700401121012113 +M520190311111119330119820819WTTTYPP#B12222222222210112131116510000 +M520190311111119330120080101WTTT0@PYY122222222222 0422041 0000 +M42019031111111985321100401181162113 +M520190311111119853119940712WTTT0Y9#@12222222222210112121124110000 +M520190311111119853120140708WTTTYZB9Z122222222222 0422981 0000 +M520190311111119853120110615WTTT0@9TZ122222222221 0422011 0158 +M520190311111119853120091101WTTTY9TWZ122222122222 0422031 0000 +M42019031111112000221100403821163113 +M520190311111120002119870702WTTTPZBYB22222222222210112111100000000 +M520190311111120002120150606WTTTYPZZY122222222222 0422981 0000 +M520190311111120002120140115WTTTY0Y#0222222122222 0422981 0000 +M42019031111112020320000404151161113 +M520190311111120203119800115WTTT#PPW@22122222222210112111124700000 +M520190311111120203120160813WTTTP09@B221222222222 0422981 0000 +M520190311111120203120110119WTTTYP0Y#221222122222 0422011 0000 +M520190311111120203120030716WTTT#0@@Z221222122222 0422091 0480 +M520190311111120203120020619WTTTPZ#0Y221222122222 0422101 0000 +M42019031111112024120900406131163113 +M520190311111120241119840102WTTT#@PYT12222222222210112111130410000 +M520190311111120241120170815WTTTPZWT0122222122222 0422981 0000 +M520190311111120241120030801WTTT0P@#B122222122222 0422091 0000 +M42019031111112024321100404791162113 +M520190311111120243119920801WTTTYTZ@B22222122222210112111112900000 +M520190311111120243120170115WTTT00W@P222221222222 0422981 0000 +M520190311111120243120150519WTTT0W9W9222221122222 0422981 0000 +M520190311111120243120110626WTTT0TW@B222221222222 0422011 0080 +M42019031111112047420600401151993113 +M520190311111120474119810116WTTT0P@YY12222122222210112111120800000 +M520190311111120474120040706WTTT0#BTT122222122222 0422081 0000 +M520190311111120474120030719WTTTYP0Y@122222122222 0422091 0000 +M42019031111112052720900403031163113 +M520190311111120527119930507WTTTPPT@Z22212222222210112111113050000 +M520190311111120527120150714WTTTY@@TY222122122222 0422981 0000 +M42019031111112071320500402421161113 +M520190311111120713119890101WTTT00YTT22222122222210112121126300000 +M520190311111120713120160702WTTTP##@W222222222222 0422981 0000 +M520190311111120713120100115WTTT0WZTB222222222222 0422021 0000 +M42019031111112080321100401691163113 +M520190311111120803119931106WTTTYZ99T22222122222210112111117550000 +M520190311111120803120180701WTTTP9BTY222221222222 0422981 0000 +M42019031111112082420000401371163113 +M520190311111120824119900106WTTT#W@@Z22222112222210112111117120000 +M520190311111120824120160102WTTT0YYPP222221222222 0422981 0000 +M520190311111120824120120115WTTT#T99W222221122222 0422981 0000 +M42019031111112115722700400671163113 +M520190311111121157119820503WTTTYB0PB22222122222230112111115800000 +M520190311111121157120060609WTTT0B@T#222221122222 0422061 0000 +M520190311111121157120030119WTTTYPPYB222221222222 0422091 0000 +M42019031111112124520000400941161113 +M520190311111121245119870614WTTTY0B@P22212222222210112121111790000 +M520190311111121245120150801WTTT0PBTY222122122222 0422981 0000 +M520190311111121245120100702WTTTPTP09222122122222 0422021 0153 +M520190311111121245120050609WTTT#ZZ0W222122122222 0422071 0408 +M42019031111112132720900403071161113 +M520190311111121327119880101WTTT0T#@T12222222222210112111110900000 +M520190311111121327120140519WTTTPBT@@222222122222 0422981 0000 +M520190311111121327120100712WTTT#Z#90122222222222 0422021 0000 +M520190311111121327120071101WTTT0P00T122222222222 0422051 0000 +M42019031111112143022700403941163113 +M520190311111121430119910513WTTT0BY#B22222122222210112121116780149 +M520190311111121430120160116WTTT0T0T@122222222222 0422981 0000 +M520190311111121430120100123WTTTYBZWP222222222222 0422031 0000 +M42019031111112160521100406391163113 +M520190311111121605119910608WTTTPYWBT22222122222220112121125910000 +M520190311111121605120130101WTTTY@B#P222222122222 0422981 0000 +M520190311111121605120090521WTTTPWBT0122222222222 0422031 0178 +M42019031111112202220900403031162113 +M520190311111122022119720706WTTT#WPZP22212222222210112111121710000 +M520190311111122022120150715WTTT0ZY@P222122222222 0422981 0000 +M520190311111122022120090519WTTT#9Y#Y222122122222 0422031 0000 +M520190311111122022120060813WTTTPPPBW222122122222 0422061 0100 +M520190311111122022120030101WTTTY#@#P222122122222 0422101 0100 +M42019031111112212620000401371163113 +M520190311111122126119730102WTTT#90TT22222122222230112111132570000 +M520190311111122126120111112WTTTYYP#0222221222222 0422011 0000 +M520190311111122126120050719WTTT0TW#W222221122222 0422071 0000 +M520190311111122126120020707WTTTYZ##Z222221222222 0422101 0000 +M42019031111112225821100406001163113 +M520190311111122258119830609WTTTYW@T@12222222222220112111126800000 +M520190311111122258120090103WTTT0#YPT122222222222 0422041 0000 +M520190311111122258120060723WTTT#B0W@122222222222 0422061 0000 +M42019031111112236220000401511161113 +M520190311111122362119900626WTTTP@BT021212222222210112161114480000 +M520190311111122362120150723WTTT0W0P0212122222222 0422981 0000 +M42019031111112291720600405341122113 +M520190311111122917119860126WTTTP#YZW22222222222210112131126460000 +M520190311111122917120100707WTTTY9900222222122222 0422021 0000 +M520190311111122917120070121WTTTP#Z@W222222122222 0422051 0000 +M42019031111112294522700402401163113 +M520190311111122945119691118WTTTPWYBP22222122222250112121100000000 +M520190311111122945120140107WTTT##9WP222222122222 0422981 0000 +M42019041111111132220900406421162113 +M520190411111111322119901116WTTT#@9#P12222222222210112111118420000 +M520190411111111322120150715WTTT0ZZT0222222222222 0422981 0000 +M520190411111111322120090626WTTTPTT#Y122222222222 0422031 0000 +M42019041111111143822700403611163113 +M520190411111111438119700101WTTT0P#P#12222222222210112141117650000 +M520190411111111438120070112WTTTPP0@9222221222222 0422061 0000 +M42019041111111148120900400501161113 +M520190411111111481119890119WTTTYWT0P12222222222210112121130810000 +M520190411111111481120180502WTTT#9#9T122222222222 0422981 0000 +M520190411111111481120130714WTTT#BZB#122221222222 0422981 0000 +M520190411111111481120110623WTTTY99@P122222122222 0422011 0000 +M520190411111111481120050703WTTTYP90P122222122222 0422071 0000 +M42019041111111169720000406951012113 +M520190411111111697119690815WTTT009@W22222112222220112111253060000 +M520190411111111697119670703WTTTYYTYB22222122222220212111200000000 +M520190411111111697120080807WTTTY@TB#222221222222 0422041 0000 +M42019041111111176520300404901162113 +M520190411111111765119940706WTTT0WB9Z22222122222210112111120590000 +M520190411111111765120150701WTTT0ZB#Y222221222222 0422981 0000 +M42019041111111178421100401181163113 +M520190411111111784119950601WTTT#ZT@P12222122222210112111123920000 +M520190411111111784120150118WTTTP#PZZ122221222222 0422981 0000 +M42019041111111219021700405121163113 +M520190411111112190119830813WTTTY@YP922212222222210112121128860000 +M520190411111112190120140813WTTTYYTBZ222122222222 0422981 0000 +M520190411111112190120100115WTTT0B@YB222122122222 0422031 0000 +M42019041111111251022200405781163113 +M520190411111112510119900115WTTT0TW@922222122222210112111122910000 +M520190411111112510120140601WTTTY#YZ0222221122222 0422981 0000 +M42019041111111259520600403391993113 +M520190411111112595119841106WTTT##BT922222122222250112111127200000 +M520190411111112595120100807WTTTYW@ZT222221122222 0422021 0000 +M520190411111112595120080715WTTTY0@P9222221122222 0422041 0000 +M42019041111111271021400400351161113 +M520190411111112710119890509WTTT0@PTT12222222222210112131100000000 +M520190411111112710120140101WTTT0B9#0122222222222 0422981 0000 +M42019041111111274221700406221163113 +M520190411111112742119930112WTTTYZ#PY22222122222210112131124530000 +M520190411111112742120130626WTTT0Z@BY222121222222 0422981 0000 +M42019041111111291621100403821163113 +M520190411111112916119750123WTTTP9PZ012222222222210112112122920500 +M520190411111112916120100708WTTT0WPZ#122222222222 0422021 0000 +M520190411111112916120070802WTTT##Z9#122222222222 0422051 0000 +M520190411111112916120040516WTTTY@BPY122222122222 0422092 0000 +M42019041111111298222700400991163113 +M520190411111112982119810715WTTTYYB@922222122222210112121127770000 +M520190411111112982120080519WTTT#TZWT222221222222 0422041 0000 +M520190411111112982120070815WTTTY@###222221122222 0422051 0000 +M42019041111111308821100401181163113 +M520190411111113088119880626WTTTP@Z@022222122222210112111121680000 +M520190411111113088120090106WTTT#P0@B222221222222 0422031 0000 +M520190411111113088120090106WTTT###Y@222221222222 0422031 0000 +M42019041111111314121100406001163113 +M520190411111113141119811108WTTTY##TT12222222222230112982119500000 +M520190411111113141120160615WTTTP@@PB122221222222 0422981 0000 +M520190411111113141120030518WTTTP##T#222222122222 0422092 0000 +M42019041111111384420900404651163113 +M520190411111113844119840519WTTTYYTW022212222222210112111128080000 +M520190411111113844120090523WTTTPZWWY222222122222 0422041 0000 +M520190411111113844120050615WTTTY9B@#222122122222 0422071 0000 +M42019041111111403521400403651163113 +M520190411111114035119920808WTTTY##PZ22222122222210112121113230000 +M520190411111114035120140601WTTTYZTY0222222222222 0422981 0000 +M42019041111111404320500402421161113 +M520190411111114043119930626WTTT#9TZZ22222122222210112121116090000 +M520190411111114043120150516WTTT#0ZTW222221222222 0422981 0000 +M42019041111111415420900403071161113 +M520190411111114154119770102WTTTPT#P#12222222222250112131131140000 +M520190411111114154120090718WTTTP9B#Y122222222222 0422031 0000 +M520190411111114154120050701WTTTY0#WY122222222222 0422071 0000 +M42019041111111422021700402341163113 +M520190411111114220119710118WTTTP9B@#22212222222210112131124280000 +M520190411111114220120020116WTTTYBPTZ222122122222 0422101 0000 +M42019041111111447221100406001013113 +M520190411111114472119920614WTTT#TTYT12222222222210112081100000000 +M520190411111114472120150102WTTTYW9@@122222122222 0422981 0000 +M42019041111111454622700404531163113 +M520190411111114546119941116WTTTYY9ZB22222122222210112111122960000 +M520190411111114546120180701WTTTYP#@P222222122222 0422981 0000 +M42019041111111457020000404071163113 +M520190411111114570119850106WTTT#P9##22212222222210112123122390000 +M520190411111114570120170606WTTTP9@@W222122122222 0422981 0000 +M42019041111111484120900404431161113 +M520190411111114841119740115WTTT0BB#022222122222220112111200000000 +M520190411111114841119701119WTTT00YYZ22222112222220212111236870000 +M520190411111114841120080126WTTTPYTWP222222122222 0422041 0000 +M520190411111114841120020512WTTTBT@@#222221222222 0422101 0000 +M42019041111111489320600401151161113 +M520190411111114893119950512WTTTY#9W@12222222222210112111115160000 +M520190411111114893120160723WTTT0B0ZY122222222222 0422981 0000 +M520190411111114893120130512WTTTPW#99122222222222 0422981 0000 +M42019041111111500121700404101013113 +M520190411111115001119840502WTTT09PWB12222222222210112111122570000 +M520190411111115001219830601WTTT#YPZ012222212222110212081200000801 +M520190411111115001120080114WTTTY9#@Z122222122222 0422041 0000 +M520190411111115001120060108WTTT0Y0#W122222222222 0422061 0000 +M520190411111115001120040103WTTT0Z@00122222222222 0422081 0000 +M520190411111115001120030123WTTT#Y@BP122222122222 0422101 0000 +M42019041111111532220900403031163113 +M520190411111115322119860115WTTTYP#@Z22212222222210112111116120000 +M520190411111115322120131115WTTTPY@09222122122222 0422981 0000 +M42019041111111570121400400351163113 +M520190411111115701219880703WTTTP#ZWB22222222222220212983200000000 +M520190411111115701119630513WTTTP0@0#22222212222220112121132210400 +M520190411111115701120160103WTTTYZWPT222222222222 0422981 0000 +M520190411111115701120150702WTTT#T@YP222222222222 0422981 0000 +M520190411111115701120140103WTTTYZWTT222222122222 0422981 0000 +M42019041111111581421400400351163113 +M520190411111115814119820618WTTTYPY#B22212222222210112111143550000 +M520190411111115814120160712WTTT0T#YP122222222222 0422981 0645 +M520190411111115814120110118WTTTYP09T222222222222 0422011 0645 +M520190411111115814120100626WTTT0990#222222222222 0422021 0645 +M520190411111115814120080121WTTTP00PP222222222222 0422041 0645 +M42019041111111585020500402421163113 +M520190411111115850119870121WTTTY9Y#Z22222122222210112121124480000 +M520190411111115850120131113WTTTPZPWW222222122221 0422981 0544 +M520190411111115850120131113WTTTY0ZBW222222222221 0422981 0544 +M42019041111111589720900406131162113 +M520190411111115897119840622WTTTPY@@Z12222122222210112121128390000 +M520190411111115897120120116WTTTYZ909122222222222 0422981 0000 +M520190411111115897120120116WTTTY0BY@122222122222 0422981 0000 +M520190411111115897120100715WTTTPBZZ#122221222222 0422021 0000 +M520190411111115897120070602WTTT#B@WT122221122222 0422051 0000 +M520190411111115897120050115WTTTYZTZT122221222222 0422071 0000 +M42019041111111601622700402321163113 +M520190411111116016119810615WTTT0#T@B22222122222210112121121550000 +M520190411111116016120110126WTTT0P#9Z222221222222 0422011 0000 +M520190411111116016120040108WTTT0#Z0B222221222222 0422081 0000 +M520190411111116016120010107WTTT###YB222221122222 0422111 0000 +M42019041111111605520600405341013113 +M520190411111116055119910722WTTT09W#922212222222210112121124260000 +M520190411111116055120110715WTTTYZ@YY222122122222 0422011 0000 +M42019041111111611321700405821163113 +M520190411111116113119900708WTTT#YP9W12222222222230112081121610000 +M520190411111116113120170615WTTTYPZ#T222222222222 0422981 0000 +M520190411111116113120120119WTTT0@@BP122222122222 0422981 0000 +M42019041111111620120000403951163113 +M520190411111116201119950618WTTTPPZ@P22222122222210112131100000000 +M520190411111116201120160612WTTT0#@0Y222221222222 0422981 0000 +M42019041111111626020900406131163113 +M520190411111116260119930121WTTT0Y0P012222222222210112111111700000 +M520190411111116260120170119WTTTPPZB#222222222222 0422981 0000 +M520190411111116260120130512WTTT#WP0T222222122222 0422981 0000 +M42019041111111632220600405171161113 +M520190411111116322119760607WTTTYTZZT12222122222210112121117570000 +M520190411111116322120060518WTTTYZ#0Z122222122222 0422061 0000 +M520190411111116322120010106WTTT0BT@9122222122222 0422111 0000 +M42019041111111644220000404271163113 +M520190411111116442119940118WTTTYWP#P22212222222210112082118360000 +M520190411111116442120110501WTTTPWTB9222122122222 0422012 0000 +M42019041111111707122700403941163113 +M520190411111117071119830501WTTT0YP9#22222222222220112112120550000 +M520190411111117071120170101WTTT0YZY0222222222222 0422981 0000 +M520190411111117071120090815WTTT0@0@T222222222222 0422031 0000 +M520190411111117071120080519WTTT00P#Z222222222222 0422051 0000 +M520190411111117071120070813WTTT#PB0B222222222222 0422051 0000 +M42019041111111765322700400671163113 +M520190411111117653119880123WTTTPTY#T22222122222210112121119120000 +M520190411111117653120130714WTTTY@ZZY122221122222 0422981 0000 +M520190411111117653120080626WTTTY#Y0Y122222222222 0422041 0000 +M42019041111111774022700402851163113 +M520190411111117740119850119WTTT0TZ9W22222122222250112121123210000 +M520190411111117740120160619WTTTYTY@Y222221222222 0422981 0000 +M520190411111117740120050503WTTT0@W00222221222222 0422081 0000 +M520190411111117740120030806WTTT#Z#W#222221222222 0422091 0000 +M42019041111111778420000405381163113 +M520190411111117784119830721WTTTPB9W#22222122222210112131100000000 +M520190411111117784120140516WTTTP9P#B222222122222 0422981 0000 +M520190411111117784120040106WTTT##YTW222221222222 0422081 0000 +M42019041111111786420900406151163113 +M520190411111117864119920121WTTT#PPY922222222222210112112118810000 +M520190411111117864120170115WTTTPYPYY222222222222 0422981 0000 +M42019041111111787021100401461163113 +M520190411111117870119820514WTTTYZBY#12222222222210112122110540000 +M520190411111117870119820721WTTT#B@@922222112222210212111132060000 +M520190411111117870120110101WTTTPWW99122221222222 0422021 0000 +M520190411111117870120040516WTTTY0TBT122222222222 0422091 0238 +M42019041111111811721700406341163113 +M520190411111118117119850601WTTT##PB012222222222210112111109660000 +M520190411111118117120160119WTTTP0T##222222222222 0422981 0000 +M520190411111118117120141109WTTT09PBY122222222222 0422981 0000 +M520190411111118117120070123WTTTY@T#W122222222222 0422051 0115 +M42019041111111838320600405341163113 +M520190411111118383119900119WTTT0@##W12222222222230112082113650000 +M520190411111118383120160526WTTTP9#09122222122221 0422981 0602 +M42019041111111859720600405471991113 +M520190411111118597119950126WTTT0T09T12222122222210112131111920000 +M520190411111118597120140615WTTT#0YWY122221122222 0422981 0000 +M42019041111111870822700400671163113 +M520190411111118708119870501WTTT#@9@922222222222210112121117950000 +M520190411111118708120160107WTTTYZ#BP222222222222 0422981 0000 +M520190411111118708120110518WTTTY#@B#122221222222 0422011 0000 +M520190411111118708120070126WTTTPT#T@222222222222 0422051 0023 +M42019041111111908020000403181993113 +M520190411111119080119900101WTTTPW@0W22212222222210112161123640000 +M520190411111119080120160107WTTTBT@0W222122122222 0422981 0000 +M42019041111111911821100401691163113 +M520190411111119118119720526WTTT#PP@P22222122222210112111121450000 +M520190411111119118120090602WTTTY@9BW222222122222 0422031 0000 +M520190411111119118120060101WTTT0@TTW222221222222 0422061 0000 +M42019041111111952821100406391163113 +M520190411111119528119880619WTTTP0#PP12222222222210112131118770000 +M520190411111119528120160518WTTT0YWZ9122222222222 0422981 0000 +M520190411111119528120110115WTTTP#0T@122222122222 0422021 0000 +M520190411111119528120070819WTTTPW@P9122222222222 0422051 0000 +M42019041111111960520600405471163113 +M520190411111119605119900107WTTT09PPB12222222222220112121250130000 +M520190411111119605119830119WTTT#ZT0912222212222210212121200000000 +M520190411111119605120100721WTTTYPY#0122222222222 0422021 0000 +M520190411111119605120080626WTTTP0B9Z122222122222 0422041 0000 +M520190411111119605120060703WTTTY@BB9222222222222 0422061 0000 +M42019041111111987620900406421161113 +M520190411111119876119860701WTTT0@0ZW12222122222210112121141160000 +M520190411111119876120120119WTTTP#@#Y122221122222 0422981 0000 +M520190411111119876120100509WTTT09B#@122222122222 0422021 0000 +M520190411111119876120090721WTTTPZW9Z222222122222 0422031 0000 +M520190411111119876120040603WTTT#WTP#122221122222 0422081 0000 +M42019041111111999022700400671163113 +M520190411111119990119810721WTTTP@0@B22222222222210112131128270000 +M520190411111119990120080521WTTTP9@0P122222122222 0422041 0000 +M520190411111119990120060506WTTTY9@W#122222222222 0422071 0000 +M520190411111119990120050612WTTT0@TP0122222222222 0422071 0000 +M42019041111112011622700400671123113 +M520190411111120116119800115WTTTYP0@P22222122222220112131117400550 +M520190411111120116120140716WTTT090#0222221222222 0422981 0000 +M520190411111120116120140716WTTT#TWT0222221222221 0422981 0695 +M42019041111112017621700400981163113 +M520190411111120176119850719WTTT#T0YB22222122222230112111122100292 +M520190411111120176120150121WTTTPT@BP222221122222 0422981 0000 +M520190411111120176120080126WTTT#WB@#222221222222 0422041 0000 +M520190411111120176120060112WTTTYY@9T222221122222 0422061 0000 +M42019041111112021920000403951992113 +M520190411111120219119910102WTTT#BY9B12212222222210112081119440000 +M520190411111120219120120621WTTTY0TY#212122222222 0422981 0000 +M42019041111112045920900403071161113 +M520190411111120459119910709WTTTPT99B12222222222210112131116390000 +M520190411111120459120121119WTTT0@9#@222222122222 0422981 0000 +M42019041111112064920900400501161113 +M520190411111120649119890101WTTTPBYTT12222122222210112121125050050 +M520190411111120649120150119WTTTP0ZT0122121122222 0422981 0000 +M520190411111120649120120115WTTTY@TZ@122222222222 0422981 0000 +M520190411111120649120080123WTTT0TZPZ122221122221 0422041 0684 +M42019041111112065720600401981162113 +M520190411111120657119830708WTTTPWP9B12222222222210112121121100000 +M520190411111120657120110715WTTT#P#@T122222222222 0422011 0000 +M520190411111120657120031123WTTTPW@#W122222222222 0422091 0255 +M42019041111112111620000400131163113 +M520190411111121116119840515WTTTY@ZTY12222222222220112131112150000 +M520190411111121116120160519WTTTYYZ0T222222122222 0422981 0000 +M520190411111121116120130601WTTT09T0P122222222222 0422981 0000 +M520190411111121116120030701WTTT0BYBT122222122222 0422091 0000 +M42019041111112120321100406541163113 +M520190411111121203119900726WTTT09BW@22212222222210112121117300000 +M520190411111121203120140606WTTT#WBY0222122122222 0422981 0000 +M42019041111112132420600400291012113 +M520190411111121324119840126WTTTY#9YP12222222222210112131124260000 +M520190411111121324120110121WTTT#@#0W122222222222 0422021 0000 +M42019041111112152220600402031163113 +M520190411111121522119890601WTTT0P@P#12222222222230112111100000000 +M520190411111121522120160123WTTT##TZ9122222122222 0422981 0000 +M520190411111121522120131118WTTT#@#TY122222222222 0422981 0000 +M42019041111112187521100405971993113 +M520190411111121875119650107WTTTPYWT@22212212222210112111125350000 +M520190411111121875120180501WTTTYY9T@222222222222 0422981 0000 +M520190411111121875120050115WTTTYZ@W@222222122222 0422083 0000 +M42019041111112213420600402661163113 +M520190411111122134119810522WTTTYZY0@22212222222210112111113250400 +M520190411111122134120130102WTTT0YPZ@222222122222 0422981 0000 +M520190411111122134120060101WTTTPWYTT222222222222 0422071 0000 +M520190411111122134120020815WTTT#YP#Y222222122222 0422101 0000 +M42019041111112262620900402921163113 +M520190411111122626119800826WTTT0BT9T22212222222210112131118330000 +M520190411111122626120080101WTTT#Y90@222122122222 0422041 0000 +M520190411111122626120010821WTTT0B0Z@222122222222 0422111 0000 +M42019041111112262820000403721163113 +M520190411111122628119930516WTTT0@##B12222222222210112081126490000 +M520190411111122628120141119WTTT0Y#W9222222222222 0422981 0000 +M520190411111122628120120114WTTTBTTZW222222122222 0422981 0000 +M42019041111112266021100403821163113 +M520190411111122660119790713WTTTBTZ0Z22122222222210112112130760783 +M520190411111122660120180726WTTTY9WBP222222222222 0422981 0000 +M520190411111122660120130616WTTTYT#@9221222122222 0422981 0000 +M520190411111122660120110512WTTT00T@T221222122222 0422011 0000 +M520190411111122660120070802WTTT0Y@9@221222222222 0422051 0000 +M520190411111122660120030515WTTTYWPPZ221222122222 0422101 0000 +M520190411111122660120010102WTTT0WWWW221222122222 0422111 0000 +M42019041111112284221700406831193113 +M520190411111122842119850115WTTTYWBPP12222222222210112121122500000 +M520190411111122842120070606WTTTY@YW#122222222222 0422051 0000 +M520190411111122842120050701WTTTP9BY9122222122222 0422071 0000 +M520190411111122842120020614WTTT09PZ#122222222222 0422101 0000 +M42019051111111112020600405471163113 +M520190511111111120119810606WTTTY9P9B22212222222210112111116970000 +M520190511111111120120140115WTTT0Y99T222122122221 0422981 0885 +M520190511111111120120100707WTTT#PT@Y222122222222 0422021 0000 +M42019051111111180222200405781161113 +M520190511111111802119890606WTTTPB#B#22222122222210112121119370000 +M520190511111111802120130508WTTTPWWBT222222222222 0422981 0000 +M520190511111111802120080503WTTTPBYZ9212222222222 0422041 0000 +M42019051111111180720600405471163113 +M520190511111111807119850109WTTTPWWYT11222122222210112111131760000 +M520190511111111807120180108WTTTYB00B122222122222 0422981 0000 +M520190511111111807120160718WTTT0BW#Y222222222222 0422981 0000 +M520190511111111807120050126WTTTP9B9T222222122222 0422071 0148 +M520190511111111807120030603WTTTYT@WY222222222222 0422091 0148 +M42019051111111192121700404101163113 +M520190511111111921119720601WTTT0909Y22222122222230112111120800000 +M520190511111111921120010113WTTTPTZBZ222222222222 0422111 0085 +M42019051111111208820900404431163113 +M520190511111112088119770601WTTTY@ZT912222222222210112161118190000 +M520190511111112088120110523WTTTPZ@BY122222122222 0422021 0000 +M520190511111112088120080714WTTT0@YY@122221122222 0422041 0000 +M520190511111112088120060519WTTT0#W0T122222122222 0422071 0000 +M520190511111112088120030121WTTTPWP@@122222122221 0422091 0885 +M42019051111111226121700404101993113 +M520190511111112261119950119WTTTBTZ0@12222222222211012111121580000 +M520190511111112261119940821WTTTYY#P#22222112222210112081112770000 +M520190511111112261120160103WTTTYZ#T@122222122222 0422981 0000 +M520190511111112261120130506WTTTP9@9@122222222222 0422981 0000 +M42019051111111229321100406541193113 +M520190511111112293119880101WTTT0Z@0Z12222222222210112111121800000 +M520190511111112293120100126WTTT#@ZP@122222222222 0422021 0000 +M42019051111111231022700400441162113 +M520190511111112310119851108WTTT#B99#22222122222210112121119010000 +M520190511111112310120150515WTTT0Z9#Z222222122222 0422981 0000 +M520190511111112310120110103WTTTP9YZT222221222222 0422021 0000 +M42019051111111314021700405821163113 +M520190511111113140119880609WTTT#@@9T12222222222210112081114660000 +M520190511111113140120140519WTTTPPWY0222222122222 0422981 0000 +M520190511111113140120080612WTTT#Z@BZ122222122222 0422051 0000 +M42019051111111319620000402101163113 +M520190511111113196119900615WTTT#WY#P12222222222230112111119070000 +M520190511111113196120170119WTTT0TYTW122222222222 0422981 0000 +M42019051111111337320600401421163113 +M520190511111113373119710121WTTTP9Y0@12222212222220112112130530000 +M520190511111113373120020819WTTTP0WT9222222222222 0422102 0000 +M42019051111111368022400401011161113 +M520190511111113680119850715WTTTPY#B@22222122222210112121120350000 +M520190511111113680120060818WTTTYBZYW222221222222 0422061 0000 +M520190511111113680120050621WTTT0#00W222221222222 0422081 0000 +M42019051111111373422700403241992113 +M520190511111113734119981101WTTT0YZ9012222222222210112111115530000 +M520190511111113734120160115WTTT#PPB@222222222222 0422981 0000 +M42019051111111380021700404101993113 +M520190511111113800119970103WTTTPBZT912222222222210112081123210000 +M520190511111113800120170701WTTT##BTB122221222222 0422981 0000 +M42019051111111394621100401691162113 +M520190511111113946119890113WTTTPYB9022222122222210112111123680000 +M520190511111113946120140522WTTTP@PZ9122222122222 0422981 0000 +M520190511111113946120140522WTTTYZBT0122222122222 0422981 0000 +M520190511111113946120080608WTTTP0Y#@222222222222 0422051 0000 +M42019051111111401420900402621162113 +M520190511111114014119950621WTTTYZW#B22212212222211012111126620000 +M520190511111114014119921103WTTT#W0#P12222222222210112121112630000 +M520190511111114014120180606WTTT0Z#WY122122122222 0422981 0000 +M42019051111111439820000402281163113 +M520190511111114398119940809WTTTYBZ0922222122222210112131118240000 +M520190511111114398120150708WTTT0BTPY222222222222 0422981 0000 +M42019051111111447922700400671163113 +M520190511111114479119770626WTTT0YW#Z12222222222210112111118240000 +M520190511111114479120080115WTTTYW@0T222222222222 0422041 0000 +M520190511111114479120070106WTTTYP@ZZ122222122222 0422051 0000 +M42019051111111470820600401161162113 +M520190511111114708119800101WTTT0B0Y022212222222210112121124120000 +M520190511111114708120120506WTTTP9Z9T222122122222 0422981 0000 +M42019051111111476621100406001163113 +M520190511111114766119950626WTTT#@B#T22212222222210112081114910000 +M520190511111114766120150509WTTTPPZYP222122222222 0422981 0000 +M520190511111114766120140709WTTTP0Z9@122222122222 0422981 0000 +M42019051111111485220900403071161113 +M520190511111114852119911126WTTT#W00022212222222210112131115740000 +M520190511111114852120160719WTTTBT@BP222122122222 0422981 0000 +M520190511111114852120120723WTTT0#P90222122122222 0422981 0000 +M42019051111111494520600405341163113 +M520190511111114945119811108WTTTY99T922222222222250112111119990000 +M520190511111114945120050108WTTTY9#9P222222122222 0422081 0000 +M520190511111114945120030626WTTT0@TTP222222222222 0422101 0000 +M42019051111111499622400405611161113 +M520190511111114996119890102WTTT#TZW#22212222222210112121128600000 +M520190511111114996120170723WTTT#BZTB222122122222 0422981 0000 +M520190511111114996120130106WTTTYTB@P222122222222 0422981 0000 +M42019051111111500720900403031163113 +M520190511111115007119950601WTTT#0Z#@22212222222210112112126190000 +M520190511111115007120180119WTTT#YZWT222122122222 0422981 0000 +M42019051111111502320600405341162113 +M520190511111115023119740601WTTTPB0P922212222222210112121127290000 +M520190511111115023120080715WTTTY9PBW222122222222 0422041 0000 +M42019051111111504621400400351163113 +M520190511111115046119770101WTTTYW@Y022212222222230112112122940000 +M520190511111115046120121103WTTTYP#0#222222222222 0422981 0000 +M42019051111111554222700400671163113 +M520190511111115542119870806WTTT0B9TT22212212222230112112123940000 +M520190511111115542120130615WTTT#Y@YT222222122222 0422981 0000 +M520190511111115542120110719WTTTY9@9Y222222222222 0422011 0000 +M42019051111111579322700403941013113 +M520190511111115793119880823WTTT00PWB22222122222210112121127300000 +M520190511111115793120150119WTTTY0ZW0222221122222 0422981 0000 +M42019051111111601222700402801163113 +M520190511111116012119870719WTTTYZTW#12222222222210112121124250000 +M520190511111116012120080118WTTTYTTZ@122222122222 0422041 0000 +M520190511111116012120060516WTTT090@P122222122222 0422061 0000 +M520190511111116012120040818WTTT#9YP9122222222222 0422081 0000 +M42019051111111613921700406751163113 +M520190511111116139119750113WTTTYPB0B22222212222220212112119220000 +M520190511111116139219570106WTTT#9WBW22222222222120112111200000885 +M520190511111116139120010709WTTTPTWB@222222122222 0422111 0000 +M42019051111111623721700406341161113 +M520190511111116237119830601WTTTP0TYZ12222222222210112131113100000 +M520190511111116237120170722WTTTPB#Z#122222222222 0422981 0000 +M520190511111116237120160501WTTTYW0Y9222221122222 0422981 0000 +M42019051111111636820600402031163113 +M520190511111116368119801109WTTTYWZ#T12222122222210112121116070000 +M520190511111116368120070601WTTTY@BYW122221222222 0422051 0000 +M520190511111116368120031121WTTTYTW#0122221122221 0422091 0865 +M42019051111111654621100406541163113 +M520190511111116546119940515WTTTP#ZZY12222222222210112082129720000 +M520190511111116546120170713WTTTPZ#0T122222222222 0422981 0000 +M520190511111116546120160514WTTT#ZB@9122222222222 0422981 0000 +M42019051111111696721200404291163113 +M520190511111116967119910101WTTTPP0ZT12222222222210112111122100000 +M520190511111116967120120119WTTT#Z#9#122222122222 0422981 0000 +M520190511111116967120070102WTTTYPPTT122222122222 0422051 0000 +M42019051111111697120900401881161113 +M520190511111116971119980621WTTT0TWB#22212212222210412081120190000 +M520190511111116971119801119WTTTPYZZ022212222222210112131132630000 +M520190511111116971120110121WTTT#Z0@@222122122222 0422011 0000 +M520190511111116971120050115WTTTPT9@#122222222222 0422071 0000 +M520190511111116971120030521WTTTY@T9Z222222122222 0422091 0000 +M42019051111111710321100401181163113 +M520190511111117103119720112WTTT#0T9#22212222222210112081122570000 +M520190511111117103120080106WTTTY#@P0222222122222 0422041 0000 +M520190511111117103120060106WTTT0#YWW222122122222 0422061 0000 +M42019051111111723921100401181161113 +M520190511111117239119720101WTTTY@TZ#12222222222210112121121780000 +M520190511111117239120130106WTTTPW@YT222221122222 0422981 0000 +M42019051111111729122700403941163113 +M520190511111117291119870701WTTTP9PTZ22222122222210112111114290000 +M520190511111117291120131108WTTT00#@Z222221122222 0422981 0000 +M520190511111117291120080119WTTT#090B122221122222 0422041 0000 +M520190511111117291120040601WTTT#PZTZ222221122222 0422091 0000 +M42019051111111731120900403071162113 +M520190511111117311119640606WTTT#0PYW22212222222210112121115720000 +M520190511111117311120060607WTTT#0YWB222122122222 0422061 0000 +M520190511111117311120020615WTTT0B##9222122122222 0422101 0000 +M42019051111111752421700401121163113 +M520190511111117524119890107WTTT##BY922212222222210112111126860000 +M520190511111117524120170816WTTT#WZPP222222122222 0422981 0000 +M42019051111111755520500401731163113 +M520190511111117555119830615WTTTP@YWT22222122222210112121130530000 +M520190511111117555120170115WTTT0#W@P222221122222 0422981 0000 +M520190511111117555120070819WTTTYBYPT222221222222 0422051 0000 +M520190511111117555120040119WTTTYWWTP222221122222 0422081 0000 +M42019051111111760822400402111163113 +M520190511111117608119870115WTTT#B@0922212222222210112121116530000 +M520190511111117608120131126WTTT##9#W222122222221 0422981 0779 +M520190511111117608120070713WTTT#0Z9@222122122222 0422051 0000 +M42019051111111773920000404831161113 +M520190511111117739119940521WTTT#9WZ022212222222210112141114210000 +M520190511111117739120160726WTTTPBWY9222222122222 0422981 0000 +M520190511111117739120140114WTTT#PTWB222122222222 0422981 0000 +M520190511111117739120120503WTTTY0Y@Y222122222222 0422011 0000 +M42019051111111774520600405171163113 +M520190511111117745119930614WTTT0#YYP22212222222210112111119590000 +M520190511111117745120180719WTTT#WP#P222122122222 0422981 0000 +M520190511111117745120140502WTTT0#T0P222122222222 0422981 0000 +M520190511111117745120130502WTTTPTYYY222122122222 0422981 0000 +M42019051111111830822700403941163113 +M520190511111118308119960501WTTTYP0P022212222222210112112119300000 +M520190511111118308120170521WTTT#PY@9222222122222 0422981 0000 +M42019051111111831421100401551163113 +M520190511111118314119900506WTTTYW9PY12222222222210112111122780000 +M520190511111118314120080815WTTTPB9PW122222222222 0422041 0100 +M520190511111118314120070119WTTTPB9PB122222122222 0422051 0100 +M42019051111111833120000401511162113 +M520190511111118331119880102WTTT0PYWB12222222222210112121121730000 +M520190511111118331120130112WTTT##@B@122222222222 0422981 0000 +M520190511111118331120060609WTTTYYZ0Z122222122222 0422061 0000 +M42019051111111842022700400441161113 +M520190511111118420119870716WTTT#YZZY22222222222210112131115840000 +M520190511111118420120130119WTTT0BWWW222121122222 0422981 0000 +M520190511111118420120080121WTTT#09PB222122222222 0422041 0000 +M42019051111111917220000403321163113 +M520190511111119172119680619WTTT00BZW22222122222250112111121210000 +M520190511111119172120060615WTTT0ZT@Y222221122222 0422071 0000 +M42019051111111930922700400671162113 +M520190511111119309119990121WTTT00P0Z22212222222210612981111680000 +M520190511111119309120170101WTTT0YYBZ222122222222 0622981 0000 +M42019051111111946420500404981163113 +M520190511111119464119920808WTTTYP#Y@22222122222210112131123660000 +M520190511111119464120160519WTTT0WWPT222222122222 0422981 0000 +M520190511111119464120100815WTTTYB#W0222221222222 0422021 0000 +M42019051111111964420000404271162113 +M520190511111119644219890122WTTTYBZY012222221222110112081111560801 +M520190511111119644120170102WTTT#BWBZ222222122222 0422981 0000 +M520190511111119644120150707WTTT#Y@PZ122222122222 0422981 0000 +M42019051111111978421700400981161113 +M520190511111119784119880522WTTTY@99Y22212222222210112121120760000 +M520190511111119784120140819WTTT00@BW122122122222 0422981 0000 +M520190511111119784120091114WTTTY@T0P222122122222 0422031 0000 +M42019051111111993621100401181163113 +M520190511111119936119890101WTTT099T912222222222220112121117270000 +M520190511111119936120171107WTTT#T00P122222122222 0422981 0000 +M520190511111119936120070101WTTT#YY#T122222222222 0422051 0000 +M42019051111111997421100405971161113 +M520190511111119974119780508WTTTYY0#T12222222222210112111118150000 +M520190511111119974120180602WTTTP0BWP222222122222 0422981 0000 +M520190511111119974120080115WTTT###PW122222122221 0422041 0761 +M42019051111112065921400400351163113 +M520190511111120659119890512WTTTYB#0B22212222222210112112123680000 +M520190511111120659120180101WTTT#YBWB222222222222 0422981 0000 +M520190511111120659120151123WTTT#YZYZ122222122222 0422981 0000 +M520190511111120659120100701WTTT0900T222222222222 0422021 0000 +M42019051111112089120000404271163113 +M520190511111120891119920714WTTTYPZZT22222122222210112081114820000 +M520190511111120891120150506WTTTPZBWP122122222222 0422981 0000 +M520190511111120891120130819WTTTYTB0#222222122222 0422981 0000 +M42019051111112129920000404041162113 +M520190511111121299119940802WTTT#Z09@22222122222210112111127810000 +M520190511111121299120150123WTTTPZ0T0122221222222 0422981 0000 +M520190511111121299120120123WTTT#Y@ZY122222222222 0422981 0230 +M42019051111112185321700401121161113 +M520190511111121853119860119WTTT#W0WT12222222222210112131115430000 +M520190511111121853120180708WTTT#BB09222222122222 0422981 0000 +M520190511111121853120130113WTTT0WBTT122222222222 0422981 0000 +M42019051111112200422700403611163113 +M520190511111122004119880113WTTT0YBZZ12222222222210112111123400000 +M520190511111122004120120115WTTT#B@B#222222222222 0422011 0000 +M520190511111122004120070506WTTTYBP#W222222122222 0422051 0000 +M42019051111112208320900403031192113 +M520190511111122083219820102WTTTP0YWZ12222122222220212123200000000 +M520190511111122083119800126WTTTPPY@@12222212222220112111118880000 +M520190511111122083120180115WTTTPZ#ZT122222122222 0422981 0000 +M520190511111122083120130121WTTTYPP@Y122222122222 0422981 0000 +M42019051111112212920900406421161113 +M520190511111122129119900819WTTTYTBZW22212222222250112121121590000 +M520190511111122129120190515WTTTYW@Z0222222222222 0422981 0000 +M520190511111122129120160523WTTT#Y@YY222122122222 0422981 0000 +M520190511111122129120100701WTTTYZPZ9122122122222 0422021 0000 +M42019051111112213320600400871163113 +M520190511111122133119910708WTTT##YBY22222122222210112121116910000 +M520190511111122133120150708WTTT0BWYZ222221222222 0422981 0000 +M520190511111122133120111103WTTTYTTWW222221222222 0422011 0000 +M42019051111112217221100406001163113 +M520190511111122172119820702WTTT#Y#B#12222222222210112121117560000 +M520190511111122172120160115WTTT#PYPP122222122222 0422981 0000 +M520190511111122172120110703WTTT##W0#122221222222 0422011 0000 +M520190511111122172120070115WTTTPPWYT122222122222 0422051 0000 +M42019051111112233520600405771163113 +M520190511111122335119870614WTTT0#@T912222122222210112111126740400 +M520190511111122335120180115WTTT#00T#222222122222 0422981 0000 +M520190511111122335120140621WTTT0WBTW122221122222 0422981 0000 +M520190511111122335120080601WTTT0W@B9122221222222 0422051 0000 +M42019051111112292122400405111992113 +M520190511111122921119840115WTTTYZ9#912222122222210112121121650000 +M520190511111122921120130119WTTTBT@W@122122122222 0422981 0000 +M520190511111122921120040114WTTT#YZTW122221222222 0422081 0000 +M42019051111112294122400400881163113 +M520190511111122941119960713WTTTYPBZY22212122222210112111112350000 +M520190511111122941120160501WTTT#T@#W222121122222 0422981 0000 +M42019061111111114821100406001161113 +M520190611111111148119850526WTTT#P#W#12222222222210112121121910000 +M520190611111111148120160119WTTT##YY0222222122222 0422981 0861 +M520190611111111148120110116WTTTPYZ@Z222222122222 0422011 0000 +M520190611111111148120070115WTTTP#TB@122222222222 0422051 0000 +M520190611111111148120040821WTTT0ZTTT122222122221 0422081 0484 +M42019061111111168420600405341163113 +M520190611111111684119900723WTTTYY0PT22222222222210112111123430000 +M520190611111111684120160103WTTTP#@WZ122221222222 0422981 0000 +M42019061111111181121100404791162113 +M520190611111111811119850123WTTTYYBW022212222222220112121130010500 +M520190611111111811120150601WTTT#P##@222122122222 0422981 0000 +M520190611111111811120120126WTTTY@W09222122122222 0422981 0000 +M520190611111111811120100115WTTT0009P222122122222 0422021 0000 +M520190611111111811120070707WTTTYBT9Z222122222222 0422051 0000 +M42019061111111187222700403941163113 +M520190611111111872119840609WTTTP9#ZP22222122222210112111124940000 +M520190611111111872120070518WTTT#B@T#222221222222 0422051 0000 +M520190611111111872120060126WTTT##B0Z222221222222 0422061 0000 +M520190611111111872120040512WTTTYBTB0222221222222 0422081 0000 +M42019061111111204722400406441162113 +M520190611111112047119770515WTTTY0@0022212222222210112131122070000 +M520190611111112047120060701WTTT#Y@@Y222122122222 0422061 0000 +M42019061111111224522400405581161113 +M520190611111112245119780115WTTT#BWB012222122222210112131135420000 +M520190611111112245120110801WTTTPPP@#122221222222 0422011 0000 +M520190611111112245120090602WTTT###@W122222222222 0422031 0000 +M520190611111112245120030501WTTT#@TYZ122222222222 0422101 0503 +M42019061111111248721100405971163113 +M520190611111112487119910615WTTTPB9@T12222222222210112111121670000 +M520190611111112487120160501WTTTPZW9Y122222122222 0422981 0000 +M520190611111112487120100109WTTTYBY0W122222122222 0422031 0000 +M520190611111112487120080103WTTT0W#@B122222122222 0422041 0000 +M42019061111111256122700400441163113 +M520190611111112561119901122WTTT09YP@22212222222210112131126990000 +M520190611111112561120150803WTTT##0@T222122122222 0422981 0000 +M42019061111111308522200405781161113 +M520190611111113085119880606WTTT#P9W922222122222210112111118410000 +M520190611111113085120130802WTTT0T9#0222221222222 0422981 0000 +M520190611111113085120110501WTTTY@Y9W222221222222 0422011 0000 +M42019061111111315721700405821163113 +M520190611111113157119791102WTTTPWYP912222212222210112111126250000 +M520190611111113157120050626WTTTPP0WP122222222222 0422071 0000 +M520190611111113157120030721WTTT0P@P0122222122222 0422091 0000 +M520190611111113157120020715WTTTP#TB9122222122222 0422101 0000 +M42019061111111316120000402101163113 +M520190611111113161119730118WTTTP@@B022212222222220212082121520000 +M520190611111113161119660118WTTT#ZBY@22212212222220112982121170000 +M520190611111113161120100109WTTT#@PZZ222122122222 0422032 0000 +M520190611111113161120080715WTTT0@WP0222122222222 0422042 0000 +M520190611111113161120060115WTTTP@#Z9222122222222 0422072 0000 +M520190611111113161120040506WTTT00@@T222122122222 0422092 0000 +M520190611111113161120020506WTTT0YTP0222122222222 0422112 0000 +M42019061111111350020900404651163113 +M520190611111113500119950503WTTT0YZWP12222222222210112081137500000 +M520190611111113500120170623WTTTPW9W#122222122222 0422981 0000 +M520190611111113500120140503WTTTY@09T122122222222 0422981 0000 +M42019061111111354920000406011163113 +M520190611111113549119940601WTTTYYZW022222122222210112111119720000 +M520190611111113549120130602WTTT0P#WB222222222222 0422981 0000 +M520190611111113549120110523WTTTPY#TB222221122222 0422011 0000 +M42019061111111359522700405651163113 +M520190611111113595119910606WTTTYYBB922222122222210112121114960000 +M520190611111113595120140121WTTTPZWY@222221222221 0422981 0885 +M42019061111111361422700403941162113 +M520190611111113614119830521WTTTBT@9Z22222122222210112121128290000 +M520190611111113614120160603WTTT#90ZZ222221122222 0422981 0319 +M520190611111113614120120715WTTT#W0P0222221222222 0422981 0319 +M520190611111113614120050106WTTT#9#B#222221122222 0422081 0000 +M42019061111111367621700404401163113 +M520190611111113676119910708WTTTYYWW@22222122222210112111119260000 +M520190611111113676120100126WTTT#TYWP222221222222 0422021 0000 +M42019061111111397120900406421163113 +M520190611111113971119850103WTTT#0TYB12222222222210112111121210000 +M520190611111113971120030714WTTTYZB0W122222222222 0422091 0000 +M42019061111111416020600405771161113 +M520190611111114160119910119WTTTP@##912222222222210112111111750000 +M520190611111114160120150826WTTTY@9T@122221122222 0422981 0000 +M520190611111114160120101102WTTT0YPBT122221222222 0422021 0000 +M42019061111111439421700406831162113 +M520190611111114394119910103WTTTYY@9Z22222122222210112121127680000 +M520190611111114394120140723WTTTYY#@@222222222222 0422981 0000 +M520190611111114394120120515WTTTPTTT0222222222222 0422011 0000 +M520190611111114394120100721WTTTPY0PW222222222222 0422021 0000 +M42019061111111446120900401881161113 +M520190611111114461119890506WTTTYPWZP22212222222250112121120060000 +M520190611111114461120120107WTTT0Z0T#222222122222 0422981 0000 +M520190611111114461120090726WTTTYPPBT122122122222 0422031 0000 +M520190611111114461120080613WTTT0PZ#9222122122222 0422051 0000 +M520190611111114461120060718WTTT#9TBB222122222222 0422061 0000 +M42019061111111458020600404951163113 +M520190611111114580119920115WTTTPZZW@22222122222210112131122650000 +M520190611111114580120130607WTTT0ZYY#222221222222 0422981 0000 +M42019061111111464220900402921162113 +M520190611111114642119830521WTTT0Z@P022212222222210112112121290000 +M520190611111114642119810721WTTTY9BYP22212212222211012112117440000 +M520190611111114642120130516WTTT#BYB@222122222222 0422981 0000 +M520190611111114642120110526WTTT0#B99222222222222 0422021 0000 +M520190611111114642120060718WTTTP@Y@W222122222222 0422063 0000 +M42019061111111474121200404541161113 +M520190611111114741119960101WTTT##B@012222222222210112121125440000 +M520190611111114741120130619WTTTP#0ZT122222122222 0422981 0000 +M42019061111111484620600403781163113 +M520190611111114846119870601WTTTYBY9@22222122222210112111119170000 +M520190611111114846120130702WTTTYZT##222221222222 0422981 0000 +M520190611111114846120090512WTTT0W99Y222221222222 0422041 0000 +M520190611111114846120070806WTTT#TW#@222221222222 0422051 0000 +M42019061111111487521700405121161113 +M520190611111114875119760103WTTTYTZWW12222222222220112111134660000 +M520190611111114875120090714WTTTPW@00222222122222 0422031 0000 +M520190611111114875120040123WTTT09W@T222221122222 0422091 0000 +M42019061111111488920600405341013113 +M520190611111114889119920519WTTT#0@9T22212222222210112111126740000 +M520190611111114889120140126WTTTY0WW#222222222222 0422981 0000 +M42019061111111509722400402111013113 +M520190611111115097119780114WTTT00@YP22212222222250112111137730000 +M520190611111115097120120519WTTTYP#W9222221222222 0422981 0000 +M520190611111115097120090515WTTTYWZ0Z222221222222 0422031 0000 +M520190611111115097120080116WTTT#T@Z0222221122222 0422051 0000 +M42019061111111509821100401541162113 +M520190611111115098119860819WTTT#Z#0W22222122222210112121130000000 +M520190611111115098120140112WTTTP0YBP222221122222 0422981 0000 +M520190611111115098120100121WTTTP90#Y222221122222 0422031 0000 +M520190611111115098120060106WTTT#9@B#222221222222 0422061 0000 +M42019061111111529622700400681162113 +M520190611111115296119860722WTTT##W0@12222122222210112111100000000 +M520190611111115296120030116WTTT#ZTBP122221122222 0422101 0000 +M42019061111111553220600402981161113 +M520190611111115532119880101WTTTPZ09@12222222222210112141100000000 +M520190611111115532120131121WTTT#0YYP122222122222 0422981 0000 +M520190611111115532120111106WTTTP9BT9122221222222 0422011 0000 +M42019061111111561021700404181163113 +M520190611111115610119880101WTTT09Z9Y22222122222250112131127410000 +M520190611111115610120180102WTTTPTT#T222221122222 0422981 0000 +M520190611111115610120120623WTTTYWY0T222221122222 0422981 0000 +M42019061111111584021100406391163113 +M520190611111115840119920619WTTTYP9TY22222122222210112121113940000 +M520190611111115840120170714WTTT#0@Z#222221122222 0422981 0000 +M42019061111111602320300401761162113 +M520190611111116023119900506WTTTP@YB922222122222210112111124770000 +M520190611111116023120130121WTTTP9Z@#222221222222 0422981 0000 +M42019061111111602822700403941163113 +M520190611111116028119910126WTTT0WYP#22222122222210112121116130000 +M520190611111116028120170809WTTTP#99@222222222222 0422981 0000 +M520190611111116028120130116WTTTPWYBW222221222222 0422981 0000 +M42019061111111622222700403241163113 +M520190611111116222119780119WTTT0#@W@22222122222210112121121110000 +M520190611111116222120030615WTTT#T0@#222221122222 0422101 0000 +M42019061111111662222700402581162113 +M520190611111116622119880826WTTT#B@TB22222122222210112111112730000 +M520190611111116622120130603WTTT0YTT0222222222222 0422981 0000 +M42019061111111700922700403941163113 +M520190611111117009119900103WTTT0B0#922212222222210112121122830000 +M520190611111117009120151116WTTTPZZ#W222122222222 0422981 0000 +M520190611111117009120120115WTTT0@@BW222122222222 0422981 0000 +M520190611111117009120120118WTTTY@@@P222122122222 0422011 0000 +M42019061111111720920000404071163113 +M520190611111117209119810701WTTT###Z012222222222250112112126470000 +M520190611111117209120120116WTTT#B9#@122222222222 0422981 0000 +M520190611111117209120070101WTTT#WWW9122222122222 0422061 0000 +M520190611111117209120050116WTTT#@WZB122222122222 0422081 0000 +M42019061111111742520900400501162113 +M520190611111117425119900623WTTTYY@WW12222222222210112121122930000 +M520190611111117425120180615WTTTY000T122221122222 0422981 0000 +M520190611111117425120130819WTTT#TBP#222222122222 0422981 0000 +M520190611111117425120100619WTTT#ZZW9122222222222 0422021 0000 +M520190611111117425120070502WTTTPWYYP222221122222 0422051 0000 +M42019061111111755220000402281162113 +M520190611111117552119850106WTTTYTTBZ22222122222210112121113320000 +M520190611111117552120160706WTTTP0ZPZ122221222222 0422981 0000 +M520190611111117552120130107WTTT#9@@Z222221122222 0422981 0000 +M520190611111117552120080115WTTTPYYT0222221122222 0422041 0000 +M42019061111111768420600400291163113 +M520190611111117684119890719WTTT#T0@B22222122222210112111114510000 +M520190611111117684120170821WTTTBT@TZ222221222222 0422981 0000 +M520190611111117684120160126WTTT#0#ZY222221222222 0422981 0000 +M42019061111111776821700404611162113 +M520190611111117768119940608WTTT#WT#022212222222220112121118330000 +M520190611111117768120171101WTTT#PTW9222122222222 0422981 0000 +M42019061111111901221100406001161113 +M520190611111119012119860815WTTTPB0TP12222222222210112131133040000 +M520190611111119012120150621WTTTYZ##@222222222222 0422981 0000 +M520190611111119012120140102WTTTP@PTP122122122222 0422981 0000 +M520190611111119012120070713WTTT##PP#222222222222 0422051 0000 +M520190611111119012120051102WTTT0WWTZ122222122222 0422071 0000 +M42019061111111904420000400131163113 +M520190611111119044119880119WTTT##@PY22222122222210112111126490000 +M520190611111119044120160501WTTTPZWWT222222222222 0422981 0000 +M42019061111111906120900401881163113 +M520190611111119061119800101WTTTY90TW22222222222210112131100000000 +M520190611111119061120130815WTTTPT@WT222122222222 0422981 0000 +M520190611111119061120110507WTTTP##B@222122222222 0422021 0000 +M42019061111111950021100406541163113 +M520190611111119500119840619WTTT0@9@Z12222222222230112112121520000 +M520190611111119500120150103WTTTP9TTW122222122222 0422981 0000 +M520190611111119500120070701WTTT09TWZ122222222222 0422051 0000 +M42019061111111997322700403611163113 +M520190611111119973119730826WTTT0T#Y#22222122222210112121121070000 +M520190611111119973120030121WTTTYTYB0222221222222 0422101 0080 +M42019061111111997720900400501161113 +M520190611111119977219821118WTTTPZPT@22222222222210112113200000000 +M520190611111119977119770615WTTTPPZTY22212222222220212111121480000 +M520190611111119977120190519WTTTYTZ@Z222222122222 0422981 0000 +M520190611111119977120160602WTTT0Y#9Y222222222222 0422981 0000 +M42019061111112009621100403821163113 +M520190611111120096119770608WTTTYP0@Z12222222222210112081132360000 +M520190611111120096120060614WTTTYZZ@P222122222222 0422071 0000 +M42019061111112009820900403031163113 +M520190611111120098119730713WTTTY099P22212222222220112123120350000 +M520190611111120098120110116WTTTY@WTB222122122222 0422021 0000 +M42019061111112013121100403821163113 +M520190611111120131119801107WTTT0TPYW12222222222210112121115390000 +M520190611111120131120160726WTTTYY@T0222222122222 0422981 0000 +M520190611111120131120150113WTTT#0W0Y222222222222 0422981 0000 +M520190611111120131120030116WTTT##99Z122222122222 0422101 0000 +M42019061111112019821100402441993113 +M520190611111120198119800718WTTTPT0@@22222122222210112111118850000 +M520190611111120198120160616WTTT0BWZY222221122222 0422981 0000 +M520190611111120198120120121WTTT#YWPY222221122222 0422011 0000 +M42019061111112046522400401481163113 +M520190611111120465119830702WTTTPZ0@@22222122222210112111118870000 +M520190611111120465120130719WTTT#Y9TT222222122221 0422981 0412 +M520190611111120465120090618WTTT#TPZ@222221122222 0422041 0000 +M42019061111112051221400405981163113 +M520190611111120512119740614WTTTPBTPZ22222122222230112121117330000 +M520190611111120512120080513WTTT#TTT@222221222222 0422051 0000 +M520190611111120512120050803WTTT0WT9Z222221222222 0422071 0000 +M42019061111112081620900406601162113 +M520190611111120816119890519WTTT0YZ@#12222222222210112141110400000 +M520190611111120816120140521WTTTP@ZYZ222222222222 0422981 0000 +M42019061111112108420500406931161113 +M520190611111121084119820721WTTTP0ZTP22222122222210112121116950000 +M520190611111121084120180101WTTT0BZPB122221122221 0422981 0712 +M520190611111121084120030112WTTT0@ZZ0222221122221 0422101 0639 +M42019061111112111120000404071163113 +M520190611111121111119820103WTTTY#00912222122222230112121124310000 +M520190611111121111120050123WTTT0B#WB122222222222 0422081 0000 +M42019061111112165920900400501162113 +M520190611111121659119860126WTTTYZ#WT22222122222210112111120880000 +M520190611111121659120140519WTTTP9YB0222221222222 0422981 0000 +M520190611111121659120090602WTTT#PYTZ222221222222 0422041 0000 +M520190611111121659120060508WTTT0PYPZ222221222222 0422071 0000 +M520190611111121659120030509WTTT#PBTY222221122222 0422101 0000 +M42019061111112194320000402281161113 +M520190611111121943119680707WTTT0WTTW22212222222210112131123560000 +M520190611111121943120091116WTTTP00@B222122222222 0422031 0000 +M42019061111112194920900406421161113 +M520190611111121949219771119WTTT0TWYT22222212222220222113200000000 +M520190611111121949119720119WTTT0YTYZ12222222222210112121118200000 +M520190611111121949120070623WTTTP@@@9122221122222 0422061 0000 +M42019061111112207120600400871163113 +M520190611111122071119960113WTTT#0WZ012222122222210112111103850925 +M520190611111122071120190519WTTTPP9TB122222122222 0422981 0000 +M520190611111122071120170708WTTT0P@#P222222122222 0422981 0000 +M42019061111112214920900406151162113 +M520190611111122149119700623WTTT##ZZP12222222222210112121122300000 +M520190611111122149120100615WTTTPPT0Z222122122222 0422031 0000 +M42019061111112230220900401881161113 +M520190611111122302119770709WTTT00#0Y12222222222210112111118020000 +M520190611111122302120100603WTTTPPB0P122222222222 0422031 0000 +M520190611111122302120060601WTTT#@0TY122222122222 0422061 0000 +M520190611111122302120040122WTTTYZWZ9122222122222 0422091 0000 +M42019061111112234221100406001163113 +M520190611111122342119870706WTTTY@@9Z12222122222210112111129460000 +M520190611111122342120160112WTTT#PY#Z122222222222 0422981 0000 +M520190611111122342120070809WTTT#9ZP0122222122222 0422051 0000 +M42019061111112234920900406151163113 +M520190611111122349119950806WTTT0009W12222222222210112111120800000 +M520190611111122349120170723WTTT09TZZ122222222222 0422981 0000 +M42019061111112238720600400291163113 +M520190611111122387119820723WTTT#9@@W22212122222230112161126240000 +M520190611111122387120090603WTTT#YTW@222122122222 0422041 0000 +M42019061111112248620600400431163113 +M520190611111122486119830701WTTTYYYYP22222122222210112121117240000 +M520190611111122486120180614WTTTP@TTW222222122222 0422981 0000 +M42019061111112295820600401981993113 +M520190611111122958119880801WTTTPYYP#12222222222210112141122810130 +M520190611111122958120050718WTTTPTZZZ122221122222 0422071 0000 +M520190611111122958120040106WTTTYP@0P122221122222 0422091 0000 +M42019071111111125720900404621163113 +M520190711111111257119830602WTTTYP00P22122222222220112121113200000 +M520190711111111257119810626WTTTYYTPY22122212222220212111122500000 +M520190711111111257120170108WTTT0Z0BY222222122222 0422981 0000 +M520190711111111257120120119WTTT#B@P9221222222222 0422981 0000 +M520190711111111257120100103WTTT0@B9Y221222222222 0422021 0000 +M520190711111111257120090115WTTTPBBZ@221222222222 0422041 0000 +M520190711111111257120070719WTTT#T@T9221222222222 0422051 0000 +M42019071111111127322400406121163113 +M520190711111111273119680509WTTT0Z0T@21212222222210112121121700000 +M520190711111111273120050115WTTT##PY@222122222222 0422081 0000 +M520190711111111273120020102WTTT0ZZ9B222122222222 0422101 0000 +M42019071111111130321700406831162113 +M520190711111111303119970122WTTTYWZB012222222222210112081119410000 +M520190711111111303120180801WTTT#YPW0222222122222 0422981 0000 +M520190711111111303120150619WTTTYW0@Y122221222222 0422981 0000 +M42019071111111150421100401691161113 +M520190711111111504119860515WTTT00@@W12222122222210112131127730000 +M520190711111111504120120518WTTT0Y@09122221222222 0422981 0000 +M520190711111111504120070518WTTT09BB@122221122222 0422051 0000 +M520190711111111504120020114WTTTPW0ZW122222122222 0422101 0150 +M42019071111111150621700405821161113 +M520190711111111506119770615WTTT0PTYW12222122222250112141125690000 +M520190711111111506120090622WTTT#B@9B122222122222 0422041 0000 +M520190711111111506120070718WTTTPW9@T122222122222 0422061 0000 +M520190711111111506120030115WTTT00ZW0122222222222 0422101 0000 +M42019071111111166322700403941161113 +M520190711111111663119790115WTTT#YZBP22212222222230112131123110000 +M520190711111111663120050101WTTTYZZ#@222122122222 0422081 0000 +M42019071111111200920000403951163113 +M520190711111112009119790812WTTT00@ZB22212222222220212112300000000 +M520190711111112009119510602WTTTPBY#922212211222220112111123950968 +M520190711111112009120170515WTTTYBBPB222222122222 0422981 0131 +M520190711111112009120130101WTTTY@PZW222122122222 0422981 0142 +M520190711111112009120091101WTTT#BWZT222122222222 0422031 0142 +M520190711111112009120061108WTTTY#BTY222122222222 0422061 0142 +M42019071111111205820300403511163113 +M520190711111112058119920521WTTT#Z9W022212122222210112121111010000 +M520190711111112058120180521WTTTY9ZPB222222122222 0422981 0000 +M520190711111112058120140807WTTT#TB@9222221222222 0422981 0000 +M42019071111111214921700404101163113 +M520190711111112149119920114WTTTPPYTY12222222222210112111116580000 +M520190711111112149120100101WTTTYBP0T122221222222 0422031 0000 +M42019071111111224121700406831993113 +M520190711111112241119800115WTTT0WP0Y22222222222210112111128020000 +M520190711111112241120100721WTTT#BB@#222221122222 0422021 0000 +M42019071111111281322200404211163113 +M520190711111112813119910818WTTTYTZ9B22222122222210112111118290000 +M520190711111112813120140714WTTTY@BZ9222222222222 0422981 0000 +M520190711111112813120110115WTTTP@PZY222221122222 0422011 0000 +M42019071111111290820000403011163113 +M520190711111112908119950723WTTT#T0#B22212222222210112111119380000 +M520190711111112908120150509WTTT#B@@0222222122222 0422981 0000 +M42019071111111291320600402201163113 +M520190711111112913119790119WTTTYYP9B22222122222210112111125350000 +M520190711111112913120130701WTTTBTT9B222221222222 0422981 0000 +M42019071111111318721100401181163113 +M520190711111113187119810126WTTTY9WY@12222222222230112112120190000 +M520190711111113187120080101WTTTPZY0W122222222222 0422042 0000 +M520190711111113187120050809WTTTP0Z00122222222222 0422072 0000 +M42019071111111319520000404071162113 +M520190711111113195119810501WTTT#@YBZ12222222222210112111128640000 +M520190711111113195120101122WTTT0@@@Z122222122222 0422021 0000 +M520190711111113195120050701WTTTP@B9@122222222222 0422071 0000 +M520190711111113195120030102WTTT#BT9Y122222222221 0422101 0471 +M520190711111113195120020119WTTT0##P@122222222222 0422111 0000 +M42019071111111321422400405111161113 +M520190711111113214119840821WTTTYZPZB12222222222250112111123740000 +M520190711111113214120120122WTTT#@@@P122221222222 0422981 0000 +M520190711111113214120080101WTTTYWPB#122221122222 0422051 0000 +M520190711111113214120030506WTTT#PP@B122222122222 0422101 0000 +M42019071111111330022400400961162113 +M520190711111113300119860703WTTTY@TP@22222122222210112121117070000 +M520190711111113300120150113WTTTYP#P@222221222222 0422981 0000 +M520190711111113300120100108WTTT#W9W@222221122222 0422021 0000 +M520190711111113300120071112WTTTP#YTT222221222222 0422051 0329 +M520190711111113300120050626WTTT0B0Z#222221122222 0422081 0000 +M42019071111111364021100401461163113 +M520190711111113640119900626WTTTYYPW#22222122222210112121125990000 +M520190711111113640120170121WTTT#9B0W122222222222 0422981 0000 +M520190711111113640120170121WTTTPZ9YT122222222222 0422981 0000 +M42019071111111389820600401981161113 +M520190711111113898119770615WTTT0T@@Y12222222222220112081120190000 +M520190711111113898120060501WTTTP0ZZB122222222222 0422061 0000 +M520190711111113898120040603WTTT0#0PT122222122222 0422091 0000 +M42019071111111394021400401581161113 +M520190711111113940119940113WTTT#B#BT22222122222210112121100000000 +M520190711111113940120170723WTTTPB90W222222222222 0422981 0000 +M520190711111113940120130501WTTT##9W@222221122222 0422981 0000 +M520190711111113940120110723WTTT0WT0Y222221122222 0422011 0000 +M42019071111111399122400400231163113 +M520190711111113991119851118WTTT0Y@BY22212222222230112112123590000 +M520190711111113991120160116WTTT0WWYY222122222222 0422981 0000 +M42019071111111399620900401881163113 +M520190711111113996119731106WTTT0WY#T22212222222210112111122120000 +M520190711111113996120020113WTTT#WY@Y222122222222 0422101 0000 +M42019071111111457220900406601011113 +M520190711111114572119780601WTTTYZW@T22222222222250112111120810000 +M520190711111114572120060603WTTTY@Z9#222222222222 0422071 0000 +M42019071111111483620900406131163113 +M520190711111114836119960616WTTT#@BTW12222222222210112112122180000 +M520190711111114836120180122WTTT0@ZWB122221122222 0422981 0000 +M520190711111114836120160615WTTTYZ@T0122222122222 0422981 0000 +M42019071111111508120600401981163113 +M520190711111115081119890615WTTT0TB@922222122222230112121126270000 +M520190711111115081120150119WTTTPPWP@122221122222 0422981 0000 +M520190711111115081120120123WTTT#ZTTZ122222222222 0422981 0000 +M520190711111115081120110806WTTTPBY##222222222222 0422011 0000 +M520190711111115081120070121WTTTYBB#@222122122222 0422061 0000 +M42019071111111536920900400391161113 +M520190711111115369119730726WTTT#PZPW22212222222230112121117710000 +M520190711111115369120131103WTTTYPWZB222122222222 0422981 0000 +M42019071111111551321700402341163113 +M520190711111115513119901122WTTTYTBPZ22222222222210112111126840000 +M520190711111115513120160112WTTTYWPZY122222222222 0422981 0000 +M520190711111115513120080109WTTTY@090222122222222 0422041 0000 +M42019071111111556022700402801161113 +M520190711111115560119800821WTTTYYBBW22222122222210112111119570000 +M520190711111115560120130602WTTT0Y90P222221122222 0422981 0000 +M42019071111111565320600405471163113 +M520190711111115653119841101WTTT000@Y22222112222210112121115890000 +M520190711111115653120070123WTTT#P9B0222221222222 0422051 0000 +M42019071111111577720600405171193113 +M520190711111115777119920526WTTT##9YZ12222222222210112121100000000 +M520190711111115777120120626WTTTY0WY0122222122222 0422011 0000 +M42019071111111605020900406421161113 +M520190711111116050119810101WTTT0W9@T12222222222210112111117390000 +M520190711111116050120150721WTTT0YB0Z222222122222 0422981 0000 +M520190711111116050120060123WTTTP#PW0122222122222 0422061 0000 +M520190711111116050120020802WTTT0BB#9122222122222 0422101 0000 +M42019071111111627720600402981013113 +M520190711111116277119880619WTTT0ZYPW22212222222210112141124930000 +M520190711111116277120180101WTTT#@@0B222222122222 0422981 0000 +M42019071111111629721200406661163113 +M520190711111116297119910623WTTT#ZTBZ22222122222210112121124150000 +M520190711111116297120170701WTTT#Y0#0222221222222 0422981 0000 +M520190711111116297120140115WTTTY@ZP0222221222222 0422981 0000 +M42019071111111629921100406391162113 +M520190711111116299119760823WTTT#0Z@#12222221222210112121112420817 +M520190711111116299120130722WTTT00W@9222222122222 0422981 0153 +M520190711111116299120110715WTTT#YB##222222222222 0422011 0153 +M42019071111111642921400403091163113 +M520190711111116429119950712WTTTYWYZT22222122222210112111126480000 +M520190711111116429120150123WTTTYWBW@222221122222 0422981 0000 +M42019071111111643321100405971163113 +M520190711111116433119920826WTTT#WP9012222222222220112121130490000 +M520190711111116433120130116WTTT##Y0B122222222222 0422981 0000 +M520190711111116433120101115WTTT#Z@Y0122222222222 0422021 0000 +M520190711111116433120060801WTTTPWW0@122222122222 0422061 0000 +M42019071111111654321700401221163113 +M520190711111116543119850723WTTTPPP9P22222112222210112121126980000 +M520190711111116543120120702WTTTY##9#222221222222 0422981 0000 +M42019071111111692820600401151163113 +M520190711111116928119730526WTTT#@Z9Z12222212222210112082118860000 +M520190711111116928120011101WTTT00W@W122222222222 0422112 0000 +M42019071111111702221400406791163113 +M520190711111117022119770515WTTT#WYW922212222222220112112117100000 +M520190711111117022120100502WTTT#P@@Y222122122222 0422022 0000 +M42019071111111705321100403821013113 +M520190711111117053119680815WTTTY#0PB12222222222210112111123511500 +M520190711111117053120020121WTTT0Y@TT122222122222 0422111 0000 +M42019071111111723621100405971013113 +M520190711111117236119840513WTTTYPY#@22222222222210112111131580000 +M520190711111117236120180115WTTTPZ9TY222222222222 0422981 0000 +M520190711111117236120120616WTTTPP@ZZ222222122222 0422011 0000 +M520190711111117236120080501WTTTYT#9@122222222222 0422051 0580 +M42019071111111757621100406391163113 +M520190711111117576119820615WTTT#B@YY22222121222230112121113970916 +M520190711111117576120130715WTTT0WW#B122222122222 0422981 0128 +M520190711111117576120081119WTTT0Y0WP122222122222 0422041 0064 +M520190711111117576120010719WTTTY9YP9222221122222 0422111 0064 +M42019071111111771021700404101162113 +M520190711111117710119850823WTTT#WB0@12222122222210112111119350000 +M520190711111117710120080707WTTT0ZPBW122221222222 0422041 0000 +M520190711111117710120050101WTTT009PY122221222222 0422081 0000 +M520190711111117710120030115WTTTPWTB0122221222222 0422091 0000 +M42019071111111777020000401371163113 +M520190711111117770119890701WTTTP#ZBT22222122222210112131117700000 +M520190711111117770120140614WTTTPYT@9222222122222 0422981 0000 +M42019071111111892020900403431162113 +M520190711111118920119800102WTTT#B9WW22212222222210112111114740000 +M520190711111118920120130502WTTT##WBB222122122222 0422981 0000 +M520190711111118920120010726WTTT#9#Z9222122222222 0422111 0000 +M42019071111111902621400406791163113 +M520190711111119026119990106WTTT#0ZP@22222122222210112131300000000 +M520190711111119026219890113WTTTP9ZP922222112222111012121119180724 +M520190711111119026120190122WTTTYP99Y222221122222 0422981 0000 +M42019071111111914622700402231162113 +M520190711111119146119860123WTTTY@@B912222222222210112111125020000 +M520190711111119146120120815WTTT#ZTBY222222222222 0422981 0000 +M520190711111119146120040106WTTT#9@ZP122222122222 0422091 0000 +M42019071111111919921100402161013113 +M520190711111119199119770819WTTT0Y@W#22212222222230112141141930000 +M520190711111119199120140515WTTTYY9P@222122122222 0422981 0000 +M520190711111119199120110113WTTT099TP222122122222 0422021 0000 +M520190711111119199120080502WTTTY0@PP222122222222 0422051 0000 +M520190711111119199120050123WTTTP#YZT222122122222 0422071 0000 +M520190711111119199120030613WTTT0T#Y0222122122222 0422101 0000 +M42019071111111924821700405821162113 +M520190711111119248119940119WTTT#YTP#22212222222210112131122740000 +M520190711111119248120150619WTTT009WB222222222222 0422981 0000 +M42019071111111938022700400671013113 +M520190711111119380119930608WTTTYY@9@22222122222210112121121330000 +M520190711111119380120130606WTTTY@WPY222221122222 0422981 0000 +M42019071111111979122700406761161113 +M520190711111119791119940715WTTT#T@0022222122222210112121116030000 +M520190711111119791120150126WTTT#BPTT222222122222 0422981 0000 +M42019071111111998621100404791163113 +M520190711111119986119890708WTTTPWWTT22222122222210112111237260000 +M520190711111119986119871119WTTT##YT#12222212222210212121200000000 +M520190711111119986120150121WTTT#WT9T122221222222 0422981 0000 +M520190711111119986120130701WTTT#WPBZ222222122222 0422981 0000 +M520190711111119986120080806WTTT0WY#B222221122222 0422041 0000 +M42019071111112015420900401031161113 +M520190711111120154119780107WTTTPB09P22212222222210112111112520000 +M520190711111120154120140103WTTTPP9#T222122122222 0422981 0000 +M520190711111120154120080116WTTT0WPP9222122122222 0422041 0000 +M42019071111112026320600405471163113 +M520190711111120263119920713WTTTY0ZYW12222222222210112111116150000 +M520190711111120263120171103WTTTYTW#P222221122222 0422981 0000 +M520190711111120263120150719WTTT0PP#9122221122222 0422981 0000 +M520190711111120263120120106WTTTPT0YW222222222222 0422011 0000 +M520190711111120263120101126WTTT#BTWP222222122221 0422021 0885 +M42019071111112034820900402621161113 +M520190711111120348119720715WTTT0@Z@T12222222222210112131126010000 +M520190711111120348120030712WTTTY@YYB122222222222 0422091 0000 +M42019071111112075221100403821162113 +M520190711111120752119810106WTTTYT9YY12222222222210112111130220000 +M520190711111120752120120116WTTTY0YWY122222122222 0422011 0000 +M520190711111120752120060815WTTTPZY#T122222122222 0422061 0000 +M520190711111120752120030623WTTTPP09Z122222122222 0422101 0000 +M42019071111112080020000400131163113 +M520190711111120800119890709WTTT#TYB@22222122222210112121117390000 +M520190711111120800120100816WTTTP@@0T222221222222 0422021 0000 +M42019071111112156020600405471193113 +M520190711111121560119850501WTTT0TZBP12222222222230112121113040000 +M520190711111121560120160708WTTTYBWW@122222222222 0422981 0000 +M520190711111121560120120519WTTTP@T9Z122222122222 0422981 0000 +M42019071111112157622700402581163113 +M520190711111121576119960619WTTT0Z0T922222122222210112081126000000 +M520190711111121576120170606WTTT##BPT222221122222 0422981 0000 +M42019071111112176121400400351163113 +M520190711111121761219850609WTTTPY#P@12222222222220212113200000000 +M520190711111121761119680126WTTT0@BT@12222212222220112111128640000 +M520190711111121761120030616WTTTY0P9@122222222222 0422101 0000 +M42019071111112211420600401981163113 +M520190711111122114119930523WTTT0PPP912222222222210112121112730000 +M520190711111122114120170618WTTTP0##P122221122222 0422981 0030 +M42019071111112223420500402421013113 +M520190711111122234119750115WTTTYBPYP22222122222210112111128170000 +M520190711111122234120040806WTTTP9@ZY222221222222 0422081 0000 +M520190711111122234120010815WTTTP9PP0222221122222 0422111 0000 +M42019071111112244120000402101163113 +M520190711111122441119780822WTTT0YB@012222222222220112131125410000 +M520190711111122441120141115WTTT##Y9#222221222222 0422981 0000 +M42019071111112248320600405471163113 +M520190711111122483119880108WTTT0TBPP22212222222210112112123320000 +M520190711111122483120180702WTTTPBZBW222222122222 0422981 0000 +M42019071111112277420600405771163113 +M520190711111122774119900822WTTT#ZZT022222122222210122111121670000 +M520190711111122774120130707WTTT#TTZT222121222222 0722981 0563 +M42019071111112277520000404271163113 +M520190711111122775219800726WTTTYY#ZY22122222222211012113200000000 +M520190711111122775119750119WTTT00#WY22122212222220112111131500000 +M520190711111122775120170122WTTT0W9@@222222122222 0422981 0000 +M520190711111122775120090115WTTTBTT@T222222222222 0422041 0000 +M42019071111112279522400406121162113 +M520190711111122795119811115WTTT#9W9@22212222222210112131133630000 +M520190711111122795120170115WTTTPWBZZ222122222222 0422981 0000 +M520190711111122795120141114WTTTPZ@9@222122122222 0422981 0000 +M520190711111122795120080708WTTTYPZPY222122122222 0422041 0000 +M42019081111111140220600405341161113 +M520190811111111402119900118WTTT#YYBB22212222222210112121119560000 +M520190811111111402120150123WTTT0#9PW222122222222 0422981 0000 +M42019081111111209720600401151163113 +M520190811111112097119750708WTTT0WZYT12212222222230112111126000000 +M520190811111112097120110126WTTT0#B@W122122122222 0422011 0000 +M42019081111111213820900406601993113 +M520190811111112138119830119WTTTP#B9#22222122222250112111124970000 +M520190811111112138120180112WTTTY09Y#222222122222 0422981 0000 +M42019081111111215621400405981163113 +M520190811111112156119900501WTTT0YPY@22212222222210112111116900000 +M520190811111112156120160119WTTT#0YW9222122122222 0422981 0000 +M42019081111111218020900402621161113 +M520190811111112180119860608WTTT0ZWZ#22212222222210112131100000000 +M520190811111112180120170515WTTTYZ9P#222122222222 0422981 0000 +M520190811111112180120130112WTTTP9Z#W212222222222 0422981 0000 +M520190811111112180120080101WTTT0B900222122122222 0422051 0000 +M42019081111111223621100404801163113 +M520190811111112236119830119WTTT0YZYW22222122222210112121120930000 +M520190811111112236120010819WTTTP##9Y222221122222 0422111 0000 +M42019081111111289521200404291163113 +M520190811111112895119920116WTTT##@WY22222122222210112111120180000 +M520190811111112895120120101WTTT##90Z222221222222 0422011 0000 +M42019081111111297822700403941163113 +M520190811111112978119950815WTTT#BT0#22222122222210112111122140000 +M520190811111112978120160821WTTTY0TBZ222121222222 0422981 0000 +M42019081111111304520900401031161113 +M520190811111113045119910701WTTTPTY9@22212222222230112121121670000 +M520190811111113045120160703WTTTPPPT0222122222222 0422981 0000 +M520190811111113045120120701WTTT0BT9W222122222222 0422011 0000 +M520190811111113045120120701WTTT0#T@0222122222222 0422011 0000 +M520190811111113045120100123WTTT#9#Z#222122222222 0422031 0000 +M520190811111113045120060706WTTTP#ZY@222122122222 0422071 0000 +M42019081111111337621100406541011113 +M520190811111113376119900815WTTT#BB#@12222222222210112111126980000 +M520190811111113376120170612WTTT#@BWP122222222222 0422981 0000 +M520190811111113376120130106WTTT#B99P222222222222 0422981 0000 +M42019081111111348222400401011162113 +M520190811111113482119940723WTTT#BZ9#12222222222210112081113180000 +M520190811111113482120170618WTTT#WBWW222222122222 0422981 0000 +M42019081111111353521100406541013113 +M520190811111113535119920801WTTTY0ZPZ22222122222210112121126130000 +M520190811111113535120160106WTTT0#B00122222222222 0422981 0000 +M42019081111111368320900406131163113 +M520190811111113683119920719WTTT0PPY012212122222211012121121170000 +M520190811111113683119780521WTTTPP#BT12222211222210112121200000789 +M520190811111113683120170101WTTTYT@WW122222222222 0422981 0000 +M520190811111113683120150713WTTTYTYWP122221222222 0422981 0000 +M42019081111111393621100404711162113 +M520190811111113936119920512WTTT##9@T22222122222210112121130340000 +M520190811111113936120140107WTTT#WPY0222221122222 0422981 0000 +M520190811111113936120110506WTTT##0Y9222221122222 0422011 0000 +M42019081111111394321400402181161113 +M520190811111113943119900823WTTTP9@TY21212122222210112121100000000 +M520190811111113943120170114WTTT##YYZ222221222222 0422981 0000 +M520190811111113943120120123WTTT0BBB9222222122222 0422981 0000 +M42019081111111411021100401541162113 +M520190811111114110119790102WTTTPWB#P22222122222210112121127710000 +M520190811111114110120110608WTTT#Y#YP222221222222 0422021 0000 +M520190811111114110120090702WTTTY#Z9@222221222222 0422031 0000 +M520190811111114110120070126WTTTY@TZ9222222122222 0422061 0000 +M520190811111114110120021122WTTT#BTZ#222221122222 0422101 0000 +M42019081111111415722700400671163113 +M520190811111114157119780109WTTTP@#T@22212222222210112112127750000 +M520190811111114157120080714WTTT0@0TB222222222222 0422052 0000 +M520190811111114157120020501WTTTPW@9#222222122222 0422102 0000 +M42019081111111429520900400501993113 +M520190811111114295119900626WTTT##P0B22122212222220112111113000000 +M42019081111111466220600405471163113 +M520190811111114662119940122WTTTYZ9P012212222222210112121112130000 +M520190811111114662120140116WTTTP@YW0222222122222 0422981 0000 +M42019081111111472221700406571163113 +M520190811111114722119860101WTTTP@YY922222122222220112111118510000 +M520190811111114722119691113WTTT09B0W22212212222220212121130060000 +M520190811111114722120180623WTTT#Z@Z9222222222222 0422981 0000 +M520190811111114722120141102WTTT#WBYB222222122222 0422981 0000 +M520190811111114722120130114WTTT##00#222222222222 0422981 0000 +M42019081111111503922400406121163113 +M520190811111115039119830102WTTT#ZT9B22212212222220112111122030000 +M520190811111115039120130713WTTTY#0#B222122122222 0422981 0000 +M42019081111111523221700402381163113 +M520190811111115232119790115WTTTY900T12222222222210112121126600000 +M520190811111115232120050603WTTT0@@YZ122222222222 0422081 0000 +M520190811111115232120020121WTTTY9W#W122222122222 0422111 0000 +M42019081111111558520000402281161113 +M520190811111115585119850715WTTTY#WTZ12222222222210112111117360000 +M520190811111115585120080506WTTTY99Y0122222122222 0422051 0000 +M520190811111115585120060615WTTTYPPW9122222222222 0422071 0000 +M520190811111115585120050616WTTTY0#Y0122222122222 0422081 0000 +M520190811111115585120030101WTTT09Y#W122222122222 0422101 0000 +M42019081111111576120300404901161113 +M520190811111115761219850702WTTT00PZW22222122222110112121115230885 +M520190811111115761120170101WTTTYY#TY222222222222 0422981 0000 +M520190811111115761120100619WTTT0@@90222221122222 0422031 0000 +M42019081111111605920600400291163113 +M520190811111116059119890626WTTTPPTT#22222122222210112111123830000 +M520190811111116059120131123WTTT0#@@0222222222222 0422981 0000 +M520190811111116059120080508WTTTP0T0W222222222221 0422051 0771 +M42019081111111626420900402921012113 +M520190811111116264119890103WTTTPBP#T22222122222210112131124570000 +M520190811111116264120180118WTTTPW#@Z222221222222 0422981 0000 +M520190811111116264120151116WTTT0W009222221222222 0422981 0000 +M42019081111111627521100406541163113 +M520190811111116275119630709WTTTPW0YT12222222222230112121119570000 +M520190811111116275120040119WTTT##B@9122222222222 0422091 0000 +M42019081111111670520600404951163113 +M520190811111116705119710615WTTT0B#9W22222122222250112111116000000 +M520190811111116705120061101WTTT##P@P222221122221 0422061 0801 +M520190811111116705120020606WTTTBTZYY222221122221 0422111 0801 +M42019081111111689520600401161161113 +M520190811111116895119950123WTTT#9Y0W22222122222210112111113150000 +M520190811111116895120161114WTTTYZBBY222221222222 0422981 0000 +M42019081111111690620600404461013113 +M520190811111116906119871113WTTT#TT@T22222122222210112111119580000 +M520190811111116906120130712WTTT#T0Y#222221222222 0422981 0000 +M42019081111111701021100404801161113 +M520190811111117010119840514WTTT0ZB#B22222122222210112111119200000 +M520190811111117010120170716WTTTPBP9B122222222222 0422981 0000 +M520190811111117010120170716WTTTYZZBY122222222222 0422981 0000 +M520190811111117010120051109WTTT#0ZWB122222122222 0422071 0000 +M42019081111111701622400400551993113 +M520190811111117016219850519WTTT#@BPY22212222222220112113211970000 +M520190811111117016119830119WTTT0B99@22212212222220212111129850000 +M520190811111117016120160814WTTT#PZPZ222122222222 0422981 0000 +M520190811111117016120160814WTTT#W#YT222122222222 0422981 0000 +M520190811111117016120051112WTTT#ZTTW222122122222 0422073 0000 +M520190811111117016120020523WTTT#ZYPT222122122222 0422102 0000 +M42019081111111734721100406391163113 +M520190811111117347119920116WTTTYW@@B12222222222210112121115600000 +M520190811111117347120160802WTTT090YB122221222222 0422981 0000 +M520190811111117347120130609WTTTPBYBP122222122222 0422981 0000 +M42019081111111745920500404091163113 +M520190811111117459119810718WTTT#YTBY22222122222210112111116350000 +M520190811111117459120170116WTTT0ZB0Y222221122222 0422981 0000 +M520190811111117459120090703WTTTP00Y9222221122222 0422041 0000 +M42019081111111756120900401881161113 +M520190811111117561119930106WTTT#TPW#22212222222210112111121640000 +M520190811111117561120100126WTTTYW9B0222122122222 0422031 0000 +M42019081111111823720000406161163113 +M520190811111118237119910723WTTTYYZT022222122222210112111129440000 +M520190811111118237120120716WTTTYY9@B222222122222 0422981 0000 +M520190811111118237120100119WTTTY0WYT222222222222 0422021 0000 +M42019081111111827220000404271163113 +M520190811111118272119930701WTTT#BZ@@12222122222250112121119540149 +M520190811111118272120160623WTTTPPW0B122222222222 0422981 0000 +M520190811111118272120140102WTTT0WYZY122222122222 0422981 0000 +M42019081111111835221700402341163113 +M520190811111118352119920613WTTT#Z0TB12222222222210112111122080000 +M520190811111118352120150126WTTT0ZYBT122222122222 0422981 0000 +M520190811111118352120110515WTTT#BBPT122222222222 0422021 0000 +M520190811111118352120080716WTTTYBYBT122221122222 0422051 0000 +M42019081111111836020900401881163113 +M520190811111118360119840601WTTTYY9WP22212222222210112111122310000 +M520190811111118360120141103WTTTP0@9Y222222122222 0422981 0000 +M520190811111118360120101115WTTTPPT9@222122122222 0422021 0000 +M42019081111111856322700400671163113 +M520190811111118563119771107WTTTYZW@P12222212222250112111126490000 +M520190811111118563120060709WTTT0WY#0122222122222 0422061 0000 +M520190811111118563120030715WTTTY#900122222222222 0422091 0000 +M42019081111111858721400400351161113 +M520190811111118587119881118WTTTYTZT@22212222222210112121119480000 +M520190811111118587120110715WTTTPT0@P222122122222 0422021 0000 +M520190811111118587120090723WTTTPT#T#122122122222 0422031 0000 +M42019081111111896921100406001162113 +M520190811111118969119930601WTTT0PP0Y12212222222210112121121830000 +M520190811111118969120130707WTTTY00@T222222122222 0422981 0000 +M520190811111118969120090602WTTTPZWBY222122122222 0422041 0000 +M42019081111111906522200403201163113 +M520190811111119065119740115WTTTPWPWP22222122222210112111135630000 +M520190811111119065120080608WTTT#ZPPP222222122222 0422051 0000 +M520190811111119065120080608WTTTP##99222222122222 0422051 0000 +M520190811111119065120040616WTTT#W@9Y222222122222 0422091 0000 +M42019081111111910820900403071161113 +M520190811111119108119850601WTTT0ZYBZ22212222222210112111100000000 +M520190811111119108120070608WTTT0@#@W222122222222 0422061 0000 +M520190811111119108120020519WTTTYTB@W222122222222 0422111 0000 +M42019081111111919320000402281013113 +M520190811111119193119920826WTTT0@W#B22222222222210112111121650000 +M520190811111119193120180502WTTT09Z9#122221222222 0422981 0000 +M42019081111111981020900406131162113 +M520190811111119810119851101WTTT#T00T12222222222210112121130540000 +M520190811111119810120170519WTTTPBW@T222222222222 0422981 0000 +M520190811111119810120100115WTTTYPZ9T222222222222 0422031 0000 +M520190811111119810120070619WTTT#9@TW222222222222 0422061 0000 +M520190811111119810120030101WTTT0Y9Y9222221222222 0422091 0000 +M42019081111111987321700406831163113 +M520190811111119873119880816WTTT#0BY022222122222210112121117220000 +M520190811111119873120140815WTTT#TTTZ222222122222 0422981 0000 +M520190811111119873120090526WTTTPY9B0222221122222 0422031 0000 +M520190811111119873120080119WTTT0@0##222221122222 0422041 0444 +M42019081111111990920900403031162113 +M520190811111119909119880509WTTT#000P22212222222210112111129540000 +M520190811111119909120180726WTTT0TPYT222122222222 0422981 0000 +M520190811111119909120090601WTTTYPBYB222122222222 0422041 0000 +M42019081111112013921700405151163113 +M520190811111120139119660116WTTTY9#0W22222122222220112111122220000 +M520190811111120139120040501WTTTPBWTP222221222222 0422081 0000 +M42019081111112046121100401551163113 +M520190811111120461119880115WTTT0YB#Y12222222222220112131132030000 +M520190811111120461120111115WTTTPY9T9122222122222 0422011 0000 +M520190811111120461120111115WTTT099T#122222122222 0422011 0000 +M42019081111112058522700400441163113 +M520190811111120585119920603WTTTPTZ0#22212122222210112081113330000 +M520190811111120585120180519WTTTPWZ00222221222222 0422981 0000 +M42019081111112060021100406391163113 +M520190811111120600119930715WTTTY9T##22222222222210112081113320000 +M520190811111120600120140612WTTTP@BWW222221122222 0422981 0000 +M520190811111120600120110102WTTTYB0#P222221222222 0422021 0000 +M42019081111112085221200404541163113 +M520190811111120852119920515WTTT0@P9@22222122222210112111119860000 +M520190811111120852120170721WTTTP9WBY222221122222 0422981 0000 +M42019081111112099520600400871163113 +M520190811111120995119970101WTTTY9PZY22222222222210112081116480000 +M520190811111120995120160521WTTT#P00#222222122222 0422981 0000 +M42019081111112116520000406951162113 +M520190811111121165119770116WTTTY#99P22212222222250112121125401000 +M520190811111121165120130803WTTT#00#@222222222222 0422981 0000 +M520190811111121165120110502WTTTY0W#W222122122222 0422011 0000 +M520190811111121165120070119WTTT#W0Z9222122222222 0422061 0000 +M520190811111121165120050115WTTTP0B0W222122222222 0422071 0000 +M42019081111112126322700400671163113 +M520190811111121263119880102WTTT0@YP#22222122222210112131131210000 +M520190811111121263120181119WTTT0TYWY222122122222 0422981 0000 +M520190811111121263120150116WTTT#WZ9#122221122222 0422981 0000 +M42019081111112181022400406941163113 +M520190811111121810119740119WTTTYYWZP22222122222210112111120880000 +M520190811111121810120030715WTTTPZTB@222221222222 0422091 0000 +M520190811111121810120010806WTTTPZ0PY222221122222 0422111 0000 +M42019081111112189922400400881163113 +M520190811111121899119940102WTTTYP#BW22222122222210112121113310000 +M520190811111121899120180821WTTT0BY9B222221122222 0422981 0000 +M520190811111121899120140715WTTT0WT#@222221222222 0422981 0100 +M42019081111112190621700404201161113 +M520190811111121906119860722WTTTP#9ZP12222222222210112121136370000 +M520190811111121906120120515WTTTPPP#T122221222222 0422981 0000 +M520190811111121906120080519WTTT0@@T9122222222222 0422041 0000 +M520190811111121906120070621WTTT0BYY#122222122222 0422061 0000 +M42019081111112193921400400351163113 +M520190811111121939119910812WTTT0ZWYW22212222222210112131127080000 +M520190811111121939120140607WTTTY99@#222122222222 0422981 0000 +M42019081111112205221700406831993113 +M520190811111122052119901114WTTTPWPZ922222211222210212121200000932 +M520190811111122052119870115WTTT0PW#922222122222210112121116690000 +M520190811111122052120180121WTTT0#9#@222221122222 0422981 0000 +M520190811111122052120170502WTTT090W@222222122222 0422981 0079 +M520190811111122052120050723WTTT0PYW@222222222222 0422081 0000 +M42019081111112206622700402801163113 +M520190811111122066119940101WTTT0BZB#22222122222210112121116410200 +M520190811111122066120161101WTTTPB#@W222221222222 0422981 0000 +M42019081111112229521700405121162113 +M520190811111122295119990116WTTTP9@P@12222222222210112981124700000 +M520190811111122295120180101WTTTYZ#P0122222122222 0422981 0000 +M42019081111112262022700400671161113 +M520190811111122620119870726WTTT#T#0Z22212222222210112121119250000 +M520190811111122620120110801WTTTYZ9TY222122222222 0422011 0000 +M520190811111122620120100119WTTTYPBT9222122222222 0422031 0000 +M520190811111122620120061114WTTT#YPBY222122222222 0422061 0000 +M42019081111112284920600404951162113 +M520190811111122849119861116WTTT0TW@022212222222210112111126220000 +M520190811111122849120130109WTTT#BZT0222222122222 0422981 0000 +M520190811111122849120090819WTTTP0ZBY222222222222 0422031 0000 +M42019091111111115922700400671161113 +M520190911111111159119800722WTTT#P#0B22222122222230112131120160000 +M520190911111111159120020116WTTTYBWYB222122222222 0422101 0000 +M42019091111111151121400400351163113 +M520190911111111511220070513WTTTYZTPB22212212222210412113200000000 +M520190911111111511119650101WTTTP##B#22212212222210112111132170000 +M520190911111111511120111119WTTT0PW#Z222212222222 0422013 0000 +M520190911111111511120100622WTTTY9P9Y222122222222 0422033 0000 +M520190911111111511120040101WTTT#WWBP222122222222 0422092 0000 +M520190911111111511120010519WTTT#9P#@222122122222 0422112 0000 +M42019091111111152521700405521163113 +M520190911111111525119890506WTTTYY#9B22222122222210112131121450213 +M520190911111111525120170726WTTT#@WWB222222122222 0422981 0000 +M520190911111111525120110702WTTT#T###222221222222 0422021 0000 +M520190911111111525120080123WTTT#00PZ222221122222 0422041 0000 +M42019091111111190420900403031163113 +M520190911111111904119870815WTTT0@99B22212222222210112121100000000 +M520190911111111904120111126WTTTY#WBW222122222222 0422011 0000 +M42019091111111197621700402341162113 +M520190911111111976119860102WTTT#WB0Z12222222222210112121116610000 +M520190911111111976120160123WTTTY@99#122222122222 0422981 0000 +M520190911111111976120111121WTTTPZPT#222222122221 0422011 0673 +M42019091111111199020600405341163113 +M520190911111111990119930114WTTT###ZZ12222222222210112131119670000 +M520190911111111990120180606WTTT0TP#B222222222222 0422981 0000 +M520190911111111990120120703WTTT0WBYZ122221122222 0422011 0000 +M42019091111111199720000406821163113 +M520190911111111997119800526WTTT0YYB922212222222220112131117440000 +M520190911111111997120050708WTTTYW#WP222122222222 0422081 0000 +M42019091111111214320900401881163113 +M520190911111112143119950518WTTTPZP@#22222222222210112121118210000 +M520190911111112143120161122WTTTPBPP9222222122222 0422981 0000 +M42019091111111247320000405601162113 +M520190911111112473119890721WTTT0T#9W22222122222220212131100950000 +M520190911111112473119820123WTTT00YTZ22222112222220112131136960000 +M520190911111112473120180101WTTTYP@TZ222222222222 0422981 0000 +M520190911111112473120160516WTTTY90WZ222221222222 0422981 0000 +M42019091111111251920500402421993113 +M520190911111112519119960808WTTT#Y9@022222122222210112111116900000 +M520190911111112519120190615WTTTYZ0WY222222122222 0422981 0000 +M520190911111112519120170119WTTTYPWT#222222222222 0422981 0000 +M42019091111111256722700403941163113 +M520190911111112567119870101WTTT0@9P#22212222222210112131124720100 +M520190911111112567120170101WTTT#YZ#Z222222222222 0422981 0000 +M520190911111112567120100601WTTT#W@9#222122222222 0422031 0000 +M520190911111112567120050615WTTTPTB@#222122222222 0422081 0000 +M42019091111111260021100403751161113 +M520190911111112600119900602WTTT#TPTZ22212222222210112121119180000 +M520190911111112600120170707WTTT#W#PZ222122122222 0422981 0000 +M520190911111112600120140715WTTT#W#@W222222122222 0422981 0000 +M520190911111112600120060706WTTTY0BY#222122122222 0422071 0000 +M42019091111111261820600403391163113 +M520190911111112618119890114WTTT#9P@912222222222210112121120080000 +M520190911111112618120121119WTTTP@PZ0222222222222 0422981 0000 +M520190911111112618120080506WTTTP0@WY122221222222 0422051 0000 +M520190911111112618120070509WTTT#PY0Y122222122222 0422061 0000 +M42019091111111297420600401421162113 +M520190911111112974119810723WTTTPPY9Z22222112222211022111200000000 +M520190911111112974119800508WTTTP@WY022222122222220112111120870000 +M520190911111112974120021102WTTTP0P0Y222221222222 0422101 0000 +M42019091111111333620900401881162113 +M520190911111113336119870116WTTTY@P@022212222222210112111119220000 +M520190911111113336120130115WTTTP#9W0222122122222 0422981 0000 +M42019091111111335120000402101163113 +M520190911111113351119860821WTTT#9@BZ22122222222210112121143460000 +M520190911111113351120170107WTTTYB#Z9222222222222 0422981 0000 +M520190911111113351120150802WTTTYYWYB221222122222 0422981 0000 +M520190911111113351120070526WTTTYZ#00221222222222 0422061 0000 +M520190911111113351120030719WTTT09BZP221222122222 0422101 0000 +M520190911111113351120020622WTTT0Z9PT221222222222 0422111 0000 +M42019091111111344220900404651163113 +M520190911111113442119880101WTTT#0#Y@22212222222210112111116490000 +M520190911111113442120140102WTTT#BZ#W122221122222 0422981 0000 +M520190911111113442120090819WTTT#TZPB222122222222 0422031 0000 +M520190911111113442120070502WTTT#PBZ@222222122222 0422063 0000 +M42019091111111346521100406491162113 +M520190911111113465119850523WTTTP@99#12222222222210112131129300000 +M520190911111113465120080112WTTT0BPBP222222122222 0422051 0000 +M520190911111113465120030726WTTTYYYWW122222222222 0422101 0000 +M42019091111111396020900400501163113 +M520190911111113960119760523WTTTP#9B022212222222210112082112730000 +M520190911111113960120130822WTTT#BPTY122222122222 0422981 0000 +M520190911111113960120060815WTTTPZ9#Y222122122222 0422062 0000 +M520190911111113960120020721WTTTY##9B222122122222 0422112 0000 +M42019091111111433022700406371993113 +M520190911111114330119970602WTTT#00YT22222122222210112121116690000 +M520190911111114330120140118WTTT0@0ZT222221122222 0422981 0000 +M42019091111111459021200406661163113 +M520190911111114590119870523WTTT##BBB22222121222220112131121540590 +M520190911111114590119840706WTTTP#PYT22222112222220212111300000000 +M520190911111114590120170821WTTTP@TW0222221222222 0422981 0000 +M520190911111114590120150115WTTT#09YB222222122222 0422981 0000 +M520190911111114590120090726WTTTYBP@#222222122222 0422041 0000 +M42019091111111465420900404651161113 +M520190911111114654119850107WTTTYP@@912222222222230112111125640000 +M520190911111114654120070514WTTT#W00#122222122222 0422051 0000 +M520190911111114654120020122WTTTPZBZY122222222222 0422101 0000 +M42019091111111481221100403821163113 +M520190911111114812119880515WTTTY0WPB12222212222210112121119740000 +M520190911111114812120130115WTTTY9YT@122221222222 0422981 0000 +M42019091111111488820900406601013113 +M520190911111114888119740707WTTTPY9W@22222122222210112131121650000 +M520190911111114888120020102WTTT0Y9YP222221122222 0422101 0000 +M42019091111111499120000404151162113 +M520190911111114991119670606WTTT#TZTT22212222222230112122129110000 +M520190911111114991120020102WTTTY0#W@222122222222 0422111 0000 +M42019091111111505020600405471161113 +M520190911111115050119820101WTTT#ZPB#12222222222210112121114590000 +M520190911111115050120170615WTTTYP9T@122222222222 0422981 0000 +M520190911111115050120110715WTTT0BZ#@122222222222 0422021 0000 +M520190911111115050120070601WTTT0PTPZ122222122222 0422061 0000 +M520190911111115050120020714WTTT0Z9@P122222222222 0422111 0000 +M42019091111111506821700404181163113 +M520190911111115068119910814WTTT0#09W22222122222210112081131560000 +M520190911111115068120180515WTTTPZ##0222222122222 0422981 0000 +M520190911111115068120150502WTTT#WWWY222221222222 0422981 0000 +M520190911111115068120100801WTTTPY9@Y222221122222 0422021 0000 +M42019091111111513422400401011163113 +M520190911111115134119720123WTTT#WB#@22222122222210112131120060750 +M520190911111115134120070513WTTT#ZY@P222221122222 0422051 0000 +M42019091111111522320000401371163113 +M520190911111115223119870512WTTTYW@9Z22222122222210112121120900000 +M520190911111115223120180106WTTTY@9BZ222222122222 0422981 0000 +M42019091111111538420600401981163113 +M520190911111115384119990519WTTT0#@W012222222222210112121118650000 +M520190911111115384120150706WTTTYPTPW122222122222 0422981 0000 +M42019091111111540721700402341163113 +M520190911111115407119870712WTTTYTYTW22222122222210112121124800000 +M520190911111115407120100515WTTTYY#YW222221222222 0422031 0000 +M42019091111111596520000404271162113 +M520190911111115965119681116WTTTYPY0Y22122222222220112111127620000 +M520190911111115965120010826WTTTP0@YZ221222222222 0422111 0000 +M42019091111111634921400405981163113 +M520190911111116349119840119WTTT0099W22222122222210112121125820000 +M520190911111116349120170501WTTT0BY99222221222222 0422981 0000 +M520190911111116349120160506WTTT#0Z@Y222221222222 0422981 0000 +M42019091111111643020000404071162113 +M520190911111116430119760701WTTT00Y#P12222222222210112121118950000 +M520190911111116430120140816WTTTY9WYW222222122222 0422981 0000 +M520190911111116430120110615WTTT0@#9P122221222222 0422021 0000 +M520190911111116430120031114WTTTY#T9#122222122222 0422091 0000 +M42019091111111653221100401181163113 +M520190911111116532119921115WTTT#ZWY@22122222222210112121127260000 +M520190911111116532120160816WTTTP0WP0222222222222 0422981 0000 +M42019091111111680620000403181161113 +M520190911111116806119840507WTTTPPWZZ22212222222210112111128790000 +M520190911111116806120090502WTTT0BB@Y222122122222 0422041 0000 +M520190911111116806120070826WTTT0W09#222122122222 0422051 0000 +M42019091111111687520900406601163113 +M520190911111116875119830507WTTT#P@B022122222222210112111129900000 +M520190911111116875120160714WTTTYWY09222222222222 0422981 0000 +M520190911111116875120070101WTTTP@YWW221222222222 0422061 0000 +M520190911111116875120020519WTTT0ZW#Z221222122222 0422101 0000 +M42019091111111694521400401581163113 +M520190911111116945119950708WTTTY##@Y22222122222220112111113480000 +M520190911111116945120170614WTTT#PZ#P222221222222 0422981 0000 +M520190911111116945120150507WTTTPP9Y#222221122222 0422981 0000 +M42019091111111756521400402181163113 +M520190911111117565119930806WTTTY@PYY22222122222210112121123740000 +M520190911111117565120140515WTTTP#WY9222222122222 0422981 0000 +M520190911111117565120120106WTTT#W9P#222222222222 0422011 0000 +M42019091111111783621700404101163113 +M520190911111117836119811106WTTTP0@TY22222122222210112111120300000 +M520190911111117836120070123WTTT#0B#T222221122222 0422051 0000 +M520190911111117836120070123WTTTPT0P#222221122222 0422051 0000 +M42019091111111803120900400391162113 +M520190911111118031119640626WTTTY@BW022222222222250112141118760000 +M520190911111118031120030726WTTTPP@Y0222222122222 0422101 0000 +M42019091111111852820600402121163113 +M520190911111118528119920713WTTT#9PB#22222122222210112121128370000 +M520190911111118528120160602WTTT00WTY222222222222 0422981 0000 +M520190911111118528120100119WTTTP@@WW222221222222 0422031 0000 +M42019091111111855022700402581163113 +M520190911111118550119790101WTTTPBP9P22222122222210112121124200000 +M520190911111118550120070701WTTT0Z#9B222221222222 0422061 0000 +M520190911111118550120040701WTTT#0T09222221122222 0422091 0000 +M42019091111111863021400400351993113 +M520190911111118630119630102WTTT0T##W22212222222250112112118200000 +M520190911111118630120030702WTTT0W@BP222122222222 0422103 0000 +M42019091111111865521100401181993113 +M520190911111118655119940721WTTTY9@ZW22212222222210112121114520000 +M520190911111118655120180506WTTTYW@BW222122122222 0422981 0000 +M520190911111118655120150715WTTT09#W9222122122222 0422981 0000 +M520190911111118655120100707WTTTYZ0B0222122122222 0422031 0000 +M42019091111111871320600405471013113 +M520190911111118713119910808WTTT0#0BY22222122222210112081130330000 +M520190911111118713120120815WTTTP#ZY#222222222222 0422981 0000 +M520190911111118713120110118WTTTP#TBW122221222222 0422021 0000 +M42019091111111893320900404621163113 +M520190911111118933119790714WTTT#P#0@22222112222220112111118332600 +M520190911111118933119790114WTTT#Z#9T22222122222220212111117330000 +M520190911111118933120180726WTTT0YB#0222222222222 0422981 0000 +M520190911111118933120150102WTTT0ZBZY222222122222 0422981 0000 +M520190911111118933120130119WTTT0@TWY222222122222 0422981 0000 +M520190911111118933120130119WTTT0WWYT222222222222 0422981 0000 +M520190911111118933120110126WTTT000@0222221222222 0422021 0000 +M520190911111118933120090806WTTTYPY09222221122222 0422031 0000 +M520190911111118933120070806WTTTP#Y0Z222221122222 0422051 0000 +M520190911111118933120060119WTTTY#YY0222221222222 0422071 0000 +M520190911111118933120040723WTTT0PW9B222221222222 0422091 0000 +M42019091111111909721100403821163113 +M520190911111119097119940121WTTTP#PYZ12222222222210112081126100000 +M520190911111119097120140622WTTT#ZBZZ222222222222 0422981 0000 +M42019091111111919821100406001163113 +M520190911111119198119960519WTTT0@Z#Y12222222222210112122116830000 +M520190911111119198120140719WTTTPY@BP122221222222 0422981 0000 +M520190911111119198120110521WTTT#9Y#P122221222222 0422021 0000 +M42019091111111928921100401691163113 +M520190911111119289119870123WTTT0BTBT12222222222230112111123490000 +M520190911111119289120130115WTTT0Z###122222122222 0422981 0000 +M520190911111119289120110609WTTT##YPB122222222222 0422021 0000 +M520190911111119289120091113WTTTY9#T0122222222222 0422031 0000 +M42019091111111931121100401181163113 +M520190911111119311119970121WTTTYBBZB12222222222210112111117390000 +M520190911111119311120150726WTTT09Z#W122222222222 0422981 0000 +M42019091111111960020600401981163113 +M520190911111119600119800507WTTT0PT9#12222212222210112111132690149 +M520190911111119600120030522WTTT#0BB@122222222222 0422101 0000 +M520190911111119600120010106WTTT#TP9@122222122222 0422111 0000 +M42019091111112032920600405471163113 +M520190911111120329119880515WTTT0T9YZ12222222222210112111128170000 +M520190911111120329120170123WTTT0#9PT122222122222 0422981 0000 +M520190911111120329120090801WTTTY9P9#122222122222 0422031 0000 +M520190911111120329120060119WTTTYZ0BW122222122222 0422061 0000 +M42019091111112034521700405291163113 +M520190911111120345119850618WTTTYY9ZT22222122222210112111134380000 +M520190911111120345120140101WTTTYT0YY222222222222 0422981 0000 +M520190911111120345120120708WTTT00TPT222222122222 0422011 0000 +M42019091111112090420900400501193113 +M520190911111120904119810818WTTT0@T9022212222222210112111128290000 +M520190911111120904120151102WTTT#YZY@122222122222 0422981 0000 +M520190911111120904120110512WTTT#0YBP122222122222 0422011 0000 +M520190911111120904120070701WTTTY0TZ9122222122222 0422061 0000 +M520190911111120904120020523WTTT09#B#222122122222 0422111 0000 +M42019091111112116922700402801013113 +M520190911111121169119960715WTTT#T09#22222222222210112112121670000 +M520190911111121169120160101WTTTYP@0@222222122222 0422981 0000 +M42019091111112155622700400681193113 +M520190911111121556119770706WTTT0Z09W22222122222220112131119060000 +M520190911111121556119710512WTTT0Y99#22222111222220212121200000756 +M520190911111121556120050102WTTTY@WBB222221222222 0422081 0000 +M520190911111121556120020702WTTT000Y#222221222222 0422111 0000 +M42019091111112167921400406791161113 +M520190911111121679119830502WTTT0Z99Z12222222222210112141119330000 +M520190911111121679120040522WTTT0BY#9122222222222 0422091 0000 +M42019091111112171622700400441163113 +M520190911111121716119830107WTTT0ZWB922222122222210112121118090000 +M520190911111121716120140812WTTTY@0YB222221122222 0422981 0000 +M42019091111112187421400403591163113 +M520190911111121874119920823WTTT#YB0@22222122222210112121133380000 +M520190911111121874120171112WTTT#@B##222222222222 0422981 0000 +M520190911111121874120150806WTTTY9TY0222221122222 0422981 0000 +M42019091111112188121100406001163113 +M520190911111121881119920807WTTTP@P#B12222222222210112121100001200 +M520190911111121881120131115WTTT09TTZ122222122222 0422981 0000 +M42019091111112199921700402341163113 +M520190911111121999119750109WTTTP0YBT22222222222230112081117010000 +M520190911111121999120051108WTTTYWTBP222222222222 0422071 0000 +M42019091111112218422200404361163113 +M520190911111122184119900808WTTT00Y@022222222222210112121112010000 +M520190911111122184120150619WTTT##Y#P222222222222 0422981 0000 +M520190911111122184120080107WTTTP@BBT222222222222 0422051 0000 +M42019091111112223221700404101163113 +M520190911111122232119810619WTTT0@BYP12222222222230112121132630000 +M520190911111122232120140508WTTT0BPZ9122222222222 0422981 0000 +M42019091111112223622700405651163113 +M520190911111122236119760726WTTT0##WB22222122222230112111121230000 +M520190911111122236120020119WTTT0BZ#0222221222222 0422101 0000 +M42019091111112225122700402801163113 +M520190911111122251119890123WTTTY9PTB22222122222210112121119820000 +M520190911111122251120120714WTTT#YPPY222222122222 0422011 0000 +M42019091111112226521700401121161113 +M520190911111122265119890101WTTT0TY@Y12222222222220112121118340000 +M520190911111122265120090719WTTTY9Z#Y122222222222 0422041 0000 +M520190911111122265120070123WTTTY@PZB122222122222 0422051 0000 +M42019091111112285020600405341163113 +M520190911111122850119900102WTTT0BWWT12222222222210112111123560000 +M520190911111122850120130703WTTTBTT9Y122221222222 0422981 0000 +M520190911111122850120070619WTTT0YWT0122222222222 0422061 0000 +M42019101111111133221100406471163113 +M520191011111111332119900106WTTT#YB@B22222222222230112111115460000 +M520191011111111332120170114WTTT#Z@B@222222122222 0422981 0000 +M42019101111111142720600405341163113 +M520191011111111427119890106WTTT#PYBY12222222222210112111119390000 +M520191011111111427120160601WTTTPB###122222122222 0422981 0000 +M42019101111111143520900406601013113 +M520191011111111435119920121WTTT#9##922222122222210112111115540000 +M520191011111111435120181102WTTT0@#Y9222222222222 0422981 0000 +M42019101111111186620900406601163113 +M520191011111111866119930719WTTT#Z@9P22222222222210112121124700000 +M520191011111111866120140701WTTTP#PWZ222122122222 0422981 0000 +M42019101111111197421400400351162113 +M520191011111111974119890701WTTT#T0P022212222222210112111121610000 +M520191011111111974120110512WTTTBT9WW222122122222 0422021 0000 +M42019101111111225320600402981991113 +M520191011111112253119790115WTTT#Z0#P22212222222230112082126360000 +M520191011111112253120180501WTTT#Y0ZT222222122222 0422981 0000 +M520191011111112253120170815WTTTY#PPW222222122222 0422981 0000 +M520191011111112253120140121WTTTY@B0P222222222222 0422981 0000 +M520191011111112253120090607WTTTYY#W9222122122222 0422042 0000 +M42019101111111248421100406631163113 +M520191011111112484119650507WTTT0WY@T22222222222220112111128600000 +M520191011111112484120020715WTTT0T#PP222221222222 0422111 0000 +M42019101111111254720900401881161113 +M520191011111112547119860503WTTTPB@W#12222222222220112111110560000 +M520191011111112547119830101WTTTPP@@P12222212222220212111130100000 +M520191011111112547120140723WTTTPB@TB122222222222 0422981 0000 +M520191011111112547120040803WTTT#Y9#P122222122222 0422091 0000 +M42019101111111280021100401181163113 +M520191011111112800119920601WTTT#W0Z@12222222222210112121120680000 +M520191011111112800120150108WTTTYZZ00222222122222 0422981 0000 +M42019101111111298021400406791163113 +M520191011111112980119810813WTTTYTPTT22222122222210112111134760000 +M520191011111112980120180126WTTTPZZ0@222222122222 0422981 0000 +M520191011111112980120080719WTTT09Z09222221122222 0422051 0000 +M520191011111112980120050723WTTTYBT0P222221122222 0422081 0000 +M42019101111111305321700403901163113 +M520191011111113053119850819WTTTY9YTT22222122222210112131115600000 +M520191011111113053120100109WTTTYZ#Y0222221122222 0422021 0000 +M520191011111113053120070115WTTTP#WPP222221222222 0422061 0000 +M520191011111113053120031116WTTTYYBB@222221222222 0422091 0000 +M42019101111111339321100406001163113 +M520191011111113393119900718WTTT#PW@T12222122222230112111133560000 +M520191011111113393120150622WTTTY9ZZ0122222222222 0422981 0000 +M520191011111113393120120615WTTT09TW9122222222222 0422011 0000 +M520191011111113393120100715WTTTY#ZB@222222122222 0422031 0000 +M520191011111113393120090719WTTT0T9ZB122221222222 0422041 0000 +M42019101111111342322700402801163113 +M520191011111113423119890518WTTT00B9022222122222210112131115750000 +M520191011111113423120110809WTTTYBP@B222221222222 0422021 0000 +M520191011111113423120070101WTTTP9TZT222221222222 0422051 0000 +M42019101111111353121100406001163113 +M520191011111113531119840122WTTT099T@12222222222250112121115970000 +M520191011111113531120180512WTTTPWW0W122222122221 0422981 0801 +M42019101111111362820900401231161113 +M520191011111113628119670101WTTTYBPTW22122222222220212081123690000 +M520191011111113628119630721WTTT0Z@9B22122212222220112112109020000 +M520191011111113628120010118WTTT#ZPPB221222122222 0422111 0000 +M42019101111111366420600400291162113 +M520191011111113664119910126WTTTPTPWW12222222222210112111113260000 +M520191011111113664120150607WTTTY9#YP122221122222 0422981 0000 +M520191011111113664120130619WTTTYYW9T122222122222 0422981 0000 +M42019101111111368120900406421163113 +M520191011111113681119910626WTTTP#PTZ12222222222210112081130480000 +M520191011111113681120190718WTTT0ZWW#122222222222 0422981 0000 +M520191011111113681120190718WTTT0#0ZT122222222222 0422981 0000 +M520191011111113681120120806WTTTYP@P#122222222222 0422011 0000 +M42019101111111378522700406371163113 +M520191011111113785119820123WTTTPPTW922222222222220112111143750000 +M520191011111113785119770719WTTTYYZW#22222112222220212111112010000 +M520191011111113785120130818WTTT0Z#9P222222122222 0422981 0000 +M520191011111113785120110115WTTTPBP@W222221122222 0422021 0000 +M520191011111113785120050108WTTT#BZWW222221222222 0422071 0000 +M520191011111113785120040621WTTTP#B99222221222222 0422091 0000 +M42019101111111383320900402921163113 +M520191011111113833119720502WTTTY0PBB22222122222250112131122750000 +M520191011111113833120130101WTTT#YWWZ222222222222 0422981 0000 +M520191011111113833120110721WTTTYZTPZ222222122222 0422021 0000 +M42019101111111393920600404461163113 +M520191011111113939119840718WTTT0YZ@W22222122222210112131126010000 +M520191011111113939120170619WTTT#W#W@122222122222 0422981 0000 +M520191011111113939120060106WTTT#PZP#222221222222 0422071 0000 +M42019101111111401020500402421163113 +M520191011111114010119850707WTTT0PT@W12222222222250112131127330000 +M520191011111114010120180802WTTT0BY#@222222222222 0422981 0000 +M520191011111114010120080715WTTTP999#222222122222 0422051 0082 +M520191011111114010120060514WTTT0WWPW222222222222 0422061 0082 +M42019101111111402020600401981192113 +M520191011111114020119890106WTTT09#Y012222212222211012121130600000 +M520191011111114020119840606WTTTYBZB#12222222222210112121112760000 +M520191011111114020120120122WTTTP9YZB122222222222 0422981 0000 +M520191011111114020120080623WTTT0#YY0122222122222 0422051 0000 +M42019101111111405221700404401162113 +M520191011111114052119891102WTTT0ZYZW22222122222210112111124970000 +M520191011111114052120140107WTTT#BZ09222222222222 0422981 0000 +M520191011111114052120100521WTTTP#Y@P222222222222 0422031 0000 +M42019101111111427620900403071162113 +M520191011111114276119830814WTTTP#Z9W12222222222210112121100000000 +M520191011111114276120150601WTTTYP0WB122222122222 0422981 0000 +M520191011111114276120120701WTTTYT0PZ122222222222 0422011 0000 +M520191011111114276120060626WTTT#9BZZ122222222222 0422071 0000 +M520191011111114276120020619WTTT#90PP122221222222 0422111 0000 +M42019101111111429021700406571161113 +M520191011111114290119920115WTTTPYZZB12222222222210112111116830000 +M520191011111114290120160701WTTT#Z@Z0122222122222 0422981 0000 +M520191011111114290120110516WTTT0WTWP122222122222 0422021 0000 +M42019101111111460622700402231161113 +M520191011111114606119840815WTTTYWBPY22122222222210112131115860000 +M520191011111114606120180719WTTTPZZ@Y222222122222 0422981 0000 +M520191011111114606120050606WTTT0##9@221222122222 0422081 0000 +M520191011111114606120040718WTTTY0BY9221222122222 0422091 0000 +M42019101111111475720000400361163113 +M520191011111114757119930615WTTTYWP9T12222122222230112111121950000 +M520191011111114757120130821WTTTPBBZP222222222222 0422981 0000 +M42019101111111477320900402921163113 +M520191011111114773119850115WTTTP##Y922212222222210112121120960000 +M520191011111114773120080807WTTTYZPY0222122222222 0422051 0000 +M520191011111114773120020119WTTTPYPZB222122222222 0422101 0000 +M42019101111111477622400406121163113 +M520191011111114776119690814WTTT0#TBP22222222222250112121121910000 +M520191011111114776120020115WTTTPY9ZZ212222222222 0422111 0000 +M42019101111111482422200403201163113 +M520191011111114824119700119WTTTP@@ZP22222222222220212111123040000 +M520191011111114824119700121WTTTP9P#T22222112222220112111124170000 +M520191011111114824120020609WTTT0TBWT222222122222 0422111 0000 +M42019101111111501720600400871163113 +M520191011111115017119820723WTTTPTB0T22222122222210112141119090000 +M520191011111115017120160601WTTTYTYPB222222222222 0422981 0000 +M520191011111115017120100615WTTTPPP#0222221122222 0422031 0000 +M42019101111111502620000406951162113 +M520191011111115026119820101WTTT#W09W12222222222220112121119620000 +M520191011111115026120120121WTTTYT@ZB222222222222 0422011 0000 +M520191011111115026120100716WTTT#Y#PY122221222221 0422031 0885 +M520191011111115026120021102WTTT#ZW#W222221122222 0422101 0000 +M42019101111111519620600401981163113 +M520191011111115196119751101WTTTP0#WY22222222222230112121121930453 +M520191011111115196120130716WTTTP09PT222221222222 0422981 0000 +M42019101111111529022700400671163113 +M520191011111115290119880113WTTTPWZPB22212212222210112111122740000 +M520191011111115290120121118WTTTYW@Y9222222222222 0422981 0000 +M42019101111111529221700402381163113 +M520191011111115292119830608WTTTYZ9ZP22222122222210112121115690000 +M520191011111115292120130719WTTTYZZ@0222221122222 0422981 0000 +M42019101111111545520000404271013113 +M520191011111115455119850123WTTTP#B@#22122222222210112111136240000 +M520191011111115455120110526WTTT#@YPW221222122222 0422011 0000 +M520191011111115455120090114WTTTY@##Z221222122222 0422041 0000 +M520191011111115455120030713WTTTPW9WY221222122222 0422101 0000 +M42019101111111546020000406951161113 +M520191011111115460119810807WTTTYWZB922212222222230112081113000000 +M520191011111115460120170806WTTT#B9BZ222222122222 0422981 0000 +M520191011111115460120110516WTTTY9Z#Z222122222222 0422011 0000 +M520191011111115460120060823WTTT#T9PT222122222222 0422071 0000 +M42019101111111564221400400351163113 +M520191011111115642119920809WTTT#WP9T22222222222210112111116060000 +M520191011111115642120180507WTTTY@T9@222222222222 0422981 0000 +M42019101111111609120600401421162113 +M520191011111116091119760101WTTT#BPYZ12212122222210112111124690000 +M520191011111116091120040721WTTTYBW@T122121122222 0422091 0000 +M42019101111111647720000405421163113 +M520191011111116477119930621WTTTPTT9@22222122222210112131120320000 +M520191011111116477120151103WTTT#90ZP222222222222 0422981 0000 +M520191011111116477120110601WTTT0YZ9P122122122222 0422021 0000 +M42019101111111660521700402861163113 +M520191011111116605119830702WTTTYBPZT22222122222210112131112020000 +M520191011111116605120131119WTTT#BW@P222222222222 0422981 0000 +M520191011111116605120030601WTTT0@Y@@222221122222 0422101 0000 +M42019101111111696221100406541163113 +M520191011111116962119860709WTTTPZ09#12222222222220112112125930000 +M520191011111116962119760815WTTTP9TT022222212222220212111112050000 +M520191011111116962120160126WTTT#Y@0P122222222222 0422981 0000 +M520191011111116962120140601WTTTP@WWT222222222222 0422981 0000 +M42019101111111714622400406121012113 +M520191011111117146119921112WTTTPB@WZ22212221222210112121116040810 +M520191011111117146120170112WTTTY#WWY222222122222 0422981 0039 +M42019101111111733720500402421163113 +M520191011111117337119880506WTTTPPW9Y22222122222210112111124260000 +M520191011111117337120130818WTTTY0TP#222222122222 0422981 0000 +M520191011111117337120110101WTTT0YT#@222221222222 0422021 0000 +M520191011111117337120070806WTTT#ZP0@222221222222 0422061 0000 +M42019101111111742322700403941163113 +M520191011111117423119890818WTTTP9TBB22222122222210112111120450000 +M520191011111117423120140801WTTT#9Z@0222221222222 0422981 0000 +M42019101111111743620900400501163113 +M520191011111117436119880121WTTTP9W0Y22212222222210112131117420000 +M520191011111117436120120112WTTT#Y0BB222222222222 0422011 0000 +M42019101111111748720600406321163113 +M520191011111117487119960102WTTTY#Y0T22222122222210112111125600000 +M520191011111117487120190116WTTT0PWB9122221222222 0422981 0000 +M42019101111111767022700400681161113 +M520191011111117670119790523WTTT#Y9Y@12222222222210112131122910000 +M520191011111117670120050501WTTTY9P@B122222222222 0422081 0000 +M42019101111111778621700406831161113 +M520191011111117786119910113WTTTY9Y@P12222122222210112131119330000 +M520191011111117786120180502WTTT0@@Y#122122222222 0422981 0000 +M520191011111117786120130112WTTTY@PPW122222122222 0422981 0000 +M42019101111111814221100404801162113 +M520191011111118142119900119WTTTYY@WB12222222222230112131118480000 +M520191011111118142120170719WTTT#YZZ@122122122222 0422981 0000 +M520191011111118142120170719WTTTPW00Z122122222222 0422981 0000 +M520191011111118142120130102WTTTBT@PT122222222222 0422981 0000 +M520191011111118142120090101WTTTPYWWB122222122222 0422041 0000 +M42019101111111830522700403941163113 +M520191011111118305119920719WTTTYT09012222122222210112121126060000 +M520191011111118305120180801WTTT#0ZBB222222222222 0422981 0000 +M520191011111118305120150616WTTT#BPBB222222222222 0422981 0000 +M520191011111118305120120606WTTTY@YTP222221222222 0422011 0000 +M42019101111111849721400406791163113 +M520191011111118497119890513WTTT0BB0922212222222210112111114100000 +M520191011111118497120180126WTTT#YZPT222222122222 0422981 0000 +M520191011111118497120130613WTTT#T0BT122222122222 0422981 0000 +M520191011111118497120100815WTTT#@@T0222222122222 0422031 0000 +M520191011111118497120070719WTTT#B9Y@222222222222 0422063 0000 +M42019101111111854621700406221163113 +M520191011111118546119860109WTTT#BBZB22222122222210112121118800000 +M520191011111118546120090101WTTTPPZP@222221122222 0422041 0000 +M42019101111111863522700400671163113 +M520191011111118635119971101WTTT0Y@Y#22212222222210112112116350000 +M520191011111118635219880708WTTTYP9PB22222212222211012113200000000 +M520191011111118635120180614WTTT0T9Z#222222122222 0422981 0000 +M42019101111111893420900403431161113 +M520191011111118934119840115WTTTP@YYB22212222222210112121100000000 +M520191011111118934120160126WTTT0#0PP222122222222 0422981 0000 +M520191011111118934120120613WTTT#PT0B222122222222 0422011 0000 +M520191011111118934120030515WTTT#P#@Z222122222222 0422101 0000 +M42019101111111900420000401061163113 +M520191011111119004119870101WTTTYWPT922212222222210112111126220000 +M520191011111119004120170618WTTTYBWB#222222222222 0422981 0000 +M520191011111119004120150521WTTT#YY@@222122222222 0422981 0000 +M42019101111111922920600400871161113 +M520191011111119229119730521WTTTPBZ9B12222122222210112121119950000 +M520191011111119229120050603WTTTY9@9P122221122222 0422081 0000 +M42019101111111924520900406421161113 +M520191011111119245119830101WTTTP9W0B12222222222210112111120590000 +M520191011111119245120060523WTTT#BPB0122222122222 0422061 0000 +M520191011111119245120050118WTTTPT0TT122222222222 0422071 0000 +M42019101111111931921700405121161113 +M520191011111119319119900107WTTT00YYY12222222222210112141120560000 +M520191011111119319120120701WTTTP#BT@122222122222 0422011 0000 +M520191011111119319120090514WTTT#P0YW122222122222 0422031 0000 +M520191011111119319120060719WTTTPW9B0122222222222 0422071 0000 +M42019101111111948820600401421161113 +M520191011111119488119770506WTTT0ZBBY22122222222210112112124170000 +M520191011111119488120170106WTTTYT9W@222222222222 0422981 0000 +M520191011111119488120050615WTTT#P9P0221222222222 0422081 0000 +M42019101111111952621100406001993113 +M520191011111119526119941126WTTTY9@#Z12222122222210112112117350000 +M520191011111119526120170106WTTT#B0PB122222222222 0422981 0000 +M42019101111111966321100401551993113 +M520191011111119663119971106WTTT#WYP@22222222222210112111115710000 +M520191011111119663120170616WTTTPZYPP222222222222 0422981 0000 +M42019101111111971221700403811162113 +M520191011111119712119851101WTTTYT@0T22222222222220212131200000000 +M520191011111119712119760618WTTTPPBP922222212222220112161240600000 +M520191011111119712120160603WTTTP9B@T222122222222 0422981 0000 +M520191011111119712120140622WTTTPY900222222222222 0422981 0000 +M520191011111119712120110107WTTTP9BPW222222222222 0422011 0000 +M520191011111119712120090719WTTT09ZBZ222222122222 0422042 0000 +M42019101111112039821100401181163113 +M520191011111120398119870607WTTT#WB0Y12222222222250112121120550000 +M520191011111120398120090526WTTT0@9ZP122222122222 0422031 0000 +M520191011111120398120070716WTTT0PT9P122222222222 0422061 0000 +M42019101111112040420600400871163113 +M520191011111120404119950723WTTT#ZW#922222222222210112121116570000 +M520191011111120404120140508WTTT##PY#222222122222 0422981 0000 +M42019101111112067722400405111161113 +M520191011111120677119850713WTTT#BB#T22222122222210112131124430007 +M520191011111120677120120707WTTTPZB0@222221222222 0422011 0000 +M520191011111120677120101114WTTTY0Z9@222121122222 0422021 0000 +M42019101111112087020000404271163113 +M520191011111120870119880626WTTTPBBPP22122222222210112111129230000 +M520191011111120870120150621WTTT#BPP9222222122222 0422981 0000 +M520191011111120870120070619WTTTYW##9221222122222 0422061 0000 +M42019101111112089022700400441163113 +M520191011111120890119940715WTTTPW0#Y12222222222210112121100000000 +M520191011111120890120120115WTTT0TY#W122221222222 0422981 0000 +M42019101111112090220600405341163113 +M520191011111120902119930103WTTTYBBW#12222222222210112111113910000 +M520191011111120902120160102WTTTYW#9B122222222222 0422981 0000 +M42019101111112090920600405171163113 +M520191011111120909119860715WTTTP@@Y012222222222210112111119870000 +M520191011111120909120100701WTTT0@T#Y122222122222 0422031 0000 +M520191011111120909120080115WTTTPW##Z122222222221 0422051 0801 +M520191011111120909120021123WTTTY#@ZZ122222122221 0422101 0801 +M42019101111112095621700406751163113 +M520191011111120956119880502WTTT#B#B#12222122222210112121119340000 +M520191011111120956120130507WTTT0YBWW122121222222 0422981 0000 +M520191011111120956120060723WTTTYTPZT122222222222 0422071 0000 +M42019101111112100522400400961163113 +M520191011111121005119931119WTTT#W0@922122222222210112111115170000 +M520191011111121005120140106WTTT#009B221222222222 0422981 0000 +M42019101111112132520600405171161113 +M520191011111121325119870707WTTT##TW912222222222210112111111020000 +M520191011111121325120180116WTTTP##PZ122222122222 0422981 0000 +M520191011111121325120150102WTTTP#YBZ222222222222 0422981 0000 +M520191011111121325120090602WTTT#ZPY#122222122222 0422041 0000 +M42019101111112133222700402231163113 +M520191011111121332119920101WTTTYYW9#22222122222210112121112400000 +M520191011111121332120170121WTTTPTZY#222221122222 0422981 0000 +M520191011111121332120130622WTTT0T@B9222221122222 0422981 0000 +M42019101111112136822700403941163113 +M520191011111121368119860121WTTT#9PZW12222222222210112121119630000 +M520191011111121368120160614WTTTY#PB@222222122222 0422981 0000 +M520191011111121368120090716WTTTY#90#122222222222 0422041 0000 +M42019101111112148821700404181163113 +M520191011111121488119820806WTTT0@YZ@22222122222220112121112910000 +M520191011111121488120130502WTTTP#90T222222122222 0422981 0000 +M520191011111121488120020501WTTTY0@9W222221222222 0422101 0000 +M42019101111112161320000402101163113 +M520191011111121613119880702WTTT0Y00@12222222222210112121127910000 +M520191011111121613120140719WTTT#90YZ122222122222 0422981 0000 +M520191011111121613120100626WTTT0##Y@122222222222 0422031 0000 +M520191011111121613120050615WTTTPB#9B122222122222 0422081 0000 +M42019101111112180321700404201163113 +M520191011111121803119840509WTTT#0TZZ12222222222230112121112740000 +M520191011111121803120160119WTTTPWW9W122222222222 0422981 0000 +M520191011111121803120090101WTTT#@BYY122222222222 0422041 0000 +M520191011111121803120070513WTTT0T0WY122222122222 0422061 0000 +M42019101111112190721100403821163113 +M520191011111121907119770726WTTTY@PP012222222222250112112123140000 +M520191011111121907120080601WTTTPTWB#122222122222 0422052 0000 +M520191011111121907120040518WTTT#WPWZ122222122222 0422092 0000 +M42019101111112193120900402921163113 +M520191011111121931119780815WTTTPYZZ#22212222222210112112112690000 +M520191011111121931120161121WTTTY@WBW222122122222 0422981 0000 +M520191011111121931120040715WTTTPP@YB222222222222 0422092 0000 +M42019101111112194420600400871163113 +M520191011111121944119940503WTTT#BP##12222222222210112111123200000 +M520191011111121944120130726WTTTYZT@Z122222122222 0422981 0000 +M42019101111112208221400400351163113 +M520191011111122082119940113WTTT00YTW22212222222210112111128010000 +M520191011111122082120150606WTTTYZZZT222222122222 0422981 0000 +M42019101111112226422700402581163113 +M520191011111122264119850123WTTT0#YWZ22212222222210112121123290000 +M520191011111122264120080626WTTT0B0BT222222222222 0422051 0000 +M520191011111122264120080626WTTTYZ9@0222222222222 0422051 0000 +M520191011111122264120060701WTTT00YYB222222222222 0422071 0000 +M42019101111112228821100406001162113 +M520191011111122288119930819WTTT00#WP12222221222230112111110400767 +M520191011111122288120150119WTTT#BZZZ222222222222 0422981 0000 +M520191011111122288120140819WTTTY0Z@0222222222222 0422981 0000 +M42019101111112239320900403031163113 +M520191011111122393119880626WTTT#P@@Z12222222222210112111100000000 +M520191011111122393120090123WTTT09ZP9222222222222 0422041 0000 +M42019101111112262320900403071161113 +M520191011111122623119720502WTTT099#P12222222222210112131122520000 +M520191011111122623120050719WTTTP9ZY9122222122222 0422081 0000 +M42019101111112274522700400671163113 +M520191011111122745119840116WTTTPTZZB22212222222210112121130160000 +M520191011111122745120060722WTTTPTYB0222122122222 0422071 0000 +M520191011111122745120010101WTTT0B0WT222122122222 0422111 0000 +M42019111111111115520900406421163113 +M520191111111111155119870522WTTTP#WT022212222222210112112115860000 +M520191111111111155120141109WTTTP#ZW9122221222222 0422981 0000 +M520191111111111155120100523WTTTY9BPZ222222222222 0422031 0000 +M520191111111111155120071119WTTT0WT9@222122122222 0422051 0000 +M42019111111111159121100401461163113 +M520191111111111591119870115WTTTY0BYZ22222122222210112111119800000 +M520191111111111591120100708WTTTPWWPT222221222222 0422031 0000 +M42019111111111162720000402101163113 +M520191111111111627119700609WTTTPZWZ#22212222222210112121132190000 +M520191111111111627120170726WTTTY0BYT222122222222 0422981 0457 +M520191111111111627120110606WTTTYWBBB222222222222 0422021 0457 +M520191111111111627120070802WTTTYYTTP222222122222 0422061 0457 +M520191111111111627120050119WTTT#9WYT222222222222 0422071 0457 +M520191111111111627120040721WTTTP90@T222222122222 0422091 0457 +M42019111111111182121100402161163113 +M520191111111111821119910801WTTTPBY0#22222222222210112081116650000 +M520191111111111821120170615WTTTYB9WY222122222222 0422981 0000 +M520191111111111821120160113WTTTYT9Y@222122122222 0422981 0000 +M42019111111111214521700404101011113 +M520191111111112145119890626WTTTY#BPP22212222222210112131127080000 +M520191111111112145120140107WTTTPPPYW222222122222 0422981 0000 +M520191111111112145120080801WTTTY0#ZT222122222222 0422051 0000 +M42019111111111216420900406421161113 +M520191111111112164119880723WTTTP0ZZZ22212222222210112121125700000 +M520191111111112164120170501WTTTPP#@P122122222222 0422981 0000 +M520191111111112164120090722WTTTYZB#B222222222222 0422041 0000 +M42019111111111222821100406471163113 +M520191111111112228119890523WTTT#@@TT22122222222210112111110830000 +M520191111111112228120150526WTTT00W@0222221222222 0422981 0000 +M42019111111111235222200401591163113 +M520191111111112352119810107WTTTP#P0Z22222122222220112121116830000 +M520191111111112352119630109WTTT090YP22222112222220212121125940000 +M520191111111112352120070614WTTTBTZ@@222221222222 0422061 0000 +M42019111111111250921700406571163113 +M520191111111112509119920726WTTTY0B#T22222122222210112161123980000 +M520191111111112509120130101WTTT#BB@Y222221222222 0422981 0000 +M42019111111111276220000400171163113 +M520191111111112762119900107WTTTPYTP022222122222210112121118260000 +M520191111111112762120151109WTTTP@WPP222221222222 0422981 0000 +M42019111111111282320900400501163113 +M520191111111112823119890815WTTTP90BZ21212212222210112121112570000 +M520191111111112823120190119WTTTYPYYB222222222222 0422981 0000 +M42019111111111297922700400681163113 +M520191111111112979119940507WTTTP9WTW22222122222210112121119860000 +M520191111111112979120140702WTTT0ZPBP222222222222 0422981 0000 +M520191111111112979120090719WTTTYW@Y@222221122222 0422041 0000 +M42019111111111317221100404791163113 +M520191111111113172119820715WTTTP0PZY22222122222250112111129460000 +M520191111111113172120090106WTTTPY0BW222221222222 0422031 0000 +M520191111111113172120080619WTTTYBY#@222221122221 0422051 0248 +M520191111111113172120030101WTTT0BZPY222221122221 0422101 0325 +M42019111111111336120600400291163113 +M520191111111113361119780607WTTT0BWWP22222222222210112111136860000 +M520191111111113361120110626WTTTPZTZ9122222222222 0422021 0000 +M520191111111113361120090109WTTTY9BP0222222122222 0422041 0000 +M520191111111113361120011126WTTTP00T0122222122222 0422111 0000 +M42019111111111343621700404101993113 +M520191111111113436119960607WTTTYPT0922222122222210112111113930000 +M520191111111113436120190501WTTT#W#00222222122222 0422981 0000 +M42019111111111350321100406001163113 +M520191111111113503119840513WTTT0BZYW12222222222230112121129460000 +M520191111111113503120130606WTTTP9TBY122222122222 0422981 0000 +M520191111111113503120080815WTTTYPZP9222222222222 0422051 0000 +M520191111111113503120060106WTTTP#9Z0122222222222 0422061 0000 +M520191111111113503120050714WTTT0Z#T@122222222222 0422081 0000 +M42019111111111367321400400351161113 +M520191111111113673119871121WTTT0P9ZP12212222222210112121132630000 +M520191111111113673120170801WTTT##TZW122222222222 0422981 0000 +M520191111111113673120110612WTTT#B##Z122222222222 0422021 0000 +M520191111111113673120080119WTTTYWBWB222122222222 0422051 0000 +M42019111111111408720900403431161113 +M520191111111114087119750507WTTT09@WB22212212222250112111129550000 +M520191111111114087120170809WTTT#Z0W@222122122222 0422981 0000 +M520191111111114087120140606WTTT09ZBW222222222222 0422981 0000 +M520191111111114087120120526WTTTYY@YP222122122222 0422011 0000 +M520191111111114087120040114WTTT#TZ0Y222122222222 0422081 0000 +M42019111111111446020300404901163113 +M520191111111114460119940103WTTT0Z9B022222122222210112111121460000 +M520191111111114460120160801WTTT00BZY222221122222 0422981 0000 +M42019111111111482021100401461162113 +M520191111111114820119740126WTTT0@@PZ22222222222210112122122310000 +M520191111111114820120050706WTTT#YY0T222222222222 0422081 0000 +M42019111111111492420900404651163113 +M520191111111114924119800101WTTT#TZZP22122222222210112081114570000 +M520191111111114924120130121WTTT09PPZ221222222222 0422981 0000 +M42019111111111495921100406001163113 +M520191111111114959119910519WTTT0W#@012222222222210112121114980000 +M520191111111114959120160119WTTTP9PYT122222122222 0422981 0000 +M520191111111114959120141126WTTTYZPWZ122222122222 0422981 0000 +M42019111111111503420000406911162113 +M520191111111115034119820106WTTT0##@Z22222222222220112111119930000 +M520191111111115034120131108WTTT0PZY#222222222222 0422981 0000 +M520191111111115034120110101WTTTP0ZW9222222122222 0422021 0000 +M520191111111115034120060106WTTT0###W222222222222 0422061 0000 +M42019111111111518322700402001163113 +M520191111111115183119860115WTTTPYZ0T22222122222210112141124620000 +M520191111111115183120110707WTTT0@90W222221122222 0422021 0000 +M42019111111111522622700402801161113 +M520191111111115226119810701WTTTYWP9W22222122222210112121130660000 +M520191111111115226120150523WTTTY9T@0222222122222 0422981 0000 +M520191111111115226120110102WTTTP9Y09222221122222 0422011 0000 +M520191111111115226120051114WTTTYYWZ#222221222222 0422071 0000 +M42019111111111528722700406401162113 +M520191111111115287119890115WTTTYYZYW22222122222210112121100000000 +M520191111111115287120131106WTTTPYT#Z222221222222 0422981 0000 +M42019111111111529521400400351163113 +M520191111111115295119860115WTTTYWY@022222222222230112112117310000 +M520191111111115295120130513WTTT0@TWB122222222222 0422981 0309 +M520191111111115295120090119WTTT#B09Y222222122222 0422041 0309 +M520191111111115295120020612WTTT#9@9@222212222222 0422113 0000 +M42019111111111550820600400871163113 +M520191111111115508119780109WTTT0#0PB22222121222220112131111920989 +M520191111111115508120180526WTTTYTYPY222221222222 0422981 0000 +M520191111111115508120020614WTTTP##W@222221222221 0422111 0707 +M42019111111111588620600402031163113 +M520191111111115886119900507WTTTYB90012222222222250112121117940000 +M520191111111115886120181119WTTT#WWWB122222122222 0422981 0000 +M520191111111115886120160519WTTTPZW@W122222222222 0422981 0000 +M520191111111115886120110116WTTTPWPY0122222222222 0422011 0000 +M42019111111111593620600400871013113 +M520191111111115936119890122WTTTP0@W#22222122222250112121112710000 +M520191111111115936120180114WTTTY#0ZT222222222222 0422981 0000 +M520191111111115936120110526WTTTYP@B0222221222222 0422021 0000 +M42019111111111602720900402921163113 +M520191111111116027119950702WTTTYT@0Z22212222222210112081122700000 +M520191111111116027120180506WTTTYBBTW222122222222 0422981 0000 +M42019111111111607021100406001161113 +M520191111111116070119850726WTTTYB0##12222122222210112121119090000 +M520191111111116070120180512WTTTPBBY#122222222222 0422981 0000 +M520191111111116070120170619WTTT0WPTT122222222222 0422981 0000 +M520191111111116070120160518WTTTP@YW9122221222222 0422981 0000 +M520191111111116070120080115WTTTYZT0T122222122222 0422051 0000 +M520191111111116070120050507WTTT#WYW#122222222222 0422081 0000 +M42019111111111609421200404691163113 +M520191111111116094119860123WTTT0P@BP22222122222220112121123400000 +M520191111111116094120160102WTTTP#BB9222222222222 0422981 0000 +M520191111111116094120130519WTTTYYP0Z222221222222 0422981 0000 +M42019111111111630920900406421163113 +M520191111111116309119750814WTTT0@B0P22212222222250112081126610000 +M520191111111116309120110615WTTT0Z0P@222222222222 0422021 0000 +M42019111111111631622700402231163113 +M520191111111116316119900719WTTTY9Z@922222122222210112131123280000 +M520191111111116316120071115WTTTPBYP0222221222222 0422051 0000 +M520191111111116316120071115WTTTP9TWT222221222222 0422051 0000 +M42019111111111637720600405771163113 +M520191111111116377119920615WTTTY99ZW22222122222210112122122450000 +M520191111111116377119900623WTTT0#@Z@22212212222211012122109110000 +M520191111111116377120180826WTTT0##T9222212222222 0422981 0000 +M520191111111116377120170501WTTT##B@B222212122222 0422981 0000 +M520191111111116377120150615WTTT0T0W#222212122222 0422981 0000 +M42019111111111645221700401121163113 +M520191111111116452119881107WTTTY0ZBP21222122222220112121100000000 +M520191111111116452120130515WTTTYB#0P212222222222 0422981 0425 +M520191111111116452120100515WTTT0@0TZ212222122222 0422031 0000 +M42019111111111673022700403611163113 +M520191111111116730119900619WTTTYWPWZ22222122222230112121124000000 +M520191111111116730120130101WTTTPYT0B222121122222 0422981 0000 +M520191111111116730120070115WTTTYZ@0T222221122222 0422051 0000 +M42019111111111680822400406121163113 +M520191111111116808119770112WTTTP#0PB22222222222210112111131710000 +M520191111111116808120110101WTTTYTP0W222222122221 0422011 0444 +M520191111111116808120050609WTTTYTP@9222222122222 0422081 0000 +M42019111111111683721100406001163113 +M520191111111116837119940802WTTT#WY9912222222222210112081126330000 +M520191111111116837120160613WTTT#B0P9122222222222 0422981 0000 +M520191111111116837120130601WTTTPT00@122222122222 0422981 0000 +M42019111111111690720900406601163113 +M520191111111116907119800518WTTTYTTP@12222222222210112111125080000 +M520191111111116907120180103WTTT0#W#T222221122222 0422981 0000 +M520191111111116907120140819WTTTPT9P@122222222222 0422981 0000 +M520191111111116907120070723WTTT#0#0T222222122222 0422061 0675 +M42019111111111759521700400091163113 +M520191111111117595119900114WTTTP#ZWP22222122222210112121113240000 +M520191111111117595120150626WTTT#0ZTZ222221122222 0422981 0000 +M520191111111117595120070823WTTTYYY0W222221222222 0422061 0000 +M42019111111111764520000404071162113 +M520191111111117645119830118WTTTY#PP912222222222210112121127790000 +M520191111111117645120110102WTTT#0WW@122222222222 0422021 0000 +M520191111111117645120090115WTTTYPY#Y222222222222 0422031 0000 +M520191111111117645120070701WTTT0ZBZ0122222222222 0422061 0000 +M42019111111111786522700402401163113 +M520191111111117865119860108WTTT#0TBT22222122222210112121114230000 +M520191111111117865120130106WTTT09PZZ222222122222 0422981 0000 +M520191111111117865120100126WTTT#@WWT222221122222 0422021 0023 +M520191111111117865120080521WTTTYPYYW222221222222 0422051 0023 +M42019111111111793522400403441162113 +M520191111111117935119770115WTTT#0#YW12222122222230112111124050000 +M520191111111117935120050101WTTT0PZZ@122222122222 0422071 0000 +M520191111111117935120011102WTTT#9@##122222222222 0422111 0000 +M42019111111111802220900402621161113 +M520191111111118022119880706WTTT0TBYB12222122222210112121117250000 +M520191111111118022120180126WTTTYZ00T122222122222 0422981 0000 +M520191111111118022120140708WTTTPB@#B122222222222 0422981 0000 +M520191111111118022120081119WTTT#ZZB9122221222222 0422041 0000 +M42019111111111807220600405471161113 +M520191111111118072119891123WTTT0WZ9@22212222222210112111121140000 +M520191111111118072120110606WTTT#YZPB222122222222 0422021 0000 +M42019111111111842621100401691163113 +M520191111111118426119910122WTTT0ZWWY22222122222210112111115340000 +M520191111111118426120160106WTTT#TPZZ222222222222 0422981 0175 +M42019111111111853121400400351161113 +M520191111111118531119760706WTTTYW#B@22212222222210112131115650000 +M520191111111118531120100501WTTTPT99T222122122222 0422031 0000 +M520191111111118531120100501WTTT0#T@#222122122222 0422031 0000 +M520191111111118531120060119WTTT#B@ZW222122122222 0422061 0000 +M42019111111111856722200402681162113 +M520191111111118567119740615WTTT0Y#9T22222122222250112111142910000 +M520191111111118567120090526WTTTPZTZ0222221122222 0422041 0000 +M520191111111118567120070807WTTTPPTTB222221222222 0422061 0000 +M520191111111118567120050706WTTT#T#WW222221222222 0422081 0000 +M42019111111111884720600401421163113 +M520191111111118847119940126WTTTYYT@#22222122222210112111117740000 +M520191111111118847120180726WTTT#TWWW222222222222 0422981 0000 +M42019111111111893921100402161163113 +M520191111111118939119790102WTTT09P#022212222222220112111129990000 +M520191111111118939119740115WTTTPY0P922212212222220212112107280000 +M520191111111118939120100815WTTTPZ9#T222122122222 0422031 0000 +M520191111111118939120080101WTTT0YZWT222122222222 0422041 0000 +M520191111111118939120070706WTTTY9YW9222122222222 0422061 0000 +M520191111111118939120040509WTTTY@WTP222122122222 0422091 0000 +M42019111111111902722700403941162113 +M520191111111119027119930112WTTTY@00T12222222222210112111113050000 +M520191111111119027120130119WTTT0@BWY222222222222 0422981 0000 +M42019111111111913522700400671163113 +M520191111111119135119930706WTTT0TYWB22222122222210112111114480000 +M520191111111119135120150721WTTTPWBZB222221122222 0422981 0000 +M42019111111111918421100403821163113 +M520191111111119184119850101WTTT#@B#Y22221222222210112111119500000 +M520191111111119184120110119WTTT#ZBB#222222122221 0422011 0468 +M520191111111119184120070123WTTTYTW#@222222222222 0422061 0000 +M520191111111119184120040501WTTT#9TZP222222222222 0422091 0000 +M42019111111111920720000402281012113 +M520191111111119207119690106WTTTYY#@T12222222222210112111128150000 +M520191111111119207120040119WTTT#ZTZT222222122222 0422081 0000 +M42019111111111929121400400351162113 +M520191111111119291119890114WTTTP9@BT22212222222210112131100000000 +M520191111111119291120170623WTTTY9@0Y222222222222 0422981 0048 +M42019111111111930321100401181162113 +M520191111111119303119950115WTTTYZ0PZ22212222222210112121121670000 +M520191111111119303120140101WTTTPPB@#222122222222 0422981 0000 +M42019111111111942320900406601163113 +M520191111111119423119820614WTTTPT9T912222222222210112111124920000 +M520191111111119423120150112WTTT#W#PW122222122222 0422981 0000 +M520191111111119423120030112WTTTP@BT@122222222222 0422091 0000 +M42019111111111942920000402281163113 +M520191111111119429119830701WTTT00@##22222122222230112111114450000 +M520191111111119429120140706WTTT0WYWT222221122222 0422981 0000 +M42019111111111951021100403821163113 +M520191111111119510119970723WTTTY#B9Z12222222222210112081125040000 +M520191111111119510120160119WTTTP0ZP@122222222222 0422981 0000 +M42019111111111954020000404151163113 +M520191111111119540119720622WTTTY90YP12212222222210112112118730000 +M520191111111119540120110126WTTTPZZTZ122122122222 0422021 0000 +M42019111111111956720600401421163113 +M520191111111119567119930119WTTT0##0@12222222222210112081113000000 +M520191111111119567120170122WTTTPP000222221122222 0422981 0000 +M42019111111111962320500402421163113 +M520191111111119623119841102WTTTPYPY@22222122222210112111118080000 +M520191111111119623120170608WTTTYWZ9#222222222222 0422981 0000 +M520191111111119623120140126WTTT09WYP222221122222 0422981 0000 +M42019111111111986520500402421162113 +M520191111111119865119790801WTTTY#BZT22212222222210112131117520000 +M520191111111119865120151115WTTTY0###122122222222 0422981 0000 +M520191111111119865120140801WTTT#099T222122222222 0422981 0000 +M520191111111119865120020102WTTT#B@Z@222122222222 0422111 0000 +M42019111111112034021700402341163113 +M520191111111120340119910518WTTT#BBB922212222222210112112120940000 +M520191111111120340120160107WTTT##9P@222221122222 0422981 0000 +M42019111111112036520600402121163113 +M520191111111120365119950813WTTT00#WB12222222222220112121112550900 +M520191111111120365120130121WTTT##T0#122222122222 0422981 0000 +M42019111111112042120600401421161113 +M520191111111120421119700706WTTT#@WW922122222222210112111120190000 +M520191111111120421120030615WTTTP#9WZ221222222222 0422101 0000 +M42019111111112059820900401881161113 +M520191111111120598119690718WTTT0#@@912222222222210122121130870000 +M520191111111120598120150118WTTTP90T@122221222222 0622981 0000 +M520191111111120598120140113WTTTY@0Z@122222222222 0622981 0000 +M42019111111112064020600402031163113 +M520191111111120640119740526WTTT#@YTW12222222222210122111118780000 +M520191111111120640120080113WTTTYP@B#122222122221 0722041 0801 +M42019111111112065221700402341993113 +M520191111111120652119931113WTTTY#0W922222122222210112111111270000 +M520191111111120652120190721WTTT09BP@222222222222 0422981 0000 +M42019111111112080420000404071013113 +M520191111111120804119800722WTTT#WWBZ12222222222210112141126170000 +M520191111111120804120060623WTTT##9@Y122222222222 0422071 0000 +M42019111111112087821700406891163113 +M520191111111120878119870115WTTTYYYP@22222122222210112111125820000 +M520191111111120878120130706WTTT0TB@W222221122222 0422981 0000 +M520191111111120878120100502WTTT#PZ0#222221122222 0422031 0000 +M42019111111112114721400401581162113 +M520191111111121147119960121WTTTP@ZW022212222222210112081117640000 +M520191111111121147120170702WTTTPYTWB222222122222 0422981 0000 +M42019111111112123220500404091163113 +M520191111111121232119910621WTTTPB9#@22222122222210112121100000000 +M520191111111121232120180109WTTT#@@09222221222222 0422981 0000 +M520191111111121232120130709WTTTPB@9Y222222222222 0422981 0000 +M42019111111112143520600405471163113 +M520191111111121435119791101WTTT#P9W012222222222210112111114320000 +M520191111111121435120150526WTTTYB9@Z122222122222 0422981 0000 +M520191111111121435120070116WTTTP#TB0122222222222 0422051 0000 +M42019111111112176220600401981162113 +M520191111111121762119950526WTTTYTY9#12222222222210112121119190000 +M520191111111121762120150115WTTT0WWBY122222222222 0422981 0000 +M42019111111112181222700400671123113 +M520191111111121812119660623WTTT0YY9Y22212222222210112081122160000 +M520191111111121812120080121WTTTY0ZPY222222122222 0422041 0000 +M42019111111112187321700402861163113 +M520191111111121873119670122WTTT0TB@#22222122222250112141117600000 +M520191111111121873120080801WTTTPBBP#222221122222 0422051 0000 +M520191111111121873120030501WTTT#YY0Z222221222222 0422101 0000 +M42019111111112196621400400351163113 +M520191111111121966119890119WTTT#9@9W22212222222210112111116641240 +M520191111111121966120160123WTTTYP99W222222222222 0422981 0000 +M520191111111121966120140515WTTTPYT00222222222222 0422981 0000 +M520191111111121966120080815WTTT#ZZZY222222222222 0422051 0000 +M42019111111112228222400401281163113 +M520191111111122282119890101WTTT#9WZB12222222222210112161121730000 +M520191111111122282120180626WTTTY9BYW122222222222 0422981 0000 +M42019111111112234120900403071162113 +M520191111111122341119910519WTTTPW@ZT12212222222210112111115790000 +M520191111111122341120130115WTTT#Y9YW122122222222 0422981 0000 +M520191111111122341120090106WTTTY#0P@122122222222 0422031 0000 +M42019111111112258122700400671193113 +M520191111111122581119890108WTTT0Z0PW12222222222230112122112320000 +M520191111111122581120140507WTTTYY@BB122222222222 0422981 0000 +M520191111111122581120091121WTTT#BTZY122222122222 0422031 0000 +M520191111111122581120080616WTTT0BT@Z122222122222 0422051 0000 +M42019111111112290621700404401163113 +M520191111111122906119870623WTTT0BY0022222122222210112131126000000 +M520191111111122906120141101WTTTP0YWW222222122222 0422981 0000 +M520191111111122906120070608WTTTYBT@@222221222222 0422061 0000 +M520191111111122906120050801WTTTPBWPT222221122222 0422081 0000 +M42019111111112298220000401371163113 +M520191111111122982119830113WTTT#YTTW22222122222230112111117290000 +M520191111111122982120060619WTTTPB#PZ222221122222 0422071 0000 +M42019121111111171820900401881161113 +M520191211111111718119830119WTTT0ZWB#22212222222210112111116760000 +M520191211111111718120170619WTTT##9PB222122122222 0422981 0000 +M42019121111111188720000401061162113 +M520191211111111887119850101WTTTPYPW@22222122222210112121133580000 +M520191211111111887120140702WTTTPP9##222221222222 0422981 0000 +M520191211111111887120120601WTTTPB000222221222222 0422011 0000 +M520191211111111887120090119WTTT#0T9@222122222222 0422041 0000 +M520191211111111887120070106WTTTP0WWZ222221122222 0422061 0000 +M42019121111111199920900403071163113 +M520191211111111999119830603WTTTPWBZ#22212222222210112131129160000 +M520191211111111999120130802WTTTPTW@T222122122222 0422981 0000 +M520191211111111999120050507WTTT#PY#@222122122222 0422081 0000 +M42019121111111201721100406391163113 +M520191211111112017119840518WTTT00WYP22222122222210112121115350000 +M520191211111112017120170101WTTTP#BZ0222222122222 0422981 0000 +M520191211111112017120070119WTTT#@#PW222221222222 0422051 0000 +M42019121111111210920000403721162113 +M520191211111112109119910701WTTTY9Z9B12222222222210112121119590000 +M520191211111112109120140114WTTTPTP@Z222222122222 0422981 0000 +M520191211111112109120101126WTTTY@T@9222222222222 0422021 0000 +M520191211111112109120070502WTTT#9WY9122222222222 0422061 0000 +M42019121111111219821700404101013113 +M520191211111112198119630101WTTTYPBYZ22222112222250112111148300000 +M520191211111112198120060602WTTT0Y9##222221222222 0422071 0000 +M42019121111111221220300404901163113 +M520191211111112212120040113WTTT#T0ZB22212112222210412081200000000 +M520191211111112212119770101WTTTYBBZW22212112222210112131234620000 +M520191211111112212120120608WTTTP@BP9222122222222 0422011 0000 +M42019121111111231721400406791163113 +M520191211111112317119801101WTTTPYYYY12222222222210112121123240000 +M520191211111112317120061106WTTTYTYTY222221122222 0422061 0000 +M42019121111111241221700406751163113 +M520191211111112412119910103WTTT0BTW@12222222222210112131125610000 +M520191211111112412120150723WTTTY9#ZY222222222222 0422981 0000 +M42019121111111263020600406451163113 +M520191211111112630119770502WTTT09@0Z22222122222220112111127310000 +M520191211111112630120050123WTTTPZPT0222221222222 0422081 0000 +M42019121111111264722700404531161113 +M520191211111112647119860521WTTTPB#0Z22222122222230112111127190000 +M520191211111112647120150607WTTTY9@PB222222222222 0422981 0000 +M520191211111112647120140122WTTT00ZY@222122122221 0422981 0698 +M520191211111112647120100506WTTT00WT9222221222222 0422031 0000 +M520191211111112647120080501WTTT0##TP222222122222 0422051 0000 +M520191211111112647120060101WTTTYP@00222221222222 0422071 0320 +M42019121111111297320500402421163113 +M520191211111112973119881122WTTT#WT@#22222112222210112131120650000 +M520191211111112973120150819WTTTYPZB0222221122222 0422981 0000 +M520191211111112973120131113WTTTYZ9@9222221222221 0422981 0808 +M42019121111111314222700400671162113 +M520191211111113142119890506WTTT00B0T22212222222210112121118880000 +M520191211111113142120180108WTTT#9#9#122222122222 0422981 0000 +M520191211111113142120120726WTTT#@WY#222222222222 0422011 0000 +M520191211111113142120100615WTTTPW#BB222122122222 0422031 0000 +M42019121111111317622700403241163113 +M520191211111113176119850123WTTT#@#9Y22222122222210112111122240000 +M520191211111113176120190622WTTT0YB9#222221222222 0422981 0000 +M520191211111113176120150619WTTTY00@0222222122222 0422981 0000 +M42019121111111317922700403241993113 +M520191211111113179119920123WTTTPWWBW22222122222210112111113930000 +M520191211111113179120180618WTTTPPWWW222221122222 0422981 0000 +M42019121111111342620000400131161113 +M520191211111113426119710115WTTTY0WWY22212222222210112111118570000 +M520191211111113426120100619WTTTYTZPY222122222222 0422031 0000 +M520191211111113426120050601WTTTP#P#Z222122222222 0422081 0000 +M42019121111111392820900401231163113 +M520191211111113928119720115WTTTP##BW22222222222220212112115350000 +M520191211111113928119630126WTTTPYZ#P22222212222220112112117290000 +M520191211111113928120130121WTTT0PBZ9122222122222 0422981 0000 +M520191211111113928120020101WTTT#9T@#222222122222 0422112 0000 +M42019121111111431821100403821163113 +M520191211111114318119970626WTTTP#Y#B12222222222210112121125290000 +M520191211111114318120160801WTTTPZ#YP122222222222 0422981 0000 +M520191211111114318120140113WTTT#Z99B122222122222 0422981 0000 +M42019121111111433821100406001163113 +M520191211111114338119900606WTTTPYPTT12222222222230112141119700000 +M520191211111114338120180801WTTT0ZW@W222222122222 0422981 0000 +M520191211111114338120160512WTTTP#00@122222222222 0422981 0000 +M42019121111111459521400400771163113 +M520191211111114595119880506WTTT#W@YZ22212212222210222111200000000 +M520191211111114595119850612WTTT#0@PT22222122222220112121120200000 +M520191211111114595120090601WTTT09WYB222221222222 0422041 0000 +M520191211111114595120090601WTTTYW#ZT222221122222 0422041 0000 +M520191211111114595120050723WTTT#T09Y222221122222 0422081 0000 +M42019121111111483720000401371163113 +M520191211111114837119920519WTTT0#BTW22222122222210112121127160000 +M520191211111114837120160108WTTT0Z@Y#222221122222 0422981 0000 +M520191211111114837120150502WTTTY9PT0222221122222 0422981 0000 +M42019121111111486121700401121162113 +M520191211111114861119810715WTTT0TB0Y22222122222230112132114670000 +M520191211111114861120150102WTTTPP#W#122222222222 0422981 0000 +M42019121111111489020600401981163113 +M520191211111114890119930818WTTTP0ZZ@22222122222210112121124490000 +M520191211111114890120170806WTTT0B@0Y222222122222 0422981 0000 +M520191211111114890120140115WTTTP09WP122222122222 0422981 0000 +M520191211111114890120091112WTTTYPTY0122222122222 0422031 0000 +M42019121111111508320600404951013113 +M520191211111115083119910121WTTT0TTBT22222122222211012111123410000 +M520191211111115083119880719WTTTPTBYW22222112222210112111116340000 +M520191211111115083120150518WTTTPWYPT222221122222 0422981 0000 +M520191211111115083120110521WTTT00#Z0222221122222 0422021 0000 +M42019121111111512620600402031163113 +M520191211111115126119880123WTTTP0W0#12222122222210112121127680000 +M520191211111115126120050115WTTT0#0WT222122122222 0422081 0000 +M42019121111111514620900400501163113 +M520191211111115146119810521WTTTP@09W22222222222210112112130730000 +M520191211111115146120120602WTTTP90B9222122122222 0422012 0000 +M520191211111115146120090122WTTTYT0ZP222122122222 0422042 0000 +M42019121111111521221700405631163113 +M520191211111115212119890821WTTT#BB9B22222122222230112111129210000 +M520191211111115212120150103WTTT#Y##Y222221122222 0422981 0000 +M520191211111115212120120823WTTTPB#ZT222221122222 0422011 0000 +M520191211111115212120090626WTTT#Z@9B222221122222 0422041 0000 +M42019121111111543720000402101163113 +M520191211111115437119831107WTTT#PTT922222122222250112121120471404 +M520191211111115437120170516WTTTPWPB0222221122222 0422981 0000 +M520191211111115437120121106WTTT##WZ9222221222222 0422981 0000 +M520191211111115437120030509WTTT0B9BW222221122222 0422101 0000 +M42019121111111567121100401691163113 +M520191211111115671119860101WTTT#@T0T12222222222210112121122270000 +M520191211111115671119861119WTTT#Z@W912222212222210212121120350000 +M520191211111115671120090519WTTT#TW0Y122222122222 0422041 0000 +M520191211111115671120080112WTTT0Z#Y#122222122222 0422051 0000 +M42019121111111582622400401481993113 +M520191211111115826119900123WTTT#W@BW22122222222250112111122990000 +M520191211111115826120160101WTTTPTW9W221222122222 0422981 0000 +M520191211111115826120150115WTTT#TW#W221222122222 0422981 0000 +M520191211111115826120130119WTTTPY@Y0221222122222 0422981 0000 +M42019121111111601521400406791161113 +M520191211111116015119860526WTTT00WY922212222222210112111118570000 +M520191211111116015120100521WTTTY0#BT222222222222 0422031 0000 +M520191211111116015120030115WTTTPWPWT222221122222 0422091 0000 +M42019121111111628020900402921161113 +M520191211111116280119860526WTTTY#Y0W12222222222210112121124190000 +M520191211111116280120150719WTTT00#WT122222122222 0422981 0000 +M520191211111116280120050121WTTT0B9@#122222122222 0422081 0000 +M520191211111116280120040118WTTT#99ZY122222222222 0422091 0000 +M42019121111111637020600405341162113 +M520191211111116370119880519WTTTP#YZB12222222222210112131126930000 +M520191211111116370120180101WTTTY@ZW@222222122222 0422981 0000 +M520191211111116370120070502WTTTYZZ@Z122222122222 0422061 0000 +M42019121111111640822400401011161113 +M520191211111116408119810126WTTTYWZBZ22212212222220112121241330000 +M520191211111116408119800723WTTTP#0#Y22212222222220212121200000000 +M520191211111116408120131115WTTT0ZTBY222122122222 0422981 0000 +M520191211111116408120110102WTTT#YWW0222222222222 0422021 0000 +M520191211111116408120100815WTTTYT@99222122122222 0422031 0000 +M42019121111111649822700403611163113 +M520191211111116498119771116WTTTYPYT922222122222210112121123710000 +M520191211111116498120101115WTTT#9ZB#222221222222 0422021 0000 +M520191211111116498120060101WTTTYZZTB222222122222 0422061 0000 +M42019121111111676121400400351163113 +M520191211111116761119840808WTTTYT9YZ22212222222210112111121940000 +M520191211111116761120100701WTTT#00W@222122222222 0422031 0000 +M520191211111116761120090702WTTT#ZWP@222122122222 0422041 0000 +M520191211111116761120060123WTTT0BYW9222122222222 0422061 0000 +M42019121111111678620900406601163113 +M520191211111116786119841119WTTT#Y#9P22212222222210112121115190000 +M520191211111116786120141123WTTT#BYY0222222222222 0422981 0000 +M520191211111116786120100123WTTT#B0BY222122222222 0422031 0000 +M42019121111111679120900403071163113 +M520191211111116791119910821WTTT#ZBT922212222222210112121118360150 +M520191211111116791120150702WTTTYPZ@@212121122222 0422981 0000 +M42019121111111685120500403231163113 +M520191211111116851119790119WTTTPWP@B22222122222250112161119360000 +M520191211111116851120120101WTTTP@BPB222221122222 0422981 0000 +M520191211111116851120120101WTTT#W@BZ222221122222 0422981 0000 +M520191211111116851120080809WTTTPBZWZ222221222222 0422051 0000 +M520191211111116851120050101WTTTYPBPT222221122222 0422081 0000 +M42019121111111685421700401121163113 +M520191211111116854119860609WTTTYYPWY22221222222210112131117180000 +M520191211111116854120180819WTTT09TTB122222122222 0422981 0000 +M42019121111111735621100401181163113 +M520191211111117356119800701WTTT#TZ9922122222222210112112136560000 +M520191211111117356120150506WTTTYYY9P221222222222 0422981 0000 +M520191211111117356120090515WTTTY#T90222222222222 0422041 0000 +M520191211111117356120030515WTTT0Y999221222122222 0422101 0000 +M42019121111111761621100406001162113 +M520191211111117616119660101WTTTY0YZ912222222222210112112124420000 +M520191211111117616120070702WTTT0#BZ@222222122222 0422061 0000 +M520191211111117616120040701WTTT##009122222122222 0422091 0000 +M42019121111111777922700400441163113 +M520191211111117779119880113WTTTPZ@W022222122222210112111100000000 +M520191211111117779120180119WTTTP99ZB222222122222 0422981 0000 +M42019121111111783021100403821013113 +M520191211111117830119830807WTTT#@00B12222222222210112111136240000 +M520191211111117830120130121WTTT00Y##222222222222 0422981 0000 +M520191211111117830120070615WTTT#ZW#Z222222222222 0422061 0000 +M42019121111111809620000402101161113 +M520191211111118096119710115WTTT09T#@12222222222230112111123170000 +M520191211111118096120020106WTTTYW0#W122222122222 0422111 0000 +M42019121111111814620600401151162113 +M520191211111118146119960609WTTT0#YB@22212222222210112121115560000 +M520191211111118146120140712WTTTY@PB#222122222222 0422981 0000 +M42019121111111818120900401031193113 +M520191211111118181119800608WTTT#00BB22222122222210112121119110000 +M520191211111118181120150626WTTTY#0Y@122222222222 0422981 0000 +M520191211111118181120030501WTTT0ZTW0222222122222 0422101 0000 +M42019121111111818821700401121011113 +M520191211111118188119880501WTTTY#9#Z22222122222210112121200000000 +M520191211111118188119720101WTTT#9TYP12222212222211012121222530000 +M520191211111118188120190603WTTT00YW0222221222222 0422981 0000 +M520191211111118188120120514WTTT#@90T122222122222 0422011 0000 +M42019121111111831122700403941163113 +M520191211111118311119970701WTTTYWTW@22222122222210112121120910000 +M520191211111118311120170121WTTTPZ0W9222222122222 0422981 0000 +M42019121111111831720900401881163113 +M520191211111118317119860103WTTTY0TYT22212222222210112121127720000 +M520191211111118317120060108WTTTPYB9W222122222222 0422071 0000 +M42019121111111849420900406421162113 +M520191211111118494119890716WTTTP@#@922212222222210112121125490000 +M520191211111118494120171113WTTT#PPY@222122122222 0422981 0000 +M520191211111118494120110518WTTT#0@WT222122122222 0422021 0000 +M520191211111118494120090121WTTTPBTBW222122222222 0422041 0000 +M42019121111111860522700402581163113 +M520191211111118605119831115WTTT0BB##12222222222210112121127710000 +M520191211111118605120050715WTTT#Y09Y122222222222 0422081 0000 +M520191211111118605120040601WTTT#@0@#122222122222 0422091 0000 +M42019121111111862520900406601161113 +M520191211111118625119770719WTTT09WW#12222222222230112121134620000 +M520191211111118625120100821WTTTP9@99122222222222 0422031 0000 +M520191211111118625120070502WTTT0W0PZ122222122222 0422061 0000 +M520191211111118625120030508WTTT0PWY9122222222222 0422101 0000 +M42019121111111871622200401591163113 +M520191211111118716119850112WTTTYYYWB22212222222210112112117900000 +M520191211111118716120130802WTTTY@BYP222222222222 0422981 0000 +M520191211111118716120020119WTTTYT#9T222122222222 0422103 0000 +M42019121111111903722700402801161113 +M520191211111119037119820706WTTT#ZW9B12222222222250112121118210000 +M520191211111119037120040702WTTTPTPY@122222222222 0422091 0000 +M42019121111111982420600402121163113 +M520191211111119824119950106WTTT0P@@P22222122222210112081121510000 +M520191211111119824120170115WTTTY#TP@122221222222 0422981 0000 +M42019121111111988222700400381163113 +M520191211111119882119690819WTTTYPB9922212212222210112141117580000 +M520191211111119882120120103WTTT#9W0@222122122222 0422011 0000 +M520191211111119882120100702WTTT09#00222122122222 0422031 0000 +M42019121111112049220600400871163113 +M520191211111120492119830102WTTTYZPW921222122222220112111119390000 +M520191211111120492120160503WTTT#ZTBW222221122221 0422981 0622 +M520191211111120492120100719WTTTYBB@P222221122222 0422031 0000 +M42019121111112054920600405341163113 +M520191211111120549119840622WTTTPT@@#22212222222210112111127480000 +M520191211111120549120130519WTTT0PB0Z222222122222 0422981 0000 +M42019121111112068122400406121161113 +M520191211111120681119850501WTTTPZBZP22212222222210112121118350000 +M520191211111120681120151108WTTTYYZB9222122122222 0422981 0000 +M520191211111120681120070713WTTTPZ#BW222122222222 0422061 0000 +M42019121111112074120900406601162113 +M520191211111120741119910621WTTT#PZ9@22222122222210112121116010000 +M520191211111120741120170519WTTT0YB#W222221122222 0422981 0000 +M42019121111112113621100405881162113 +M520191211111121136119700623WTTT000TT22222122222210112161117360000 +M520191211111121136120080726WTTT#000#222222222222 0422051 0000 +M42019121111112131821100401461162113 +M520191211111121318119820502WTTT0YYTZ12222222222210112111117550000 +M520191211111121318120010123WTTT0#BZW122222122221 0422111 0885 +M42019121111112169120900405331161113 +M520191211111121691119850513WTTTP9P0922122222222210112121118000000 +M520191211111121691120140107WTTTP@TT0221222222222 0422981 0000 +M520191211111121691120071102WTTTY@YBP221222122222 0422051 0000 +M42019121111112180820000404271163113 +M520191211111121808119870123WTTTP#0YY12222212222210112111118010000 +M520191211111121808120110123WTTT0#9PZ122222122222 0422021 0000 +M42019121111112183221700404181163113 +M520191211111121832119820801WTTTP##WZ22222122222210112111123100000 +M520191211111121832120151115WTTTPT#@W222221122222 0422981 0000 +M520191211111121832120130101WTTT0P99P222221222222 0422981 0000 +M42019121111112186920600405171162113 +M520191211111121869119940119WTTTY0@WP22212222222210112081115000000 +M520191211111121869120160715WTTTYZ0TB222222122222 0422981 0000 +M520191211111121869120140815WTTTYTB0P222122222222 0422981 0000 +M520191211111121869120140815WTTTYWY0@222122222222 0422981 0000 +M42019121111112188520900400501011113 +M520191211111121885119870119WTTT0T#PB22222222222250112121139000000 +M520191211111121885120180519WTTT0TZ@Z122222222222 0422981 0000 +M520191211111121885120150115WTTTPW#Y9122222122222 0422981 0000 +M520191211111121885120110119WTTT0W0@Y122222122222 0422021 0000 +M520191211111121885120060119WTTTPBBT9122222122222 0422061 0000 +M42019121111112188922200400631162113 +M520191211111121889119820816WTTTPY@ZT21222122222220112161115330000 +M520191211111121889119750507WTTT#TZB@22212212222220212112133260000 +M520191211111121889120160523WTTTPWY0B222121122222 0422981 0000 +M520191211111121889120150106WTTTYYYWP222121222222 0422981 0000 +M42019121111112205821100406471163113 +M520191211111122058119870103WTTT#9YPT22212122222210112111131200000 +M520191211111122058120160113WTTTYP@WZ222121122222 0422981 0000 +M520191211111122058120131107WTTTP@W0P222121222222 0422981 0000 +M42019121111112235221100405951163113 +M520191211111122352119950116WTTT0P0W@12222222222210112121119570000 +M520191211111122352120160119WTTTPYPPP122222222222 0422981 0000 +M520191211111122352120140114WTTTYBTBT122222222222 0422981 0000 +M42019121111112245021200404291163113 +M520191211111122450119970803WTTTYWWY922222222222220112131112310000 +M42019121111112270521700401121161113 +M520191211111122705119810702WTTT#P#@B22212222222230112111126210000 +M520191211111122705120190806WTTT0ZTZZ222222222222 0422981 0000 +M520191211111122705120060121WTTTY#PBZ222222222222 0422061 0000 +M520191211111122705120010101WTTTY0T#T222222222222 0422111 0000 +M42019121111112271221400406791163113 +M520191211111122712119840107WTTTP@PWZ12222222222220112111131850000 +M520191211111122712120190515WTTTPP0YZ222222122222 0422981 0000 +M520191211111122712120120615WTTTPP@@#122221122222 0422011 0000 +M520191211111122712120060801WTTTY09T0122222222222 0422071 0000 +M42019121111112272520000404071162113 +M520191211111122725119920626WTTTP0@0Y22212222222210112121114790000 +M520191211111122725120160515WTTT0P9TB222122222222 0422981 0000 +M520191211111122725120110618WTTT0@#ZP222122222222 0422021 0000 +M42019121111112277920600405341163113 +M520191211111122779119951126WTTT0T@PY12222122222210112131120030000 +M520191211111122779120170119WTTTYBTTP122221122222 0422981 0000 +M520191211111122779120160703WTTTPY@WZ122221122222 0422981 0000 +M42019121111112278520000406821163113 +M520191211111122785119880515WTTTP00PY22222122222210112111116830000 +M520191211111122785120190507WTTT#WT@Y222221122222 0422981 0000 +M42019121111112296220600401421163113 +M520191211111122962119910123WTTTP0ZTY22222122222210112121124490000 +M520191211111122962120160712WTTT0P9WT122221222222 0422981 0000 +M520191211111122962120110816WTTTYPZ0#222222222222 0422021 0000 +M520191211111122962120081102WTTTYZ0YZ222221222222 0422041 0000 +M42020011111111111521700406341163113 +M520200111111111115119980126WTTTY9WBT22222122222210112111119260000 +M520200111111111115120161123WTTT#YB09222221222222 0422981 0000 +M42020011111111119322400406121163113 +M520200111111111193119740116WTTT0@Z9@22212222222220112111124130000 +M520200111111111193120100118WTTTP0@WB222222122222 0422031 0000 +M42020011111111145722400406121013113 +M520200111111111457119870506WTTTP0TZ#22122222222250112111117700000 +M520200111111111457120110515WTTT0WW@Y221222122222 0422021 0000 +M42020011111111149520600401421163113 +M520200111111111495119831115WTTTBTZBT22212222222210112121121880000 +M520200111111111495120160821WTTTP#ZZ0222122122222 0422981 0000 +M520200111111111495120060718WTTTY#Z09222222222222 0422071 0000 +M42020011111111173022200402941163113 +M520200111111111730119790103WTTTP9BYB22212222222210112121121750000 +M520200111111111730120050606WTTT#09TY222122222222 0422081 0000 +M42020011111111176320000401371163113 +M520200111111111763119860108WTTT#@W9922222122222210112131116250000 +M520200111111111763120140107WTTT0ZB##222221222222 0422981 0000 +M42020011111111182020900403071162113 +M520200111111111820119950515WTTT0PB#012212122222210112121119850000 +M520200111111111820120160802WTTTPTW09122122122222 0422981 0000 +M42020011111111186020900405911161113 +M520200111111111860119870826WTTT#TW#022212222222210112121114110000 +M520200111111111860120130106WTTT#YTY9222122122222 0422981 0351 +M42020011111111210621100406001163113 +M520200111111112106119910506WTTTYZTWZ12222222222210112121117350000 +M520200111111112106120150823WTTT0B#BT222222222222 0422981 0000 +M42020011111111213321700405121163113 +M520200111111112133119770619WTTTPZPYY12222222222230112112128890000 +M520200111111112133120050518WTTTY#T9W222221222222 0422082 0000 +M520200111111112133120020119WTTTY0ZTZ122221122222 0422102 0000 +M42020011111111227122700403941163113 +M520200111111112271119830123WTTT#YY9922212222222210112121131230000 +M520200111111112271120130708WTTT00P90222122222222 0422981 0000 +M520200111111112271120111119WTTT0PY@Z222122122222 0422021 0000 +M42020011111111227321700402341162113 +M520200111111112273119800106WTTTYZT0P22222122222210112131123690000 +M520200111111112273120050108WTTT#BT@9122221222222 0422081 0000 +M42020011111111231320600405171161113 +M520200111111112313119900112WTTTPT##W12222222222210112121110400000 +M520200111111112313120140121WTTTYWZWT122222222222 0422981 0000 +M42020011111111232920000402281013113 +M520200111111112329119780122WTTT0BPWT22222222222220212162200000000 +M520200111111112329119700119WTTTYZTYZ22222112222220112162238180000 +M520200111111112329120190613WTTTY9YW@222221222222 0422981 0000 +M520200111111112329120170519WTTT0W@@B222221122222 0422981 0000 +M520200111111112329120150718WTTT0BBB#222222222222 0422981 0000 +M42020011111111250320300405411162113 +M520200111111112503119930521WTTT#T0Z922222122222210112081117530000 +M520200111111112503119800109WTTT#YWZB22222112222211012121115370000 +M520200111111112503120170602WTTTPP#YP222222222222 0422981 0000 +M42020011111111261121200406661163113 +M520200111111112611119920102WTTTY##BT22222112222250112111115270000 +M520200111111112611120150602WTTTPBWBW222222122222 0422981 0000 +M520200111111112611120130601WTTTYBP0@122222122221 0422981 0522 +M42020011111111261620600401421163113 +M520200111111112616119960723WTTT#0#@B12222222222210112121113360000 +M520200111111112616120130101WTTTY90@T122222222222 0422981 0000 +M42020011111111293722200402491163113 +M520200111111112937119890808WTTTYYYB#12222222222210112131117400000 +M520200111111112937120180714WTTTYWWZZ222222122222 0422981 0000 +M520200111111112937120110115WTTT#TZ0B122222122222 0422021 0000 +M520200111111112937120090123WTTTP@Y9T122222222222 0422031 0000 +M42020011111111301220900403031162113 +M520200111111113012119750114WTTTPPB#W12222222222210122121131070000 +M520200111111113012120140626WTTT#TTT0122222222222 0622981 0000 +M520200111111113012120130118WTTTY99T@122222122222 0622981 0000 +M42020011111111318921100403821161113 +M520200111111113189119790515WTTTP##@922222122222220112131133100000 +M520200111111113189120190806WTTT#WZ00122222122222 0422981 0000 +M520200111111113189120150514WTTT0PY#Y122222222222 0422981 0000 +M520200111111113189120140715WTTT#9ZTZ122222122222 0422981 0000 +M520200111111113189120110126WTTTPB#B@222221122222 0422021 0000 +M42020011111111350422700403611163113 +M520200111111113504119770101WTTT#ZZ@922222122222220112141120370000 +M520200111111113504120050501WTTTPZT9T222222122222 0422081 0000 +M520200111111113504120040106WTTT0PWYY222222122222 0422091 0000 +M42020011111111356120900406151163113 +M520200111111113561119720706WTTT0TYPZ22212212222210112112124740000 +M520200111111113561120070116WTTT#9@9Y222122122222 0422062 0000 +M42020011111111380821100401181013113 +M520200111111113808119890119WTTT0YZ@@22222122222210112111121670000 +M520200111111113808120160506WTTT0PW0Z222121222222 0422981 0000 +M42020011111111400920900400501161113 +M520200111111114009119720512WTTTY##@T22212221222250112111121500868 +M520200111111114009120030503WTTTY09BT122222122222 0422101 0048 +M520200111111114009120020602WTTT#0WTP122222122222 0422111 0048 +M42020011111111418320000404071011113 +M520200111111114183119830521WTTT0@90#12222122222210112121126060000 +M520200111111114183120080808WTTTYBTZP222221122222 0422051 0000 +M42020011111111434420000404151993113 +M520200111111114344219830502WTTT#BZPW22222222222220212113200000000 +M520200111111114344119690515WTTTP9Y@Z22222212222220112111116320000 +M520200111111114344120160616WTTTPBBZY222222222222 0422981 0000 +M42020011111111451922700403611163113 +M520200111111114519119940601WTTTPWWZY12222222222210112111115370600 +M520200111111114519120180702WTTT#@ZWP122222122222 0422981 0000 +M42020011111111452321400403481192113 +M520200111111114523119720721WTTTY00TZ12222222222210112121132970000 +M520200111111114523120060501WTTT09P9Z122222122222 0422071 0000 +M520200111111114523120040112WTTTY99Z@122222122222 0422091 0000 +M42020011111111490821400400351163113 +M520200111111114908119870815WTTT0B#0Y22212222222220112111100000000 +M520200111111114908120160115WTTTYWB0W222122222222 0422981 0000 +M520200111111114908120140126WTTTY#P#@222122222222 0422981 0000 +M520200111111114908120060702WTTT0W#Z0222222222222 0422073 0000 +M520200111111114908120040506WTTTP#Y0T222222122222 0422093 0000 +M42020011111111503321700401301163113 +M520200111111115033119880119WTTT###@Z22212222222210112122122600000 +M520200111111115033120150708WTTTP@9BW222222122222 0422981 0000 +M42020011111111503620900402921162113 +M520200111111115036119760119WTTT0TPYB22212222222250112121125780000 +M520200111111115036120080601WTTT##9T@222122122222 0422051 0000 +M520200111111115036120050518WTTT#T##Z222122122222 0422081 0000 +M520200111111115036120040801WTTT0Y#BT222122222222 0422091 0000 +M42020011111111504020000403951163113 +M520200111111115040119841121WTTT#Z9YT12222222222220222111218620000 +M520200111111115040119811126WTTTPW@9Z12222222222210112112120470000 +M520200111111115040120070109WTTT#TTT9222221122222 0422061 0000 +M520200111111115040120040126WTTTYTPZ@222221122222 0422081 0000 +M42020011111111533022700405241163113 +M520200111111115330119900708WTTT00BBT22222122222250112111119880100 +M520200111111115330120170526WTTT#T##P222221222222 0422981 0000 +M520200111111115330120130706WTTT00@TT222221222222 0422981 0000 +M42020011111111542520600405771163113 +M520200111111115425119960502WTTTPW@B022212222222210112161117240000 +M520200111111115425120180619WTTT0PB99222122122222 0422981 0000 +M520200111111115425120160502WTTTY#9@Z122122122221 0422981 0712 +M42020011111111556921700406571162113 +M520200111111115569119830126WTTT0YW0#22212222222210112121100000000 +M520200111111115569120140719WTTT#@ZZW222122222222 0422981 0000 +M520200111111115569120100712WTTT###ZW222122122222 0422031 0000 +M520200111111115569120080101WTTTP9YPZ222122122222 0422041 0000 +M42020011111111570622700400681163113 +M520200111111115706119860521WTTTPBZY922222122222210112111113730000 +M520200111111115706120170507WTTT#9PWB222221122222 0422981 0000 +M520200111111115706120130106WTTT0TP#Z222221222222 0422981 0267 +M520200111111115706120110114WTTT#YWP@222221222222 0422011 0300 +M42020011111111586620900406601993113 +M520200111111115866119840723WTTT0W9Y022222122222220212111200000000 +M520200111111115866119830515WTTTP0PZ022222112222220112111240850000 +M520200111111115866120160809WTTT090T0222222222222 0422981 0000 +M520200111111115866120140814WTTTYB0BT222221122222 0422981 0000 +M42020011111111595722700400671162113 +M520200111111115957119890726WTTT0Y0@#12222222222210112111118980000 +M520200111111115957120111112WTTT0YZTT122221122222 0422021 0000 +M520200111111115957120090518WTTT0T@99122221122222 0422041 0000 +M42020011111111612622700400681161113 +M520200111111116126119880609WTTTPWYYB22212222222210112121126760000 +M520200111111116126120080106WTTT0@BBP122222222222 0422051 0000 +M42020011111111615220900402921993113 +M520200111111116152119960619WTTT#TPP912222222222210112111118180000 +M520200111111116152120150126WTTTPY#9@122222222222 0422981 0000 +M42020011111111620721100404801163113 +M520200111111116207119750115WTTTY##ZW22222122222230112121121910000 +M520200111111116207120100613WTTTP@0Z@222221222222 0422031 0000 +M520200111111116207120080814WTTT0@WZ@222221122222 0422051 0000 +M520200111111116207120040603WTTTP#TW9222221122222 0422091 0000 +M42020011111111623020600400871161113 +M520200111111116230119910807WTTTY#9W012222222222210112121114930000 +M520200111111116230120160106WTTT##Z0Z122222222222 0422981 0000 +M520200111111116230120130522WTTT#Y#@9122222222222 0422981 0000 +M520200111111116230120100119WTTTYYBW9122222122222 0422021 0000 +M42020011111111638220600406321161113 +M520200111111116382119810715WTTTP0WW912222222222210112131116250000 +M520200111111116382120170121WTTT0YZZ#122222222222 0422981 0000 +M520200111111116382120160715WTTT#B#0@222222222222 0422981 0000 +M520200111111116382120030101WTTTP@Z#Z122222222222 0422101 0000 +M42020011111111663620900402921163113 +M520200111111116636119690819WTTT#9W#P22212222222250112111127960000 +M520200111111116636120090107WTTTPBB@0222122122222 0422041 0000 +M42020011111111669721100406391163113 +M520200111111116697119730119WTTT0W0@#12222222222230112111121130000 +M520200111111116697120080119WTTTYP0W0122222222222 0422051 0000 +M42020011111111674120500402421013113 +M520200111111116741119841113WTTTYPBTY22222122222210112111124620000 +M520200111111116741120181123WTTTYYPB@222222222222 0422981 0000 +M42020011111111700721100401461163113 +M520200111111117007119760719WTTTY#PYP22222122222220212111200000000 +M520200111111117007119610707WTTT0#9@Z22222112222220112111264980000 +M520200111111117007120150108WTTT0WPP0222221122222 0422981 0000 +M520200111111117007120120103WTTT0#WZT222222122222 0422011 0000 +M42020011111111707122700403941163113 +M520200111111117071119830501WTTT0YP9#22222222222220112112100000000 +M520200111111117071120170101WTTT0YZY0222222222222 0422981 0000 +M520200111111117071120090815WTTT0@0@T222222222222 0422042 0000 +M520200111111117071120080519WTTT00P#Z222222222222 0422052 0000 +M520200111111117071120070813WTTT#PB0B222222222222 0422062 0000 +M42020011111111730922700403611163113 +M520200111111117309119940818WTTT#0TZ022222122222210112111115290000 +M520200111111117309120150818WTTT#TBYY222221122222 0422981 0000 +M42020011111111732922700400681163113 +M520200111111117329119790622WTTTYTPT@12222222222210112081116250000 +M520200111111117329120090626WTTT##Z0T122222222222 0422041 0000 +M520200111111117329120020608WTTTYWWBB122222222222 0422111 0000 +M42020011111111743021100401181162113 +M520200111111117430119860526WTTTPZB9922212222222210112121121480000 +M520200111111117430120050626WTTTP00B9222122222221 0422081 0534 +M42020011111111771421100406001163113 +M520200111111117714120010115WTTTP##YT12222122222210412081110430000 +M520200111111117714120181107WTTT0@ZT#222222122222 0622981 0000 +M520200111111117714120181107WTTT##T9#222222122222 0622981 0000 +M42020011111111772820600405471163113 +M520200111111117728119710118WTTT0P#YZ12222222222250112111126990000 +M520200111111117728120060719WTTTP@T0T122222122221 0422071 0502 +M42020011111111780421100403821161113 +M520200111111117804119870513WTTTY9WWT12222222222220112111110830000 +M520200111111117804120131114WTTTPT#BT122222122222 0422981 0000 +M520200111111117804120080812WTTT#B9BW122222222222 0422051 0000 +M520200111111117804120020109WTTTY9YZ9122222122222 0422111 0227 +M42020011111111788220600401981162113 +M520200111111117882119780126WTTTP@ZWP22222222222210112131126290000 +M520200111111117882120120126WTTTPZ9T0222122222222 0422011 0000 +M520200111111117882120110703WTTTP#0PW222222222222 0422021 0000 +M520200111111117882120060715WTTT0BZ#P222122222221 0422071 0808 +M42020011111111791520600401151163113 +M520200111111117915119680113WTTT#P0B@22222222222220112121127960000 +M520200111111117915120150116WTTTP@#Y@222122222222 0422981 0000 +M520200111111117915120080723WTTTPTT0P222222222222 0422051 0000 +M42020011111111806621100406001011113 +M520200111111118066119880116WTTTYTT##12222222222230112121126250000 +M520200111111118066120060107WTTTY#YYW122222222222 0422071 0000 +M42020011111111817320900406151162113 +M520200111111118173219941123WTTTY##PP22212212222220212123200000000 +M520200111111118173119900112WTTTY@##T22212222222220112131116940000 +M520200111111118173120160102WTTTYYYT0222122122222 0422981 0000 +M42020011111111821620900406601013113 +M520200111111118216119850509WTTT#ZZTT22212222222210112131117950000 +M520200111111118216119830101WTTT#090#22212212222220212121134360000 +M520200111111118216120140114WTTT#Y09@222122122222 0422981 0000 +M520200111111118216120120715WTTTP@Z0@222122222222 0422011 0000 +M42020011111111825521200404541161113 +M520200111111118255119990603WTTT#T@P#22222122222210112111114770000 +M520200111111118255120190715WTTTPT@#9222222222222 0422981 0000 +M520200111111118255120160815WTTT0YT9Y222221122222 0422981 0000 +M42020011111111879521700406831161113 +M520200111111118795119960509WTTT0Y#P022222122222210112111124520000 +M520200111111118795120150819WTTT#0YWZ222222222222 0422981 0000 +M42020011111111885920600402121163113 +M520200111111118859119880602WTTTYZWZT22222122222210112121111710000 +M520200111111118859120131114WTTTP09Z0222221122222 0422981 0000 +M520200111111118859120120501WTTTY#ZWW222221122222 0422011 0000 +M42020011111111917722400406441163113 +M520200111111119177119760518WTTTP0@Z012212222222210112121116890000 +M520200111111119177120160503WTTTPT9B9222122122222 0422981 0000 +M520200111111119177120071122WTTTYPZP0222122122222 0422061 0000 +M42020011111111934520000404271162113 +M520200111111119345119890626WTTT#@PYY22222122222210112111126400000 +M520200111111119345120100126WTTT#ZZ9@122221122222 0422031 0000 +M520200111111119345120070501WTTTP@Z9B222222222222 0422061 0000 +M42020011111111945320900406421163113 +M520200111111119453219850819WTTTPB99T12222222222220212113200000000 +M520200111111119453119790106WTTT0B###12222212222210112122128490000 +M520200111111119453120120619WTTTP9TBW122222122222 0422013 0000 +M520200111111119453120040816WTTTYPPTW122222122222 0422093 0000 +M520200111111119453120040618WTTTY099Z122222222222 0422092 0000 +M520200111111119453120020703WTTTY9#P#122222222222 0422112 0000 +M42020011111111949021100406001163113 +M520200111111119490119840121WTTT#WWBY12222222222220112112115980000 +M520200111111119490120150101WTTTP#@Z#122222122222 0422981 0000 +M520200111111119490120090119WTTTY099@222222222222 0422042 0000 +M42020011111111954221700404101163113 +M520200111111119542119760806WTTTP#9ZY22122222222210112121118590000 +M520200111111119542120060121WTTT0W@TW222221222222 0422061 0000 +M42020011111111971520600402981163113 +M520200111111119715119880102WTTT#T@W912222222222210112111115770000 +M520200111111119715120151123WTTT0#TT9122222122221 0422981 0801 +M520200111111119715120120601WTTTPZBP@122222222222 0422011 0000 +M520200111111119715120060501WTTT##ZBZ122222222222 0422071 0000 +M42020011111111985821700402381162113 +M520200111111119858119920115WTTT0@#@#22222122222210112121120840000 +M520200111111119858120190108WTTT#TWBT222222122222 0422981 0000 +M520200111111119858120140108WTTT0W#Z9222222222222 0422981 0000 +M42020011111111992821700402341163113 +M520200111111119928119890114WTTT0@BPP12222222222210112121132710000 +M520200111111119928120180506WTTT0Y0@@222122222222 0422981 0000 +M520200111111119928120100101WTTTP0WP#122222122222 0422031 0000 +M520200111111119928120080609WTTT09#YT122222222222 0422051 0000 +M42020011111112001322700400671163113 +M520200111111120013119830512WTTTYT@Y#22122222222210112111138330000 +M520200111111120013120050509WTTT#B@9#221222222222 0422081 0000 +M520200111111120013120040101WTTTPP#ZP221222122222 0422091 0000 +M520200111111120013120020819WTTTYT9P#221222122222 0422111 0000 +M42020011111112009422700402001163113 +M520200111111120094119760719WTTT#@@9#22222122222210112121121190000 +M520200111111120094120080615WTTT##PW0222221222222 0422051 0000 +M520200111111120094120020116WTTT0BTPB222221222222 0422111 0000 +M42020011111112015221100404791162113 +M520200111111120152119830806WTTTYW#0#12222222222210112121119630000 +M520200111111120152120160623WTTT#@ZWY222221122222 0422981 0000 +M520200111111120152120040802WTTT#PYYW122222122222 0422091 0000 +M42020011111112019221400406791163113 +M520200111111120192119850112WTTT#Y0WY12222222222210112111141030000 +M520200111111120192120170503WTTT0B9Z@222222122222 0422981 0000 +M520200111111120192120130712WTTT0PZ@#122222122222 0422981 0000 +M520200111111120192120110814WTTTYT#BT122222122222 0422021 0000 +M520200111111120192120080509WTTT#B#P0122222122222 0422051 0000 +M520200111111120192120050814WTTTPZT90122222122222 0422081 0000 +M42020011111112021520900401881162113 +M520200111111120215119850814WTTTP0BT912222222222210112121120760000 +M520200111111120215119670121WTTTPYBYT12222212222250222112200000000 +M520200111111120215120070809WTTT0B@T@122222222222 0422061 0000 +M42020011111112029220500402421163113 +M520200111111120292119920123WTTT#W@TT22212222222210112111124860000 +M520200111111120292120141115WTTT##@#P222122222222 0422981 0000 +M520200111111120292120110806WTTTY9WZY222122122221 0422021 0732 +M42020011111112035121400401831163113 +M520200111111120351119880701WTTT0BBZ@12222222222210112111122760000 +M520200111111120351120170108WTTT0@BWP122222122222 0422981 0000 +M42020011111112035720000403721163113 +M520200111111120357119930518WTTT0WPPT22222122222210112131125350000 +M520200111111120357120190601WTTTPZ9W@122222122222 0422981 0000 +M520200111111120357120150621WTTTYTZBY122222222222 0422981 0000 +M42020011111112088020000406951162113 +M520200111111120880119770615WTTTPZTPW12222222222210112121121170000 +M520200111111120880120050623WTTTYYZYY122222122222 0422081 0000 +M42020011111112094020000406011163113 +M520200111111120940119770615WTTT0WBBZ22222122222220112111200000000 +M520200111111120940119760614WTTTPP@Y@22222112222221012111230000000 +M520200111111120940120050115WTTTP9B9B222221122222 0422081 0000 +M42020011111112117520600405471163113 +M520200111111121175119880101WTTTP9BBB12222222222210112111125410000 +M520200111111121175120170119WTTT0#090122222122222 0422981 0000 +M520200111111121175120120518WTTTYTY##122221122222 0422011 0000 +M520200111111121175120080121WTTTY9BT9122222222222 0422051 0000 +M42020011111112125720900406421162113 +M520200111111121257119780801WTTTP9P#912222222222210112121119660000 +M520200111111121257120050822WTTTPWT@#122222222222 0422081 0000 +M520200111111121257120020115WTTT09Z@Y122222222222 0422111 0000 +M42020011111112143620600401161161113 +M520200111111121436119970108WTTTPPBPP12222222222210112121126160000 +M520200111111121436120160606WTTT#B00Z122221222222 0422981 0000 +M42020011111112149922700400671163113 +M520200111111121499119840526WTTT0990@22222122222230112121130290000 +M520200111111121499120100501WTTT0PBTW222221122222 0422031 0000 +M520200111111121499120090722WTTTYP9B@222221122222 0422041 0000 +M42020011111112165421200404541163113 +M520200111111121654119910103WTTTYZT@T22222122222210112111115600000 +M520200111111121654120160115WTTT0#T#0222222222222 0422981 0000 +M42020011111112200621100401691163113 +M520200111111122006119970523WTTTYB0PW22222122222210112121117330000 +M520200111111122006120180109WTTTYP#@B222221222222 0422981 0000 +M520200111111122006120160501WTTTP#WYY222221122222 0422981 0000 +M520200111111122006120150102WTTT0T0@P222222222222 0422981 0000 +M520200111111122006120130721WTTT0PT9Y222221222222 0422981 0000 +M42020011111112215021400400351163113 +M520200111111122150119860102WTTTYWT@P22222122222210112121133330000 +M520200111111122150120140716WTTTYPW0Y222121122222 0422981 0000 +M520200111111122150120121103WTTTY#YB#222121222222 0422011 0000 +M520200111111122150120110108WTTTP0#PY222121222222 0422021 0000 +M520200111111122150120080114WTTTPZ0#Y222121222222 0422051 0000 +M42020011111112220121700406751163113 +M520200111111122201119661109WTTT0TZW022212212222220212121180140000 +M520200111111122201120130701WTTT0ZBT0222122122221 0422981 0885 +M520200111111122201120111122WTTT##WWP222122222222 0422021 0000 +M42020011111112226621700403251162113 +M520200111111122266119860815WTTTYY0ZW22222122222210112131134810000 +M520200111111122266120140102WTTT0#P0T222221122222 0422981 0000 +M520200111111122266120061101WTTT0Z9YY222221222222 0422071 0000 +M42020011111112231421100402871161113 +M520200111111122314119840522WTTT00Z@Y22212222222210112141121310000 +M520200111111122314120090106WTTT0Y#ZP122222122222 0422031 0000 +M520200111111122314120040126WTTT0W#W0222122222222 0422091 0000 +M42020011111112235921100401551163113 +M520200111111122359119990618WTTT0#WB#12222222222210112111122840000 +M520200111111122359120160115WTTT#YPPZ122222122222 0422981 0000 +M42020011111112268520600405341163113 +M520200111111122685119850106WTTTYT#PP12222222222230112131123280000 +M520200111111122685120110123WTTT#ZTW9122222122222 0422021 0000 +M520200111111122685120070701WTTT009B9122222122222 0422061 0000 +M520200111111122685120060615WTTT0BPTP122222122222 0422071 0000 +M42020011111112285820000403951161113 +M520200111111122858119940108WTTTY#WBP12222222222210112121124970000 +M520200111111122858120130113WTTT0TYBW222222122222 0422981 0000 +M42020011111112291821100406001163113 +M520200111111122918119620501WTTTYZZW@12222222222250122112116900000 +M520200111111122918120080108WTTTP#9W@222222222222 0622052 0000 +M520200111111122918120050702WTTT0ZWP0222222222222 0622082 0000 +M42020021111111131822700402801123113 +M520200211111111318119850121WTTT#0W9922212222222230112121124140000 +M520200211111111318120190512WTTT0TW#9222122222222 0422981 0000 +M42020021111111138120900406601163113 +M520200211111111381119870713WTTT0YP9Y12212222222210112131117510000 +M520200211111111381120150715WTTT0@TWW222222222222 0422981 0000 +M42020021111111160121100401691163113 +M520200211111111601119890714WTTT#0@ZT12222222222210112121132410000 +M520200211111111601120160822WTTTP0PZT222222122222 0422981 0000 +M520200211111111601120070815WTTT0@##9122222222222 0422061 0000 +M520200211111111601120060602WTTTYWWW@122222122222 0422071 0000 +M42020021111111160220900403031161113 +M520200211111111602119910701WTTTP0B#Y12222222222210112121117980000 +M520200211111111602219820526WTTT0T9TT22222212222220212113200000000 +M520200211111111602120170101WTTTPPBPB122222222222 0422981 0000 +M520200211111111602120140626WTTT0W9ZW122222122222 0422981 0000 +M520200211111111602120110102WTTTPZ#99122222222222 0422021 0000 +M520200211111111602120080819WTTTYZP@@122222122221 0422051 0808 +M42020021111111168322700402231161113 +M520200211111111683119820815WTTTPB#Z@12222122222250112121126250000 +M520200211111111683120070819WTTTP0T9T122221122222 0422061 0000 +M520200211111111683120050501WTTTPWP@T122221222222 0422081 0000 +M42020021111111170122700400681161113 +M520200211111111701119780601WTTT#WT#@22212222222210112122124890500 +M520200211111111701120180603WTTT##WWB222222222222 0422981 0000 +M520200211111111701120020115WTTT0PT@T222122122222 0422112 0000 +M42020021111111178021100406001163113 +M520200211111111780119880813WTTT090PT12222222222230112121110830000 +M520200211111111780120170101WTTT#9#TY122222122222 0422981 0000 +M520200211111111780120090123WTTTPPWT#122222222222 0422042 0000 +M42020021111111183622700400441161113 +M520200211111111836119860626WTTT#0T#P22222122222210112111116250000 +M520200211111111836120150515WTTTPZP@9222221222222 0422981 0000 +M520200211111111836120100815WTTT0ZZ@9222222122221 0422031 0885 +M520200211111111836120060715WTTT#YZY#222221122222 0422071 0000 +M42020021111111190321400400161161113 +M520200211111111903119820609WTTT#090022222122222210112111115060000 +M520200211111111903120160715WTTT##0P0222221122222 0422981 0425 +M520200211111111903120110818WTTTY0ZW9222221122222 0422021 0425 +M520200211111111903120040516WTTTY0ZT0222221122222 0422091 0000 +M42020021111111196720000400171163113 +M520200211111111967119810703WTTT#PBZ022212222222210112111123240000 +M520200211111111967120140522WTTT0#TPB222122222222 0422981 0000 +M520200211111111967120080115WTTT#9T9#222122222222 0422051 0000 +M520200211111111967120030101WTTTYTBWZ222122122222 0422101 0000 +M42020021111111197322700402001163113 +M520200211111111973119890806WTTTYZW#Y22212222222210112111120360000 +M520200211111111973120120112WTTTYZYWZ222122222222 0422011 0000 +M520200211111111973120090115WTTT#Y90W222122222222 0422041 0000 +M42020021111111208021700406571163113 +M520200211111112080119790816WTTTYPB@@22222122222220212142116250000 +M520200211111112080119770718WTTTP@PPY22222112222220112122122180000 +M520200211111112080120050708WTTT##BTY222221222222 0422082 0000 +M520200211111112080120030701WTTT090#Z222221122222 0422102 0000 +M42020021111111214420900403071161113 +M520200211111112144119780126WTTTPTP@@22222222222210112122113190000 +M520200211111112144120160114WTTTYBB@W222222222222 0422981 0000 +M520200211111112144120040621WTTTYWB#B222222122222 0422091 0000 +M520200211111112144120020115WTTTP9W9Z222222122222 0422111 0000 +M42020021111111234820000400921993113 +M520200211111112348119730106WTTT0WBPW22212222222210112081116410000 +M520200211111112348120110619WTTT#B@0@222122122222 0422021 0000 +M42020021111111235720900403071192113 +M520200211111112357119900106WTTTP09B022212222222210112121125750000 +M520200211111112357120130606WTTT#TWYY222122222222 0422981 0000 +M42020021111111236621100406001163113 +M520200211111112366119810118WTTT##PB912222222222210112112121290000 +M520200211111112366120190508WTTTPTZ0P122222122222 0422981 0000 +M520200211111112366120110103WTTTPY@T@122222122222 0422022 0000 +M42020021111111259620600405171163113 +M520200211111112596119880102WTTT09P0T12222222222210112111113790000 +M520200211111112596120160618WTTT#P#PB222222222222 0422981 0000 +M520200211111112596120160618WTTTY#0TT222222122221 0422981 0921 +M520200211111112596120130801WTTT00YTY222222222222 0422981 0000 +M520200211111112596120090507WTTTPZPB#122222222222 0422041 0000 +M520200211111112596120040619WTTTY9#@0122222222222 0422091 0000 +M42020021111111269320600401421163113 +M520200211111112693119900119WTTTYWW##22212222222210112121121460000 +M520200211111112693120160701WTTT09@P#222122122222 0422981 0000 +M520200211111112693120100719WTTT0B@ZB222122222222 0422031 0000 +M42020021111111270420000403951163113 +M520200211111112704119770101WTTT#T0@912222122222210112122127290000 +M520200211111112704120170618WTTTYZ0T@122222222222 0422981 0000 +M520200211111112704120090103WTTT0#990222122222222 0422041 0000 +M520200211111112704120030123WTTT#B#T@222221222222 0422102 0000 +M42020021111111283320000403951163113 +M520200211111112833119930112WTTT#WYWY22222122222210112111118240000 +M520200211111112833120150614WTTTY@TTT222221122222 0422981 0000 +M42020021111111294421400400351163113 +M520200211111112944119820109WTTTP@WW022222222222220112112120800000 +M520200211111112944120150719WTTT0PZP0222222222222 0422981 0000 +M520200211111112944120080526WTTT#T@09222222122222 0422053 0000 +M520200211111112944120040115WTTT#00@P222122122222 0422093 0000 +M42020021111111327822200403201163113 +M520200211111113278119900106WTTTYTB#@22212222222210112121100000000 +M520200211111113278120170108WTTT#Z0BP222122222222 0422981 0000 +M520200211111113278120130815WTTTP9#T9222122222222 0422981 0000 +M42020021111111330621100401181011113 +M520200211111113306119890106WTTT00T0#12222222222210112121129690000 +M520200211111113306120140615WTTT#99T9122222122222 0422981 0000 +M520200211111113306120080523WTTTP@0WP122222122222 0422051 0000 +M42020021111111348921100401561163113 +M520200211111113489119810521WTTTPZ@W#22222122222230112121100000000 +M520200211111113489120100501WTTT#ZTB#222221222222 0422031 0000 +M520200211111113489120061107WTTT#@PWZ222221222222 0422071 0000 +M42020021111111357420600402031162113 +M520200211111113574119910721WTTT0#WWT11111122222210112121117550000 +M520200211111113574120160119WTTTPTWYZ122222222222 0422981 0000 +M42020021111111366821700406831163113 +M520200211111113668119810619WTTT#90@Z12222222222210112111119660000 +M520200211111113668120040123WTTTY@0#W122222222222 0422091 0000 +M520200211111113668120040123WTTTYYYY9122222222222 0422091 0000 +M42020021111111386421200402561013113 +M520200211111113864119890114WTTTPW#0T12222222222210112121118460000 +M520200211111113864120140619WTTT#0W@Y222221122222 0422981 0000 +M520200211111113864120080801WTTTPBY99122222222222 0422051 0000 +M42020021111111397521100404791162113 +M520200211111113975119800507WTTT#00P@12222222222250112111123400000 +M520200211111113975120100715WTTT0TZWP122222222222 0422031 0000 +M42020021111111398022700402531163113 +M520200211111113980119710502WTTTPY#TP22222122222210112121124700000 +M520200211111113980120060519WTTT#9@@0122222222222 0422071 0096 +M520200211111113980120050101WTTTP#TBB222221222222 0422081 0096 +M42020021111111438120500402421161113 +M520200211111114381119720701WTTT#WZ#T22222122222250112121115860000 +M520200211111114381120110802WTTTP@ZY0222221222222 0422021 0000 +M42020021111111447021700405281993113 +M520200211111114470119970601WTTT0TT@Y22222122222210112121115900000 +M520200211111114470120180126WTTTPWTP0222221222222 0422981 0000 +M42020021111111472921100406001162113 +M520200211111114729119841119WTTTPW#ZB12222222222230112121123590000 +M520200211111114729120070102WTTT0B9YP222222122222 0422061 0000 +M520200211111114729120051116WTTT#ZZ#Z122222222222 0422081 0000 +M42020021111111501221200402291162113 +M520200211111115012119870821WTTT0Y0PB12222222222210112112114640000 +M520200211111115012120150606WTTT0ZWBP122222122222 0422981 0000 +M520200211111115012120090814WTTT0@YB@122222122222 0422042 0000 +M42020021111111510721700403151163113 +M520200211111115107119790714WTTT0#9@912222122222210112121130670000 +M520200211111115107120141115WTTTYY#BP122221222222 0422981 0000 +M520200211111115107120070703WTTTY0YB@122221222222 0422061 0000 +M42020021111111516520600406321163113 +M520200211111115165119880507WTTT0T9TY12222222222210112121125670000 +M520200211111115165120140123WTTTYW#ZP122222122222 0422981 0000 +M520200211111115165120090123WTTTP0ZT@122222222221 0422041 0645 +M42020021111111529820000403951163113 +M520200211111115298119840702WTTT0YZTZ12222222222210112121114300450 +M520200211111115298120170706WTTTPB0#T122222122222 0422981 0000 +M520200211111115298120170706WTTTY9PZ#122222122222 0422981 0000 +M520200211111115298120070707WTTTP90WB122222122222 0422061 0000 +M42020021111111561220900400501161113 +M520200211111115612119930114WTTT#ZPWB12212222222210112111111770000 +M520200211111115612120170126WTTTPB@WW122222122222 0422981 0000 +M520200211111115612120150101WTTT#W#TP122222222222 0422981 0000 +M42020021111111601021400401841163113 +M520200211111116010119880114WTTTYT@TY22222122222250112121121710000 +M520200211111116010120130126WTTTYZPW#222221122222 0422981 0000 +M520200211111116010120110801WTTTYB9PZ222221122221 0422021 0158 +M42020021111111610821100405141163113 +M520200211111116108119820808WTTT0P@WW22222122222230112141122310000 +M520200211111116108120180119WTTTY#ZYW222221222222 0422981 0000 +M520200211111116108120140102WTTTPZP@P222222222222 0422981 0000 +M520200211111116108120080516WTTT0#@@B222222222222 0422051 0000 +M42020021111111664520900406601013113 +M520200211111116645119870621WTTTP#YT012222222222210112111128140000 +M520200211111116645120160119WTTTY00Y@222222222222 0422981 0000 +M42020021111111676321100406001163113 +M520200211111116763119870703WTTTY0YT#12222222222220112081124070000 +M520200211111116763119820601WTTTP@TYB12222212222220212121114080000 +M520200211111116763120150606WTTTYTT99122222122222 0422981 0000 +M520200211111116763120111115WTTTYZ0W@122222122222 0422021 0000 +M520200211111116763120090123WTTT09@@Y122222222222 0422041 0000 +M42020021111111742721700404181161113 +M520200211111117427119870619WTTTP@9#P22222122222210112121117160000 +M520200211111117427120090606WTTTPZWB#222221122222 0422041 0000 +M520200211111117427120040116WTTTYB9Y9122222122222 0422091 0000 +M42020021111111763320000404071162113 +M520200211111117633119921106WTTT0B#B022212222222210112081128560000 +M520200211111117633120131107WTTTPBT9Z222122222222 0422981 0000 +M520200211111117633120100102WTTT0P0ZP222222122222 0422031 0000 +M42020021111111786820900401231163113 +M520200211111117868119980119WTTTYY9TT11222122222210112081114030000 +M520200211111117868120161107WTTT0P09T112222122222 0422981 0000 +M42020021111111786921700404611161113 +M520200211111117869119890121WTTTYTPBZ22222122222210112121118170000 +M520200211111117869120130122WTTTPP#0#222222122221 0422981 0897 +M42020021111111790420000403951161113 +M520200211111117904119800118WTTTYTZ0T12222122222210112121100000000 +M520200211111117904120160119WTTT0T0YT122221222222 0422981 0000 +M520200211111117904120110606WTTTPBWWW122222222222 0422021 0000 +M520200211111117904120080822WTTT#TB9Y122221122222 0422051 0000 +M42020021111111799820600402121163113 +M520200211111117998119960721WTTT00ZWT22222122222210112081116270000 +M520200211111117998120170101WTTTPY0BP222221222222 0422981 0000 +M42020021111111800821700402701163113 +M520200211111118008119800501WTTTYZ0YW22222122222210112121125430000 +M520200211111118008120170612WTTT0W#TB222221122222 0422981 0000 +M520200211111118008120150816WTTT0@P0@222222122222 0422981 0000 +M520200211111118008120140509WTTT#PZPP222222222222 0422981 0000 +M520200211111118008120120823WTTT#Y99Z222222222222 0422011 0000 +M520200211111118008120110719WTTT0@09Y222222222222 0422021 0000 +M520200211111118008120100602WTTTPZBYW222221122222 0422031 0000 +M520200211111118008120080118WTTT0Y0WY222221122222 0422051 0000 +M520200211111118008120070112WTTTYZ099222221122222 0422061 0000 +M42020021111111802420600405341163113 +M520200211111118024119860126WTTTY#PYW22122222222220112082116290000 +M520200211111118024120170719WTTTYWZZB222222222222 0422981 0000 +M520200211111118024120110615WTTT#@BZB222222122222 0422021 0000 +M520200211111118024120090123WTTTY9YZT222222222222 0422041 0000 +M42020021111111804420600401981161113 +M520200211111118044119770119WTTT#YYYZ12222212222211012111235350000 +M520200211111118044119750608WTTT09YYT12222222222210112121200000000 +M520200211111118044120040114WTTTPY@W#122222222222 0422091 0000 +M42020021111111830321700404401161113 +M520200211111118303119790612WTTTP@#0T22212222222210112121124220000 +M520200211111118303120160701WTTT#YZ0P222122122222 0422981 0000 +M520200211111118303120140621WTTT0P#ZB222122122222 0422981 0000 +M520200211111118303120040106WTTTYT#P9222122222222 0422091 0000 +M42020021111111837621700406571162113 +M520200211111118376119780701WTTTPY9TW12222222222210112131128050000 +M520200211111118376120120813WTTTP0PWY122222222222 0422011 0000 +M520200211111118376120050726WTTT#T9T@122222222222 0422081 0000 +M42020021111111843821700400981993113 +M520200211111118438119740519WTTTPYTBB12222122222210112121117270000 +M520200211111118438120030606WTTT0B@TY122221122222 0422101 0000 +M42020021111111844720900403071162113 +M520200211111118447119890101WTTTPZB@T12222222222210112121124870000 +M520200211111118447120130618WTTTPZTTW122221222222 0422981 0000 +M520200211111118447120070113WTTTPT@TB122222222222 0422061 0000 +M42020021111111867720900403031163113 +M520200211111118677119840521WTTTPPW#@22212122222210112121132130000 +M520200211111118677120170715WTTTPWT0#222122122222 0422981 0000 +M520200211111118677120090115WTTT#YB@P222121222222 0422041 0000 +M42020021111111875920000403951013113 +M520200211111118759119990119WTTTPYBY@12222122222210112981124860000 +M520200211111118759120190515WTTT0ZP@B122221222222 0422981 0000 +M42020021111111876022200402941163113 +M520200211111118760119810621WTTTY99B@21222222222220112121132370000 +M520200211111118760119810503WTTT#Z9WY22212212222210212121131830000 +M520200211111118760120190801WTTTY@009212122122222 0422981 0000 +M520200211111118760120190801WTTT#BWBP212122122222 0422981 0000 +M520200211111118760120180107WTTTY@T90212122122222 0422981 0000 +M520200211111118760120110108WTTT0TBPZ212122122222 0422021 0000 +M520200211111118760120090615WTTT#@B99212122122222 0422041 0000 +M520200211111118760120021126WTTT#TT9B212122122222 0522111 0000 +M42020021111111877321100406541163113 +M520200211111118773119771119WTTTP@@P#12222222222210112141116560000 +M520200211111118773120170112WTTTP@WZY122222122222 0422981 0000 +M520200211111118773120090526WTTTP99#9122222222222 0422041 0000 +M42020021111111892320600406381163113 +M520200211111118923119990107WTTT##BW022222122222210112121113700000 +M520200211111118923120180618WTTTPTPWP222221122222 0422981 0000 +M42020021111111896121400400351163113 +M520200211111118961119911101WTTTY@@#@22212222222210112112126190000 +M520200211111118961120130609WTTTYTP9P222122122222 0422981 0000 +M42020021111111919521400403651163113 +M520200211111119195119880606WTTT0YT@W22222122222210112131126260000 +M520200211111119195120080608WTTTYYZYT222221122222 0422051 0000 +M42020021111111924220600401421013113 +M520200211111119242119770122WTTT#PZYW12222222222210112111126170000 +M520200211111119242120130115WTTTYTPZ0222222222222 0422981 0000 +M42020021111111928422700400671163113 +M520200211111119284119930814WTTT0ZYBW22222122222210112121122640000 +M520200211111119284120120101WTTT#TB0@122222122222 0422011 0000 +M42020021111111930020600405471162113 +M520200211111119300119840126WTTTY9@P#12222222222210112111128440000 +M520200211111119300120090606WTTT#B@Y9222222122222 0422041 0000 +M520200211111119300120050826WTTTP@PWB222222222222 0422081 0000 +M520200211111119300120030115WTTT#9##Y222222222222 0422101 0000 +M42020021111111932421100402161163113 +M520200211111119324119860623WTTTBTZ@W22222122222210112121123570000 +M520200211111119324120160615WTTT0ZPBT222222222222 0422981 0000 +M520200211111119324120090523WTTT#WBP0222222122222 0422041 0000 +M520200211111119324120050113WTTTYTZT9122222122222 0422081 0000 +M42020021111111938721400400351163113 +M520200211111119387119790626WTTTPBY0W22212222222210112111126070000 +M520200211111119387120020114WTTT#WYY@222122222222 0422112 0000 +M42020021111111945220900402921163113 +M520200211111119452119860115WTTTP0W9W22212222222210112111127730000 +M520200211111119452120180714WTTT0@PP@222222222222 0422981 0000 +M520200211111119452120110623WTTT0ZW0@222122222222 0422021 0000 +M520200211111119452120081115WTTTPW@TY222122122222 0422051 0000 +M42020021111111950622400400231161113 +M520200211111119506119840701WTTT0PWPP22222222222210112121127360000 +M520200211111119506120180621WTTTY#WYZ122222122222 0422981 0000 +M520200211111119506120150101WTTT#P00Y222222222222 0422981 0000 +M42020021111111977020900401881161113 +M520200211111119770119810113WTTT#BZ#@12222222222210112121116030000 +M520200211111119770120140121WTTTP@BZT122222222222 0422981 0000 +M520200211111119770120120602WTTTPZP0@122222222222 0422011 0000 +M42020021111111987221400400351162113 +M520200211111119872119910626WTTTP9#9P22222122222210112111123470425 +M520200211111119872120150126WTTTY9WWY122221222222 0422981 0000 +M520200211111119872120070621WTTT#99Y0122221122222 0422061 0000 +M42020021111112009720900402921163113 +M520200211111120097119860706WTTTY#Z@#22212222222210112121121780000 +M520200211111120097120110814WTTT#9W@@222122122222 0422021 0000 +M520200211111120097120020106WTTTYW@P0222122222222 0422111 0000 +M42020021111112020720000403951163113 +M520200211111120207119911102WTTT#B09022222122222220112111124520000 +M520200211111120207120150126WTTT#W0WY122222122222 0422981 0000 +M520200211111120207120100119WTTTPYTTP222221222222 0422031 0000 +M42020021111112043120300403001163113 +M520200211111120431219850602WTTT#Y0ZY22222222222220212113200000000 +M520200211111120431119780118WTTT##0W#22222112222210112111116490000 +M520200211111120431120190601WTTTP#ZTT222221122222 0422981 0000 +M520200211111120431120170601WTTTYP#09222222122222 0422981 0000 +M42020021111112062421100401181163113 +M520200211111120624119670702WTTTY@W#Y22212222222230112111130450000 +M520200211111120624120080121WTTT##PBB222122222222 0422051 0000 +M520200211111120624120050501WTTTP99PW222122222222 0422081 0000 +M42020021111112068320900403031163113 +M520200211111120683119740601WTTT#@TTY22212212222210112111126910000 +M520200211111120683120110507WTTTPBTWT222122122222 0422021 0000 +M42020021111112080720900406421161113 +M520200211111120807119860107WTTTYZYZY22212222222210112111114330000 +M520200211111120807120180706WTTT#ZZ9W222222122222 0422981 0000 +M520200211111120807120141119WTTTPP#W0222122222222 0422981 0000 +M520200211111120807120120515WTTTPTZBP222122222222 0422011 0000 +M520200211111120807120120515WTTT0WP@0222122222222 0422011 0000 +M520200211111120807120090614WTTTP@W0B222122222222 0422041 0000 +M520200211111120807120060615WTTTP#0@0222122222222 0422071 0000 +M42020021111112104621100401181013113 +M520200211111121046119950102WTTTPZZB912222222222210112081114520000 +M520200211111121046120140601WTTT0PBZY122222122222 0422981 0000 +M42020021111112116420600402201163113 +M520200211111121164119900101WTTT0YP9@22222122222210112111112350000 +M520200211111121164120150706WTTTPYZBT222222122222 0422981 0000 +M520200211111121164120090515WTTT##@BY222221122222 0422041 0000 +M42020021111112156722700400671161113 +M520200211111121567119900522WTTT#BB0@22222122222210112121117680000 +M520200211111121567120140823WTTTYZW0P222221222222 0422981 0000 +M42020021111112191921400400351161113 +M520200211111121919119750601WTTTYY0ZZ22222222222210112111128580000 +M520200211111121919120100601WTTT#00ZW222222222222 0422031 0000 +M520200211111121919120090603WTTT#0TWY222222222222 0422041 0000 +M520200211111121919120070121WTTT#YZ0Z222222222222 0422061 0000 +M42020021111112198820600401981163113 +M520200211111121988119900715WTTT09T0912222222222210112121117690000 +M520200211111121988120180726WTTTY#YP@122222222222 0422981 0000 +M520200211111121988120150702WTTTYPB@0122222122222 0422981 0000 +M520200211111121988120130818WTTT0BB#Y122221122222 0422981 0000 +M520200211111121988120120515WTTT0WB9B222222122222 0422011 0000 +M520200211111121988120080113WTTT#ZP9@122222222222 0422051 0000 +M42020021111112199320600405341163113 +M520200211111121993119770522WTTTYTBB922222122222210112121129270000 +M520200211111121993120160121WTTTP0Z@W222222222222 0422981 0057 +M520200211111121993120080606WTTTYPYPB222222222222 0422051 0057 +M520200211111121993120050106WTTT0PYT9122222122222 0422081 0057 +M520200211111121993120030726WTTT#@@0P222222122222 0422101 0057 +M42020021111112217321100401181013113 +M520200211111122173119930115WTTTPT9#Z12222122222230112131121300000 +M520200211111122173120151106WTTT#Y@0Z122222222222 0422981 0000 +M42020021111112235420000405601163113 +M520200211111122354119930701WTTT#P9@P22222122222210112121120190000 +M520200211111122354120170626WTTT0TWTZ222221222222 0422981 0000 +M42020021111112239421100401461161113 +M520200211111122394119760601WTTT0BPPW22222122222220112121115700000 +M520200211111122394120160106WTTT09BPB222221122222 0422981 0000 +M520200211111122394120120707WTTT#P#0T222221122222 0422011 0000 +M520200211111122394120100708WTTT#Y@W@222221122222 0422031 0000 +M42020021111112263721700406341163113 +M520200211111122637119980119WTTTYP#@Y11222222222210112131115170150 +M520200211111122637120180115WTTT#WWT@122221122222 0422981 0000 +M42020021111112286522700403941011113 +M520200211111122865119910508WTTTY0YBT12222222222210112111100000000 +M520200211111122865120191106WTTTPTYYT222222122222 0422981 0000 +M520200211111122865120130106WTTTYB0#Z122122222222 0422981 0000 +M42020021111112299220900402921163113 +M520200211111122992119940526WTTTY9Z@022212222222210112121118120000 +M520200211111122992120160621WTTT#BYWP222122222222 0422981 0000 +M42020031111111124820600400871162113 +M520200311111111248119960514WTTTYZY@Z12222222222210112121129620000 +M520200311111111248120180103WTTTY@PTW122221222222 0422981 0000 +M520200311111111248120150626WTTT09T0Y122222122222 0422981 0000 +M42020031111111144021200404691163113 +M520200311111111440119770123WTTT#WW@#12222222222210112121117410000 +M520200311111111440120020714WTTT#PP#Y122222222222 0422111 0426 +M42020031111111153221700402341161113 +M520200311111111532119910801WTTTPZBZ#12222222222210112121125720000 +M520200311111111532120170615WTTT090@Y222222222222 0422981 0000 +M520200311111111532120130601WTTT#0@YP222221122222 0422981 0000 +M520200311111111532120100121WTTTP@T9W122222122222 0422031 0000 +M42020031111111179821100406001163113 +M520200311111111798119920115WTTTPYWT912222222222220112121115480000 +M520200311111111798120140122WTTT#B9ZZ222222122222 0422981 0000 +M520200311111111798120110512WTTTY99PZ122222222222 0422021 0000 +M520200311111111798120100602WTTT09W9T222222122222 0422031 0000 +M520200311111111798120070102WTTTPPB#P222222222222 0422061 0000 +M42020031111111197121400400351013113 +M520200311111111971119890101WTTTYTP0T22212222222210112121126190000 +M520200311111111971120130101WTTTPYBZB222222222222 0422981 0000 +M42020031111111227220900405911011113 +M520200311111112272119930121WTTTYZP@Y22212222222210112121116160000 +M520200311111112272120140515WTTT#TB#Z222222222222 0422981 0000 +M42020031111111241521700402381163113 +M520200311111112415119810701WTTTYTWBY22222122222210112141129460000 +M520200311111112415120110102WTTTYZ09B222221122222 0422021 0000 +M520200311111112415120060612WTTT0YPYT222221222222 0422071 0000 +M520200311111112415120030606WTTTYZPYY222221122222 0422101 0000 +M42020031111111293922700400671163113 +M520200311111112939119960619WTTTPT#Z@22222122222210112121119550000 +M520200311111112939120150522WTTT#WYB@222221222222 0422981 0000 +M42020031111111313220900404421163113 +M520200311111113132219780515WTTT#ZW9Y22212222222220112113200000000 +M520200311111113132119620118WTTTPZTZ#22212212222220212111122120000 +M520200311111113132120190515WTTT#PY#Y222122222222 0422981 0000 +M520200311111113132120170501WTTTYZ990222122122222 0422981 0000 +M520200311111113132120141103WTTTPWPT9222122122222 0422981 0000 +M520200311111113132120120815WTTT#W#TY222122122222 0422011 0000 +M42020031111111331420000406821163113 +M520200311111113314119810621WTTT0WP0P12222122222230112111121890000 +M520200311111113314120120723WTTT#PWZB122221122222 0422011 0000 +M520200311111113314120080615WTTT0BW09122221222222 0422051 0000 +M42020031111111359021100403821163113 +M520200311111113590119870501WTTT#Z@ZZ22212222222210112161123710000 +M520200311111113590120110714WTTT0TZ0B222222222222 0422021 0000 +M520200311111113590120060101WTTTYY#W#222122222222 0422071 0000 +M42020031111111372820900405131011113 +M520200311111113728119950109WTTTY0ZZT22212222222210112081128000000 +M520200311111113728120180821WTTTP@YYP222122222222 0422981 0000 +M520200311111113728120150701WTTTPW#YZ222122222222 0422981 0000 +M42020031111111400220900401031162113 +M520200311111114002119700821WTTT0WB@P22212222222210112111129370000 +M520200311111114002120080106WTTTY9B9Y222122222222 0422051 0000 +M520200311111114002120030819WTTTP@TYT222122222222 0422101 0000 +M42020031111111407222700402581163113 +M520200311111114072119890515WTTT0T@0922222122222210112121122730000 +M520200311111114072119830615WTTTP@9ZB22222112222211012121116670000 +M520200311111114072120120618WTTT0WWTT222222122222 0422011 0000 +M520200311111114072120060122WTTT#W0B9222221122222 0422081 0000 +M42020031111111413120000406281163113 +M520200311111114131119880615WTTT#WYP022222122222210112131121130000 +M520200311111114131120150721WTTT0#P0@222222122222 0422981 0000 +M520200311111114131120060701WTTTPPBTP222221222222 0422071 0000 +M42020031111111414122700402231163113 +M520200311111114141119940606WTTTP#YT921222122222210112121118840000 +M520200311111114141120180615WTTTP#YPW222221122222 0422981 0000 +M42020031111111422922700403941993113 +M520200311111114229119890621WTTTPYBB022222122222210112111122440000 +M520200311111114229120180119WTTT#0W0@222221122222 0422981 0000 +M42020031111111440821400400351162113 +M520200311111114408119900521WTTTP9@PP22222122222210112111118320000 +M520200311111114408120180101WTTT0WPWY222222122222 0422981 0000 +M42020031111111473521100404791161113 +M520200311111114735119830715WTTTYTB@@22222122222210112121115620000 +M520200311111114735120150107WTTT#099Z222221122222 0422981 0000 +M520200311111114735120120521WTTTY@9#T222221122222 0422011 0000 +M520200311111114735120050608WTTTYBZ99222221222222 0422081 0076 +M42020031111111476520600400291163113 +M520200311111114765119970101WTTTP@TBY12222122222210112121122640000 +M520200311111114765120180703WTTTPBZYP122221122222 0422981 0000 +M42020031111111482821400400351163113 +M520200311111114828119730515WTTTPYYYZ22212222222230112111123660000 +M520200311111114828120121113WTTT#TZW0222221222222 0422011 0000 +M520200311111114828120110723WTTTPZTBT222221122222 0422021 0000 +M42020031111111494820900406421162113 +M520200311111114948119781119WTTT0Z9@922212222222210122121124170000 +M520200311111114948120020108WTTTPW@Z@222122222222 0422121 0000 +M42020031111111526021100406001163113 +M520200311111115260119780626WTTT#@YWT12222222222210112111123510000 +M520200311111115260120160106WTTT0YP9W122222222222 0422981 0000 +M520200311111115260120130609WTTTY#PY@122222222222 0422981 0000 +M42020031111111545921100401181993113 +M520200311111115459119930101WTTT#009T12222122222210112081127180000 +M520200311111115459120190508WTTT#YW@Z122221222222 0422981 0000 +M42020031111111546420600405341163113 +M520200311111115464119940709WTTTPPTW012222222222210112121122530000 +M520200311111115464120170123WTTTPTZWP122221122222 0422981 0000 +M520200311111115464120130515WTTT0T@P0122222122222 0422981 0000 +M42020031111111554222700400671163113 +M520200311111115542119870806WTTT0B9TT22212212222230112112124570000 +M520200311111115542120130615WTTT#Y@YT222222122222 0422981 0000 +M520200311111115542120110719WTTTY9@9Y222222222222 0422021 0000 +M42020031111111564121100402441162113 +M520200311111115641119750109WTTT0Y0YB12222122222210112111119990000 +M520200311111115641120150512WTTT0BWZ@122221222222 0422981 0000 +M520200311111115641120110701WTTTY#P0Z122221122222 0422021 0000 +M520200311111115641120041101WTTTYWWB@122221122222 0422091 0000 +M42020031111111566420000402281162113 +M520200311111115664119860608WTTTYB00@12222222222210112121119230000 +M520200311111115664120090521WTTTP#YB0122222122222 0422041 0000 +M42020031111111577320600401981013113 +M520200311111115773119760115WTTT0@W0T12222222222210122111130290000 +M520200311111115773120040502WTTTYYZ@B122222222222 0422091 0000 +M42020031111111590521700404101163113 +M520200311111115905119890521WTTTY9PBP22122222222210112111133120000 +M520200311111115905120130119WTTTP0@#0221222122222 0422981 0000 +M520200311111115905120110523WTTT0BYY0221222222222 0422021 0000 +M520200311111115905120080118WTTT0YY@P221222222222 0422051 0000 +M520200311111115905120070621WTTTPZ9ZT221222122222 0422061 0000 +M42020031111111595020900402921993113 +M520200311111115950219770726WTTT0#PBZ12222222222220112113200000000 +M520200311111115950119670106WTTT0PB9Y22222212222220212112100000339 +M520200311111115950120180101WTTT#09B#222222122222 0422981 0000 +M520200311111115950120140823WTTT0BBP#222222222222 0422981 0000 +M520200311111115950120020607WTTTY0BTB222222222222 0422113 0000 +M42020031111111616220500402421163113 +M520200311111116162119900601WTTTPW0B912222122222210112122117370000 +M520200311111116162120171121WTTT00WP0122221122222 0422981 0000 +M520200311111116162120160615WTTTY9PW0122221122222 0422981 0000 +M520200311111116162120070721WTTT09T@9122221122222 0422061 0000 +M42020031111111618322700400671162113 +M520200311111116183119870821WTTT#9YYP22222122222210112121115270000 +M520200311111116183120150806WTTTYTBPW222222122222 0422981 0000 +M520200311111116183120080119WTTT###ZP222222222222 0422051 0000 +M42020031111111628120600400291013113 +M520200311111116281119880801WTTTBTT0022222122222220112111200000000 +M520200311111116281119820106WTTT#0#TP22222112222210212111274100000 +M520200311111116281120180106WTTTP999B222221222222 0422981 0000 +M520200311111116281120160623WTTT#9PP#222221222222 0422981 0000 +M520200311111116281120140116WTTT0#ZPW222222222222 0422981 0000 +M42020031111111630622400404241161113 +M520200311111116306119850601WTTTPY@W022212222222210112121115310000 +M520200311111116306120170119WTTT0@0TY222222222222 0422981 0000 +M520200311111116306120030601WTTTPYZWY222122122222 0422101 0000 +M42020031111111643220900402921161113 +M520200311111116432119830503WTTT0YZYY12222222222210112111127770000 +M520200311111116432120130615WTTTYZ@9W122222222222 0422981 0000 +M520200311111116432120040113WTTTPB#0W122222222222 0422091 0000 +M520200311111116432120030603WTTTP09#Y122222222221 0422101 0711 +M42020031111111651522700402801163113 +M520200311111116515119770606WTTTBTZTP22222222222210112112120780000 +M520200311111116515120080102WTTTBT9ZW222222222222 0422051 0000 +M42020031111111652421100401551993113 +M520200311111116524119971109WTTT#9ZBW12222222222210112111119220000 +M520200311111116524120180121WTTT#Z@0P222222222222 0422981 0000 +M42020031111111653821700402341163113 +M520200311111116538119880119WTTTYPPZ022222222222220112121139140000 +M520200311111116538120170826WTTTPT90T222222122222 0422981 0000 +M520200311111116538120100615WTTTY9B0P222222222222 0422031 0000 +M520200311111116538120060518WTTT#@ZB9222222122222 0422081 0000 +M42020031111111655321400400351163113 +M520200311111116553119750607WTTTYB99@22212222222230112112120100000 +M520200311111116553120091116WTTTYYT0T222122222222 0422041 0000 +M520200311111116553120030501WTTTY0BZ#222122222222 0422102 0000 +M42020031111111662821700402341993113 +M520200311111116628119900722WTTTPBP9922222122222210112121114010000 +M520200311111116628120170602WTTT0P0T@222221122222 0422981 0000 +M520200311111116628120150702WTTTP0B0T222222222222 0422981 0000 +M520200311111116628120080123WTTT#Z0@0222221122221 0422051 0897 +M42020031111111667720600401421162113 +M520200311111116677119830718WTTTY9YYW12222222222230112121118240000 +M520200311111116677120141102WTTTYP@0W122222222222 0422981 0000 +M520200311111116677120030622WTTT0WP@@122221222222 0422101 0000 +M42020031111111721821100401181163113 +M520200311111117218119920123WTTTPP@YT12222222222210112121119670000 +M520200311111117218120140114WTTTYPP9W122222222222 0422981 0000 +M42020031111111722022200400911163113 +M520200311111117220119700101WTTTPT#PP22222122222210112161159440000 +M520200311111117220120100721WTTT0Z0Y0222121122222 0422031 0000 +M520200311111117220120060121WTTTY@#WP222121222222 0422081 0000 +M42020031111111728721700401121161113 +M520200311111117287119930103WTTT0Y@@012222122222210112121113840000 +M520200311111117287120170626WTTTYPYPP122221222222 0422981 0000 +M520200311111117287120140621WTTT#00TT122222122222 0422981 0000 +M42020031111111734320900402921161113 +M520200311111117343119860507WTTTYYT#B12222222222210112111131390000 +M520200311111117343120180801WTTT#P0#@122222222222 0422981 0000 +M520200311111117343120080806WTTTP9PT@122222122222 0422051 0000 +M520200311111117343120070102WTTTY#BZ0222122222222 0422061 0000 +M42020031111111735020000404071163113 +M520200311111117350119980823WTTT0BWWB22222222222210112111121580250 +M520200311111117350120150121WTTTPB09W222222222222 0422981 0000 +M42020031111111749820600402121161113 +M520200311111117498119940806WTTTP#Y#Y22222122222210112111109620000 +M520200311111117498120180108WTTT0@P9B222222222222 0422981 0000 +M520200311111117498120150801WTTT#T@#Z222221122222 0422981 0000 +M520200311111117498120110106WTTT090TZ222222122222 0422021 0000 +M42020031111111764721400400931163113 +M520200311111117647119890612WTTT#B0WZ22222122222230112131121550000 +M520200311111117647120170707WTTTPB9WB222222122222 0422981 0000 +M520200311111117647120110601WTTT00WWW222221222222 0422021 0000 +M42020031111111782220000401371162113 +M520200311111117822119820723WTTT#Y@PB22212222222220212131122650000 +M520200311111117822119690623WTTT0@YYY22212212222220122121200000600 +M520200311111117822120030519WTTT0##PB222122222222 0522101 0000 +M42020031111111794421400400771193113 +M520200311111117944119860606WTTT0#TB012222122222230112111113730000 +M520200311111117944120160519WTTTY0YB#222221122222 0422981 0000 +M520200311111117944120140512WTTT#WP0Z222221222222 0422981 0000 +M520200311111117944120130109WTTTY@WT9222221122222 0422011 0000 +M42020031111111809521200402291013113 +M520200311111118095119730808WTTT0#@Z022222122222230112111122090000 +M520200311111118095120100813WTTT0#Y9B222221222222 0422031 0000 +M42020031111111816320600405471161113 +M520200311111118163119690506WTTT#TP9#22212222222210112121122130000 +M520200311111118163120120712WTTT0TTYP222122222222 0422011 0000 +M520200311111118163120090113WTTTPPTYY222122122222 0422041 0000 +M42020031111111836620900406601163113 +M520200311111118366119880121WTTT#W#0#22222122222210112111124140000 +M520200311111118366120140606WTTTBTTZ@222222122222 0422981 0000 +M520200311111118366120140606WTTTPY0T9222222122222 0422981 0000 +M520200311111118366120100119WTTT#@BZP222221222222 0422031 0000 +M42020031111111852420900406421993113 +M520200311111118524119580115WTTTP##YY22222212222220222111200000000 +M520200311111118524119560102WTTTP9#BP22212222222210122111234740000 +M520200311111118524120050119WTTTP@#9P222122122222 0622081 0000 +M42020031111111861221700406571161113 +M520200311111118612119760102WTTT0ZT9T12222122222210112122124400000 +M520200311111118612120060709WTTT0PZZT122221122222 0422071 0000 +M42020031111111880421100406001163113 +M520200311111118804119910701WTTT09Y9B12222222222210112121127010000 +M520200311111118804120110123WTTTYBB9#122221222222 0422031 0000 +M520200311111118804120070615WTTT##WBP122222122222 0422061 0000 +M42020031111111912822700403941161113 +M520200311111119128119890616WTTT#BBZ#22212222222210112121118200000 +M520200311111119128120150501WTTT#PT09222222222222 0422981 0000 +M520200311111119128120120512WTTT0P0BB222122222222 0422011 0000 +M42020031111111952122700403611163113 +M520200311111119521119870107WTTT09@P@22222122222210112121115630000 +M520200311111119521120170715WTTTYB9@P222221122222 0422981 0000 +M520200311111119521120090506WTTT0W09@222221122222 0422041 0000 +M520200311111119521120080508WTTT#Y@W#222221122222 0422051 0000 +M42020031111111957421700400471163113 +M520200311111119574119980114WTTTPYB0922222122222210112081114170000 +M520200311111119574120160615WTTT#BTZ9212111222222 0422981 0000 +M42020031111111965920000404271161113 +M520200311111119659119760115WTTT000BZ22222122222210112111119940000 +M520200311111119659120080702WTTT0#Z9B222122122222 0422051 0000 +M42020031111111981120600402031161113 +M520200311111119811119950526WTTTY#PPP22222122222210112111116650000 +M520200311111119811120170823WTTT#PBWY122221222222 0422981 0000 +M520200311111119811120150112WTTTPPYT9122222122222 0422981 0083 +M42020031111112012821100403821163113 +M520200311111120128119910716WTTTYZYPT12222222222210112111118330000 +M520200311111120128120150718WTTT0TY99122222122222 0422981 0000 +M42020031111112014421400406791163113 +M520200311111120144119920523WTTT#WP0022222122222210112121115550000 +M520200311111120144120160123WTTT00T#0222222122222 0422981 0000 +M42020031111112044321700405671163113 +M520200311111120443119660719WTTTPZ9T922222122222250112111117020000 +M520200311111120443120030109WTTT#B@9T222221222222 0422101 1038 +M42020031111112051020600401161163113 +M520200311111120510119870515WTTT#9ZWT22222122222250112121130360000 +M520200311111120510120170713WTTT0@90B222222122222 0422981 0000 +M520200311111120510120140602WTTTYB##Y222221122222 0422981 0000 +M520200311111120510120100108WTTTP0Y#0222121122222 0422031 0000 +M42020031111112096720600405471161113 +M520200311111120967119750102WTTTYTZZZ22212222222230112111116890000 +M520200311111120967120130716WTTTYBPB#222122222222 0422981 0000 +M42020031111112100620900403071161113 +M520200311111121006119860702WTTT0PT#W12222222222210112121130040000 +M520200311111121006120120503WTTT#9Z@#122122122222 0422021 0000 +M520200311111121006120040101WTTT#TWTB122222122222 0422091 0000 +M42020031111112109121700404101161113 +M520200311111121091119920726WTTTP#Y#Z22212222222210112121120640000 +M520200311111121091120191114WTTTPTZ00222222122222 0422981 0000 +M520200311111121091120140106WTTTYB9BZ222122222222 0422981 0000 +M520200311111121091120130712WTTT0Z0@9222122122222 0422981 0000 +M42020031111112113420000403011161113 +M520200311111121134119800503WTTT#B@ZP22122212222220212122110830000 +M520200311111121134119750703WTTTP0T0B22122222222220112111122270000 +M520200311111121134120101115WTTTYWWT@221212222222 0422031 0000 +M520200311111121134120090722WTTT0@@ZW221222122222 0422041 0000 +M42020031111112123021700405291163113 +M520200311111121230119890502WTTTP@YTY22222122222210112111122360000 +M520200311111121230120180106WTTT0PTZY222222122222 0422981 0000 +M520200311111121230120180101WTTT#ZP0Y222222122222 0422981 0000 +M520200311111121230120110601WTTTY9ZYZ222221122222 0422021 0000 +M42020031111112130921100401181162113 +M520200311111121309119900615WTTT#ZW9022212222222210112121118790000 +M520200311111121309120110607WTTTY@#YZ222122122222 0422021 0000 +M520200311111121309120080706WTTTY9Z##222122122222 0422051 0000 +M42020031111112180220000404271163113 +M520200311111121802119860619WTTT#P#9Z22212221222210112121116990925 +M520200311111121802120170119WTTTY00#@222122222222 0422981 0000 +M520200311111121802120161123WTTT#W#W0222122222222 0422981 0000 +M520200311111121802120110601WTTTPZ9BB222122122222 0422021 0058 +M520200311111121802120070503WTTTYY9#T222122222222 0422071 0058 +M42020031111112186420600405471162113 +M520200311111121864119770626WTTTPY@WY22212222222210112131127310000 +M520200311111121864120080706WTTT#W@W9222122122222 0422051 0000 +M42020031111112208721100403821163113 +M520200311111122087119940723WTTT#@BB912222222222210112122118240000 +M520200311111122087120190121WTTT#0Z9P122222122222 0422981 0000 +M520200311111122087120170708WTTTYY#YB122221122222 0422981 0000 +M42020031111112209221100406541163113 +M520200311111122092119940103WTTTY0ZP012222122222210112111117050000 +M520200311111122092120090119WTTTY0PWT122221222222 0422041 0000 +M42020031111112217021100401181163113 +M520200311111122170119840715WTTT#Z00Y22212222222230112122117660000 +M520200311111122170120190115WTTT#ZYZ@122222122222 0422981 0000 +M520200311111122170120180523WTTTYPZBZ222221122222 0422981 0000 +M520200311111122170120070622WTTTBT@0T122222222222 0422061 0000 +M42020031111112221522400403061162113 +M520200311111122215119790123WTTTYZB##22222122222250112111116970000 +M520200311111122215120030613WTTTY9TW#222221122222 0422101 0738 +M42020031111112228921100406541163113 +M520200311111122289119830601WTTTP9#Z022222222222250112111125980000 +M520200311111122289120140101WTTT#BB9Y222222222222 0422981 0000 +M520200311111122289120090602WTTTPY0BZ222221122222 0422041 0000 +M520200311111122289120090602WTTT#90Y9222221122222 0422041 0000 +M42020031111112240620600401421161113 +M520200311111122406119890618WTTT##@9#12222222222210112111131920000 +M520200311111122406120190518WTTTYYW0Z122222222222 0422981 0000 +M520200311111122406120050807WTTT0TZT0222222222222 0422081 0000 +M42020031111112243621700401121161113 +M520200311111122436119910612WTTT0P#T#22212222222210112111120030000 +M520200311111122436120160523WTTT#0@Z0122122122222 0422981 0000 +M520200311111122436120120826WTTTPYY#W222222122222 0422011 0000 +M42020031111112259321400406791163113 +M520200311111122593119960115WTTT09##Y22212122222210112121100000000 +M520200311111122593120171101WTTTPW##T222121122222 0422981 0000 +M42020031111112269220900401881162113 +M520200311111122692119820523WTTTP@T0P12222222222230112121113530000 +M520200311111122692120150619WTTTY#B#T122222122222 0422981 0000 +M520200311111122692120080715WTTTP9ZW#122222222222 0422051 0000 +M42020031111112291222700402001163113 +M520200311111122912119830712WTTTPW#0#22212222222220112121100960000 +M520200311111122912219800719WTTTP0#Z@22212212222220212113205680000 +M520200311111122912120170507WTTT#@P@B222122122222 0422981 0000 +M520200311111122912120060123WTTT#B00W222122122222 0422071 0000 +M42020041111111116420600401421163113 +M520200411111111164119900523WTTT#YBYY12222222222210112121124690000 +M520200411111111164120160106WTTTY#W@9122222222222 0422981 0000 +M520200411111111164120120101WTTT009BB122222122222 0422011 0000 +M42020041111111116820000403951163113 +M520200411111111168119791101WTTT#TZZB12222222222230112111120910000 +M520200411111111168120090601WTTTY@#TW122222222222 0422041 0000 +M520200411111111168120060501WTTTP#9#Y122222122222 0422081 0000 +M42020041111111132420600400871163113 +M520200411111111324119940719WTTT0WY0Z22222122222210112131113020000 +M520200411111111324120170826WTTT0PZ0Z222221222222 0422981 0000 +M42020041111111134922400406121163113 +M520200411111111349119840508WTTTY@0TB22212222222210112121132220000 +M520200411111111349120180722WTTTP@@ZY222222222222 0422981 0000 +M520200411111111349120150619WTTT#YZZW222222222222 0422981 0000 +M520200411111111349120120615WTTTPZWPZ222122122222 0422011 0000 +M520200411111111349120080523WTTTPTP90222122122222 0422051 0000 +M42020041111111149721100401181993113 +M520200411111111497119900108WTTT0@YPT12222122222210112111120630000 +M520200411111111497120180821WTTTYZ00P122222222222 0422981 0000 +M42020041111111150520600402981161113 +M520200411111111505119820821WTTT#TT9#12222222222210112121120010000 +M520200411111111505120050703WTTTBT9BB122222122222 0422081 0186 +M520200411111111505120031119WTTT0WW09122222222222 0422101 0186 +M42020041111111165821100403821161113 +M520200411111111658119880103WTTT0ZY#T12222222222210112121134660000 +M520200411111111658120160618WTTTP#BWY122222122222 0422981 0000 +M520200411111111658120110119WTTT#WZPW122222122222 0422031 0000 +M520200411111111658120080619WTTTYBZ9B222222122222 0422051 0000 +M42020041111111165922400404731161113 +M520200411111111659119930515WTTTPYWTT22212222222210112121114540000 +M520200411111111659120170715WTTTY0B@W222122122222 0422981 0000 +M520200411111111659120130121WTTTPP@0@222122122222 0422981 0000 +M520200411111111659120110119WTTTY#@BT222122122222 0422021 0000 +M42020041111111166722400405111161113 +M520200411111111667119910126WTTT0T@9B12222222222210112121127690000 +M520200411111111667120160619WTTTPZYZT222222122222 0422981 0000 +M520200411111111667120110619WTTT#P00B122222122222 0422021 0000 +M42020041111111172820900401031161113 +M520200411111111728119870619WTTT0@@Z922222122222210112111117460000 +M520200411111111728120170619WTTTPPZ@Y222221222222 0422981 0000 +M520200411111111728120150826WTTT#BP@B222222122222 0422981 0000 +M42020041111111183120600405471993113 +M520200411111111831119901119WTTTPBB#Y12222222222210112112119050215 +M520200411111111831120150119WTTTPY0@0222222122222 0422981 0000 +M42020041111111201522700402231161113 +M520200411111112015119780606WTTTP0W9@22222122222250112111123460800 +M520200411111112015120100115WTTT#@9B9222222122222 0422031 0000 +M520200411111112015120050501WTTT0ZY09222221222222 0422091 0070 +M42020041111111206622700400671163113 +M520200411111112066119800113WTTT#@W0@22222122222210112111120390000 +M520200411111112066120190502WTTTYBY9Z222222222222 0422981 0000 +M520200411111112066120130109WTTT0@@YP222221222222 0422981 0000 +M42020041111111209220600405341163113 +M520200411111112092119901109WTTT0WB#W12222122222210112121128810000 +M520200411111112092120150108WTTTP9P@0222222122222 0422981 0000 +M520200411111112092120100612WTTTPT9P9122222122222 0422031 0000 +M42020041111111210020600402121161113 +M520200411111112100119960121WTTTP@P0T22222122222210112121122980000 +M520200411111112100120170126WTTTPWPYB222121122222 0422981 0000 +M42020041111111216320000404551993113 +M520200411111112163119970118WTTT#PWBZ12222222222210112081114560000 +M520200411111112163120190518WTTTY@ZTZ122222222222 0422981 0000 +M42020041111111218221100406001163113 +M520200411111112182119930701WTTT#YT@W11222222222210112081127090000 +M520200411111112182120180622WTTTP9@9P222221122222 0422981 0000 +M520200411111112182120140821WTTTYT0@9122221122222 0422981 0000 +M42020041111111225021700401121163113 +M520200411111112250119960615WTTTPZ0Y#12222222222210112112119000000 +M520200411111112250120180101WTTTP0900122222222222 0422981 0000 +M42020041111111231222700400381162113 +M520200411111112312119801123WTTTYW90Z22222222222230112111126000000 +M520200411111112312120070507WTTTP##Z#222222122222 0422061 0000 +M520200411111112312120040715WTTTYB9Z9122222222222 0422091 0000 +M42020041111111246321100401181162113 +M520200411111112463119860719WTTT#Y#TT12222222222210112121117330000 +M520200411111112463120171115WTTTYP9YW122222222222 0422981 0000 +M520200411111112463120100606WTTTPBTW#122222122222 0422031 0000 +M520200411111112463120060715WTTT09YPT122222222222 0422071 0000 +M42020041111111257020900403031162113 +M520200411111112570119790801WTTT0BWWY12222222222210112121114870000 +M520200411111112570120160721WTTT0TY0P122222222222 0422981 0000 +M520200411111112570120130519WTTT#P0Z9122222222222 0422981 0000 +M520200411111112570120120719WTTTPB00Z122222222222 0422011 0000 +M520200411111112570120030115WTTT#WZTB122222222222 0422101 0000 +M42020041111111281121100401561163113 +M520200411111112811119870715WTTTYY@ZB22222122222210112141124480000 +M520200411111112811120180816WTTTY99ZY222222222222 0422981 0000 +M42020041111111326320000402891163113 +M520200411111113263119850601WTTTY0##W22222122222230112141120310000 +M520200411111113263120110102WTTT0#P0Z222222222222 0422021 0000 +M42020041111111342721700404101161113 +M520200411111113427119820108WTTTY9PP#22222122222210112111120640000 +M520200411111113427120120501WTTT#BTWZ222222222221 0422011 0813 +M520200411111113427120110702WTTTYPBYW222221222222 0422021 0000 +M520200411111113427120100521WTTT0T0@#122221222221 0422041 0813 +M42020041111111346220600403391163113 +M520200411111113462119890115WTTT00#Y@22222122222210112111121550000 +M520200411111113462120130501WTTTY#PT9222221122222 0422981 0000 +M42020041111111351721700402861163113 +M520200411111113517119891123WTTT#W@#W22222122222210112111124510000 +M520200411111113517120160603WTTT0T9B0222222122222 0422981 0000 +M520200411111113517120160603WTTTYP@TB222222122222 0422981 0000 +M520200411111113517120140512WTTT#0WTZ222222122222 0422981 0000 +M42020041111111351821400400561163113 +M520200411111113518119800622WTTTP09YZ22222122222250112121116860000 +M520200411111113518120100713WTTT0@WW@222221122222 0422031 0000 +M520200411111113518120090101WTTTYWYPB222222222222 0422051 0000 +M42020041111111365020000404151163113 +M520200411111113650119740823WTTTY#W@P22222122222230112141132870000 +M520200411111113650120100701WTTT#90W9222221122222 0422031 0000 +M42020041111111366122700402801161113 +M520200411111113661119880521WTTTPYZT#22222222222230112081116010000 +M520200411111113661120170615WTTTYZ#@0222222122222 0422981 0000 +M520200411111113661120120115WTTTYTPB#222122122222 0422011 0000 +M520200411111113661120090815WTTT0#BZ0222122222222 0422041 0000 +M42020041111111370920600400871162113 +M520200411111113709119940501WTTTYZPW@12212122222210112111124510000 +M520200411111113709120150723WTTT000B#122121122222 0422981 0000 +M42020041111111387722700402581163113 +M520200411111113877119891122WTTTP#00T12212222222210112121115990000 +M520200411111113877120140115WTTT0TT0B222222122222 0422981 0000 +M42020041111111404720000402281161113 +M520200411111114047119920123WTTTYT#P#12222222222210112081124830000 +M520200411111114047120170519WTTTYYY9Z122122222222 0422981 0000 +M520200411111114047120131119WTTT0WBTP122122122222 0422981 0000 +M42020041111111425220600402121162113 +M520200411111114252119960715WTTT000WY12222122222210112111100000000 +M520200411111114252120150615WTTTPP0@B122222222222 0422981 0000 +M42020041111111429121400402181161113 +M520200411111114291219731112WTTTPZ90922212222222120112111200000813 +M520200411111114291119640119WTTTYB@Z#22212212222210212131121330000 +M520200411111114291120150601WTTTYZTB@222222122222 0422981 0000 +M520200411111114291120100622WTTTBT9BW222122222222 0422031 0000 +M42020041111111441820000404151992113 +M520200411111114418119860614WTTTY99PP22212222222210112121136190000 +M520200411111114418120191116WTTT0@PW9222222122222 0422981 0000 +M520200411111114418120170115WTTTPPBZ@222122222222 0422981 0000 +M520200411111114418120100106WTTTPWY9@122122122222 0422031 0000 +M520200411111114418120050701WTTT#T0Y@222122122222 0422081 0000 +M42020041111111462620600405341163113 +M520200411111114626119960102WTTT0YYZ022222122222210112121125120000 +M520200411111114626120150515WTTTP@W09222222122222 0422981 0000 +M42020041111111482622200404361162113 +M520200411111114826119870701WTTT0@B0Z22212222222210112111114450000 +M520200411111114826120170706WTTTYPZ#0222222122222 0422981 0000 +M42020041111111485821100406001162113 +M520200411111114858119740519WTTTY9P0B12222222222210112112124160000 +M520200411111114858120090606WTTT0P0PW122222122222 0422041 0000 +M520200411111114858120040109WTTT#@T0#122222122222 0422092 0000 +M42020041111111503220000403951162113 +M520200411111115032119840815WTTT0BWYT22122222222230112122132340000 +M520200411111115032120050115WTTTPT##9221222122222 0422081 0000 +M42020041111111534921100405971163113 +M520200411111115349119920126WTTT#0WWP12222222222210112111124310000 +M520200411111115349120160506WTTT#T0Z@222221122222 0422981 0000 +M520200411111115349120141126WTTT#Z9ZZ222222222222 0422981 0000 +M42020041111111542920900404651163113 +M520200411111115429119930116WTTT0W9@Z22212222222210112131120140000 +M520200411111115429120130121WTTT0BYYY222122222221 0422981 0610 +M42020041111111554720600400291161113 +M520200411111115547119780115WTTTPT#ZT22222122222210112131125320000 +M520200411111115547120060126WTTT#0BZW222221122222 0422071 0203 +M42020041111111591722700400681161113 +M520200411111115917119761115WTTTYBWZZ22222112222220212141230950000 +M520200411111115917119751106WTTT00@PT22222122222220112121200000000 +M520200411111115917120180701WTTT#Z99Z222222122222 0422981 0000 +M520200411111115917120160715WTTTP#B@Y222221122222 0422981 0000 +M520200411111115917120150723WTTT0@Z@@222222122222 0422981 0000 +M520200411111115917120120123WTTT#9YTW222222122222 0422011 0000 +M520200411111115917120100708WTTTYTYWZ222221122222 0422031 0000 +M520200411111115917120080626WTTT0TYT#222221222222 0422051 0000 +M520200411111115917120060502WTTTYTWW9222222122222 0422071 0000 +M520200411111115917120040126WTTTPZ@Z#222222122222 0422101 0000 +M520200411111115917120020606WTTT#Z#TW222222222222 0422111 0000 +M42020041111111594021400403481012113 +M520200411111115940119740519WTTTYPB9T22222222222220112141120800000 +M520200411111115940120070113WTTTY#@@0222222222222 0422061 0000 +M520200411111115940120050122WTTT0#YT0222222122222 0422081 0000 +M42020041111111651121100401461162113 +M520200411111116511119820121WTTT#Z@PP12222222222210112111121410000 +M520200411111116511120130126WTTTP@##B122222122222 0422981 0000 +M520200411111116511120070615WTTT#ZW#0122222122222 0422061 0000 +M42020041111111660621400400351162113 +M520200411111116606119690722WTTTYZ#@#22212222222230112121118570000 +M520200411111116606120100113WTTT0BPW9222222222222 0422031 0000 +M520200411111116606120060106WTTT#Y#B@222122222222 0422071 0000 +M42020041111111676721700405821163113 +M520200411111116767119850521WTTTPT9@B12222122222210112161132150000 +M520200411111116767120110614WTTTP99P@122221222222 0422021 0000 +M520200411111116767120040509WTTT0B000122221222222 0422101 0000 +M42020041111111701722700400681993113 +M520200411111117017119761102WTTT#PB#@22212212222220112111200000000 +M520200411111117017119750706WTTT#9PP022212222222220212111232760000 +M520200411111117017120170519WTTT#PWTP222122222222 0422981 0000 +M42020041111111705420900402921162113 +M520200411111117054219850126WTTT#9WT022212222222110112111112920053 +M520200411111117054120170108WTTT0#PT#222122122222 0422981 0000 +M520200411111117054120140114WTTTYPWY#222222122221 0422981 0813 +M520200411111117054120110121WTTT#B@#0222122222222 0422021 0000 +M520200411111117054120060619WTTTY@WYW222122122221 0422071 0813 +M520200411111117054120030719WTTT#TW@B222122122222 0422101 0000 +M42020041111111728221100403821163113 +M520200411111117282119940106WTTTYBW@B12222222222210112111100000000 +M520200411111117282120150719WTTTPYTW@122222122222 0422981 0000 +M42020041111111754020500402421162113 +M520200411111117540119870515WTTT00@P@22222122222210112111113350000 +M520200411111117540120140601WTTT0YTYW222222222222 0422981 0000 +M520200411111117540120080101WTTTY0TZY222221122222 0422051 0000 +M520200411111117540120050101WTTTPP#Z#222221222222 0422091 0000 +M520200411111117540120030615WTTTYYWPP222221222222 0422101 0000 +M42020041111111763720600401981163113 +M520200411111117637119930515WTTT0Z#BT12222222222210112111115400000 +M520200411111117637120140607WTTT0@0YP122222222222 0422981 0000 +M520200411111117637120120822WTTT#9YW@222222222222 0422011 0000 +M42020041111111794820900403071161113 +M520200411111117948119880101WTTT##PYT12222222222210112111119140000 +M520200411111117948120140612WTTT0W@@@122222122222 0422981 0000 +M42020041111111857521100406001161113 +M520200411111118575119740612WTTTYTBPY12222222222210112121112800000 +M520200411111118575120150618WTTTY#T0T122221222222 0422981 0000 +M42020041111111872320900406131163113 +M520200411111118723119911113WTTT0Y#Y912222222222210112122121790000 +M520200411111118723120160107WTTTYY#Y#122222122222 0422981 0000 +M520200411111118723120140722WTTTY@BWT122222222222 0422981 0000 +M520200411111118723120060802WTTT0W###122222222222 0422071 0000 +M42020041111111873222700400671162113 +M520200411111118732119720701WTTTPZY9Y22222222222210112112117680000 +M520200411111118732120120722WTTT09ZTY222222122222 0422011 0000 +M42020041111111882021700406571161113 +M520200411111118820119930612WTTTP0#Z012222122222210112141119230000 +M520200411111118820120100119WTTTBT@00122121222222 0422031 0000 +M42020041111111883522200406641163113 +M520200411111118835119850622WTTTPPWYB22222122222250112111138390000 +M520200411111118835120190501WTTT#B9PT222222222222 0422981 0000 +M520200411111118835120090702WTTT##9BW222221122222 0422041 0000 +M520200411111118835120070818WTTTP9@Z0222221222222 0422061 0000 +M520200411111118835120050513WTTT#TZW9222221122222 0422081 0000 +M42020041111111883621100404711163113 +M520200411111118836119890614WTTT0TZ9P22222122222210112111123050000 +M520200411111118836120140115WTTTYZBT@222221222222 0422981 0000 +M42020041111111909420000406201163113 +M520200411111119094119951116WTTT0BZBY22222122222210112121115490000 +M520200411111119094120160108WTTT09T9Z222221222222 0422981 0748 +M42020041111111914820900403031162113 +M520200411111119148119750615WTTTY@B0T22212222222210112121119050000 +M520200411111119148120080702WTTT0B00P222122222222 0422051 0000 +M520200411111119148120060119WTTTYPYW@222122122222 0422081 0000 +M520200411111119148120030702WTTTYTBYZ222122122222 0422101 0000 +M42020041111111925020900406741162113 +M520200411111119250119751116WTTT#P90B12222222222210112112121530000 +M520200411111119250120090622WTTT0PTYB122222122222 0422041 0000 +M42020041111111955422700402401163113 +M520200411111119554119890601WTTT0ZB0#22222122222220112121137750000 +M520200411111119554120140812WTTTY#PYT222221122221 0422981 0813 +M42020041111111973420900406131163113 +M520200411111119734119941122WTTT0P#T912212222222210112111122530000 +M520200411111119734120090121WTTTP0P99122122222222 0422051 0000 +M42020041111112049721700404401163113 +M520200411111120497119780121WTTT#9WYZ22212222222250112111127350000 +M520200411111120497120060102WTTT09BP0222122222222 0422071 0000 +M520200411111120497120020519WTTTYP#YZ222122222222 0422113 0000 +M520200411111120497120020519WTTT0ZY#W222122122222 0422113 0000 +M42020041111112061120000404071992113 +M520200411111120611119940116WTTT09WPB12222222222210112111126120000 +M520200411111120611120121106WTTTYTTB9122221222222 0422011 0000 +M520200411111120611120110615WTTT#WYBP122221122221 0422021 0897 +M42020041111112086220900401881163113 +M520200411111120862119840622WTTT#ZWPB22212222222210112111100000000 +M520200411111120862120060512WTTT#B@TZ222122222222 0422071 0000 +M42020041111112121722700402001193113 +M520200411111121217119770701WTTT0ZB0@22212212222250112111120890000 +M520200411111121217120100101WTTTPWYPY222222222222 0422031 0000 +M520200411111121217120050115WTTTP99PB222222122222 0422091 0000 +M42020041111112123620600400291163113 +M520200411111121236119880606WTTTP#W@W22222122222210112131113000000 +M520200411111121236120140815WTTT#TWTY222222122222 0422981 0000 +M42020041111112146120900406131162113 +M520200411111121461219850123WTTT0Y9YZ12222122222210112083200000000 +M520200411111121461119830114WTTTP#BP912222112222211012981118880000 +M520200411111121461120180106WTTTPBYZ#122222122222 0422981 0000 +M42020041111112155521100403821013113 +M520200411111121555119870621WTTTP9@@912212222222250112112118910000 +M520200411111121555120050507WTTT00B@0122122222222 0422083 0000 +M42020041111112179021100406001993113 +M520200411111121790119840721WTTTYB#ZW12222122222210112112120970000 +M520200411111121790120130519WTTTY0Y0T122221222222 0422011 0000 +M520200411111121790120080823WTTT##BZY122221222222 0422051 0000 +M520200411111121790120050607WTTT#WBTZ122221222222 0422081 0000 +M42020041111112224120300404901161113 +M520200411111122241119930822WTTTYPZWT12222222222220112131123910000 +M520200411111122241120160101WTTTYWWT#122222222222 0422981 0000 +M520200411111122241120130512WTTTP#ZWZ122222222222 0422981 0000 +M42020041111112237021700406341163113 +M520200411111122370119850123WTTTPPZZ022222222222210112121117560000 +M520200411111122370120111101WTTTY@P9P122222222222 0422021 0000 +M42020041111112252321700404101163113 +M520200411111122523119780601WTTTPZB0T12222222222210112131124420000 +M520200411111122523120200501WTTTY@W@Y222222222222 0422981 0000 +M520200411111122523120091119WTTTPPT##122222222222 0422041 0000 +M520200411111122523120020103WTTTY0BW#122222222222 0412111 0000 +M42020041111112266620900406701161113 +M520200411111122666119880601WTTT#P#0022122212222250112112115680000 +M520200411111122666120140601WTTTPBZWB221222222222 0422981 0000 +M42020041111112286120600402981993113 +M520200411111122861119950126WTTTY0#BZ12222222222210112081122880000 +M520200411111122861120150122WTTT#T9YP122222122222 0422981 0000 +M42020051111111128920500402421163113 +M520200511111111289119840523WTTTYY0ZP22222122222210112121126820000 +M520200511111111289120070116WTTT#WB#Z222221222222 0422061 0000 +M520200511111111289120050115WTTTY@WP#222221122222 0422081 0000 +M42020051111111136320000401371163113 +M520200511111111363119880102WTTT#W9TY22222122222210112121111410000 +M520200511111111363120160819WTTTY9ZTZ222221222222 0422981 0301 +M42020051111111147421100406001163113 +M520200511111111474119960716WTTT#0T@W12222222222210112121111610000 +M520200511111111474120160521WTTTP#0B#122222222222 0422981 0000 +M42020051111111176721700406571193113 +M520200511111111767119840509WTTTY0WZ922222222222210112111131330000 +M520200511111111767120150601WTTT#BBBB222222222222 0422981 0000 +M520200511111111767120110123WTTTPPWYZ222222122222 0422021 0000 +M42020051111111193220600400871161113 +M520200511111111932119900806WTTT#0Z#Z22212122222210112121100000000 +M520200511111111932120120602WTTTYP9TZ222121222222 0422021 0000 +M42020051111111216822700400671162113 +M520200511111112168119870701WTTTBTTTW12222222222210112121128690000 +M520200511111112168120120615WTTTP@9BB122222122222 0422011 0000 +M520200511111112168120110521WTTT##0WT122222122222 0422031 0000 +M42020051111111220221700405121163113 +M520200511111112202119890606WTTT0@0#W12222222222210112111114060000 +M520200511111112202120150521WTTT0T0B#122222222222 0422981 0000 +M520200511111112202120110118WTTT0ZYYT122222222222 0422021 0000 +M42020051111111228720900401881162113 +M520200511111112287119690521WTTTY#P@Y22212222222230112121125830000 +M520200511111112287120020619WTTTP09BW222122222222 0422111 0000 +M42020051111111238721400400351161113 +M520200511111112387119880626WTTTYPB#W12222222222220112111121820000 +M520200511111112387120170121WTTT0ZBP@122221222222 0422981 0000 +M520200511111112387120090526WTTTY0W#@122222122222 0422051 0000 +M42020051111111248120000403721163113 +M520200511111112481119820507WTTT0BY#Y22222122222210112131121270000 +M520200511111112481120150519WTTT#Y@9P122221122222 0422981 0000 +M520200511111112481120150519WTTTP#P@9122221222222 0422981 0000 +M42020051111111251120900402921992113 +M520200511111112511119960518WTTTYYY#P22212222222210112111114770000 +M520200511111112511120150118WTTTPZ#BZ222122122222 0422981 0000 +M42020051111111256322700402851013113 +M520200511111112563119960101WTTTP9ZW922212122222210112111122170000 +M520200511111112563120190601WTTT0PYZY222222122222 0422981 0000 +M42020051111111262720600400871161113 +M520200511111112627119810622WTTTP0BP@12222222222250112111118180050 +M520200511111112627120070819WTTTYY#9@122222222222 0422061 0025 +M42020051111111272020600402981163113 +M520200511111112720119890801WTTT0#BWW12212222222210112131128030000 +M520200511111112720120160502WTTT0YB0@222222222222 0422981 0000 +M520200511111112720120140719WTTT0YB0#122122222222 0422981 0000 +M42020051111111277722400406441013113 +M520200511111112777119840714WTTT00#TZ22212222222230112161134060000 +M520200511111112777120160819WTTTP0#ZB222122122222 0422981 0000 +M520200511111112777120140722WTTTPYYPT222122222222 0422981 0000 +M42020051111111285520600402121162113 +M520200511111112855119780118WTTTYPTZ#12222112222250112131129420000 +M520200511111112855120160619WTTTPW0ZZ122222222222 0422981 0000 +M520200511111112855120140819WTTTYY0TW222221222222 0422981 0000 +M42020051111111288421100403821993113 +M520200511111112884119810707WTTTPWY9Z12222122222210112112117750000 +M520200511111112884120121118WTTT0PY0B122222122222 0422012 0000 +M42020051111111294120600401151163113 +M520200511111112941119880514WTTTPY9BP12222212222211012122120540000 +M520200511111112941219860512WTTT#Y#@012222222222210112083200000000 +M520200511111112941120130815WTTTYP#T@122222122222 0422981 0000 +M520200511111112941120061113WTTTPWP0T122222222222 0422071 0000 +M42020051111111296020600405341163113 +M520200511111112960119930806WTTTY9YT#22222122222210112121130050000 +M520200511111112960120180506WTTTPPPB@122221122222 0422981 0000 +M520200511111112960120121107WTTT0P@WZ122221222222 0422011 0000 +M42020051111111304922400401011163113 +M520200511111113049119720101WTTTP00ZZ22222122222210112121124040000 +M520200511111113049120070802WTTT00WYB222221122222 0422061 0000 +M42020051111111309920000401371161113 +M520200511111113099119831114WTTT099ZT22222122222230112111123950000 +M520200511111113099120070615WTTT0B#PW222221222222 0422071 0000 +M42020051111111338520600400871163113 +M520200511111113385119840815WTTT0BYPB12222222222210112111118070000 +M520200511111113385120120101WTTTY9T@P122222222222 0422021 0000 +M42020051111111340320600402031161113 +M520200511111113403119900801WTTT#9###12222222222210112111122640068 +M520200511111113403120180823WTTTPP#Y#222222222222 0422981 0000 +M520200511111113403120150621WTTTYZ0Y@122122222222 0422981 0000 +M42020051111111341620000403721162113 +M520200511111113416119880716WTTT0W#T#22222122222210112131125960000 +M520200511111113416120150718WTTTPBZBB222121222222 0422981 0000 +M520200511111113416120130502WTTT0@#WY222122222222 0422011 0000 +M42020051111111346921700402341163113 +M520200511111113469119880516WTTT#PZ@012222222222210112081115600000 +M520200511111113469120160715WTTT#TP@P122222222222 0422981 0000 +M520200511111113469120070116WTTTY@TWZ122222122222 0422071 0000 +M520200511111113469120040719WTTTY00ZB122222122222 0422091 0000 +M42020051111111355522400400551162113 +M520200511111113555119930102WTTT#W@0#22212222222210112121100000000 +M520200511111113555120101115WTTTY99P9222122222222 0422031 0000 +M42020051111111370520000406951161113 +M520200511111113705119710601WTTT#WZY@22222122222210112121117180000 +M520200511111113705120090813WTTTY@0PZ222221122222 0422041 0000 +M42020051111111371221400401581163113 +M520200511111113712119800115WTTT#@90Y22222122222210112121236300000 +M520200511111113712119710715WTTT0Y9B022222112222210212121200000000 +M520200511111113712120050701WTTT#00ZY222221122222 0422081 0000 +M520200511111113712120020508WTTT0##W#222221122222 0422111 0000 +M42020051111111373720000406951161113 +M520200511111113737119810502WTTT0P9YT22212222222230112111115800000 +M520200511111113737120150119WTTT#Y#Z#222122122222 0422981 0000 +M520200511111113737120090701WTTTP#9@9222122122222 0422041 0000 +M42020051111111379820900400391163113 +M520200511111113798119840506WTTTP09YB22212222222210112111121210000 +M520200511111113798120050715WTTT#BZ9B222122122222 0422081 0000 +M42020051111111426320600402661993113 +M520200511111114263119770719WTTT##YT@22222122222230112131128760000 +M520200511111114263120070626WTTTP@@#T122222122222 0422071 0000 +M520200511111114263120050119WTTTYZTP9222221122222 0422081 0000 +M520200511111114263120040518WTTT0@#T0222221222222 0422101 0000 +M520200511111114263120040518WTTTY#WY#222221122222 0422101 0000 +M42020051111111453620300404901162113 +M520200511111114536119780526WTTT0T99Y22212122222210112121120040061 +M520200511111114536120021101WTTTYWWWY122222122222 0422111 0000 +M42020051111111463020900402921013113 +M520200511111114630119860113WTTTPPY0Z22212222222210112121100000000 +M520200511111114630120140802WTTTPW#WT222122122222 0422981 0000 +M42020051111111466821100401551163113 +M520200511111114668119820101WTTTP##ZW22222122222230112141133540000 +M520200511111114668120130101WTTTP9ZPZ222222122221 0422011 0813 +M520200511111114668120100501WTTTYBZZP222222222222 0422041 0000 +M520200511111114668120050621WTTT0#YT#122222222222 0422091 0000 +M520200511111114668120030126WTTT#W00P122222122222 0422101 0000 +M42020051111111475621700405121163113 +M520200511111114756119890502WTTTY99YY12222222222210112111121030000 +M520200511111114756120160819WTTTYZYW#222222222222 0422981 0000 +M520200511111114756120110118WTTT0TT9B122222222222 0422021 0000 +M520200511111114756120090601WTTT0BZP#122222122222 0422041 0000 +M42020051111111480521400401841163113 +M520200511111114805119900122WTTTP9PB922222122222210112121125060000 +M520200511111114805120100601WTTT#0B9T222222222222 0422031 0000 +M42020051111111488221100406001162113 +M520200511111114882119840123WTTT##ZP012222222222210112121122010000 +M520200511111114882120111119WTTT#9P@W122222122222 0422021 0000 +M520200511111114882120070526WTTTPPP0W122222122222 0422061 0000 +M520200511111114882120040702WTTTPPT#Z122222122222 0422091 0000 +M42020051111111530821400406791163113 +M520200511111115308119830109WTTTPTWZY22222122222210112131113430000 +M520200511111115308120190101WTTTY#WTT222222222222 0422981 0000 +M520200511111115308120121107WTTT##T0B222221122222 0422011 0429 +M520200511111115308120061121WTTTYY@ZY222221222222 0422071 0429 +M42020051111111549620900404651163113 +M520200511111115496119930716WTTTP9WT912222222222210112111113670000 +M520200511111115496120170101WTTTPY0Z0122222122222 0422981 0000 +M42020051111111558421400403091163113 +M520200511111115584119910716WTTT#TB0Y22222122222210112121112480000 +M520200511111115584120180718WTTTY9W@Z222222122222 0422981 0000 +M520200511111115584120141106WTTTYTP@T222222222222 0422981 0000 +M42020051111111566821100405141163113 +M520200511111115668119870721WTTT099Y#22222122222210112111115920000 +M520200511111115668120170506WTTTY9P@Z222222122222 0422981 0000 +M520200511111115668120170506WTTT0W@TZ222222122222 0422981 0000 +M42020051111111568421100405951162113 +M520200511111115684119760101WTTT#09BY22212222222230112111132990000 +M520200511111115684120170109WTTT0BPYW222122122222 0422981 0000 +M520200511111115684120070121WTTTPWWBB222122122222 0422061 0000 +M42020051111111588821100401461163113 +M520200511111115888119850515WTTT#Y0Y@12212222222220112111121050000 +M520200511111115888120170708WTTT0P0TP122222222222 0422981 0000 +M520200511111115888120111102WTTTPZBZ9122222122222 0422021 0000 +M520200511111115888120100106WTTT#@@99122222122222 0422031 0000 +M42020051111111635520000406011162113 +M520200511111116355119790608WTTT0WTTB12222222222210112121116240000 +M520200511111116355120180121WTTT#TTPT122222122222 0422981 0000 +M520200511111116355120110116WTTTP#9P0122222222222 0422021 0000 +M520200511111116355120020808WTTTY9#Z#122222122222 0422111 0658 +M42020051111111647720000405421163113 +M520200511111116477119930621WTTTPTT9@22222122222210112131125390000 +M520200511111116477120151103WTTT#90ZP222222222222 0422981 0000 +M520200511111116477120110601WTTT0YZ9P122122122222 0422021 0000 +M42020051111111649720900402921163113 +M520200511111116497119850121WTTTYT0#Y12222222222210112111125840000 +M520200511111116497120150719WTTTPP9Z9222222222222 0422981 0000 +M520200511111116497120110815WTTTP#W#T222222222222 0422021 0000 +M42020051111111673220600405341161113 +M520200511111116732119820118WTTTYP9W#22222222222250112111121900000 +M520200511111116732120160701WTTT#W#TB222222222221 0422981 0897 +M520200511111116732120130515WTTTPPYY@222122122222 0422011 0000 +M520200511111116732120100615WTTTPT0WB222122222222 0422031 0000 +M520200511111116732120071115WTTT#@0#T222122122222 0422061 0000 +M520200511111116732120050109WTTT00PP#222122122222 0422081 0000 +M520200511111116732120020522WTTTPBB#T222222122222 0422111 0000 +M42020051111111674320000400171162113 +M520200511111116743119690101WTTT#Y9P@22222122222210112121126000000 +M520200511111116743120090508WTTTYWTZZ222221122222 0422051 0000 +M42020051111111676321100406001163113 +M520200511111116763119870703WTTTY0YT#12222222222220112081128190000 +M520200511111116763119820601WTTTP@TYB12222212222220212121108670000 +M520200511111116763120150606WTTTYTT99122222122222 0422981 0000 +M520200511111116763120111115WTTTYZ0W@122222122222 0422021 0000 +M520200511111116763120090123WTTT09@@Y122222222222 0422041 0000 +M42020051111111697520600404951011113 +M520200511111116975119840815WTTT#TBY922222222222250112131124900000 +M520200511111116975120150121WTTTP@0B#222122222222 0422981 0000 +M42020051111111701221100403821163113 +M520200511111117012119900801WTTTPZ0PP12222222222210112112128730000 +M520200511111117012120170519WTTT0BTZZ122222222222 0422981 0000 +M520200511111117012120130603WTTT#YZZZ122122222222 0422011 0000 +M42020051111111733022700403611161113 +M520200511111117330119910619WTTTPT#9012222212222211012111122600000 +M520200511111117330119890506WTTTY00T@12222222222210112121119710000 +M520200511111117330120170626WTTTY#Y@Y122221222222 0422981 0000 +M520200511111117330120150606WTTT0PWWW222222222222 0422981 0000 +M42020051111111744422400406121163113 +M520200511111117444119940126WTTT0TPT#22222122222210112081121160000 +M520200511111117444120170602WTTT#0Y0@222221222222 0422981 0000 +M42020051111111757722700402581163113 +M520200511111117577119820619WTTT#T0WY22222122222210112121128340000 +M520200511111117577120090721WTTT#B0#9222222122222 0422041 0000 +M520200511111117577120070622WTTTY9TY#222222122222 0422071 0000 +M42020051111111758221100404801013113 +M520200511111117582119790801WTTT00TPP22222122222230112111117810000 +M520200511111117582120110609WTTTYPPB0222222222222 0422031 0000 +M520200511111117582120040122WTTTYY9YB222221122222 0422091 1163 +M42020051111111762321400400351013113 +M520200511111117623119840723WTTT##@##22212222222210112111127860000 +M520200511111117623120121101WTTTY9W0W222122222222 0422012 0000 +M520200511111117623120040123WTTTPBB0T122222222222 0422093 0000 +M42020051111111766222200403201163113 +M520200511111117662119930801WTTT#BZ#Z22222122222210112121115740000 +M520200511111117662120170515WTTT#YZ@B222221222222 0422981 0000 +M520200511111117662120140619WTTT0Y09Z222221222222 0422981 0000 +M520200511111117662120120802WTTT0WZZW222221222221 0422011 0801 +M42020051111111769520900401031161113 +M520200511111117695119880709WTTT#0PP#12222222222210112111120340000 +M520200511111117695120160518WTTT0B##W122222122222 0422981 0000 +M520200511111117695120090501WTTTYB9W#122222222222 0422051 0000 +M520200511111117695120090501WTTTY@@ZB122222222222 0422051 0000 +M520200511111117695120060715WTTTY#0TB122222122222 0422071 0000 +M42020051111111780820600405341162113 +M520200511111117808119801126WTTT#9BT@12222122222210112131114790000 +M520200511111117808120140703WTTTPY#9P122222122222 0422981 0000 +M520200511111117808120060801WTTT0#ZWW122222122222 0422071 0000 +M520200511111117808120030106WTTT0WYPP122222122222 0422101 0000 +M42020051111111804720600405171161113 +M520200511111118047119920119WTTTYW9TP12222222222210112121119930000 +M520200511111118047120160101WTTT#P#BY122222222222 0422981 0000 +M520200511111118047120120719WTTT0YYPT122222122222 0422011 0000 +M42020051111111810920000402101161113 +M520200511111118109119831113WTTT09Z0#22222122222210112121130050000 +M520200511111118109120080121WTTTYP0#0222221122222 0422051 0000 +M520200511111118109120070515WTTT0B#90222221122222 0422061 0000 +M42020051111111811020600401421163113 +M520200511111118110119740118WTTTP9B9922212222222220212112100000000 +M520200511111118110119670118WTTTPZ#9W22212212222220112112100000000 +M520200511111118110120060503WTTTP0P9@222122122222 0422072 0000 +M520200511111118110120041113WTTTP009@222122122222 0422092 0000 +M520200511111118110120041113WTTTPPT0W222122122222 0422092 0000 +M42020051111111829420900403031013113 +M520200511111118294119830814WTTTPY#0P22212222222230112111155110000 +M520200511111118294120170118WTTTYT0TW222122222222 0422981 0000 +M520200511111118294120130101WTTTPP@00222222122222 0422981 0000 +M520200511111118294120090822WTTTP09#9222222222222 0422041 0000 +M42020051111111834222400402111163113 +M520200511111118342119820515WTTT#TP#022222122222210112121117110000 +M520200511111118342120180721WTTTPZ99Y222222122222 0422981 0000 +M520200511111118342120100521WTTTY#@Y#222222122222 0422031 0000 +M42020051111111852020900401031161113 +M520200511111118520119880712WTTT0W9@Y12212222222210112111121100000 +M520200511111118520120160501WTTTY#W0Z222222222222 0422981 0000 +M520200511111118520120070506WTTTP@BTZ122222222222 0422061 0000 +M42020051111111874820500403231163113 +M520200511111118748119730126WTTTY99#Y22222122222250112111126080000 +M520200511111118748120111119WTTT0##YY222222222222 0422021 0000 +M520200511111118748120030121WTTTBTZ#W222221122222 0422111 0000 +M42020051111111933220600400871163113 +M520200511111119332119870523WTTT0B#BY22222122222230112132124970000 +M520200511111119332120140713WTTT0BT0B222222122222 0422981 0287 +M520200511111119332120130126WTTTP#TZB222222122222 0422981 0287 +M520200511111119332120080115WTTTY@WZZ222221122222 0422051 0287 +M42020051111111936720900406421013113 +M520200511111119367119800119WTTT0Z0B@12222222222230112111124660000 +M520200511111119367120080501WTTT0#YPP122222222222 0422051 0000 +M520200511111119367120020513WTTTP9T#Y122222122222 0422111 0000 +M42020051111111959820000402591163113 +M520200511111119598119890607WTTT0#WYP22222222222210112111117390000 +M520200511111119598120170601WTTTYTZ9P222222122222 0422981 0000 +M42020051111111986221400401841163113 +M520200511111119862119890101WTTTP99PP22222122222210112121130670000 +M520200511111119862120090115WTTTPP0P@222221122222 0422041 0000 +M520200511111119862120080601WTTT0@TYT222221222222 0422051 0000 +M42020051111112011720000403951163113 +M520200511111120117119730806WTTT#BPTZ22212222222230112111124330600 +M520200511111120117120180726WTTT#ZWTB222222222222 0422981 0000 +M520200511111120117120150126WTTTP9BWY222122122222 0422981 0000 +M520200511111120117120070106WTTT00##W222122122222 0422061 0000 +M520200511111120117120050707WTTTPYTT9222122222222 0422081 0000 +M42020051111112036420600402981123113 +M520200511111120364119970701WTTT##@PZ22222222222210112121100000000 +M520200511111120364120170518WTTT0#0@0222222222222 0422981 0000 +M520200511111120364120170518WTTT#PWP9222222222222 0422981 0000 +M42020051111112060820900402921161113 +M520200511111120608119890613WTTTP#0#B12222222222210112111124110000 +M520200511111120608120170501WTTT0T@PW222222222222 0422981 0000 +M520200511111120608120090816WTTT#ZZTW122222222222 0422041 0000 +M520200511111120608120060615WTTT#YTWB122222222222 0422081 0000 +M42020051111112079122700402801163113 +M520200511111120791119910701WTTT#0PZT12222222222210112111125090000 +M520200511111120791120140121WTTTP0TBY222222222222 0422981 0000 +M520200511111120791120110701WTTTYWYT#122221222222 0422021 0000 +M520200511111120791120080619WTTTY0@TB222222122222 0422061 0000 +M42020051111112090821100401181163113 +M520200511111120908119850119WTTTPB#@B22212222222210112141127880000 +M520200511111120908120070109WTTT#PZZ#222122222222 0422061 0000 +M42020051111112096221700406571163113 +M520200511111120962119890821WTTT#@TWB22212212222210112111133570000 +M520200511111120962120140506WTTTP@@WT222222122222 0422981 0000 +M520200511111120962120071119WTTTP0PBY222222222222 0422061 0000 +M42020051111112100021700404101123113 +M520200511111121000119850606WTTT#0#T912222222222210112111133080000 +M520200511111121000120190108WTTT#WP9W122222122222 0422981 0000 +M520200511111121000120121119WTTT009TZ222222122222 0422011 0000 +M520200511111121000120040521WTTTPPW9#122222122222 0422101 0000 +M42020051111112147521100406001163113 +M520200511111121475119950706WTTTPZWTB12222222222210112112115240000 +M520200511111121475120171101WTTT0@PYZ122222122222 0422981 0000 +M42020051111112158521100402211163113 +M520200511111121585119910619WTTTPBW#P22222122222250112121100000000 +M520200511111121585120100526WTTTP@0@9222221222222 0422041 0000 +M42020051111112167221100406001163113 +M520200511111121672119940126WTTTYZ99#12222122222210112111115260000 +M520200511111121672120170102WTTTPZ0YP122222122222 0422981 0000 +M520200511111121672120110523WTTTP#WW@122221222222 0422021 0000 +M42020051111112168520900401031161113 +M520200511111121685119810518WTTT0BPT#12222222222210112111119720000 +M520200511111121685120140701WTTT#YT9#122221222222 0422981 0000 +M520200511111121685120050707WTTTP@P0@122222222222 0422081 0000 +M42020051111112171821700400981163113 +M520200511111121718119740618WTTT0YBZY22222112222251012111130560000 +M520200511111121718120160106WTTT0PY0@222222222222 1022981 0000 +M520200511111121718120140702WTTTPZZ0P222221222222 1022981 0000 +M520200511111121718120130626WTTT#09P#222221122222 1022981 0000 +M42020051111112174822700400441163113 +M520200511111121748119860615WTTT#BY#B22222122222210112121125160000 +M520200511111121748120160808WTTTY#Y9@222221122222 0422981 0000 +M520200511111121748120041119WTTTY90@Y222221222222 0422091 0438 +M42020051111112179120900405911162113 +M520200511111121791119830102WTTT#ZWBT22212222222210112111122670000 +M520200511111121791120140108WTTTPYT@Y222222122222 0422981 0000 +M520200511111121791120100519WTTTY@@P#222122122222 0422041 0000 +M520200511111121791120080113WTTTYWZ@W222122122222 0422061 0000 +M42020051111112181222700400671163113 +M520200511111121812119660623WTTT0YY9Y22212222222210112081122160000 +M520200511111121812120080121WTTTY0ZPY222222122222 0422051 0000 +M42020051111112182322700400671163113 +M520200511111121823119750101WTTT#W0PT22222122222210112981122780000 +M520200511111121823120090519WTTT0@0TT222221222222 0422051 0000 +M520200511111121823120070119WTTTPWYBT222221122222 0422061 0000 +M520200511111121823120030615WTTT#9W09222221222222 0422101 0000 +M42020051111112194121700405821163113 +M520200511111121941119860618WTTTBTTBP22222122222210112131120510000 +M520200511111121941120110608WTTTYP#PB222221222222 0422021 0000 +M520200511111121941120060602WTTT#YPB#222221122222 0422071 0000 +M42020051111112195020600400871163113 +M520200511111121950119880726WTTTP#PWT22222121222230112121114390629 +M520200511111121950120150102WTTT#PYPW222221222222 0422981 0000 +M520200511111121950120051115WTTTY00BT222221222222 0422081 0000 +M42020051111112198421700401091162113 +M520200511111121984119880115WTTT#WWZT22212222222230112111113040000 +M520200511111121984120190602WTTTPB9W0222222122222 0422981 0000 +M520200511111121984120190602WTTT#Z@Y@222222222222 0422981 0000 +M42020051111112200020900406131162113 +M520200511111122000119830501WTTTYTPWY22222122222210112121118470000 +M520200511111122000120170726WTTT0B0PP122222122222 0422981 0000 +M520200511111122000120070719WTTT#B0PY222221222222 0422061 0000 +M42020051111112206221700401021163113 +M520200511111122062119870814WTTTY0#Y@22222122222210112121118740000 +M520200511111122062120120721WTTTY@9TW222222222222 0422011 0000 +M520200511111122062120090623WTTT09ZY#122222122222 0422051 0000 +M42020051111112206321700402381993113 +M520200511111122063119870102WTTT0@99@22222122222210112111127180000 +M520200511111122063120151108WTTT0ZBPY222221122222 0422981 0000 +M520200511111122063120110801WTTT0#YYT222221222222 0422021 0000 +M42020051111112217221100403821163113 +M520200511111122172119820702WTTT#Y#B#12222122222210112121114700000 +M520200511111122172120160115WTTT#PYPP122221122222 0422981 0000 +M520200511111122172120110703WTTT##W0#122221222222 0422021 0000 +M520200511111122172120070115WTTTPPWYT122221122222 0422061 0000 +M42020051111112265622700402801161113 +M520200511111122656119910509WTTTPPTB922212222222210112131120340000 +M520200511111122656120150803WTTT0Z@TZ222222122222 0422981 0000 +M42020051111112269121100401461161113 +M520200511111122691119810107WTTTYB###12222222222230112121118080000 +M520200511111122691120150601WTTTP0WZB122222222222 0422981 0000 +M520200511111122691120050123WTTTY9Y0#122222222222 0422092 0000 +M42020051111112269921700402831163113 +M520200511111122699119870723WTTTP9ZY@22222122222210112121127870000 +M520200511111122699120180119WTTTPTZWZ222221222222 0422981 0000 +M42020051111112270321100406001013113 +M520200511111122703119940621WTTT#B0Z#12222222222210112131130080000 +M520200511111122703120181101WTTTY@YZP122222122222 0422981 0000 +M520200511111122703120171101WTTT#T0W@122222122222 0422981 0000 +M42020051111112272820900403071193113 +M520200511111122728119740621WTTTPP9W@22212222222210112131126310000 +M520200511111122728120050115WTTT#B#@0222122122222 0422081 0000 +M42020061111111132020600401421163113 +M520200611111111320119900106WTTT#WP#@12222222222220112111118460000 +M520200611111111320120160503WTTT0B@9Z122221122222 0422981 0000 +M520200611111111320120160503WTTTPY90T122221122222 0422981 0000 +M520200611111111320120130107WTTTY#0T#122222222222 0422981 0000 +M42020061111111132521700404101163113 +M520200611111111325119930123WTTT00YYT22222122222210112081124020000 +M520200611111111325120150619WTTT0T@#T222221222222 0422981 0000 +M520200611111111325120140115WTTTP@BTP222221122222 0422981 0000 +M520200611111111325120110721WTTT#T00#122222222222 0422021 0000 +M42020061111111146621100401181162113 +M520200611111111466219711112WTTT0B9ZT12222212222220212113200000000 +M520200611111111466119700706WTTT#0YT922212222222230112121122400000 +M520200611111111466120120119WTTTY@W0Z122122122222 0422011 0000 +M520200611111111466120020101WTTTYYZB@122122122222 0422111 0000 +M42020061111111149621100403821162113 +M520200611111111496119900626WTTTPZWZ012222222222210112111117620000 +M520200611111111496120190123WTTTP#@@@222222222222 0422981 0000 +M520200611111111496120130809WTTTYTT9T122221122222 0422981 0000 +M42020061111111155421400403651013113 +M520200611111111554119910509WTTT##0YY22222122222210112111118100000 +M520200611111111554120160606WTTT0P99W222221222222 0422981 0000 +M42020061111111159222400404941163113 +M520200611111111592119910714WTTTYWZTB22222122222210112121119500000 +M520200611111111592120161106WTTT00B##222221122222 0422981 0000 +M520200611111111592120150126WTTT0@TZ9222222222222 0422981 0000 +M520200611111111592120110102WTTT#@PTB222221122222 0422031 0000 +M520200611111111592120080516WTTTP@BZZ222221222221 0422051 0552 +M42020061111111171221700401121013113 +M520200611111111712119910123WTTT#0BYT22212222222210112111130410000 +M520200611111111712120150112WTTT0@W99222222222222 0422981 0000 +M42020061111111174121100401461163113 +M520200611111111741119910123WTTT#@YPP22222122222210112131115750000 +M520200611111111741120150707WTTTPTWBP222221222222 0422981 0000 +M42020061111111206121100401181123113 +M520200611111112061119810621WTTT090@B12222122222210112121121750000 +M520200611111112061120110615WTTT#9PBW122222222222 0422031 0000 +M520200611111112061120060601WTTTYZ9Y#122222122222 0422081 0000 +M42020061111111210520600401981163113 +M520200611111112105119860619WTTT0TB0@12222222222210112121119750000 +M520200611111112105120090821WTTTP#P@T222221222222 0422041 0000 +M520200611111112105120050101WTTT00#@9122222122222 0422081 0000 +M42020061111111210920000403721162113 +M520200611111112109119910701WTTTY9Z9B12222222222210112121119590000 +M520200611111112109120140114WTTTPTP@Z222222122222 0422981 0000 +M520200611111112109120101126WTTTY@T@9222222222222 0422031 0000 +M520200611111112109120070502WTTT#9WY9122222222222 0422061 0000 +M42020061111111217420600401981161113 +M520200611111112174119860123WTTT0Z0W912222222222210112121120940000 +M520200611111112174120090123WTTTPWBBP122222122222 0422041 0000 +M42020061111111228822700400681163113 +M520200611111112288219870603WTTTPB#T@12222212222220222113200000000 +M520200611111112288119850526WTTTP9#0Y12222222222210112121124220796 +M520200611111112288120080702WTTT0TP0@122222122222 0422051 0000 +M520200611111112288120020721WTTT0P#@Z122222222222 0422111 0000 +M42020061111111235321400403171163113 +M520200611111112353119770502WTTTP9Z9P22222122222220112111140420000 +M520200611111112353120190706WTTT#T9W9222221122222 0422981 0000 +M520200611111112353120111101WTTTP00PB222221122222 0422021 0000 +M520200611111112353120100803WTTT#YPW9222221122222 0422031 0000 +M520200611111112353120080107WTTT#T0Z#222221122222 0422061 0000 +M520200611111112353120051123WTTTYBTWB222221122222 0422081 0000 +M42020061111111252821400400351163113 +M520200611111112528119880516WTTT0WZBB22212222222220112111130670000 +M520200611111112528120110506WTTT09TWT222222222222 0422031 0000 +M520200611111112528120040502WTTTPPW#Z222222222222 0422102 0000 +M42020061111111266020000402891163113 +M520200611111112660119870123WTTT0W@YP22222122222210112121119640000 +M520200611111112660120150519WTTT0TTYT222221122222 0422981 0000 +M520200611111112660120150519WTTTBTTPT222221122222 0422981 0000 +M42020061111111268821100401781163113 +M520200611111112688119950715WTTTY#Y9912222222222220112112113240000 +M520200611111112688120170801WTTTYBZTP122222122222 0422981 0000 +M520200611111112688120150821WTTT0ZT#T122222222222 0422981 0000 +M42020061111111271222400401011993113 +M520200611111112712119730614WTTT0YZY@22222122222210112111121670000 +M520200611111112712120150508WTTT0@YBT222221222222 0422981 0000 +M42020061111111274321700401121161113 +M520200611111112743119960709WTTTYP#WY22212222222210112121119570000 +M520200611111112743120170801WTTTPT#PT222122122222 0422981 0000 +M520200611111112743120160121WTTT0T0Y@222122222222 0422981 0000 +M42020061111111278720900402921162113 +M520200611111112787119900122WTTTYT9##22212222222210112121123760000 +M520200611111112787120130112WTTT###BT122222122222 0422981 0000 +M520200611111112787120100103WTTT0YBP#122221122222 0422041 0000 +M42020061111111288121400401841161113 +M520200611111112881119920121WTTTYT9Y922222122222210412111115660000 +M520200611111112881120170719WTTT0WY0@222221122222 0622981 0000 +M520200611111112881120150121WTTT00YY9222221122222 0622981 0000 +M520200611111112881120090618WTTTYYPP9222221122222 0622051 0000 +M42020061111111288520900401881162113 +M520200611111112885119780701WTTT09PT#12222222222210112121122310000 +M520200611111112885120130515WTTTPZ99@122222122222 0422981 0000 +M520200611111112885120100118WTTTYP0PY122222222222 0422031 0000 +M42020061111111297520600402981163113 +M520200611111112975119920623WTTTYBB9Y22212222222210112121125390000 +M520200611111112975120140806WTTT0PWZZ222122222222 0422981 0000 +M520200611111112975120120123WTTTBT@TY222222122222 0422021 0000 +M42020061111111309620300404901163113 +M520200611111113096119780701WTTTYPTW922222122222220112111123450000 +M520200611111113096119770507WTTT##9T022222111222220212111200001789 +M520200611111113096120160819WTTT009TB222221222222 0422981 0000 +M520200611111113096120140521WTTTYYB@W222221122222 0422981 0000 +M42020061111111321621700402631163113 +M520200611111113216119720701WTTTP#Z9022222122222220112121200000000 +M520200611111113216119630115WTTTY00YB22222112222210212121200000000 +M520200611111113216120100506WTTT#TYYT222222222222 0422031 0000 +M520200611111113216120080502WTTT0P0ZB222222122222 0422061 0000 +M42020061111111322421700402511163113 +M520200611111113224119830715WTTTYZTW@22222112222210112121123010000 +M520200611111113224120080606WTTT0@#YT222221122222 0422061 0000 +M42020061111111323320000403951122113 +M520200611111113233119860719WTTT#TT#912222122222210112121122560000 +M520200611111113233120150813WTTT0PYPT122221222222 0422981 0000 +M42020061111111329221700400141163113 +M520200611111113292119880501WTTT0W#YZ22222122222230112131117610000 +M520200611111113292120160112WTTTYY9BY122221222222 0422981 0000 +M42020061111111335520600401421162113 +M520200611111113355119720807WTTT#ZYYB12222222222210112111129020000 +M520200611111113355120090719WTTTP0PT@122222122222 0422041 0000 +M520200611111113355120050708WTTT00BBW122222122222 0422081 0000 +M520200611111113355120030121WTTT0##0T122222222222 0422111 0000 +M42020061111111336620600406321163113 +M520200611111113366119870801WTTTPBY0B12222222222210112111125960000 +M520200611111113366120140126WTTTYP#9Y222222222222 0422981 0000 +M42020061111111382622700403611993113 +M520200611111113826119960715WTTT#ZTZZ22222122222210112111120810000 +M520200611111113826120180601WTTT0@@WT222222122222 0422981 0000 +M42020061111111385721400400351162113 +M520200611111113857119820619WTTT#WYBZ22212222222230112121114850000 +M520200611111113857120150721WTTT#P##Y222222222222 0422981 0000 +M520200611111113857120121113WTTTP#0YZ222222222222 0422011 0000 +M42020061111111398621400406481162113 +M520200611111113986119840109WTTT0WT@T22222122222210112121121560000 +M520200611111113986120180106WTTTPTBZP222222122222 0422981 0000 +M520200611111113986120160615WTTTYZ0P0222221222222 0422981 0000 +M520200611111113986120130107WTTT0WWWY222221222222 0422011 0000 +M520200611111113986120120518WTTTP0WYZ122221222222 0422021 0000 +M520200611111113986120070521WTTTPBBP@222221122222 0422061 0000 +M520200611111113986120030523WTTT#WPYY222221222222 0422101 0000 +M42020061111111414620600401981163113 +M520200611111114146119860608WTTTPYTYW12222222222210112121125040000 +M520200611111114146120030815WTTT0W#WZ122222222222 0422101 0000 +M42020061111111442822700402231161113 +M520200611111114428119820701WTTT00ZZ#22122222222210112112122530000 +M520200611111114428219801101WTTT#ZTWZ22212212222111012111200000885 +M520200611111114428120160626WTTT0@W@B222222222222 0422981 0000 +M520200611111114428120110701WTTTPP0YB221122222222 0422021 0000 +M520200611111114428120060726WTTT0PBYY222222222222 0422071 0000 +M520200611111114428120040608WTTT0#ZPT222222222222 0422101 0000 +M42020061111111464520900404651163113 +M520200611111114645119771126WTTT09Y#B22222222222250112111126000900 +M520200611111114645120090106WTTT##ZZB221222122222 0422051 0000 +M42020061111111466621700404101993113 +M520200611111114666119870123WTTTPB#T#12222222222210112111113400000 +M520200611111114666120150815WTTTPY@@Y122222122222 0422981 0000 +M520200611111114666120110114WTTT0#9W@122222222222 0422031 0000 +M42020061111111472420600405471161113 +M520200611111114724119910101WTTT09PP912222222222210112121121060000 +M520200611111114724120170107WTTT#T@@9122222222222 0422981 0000 +M520200611111114724120120122WTTT0TBT@122222222222 0422021 0210 +M520200611111114724120100101WTTTP#B0B122222122222 0422031 0210 +M42020061111111474620900400501121113 +M520200611111114746119680709WTTT#B9TT12222222222230112121126490000 +M520200611111114746120040812WTTTP9YP9122222222222 0422091 0000 +M42020061111111489122400404811163113 +M520200611111114891119900612WTTT#YZ0W22222122222210112111116990000 +M520200611111114891120141106WTTTP999W222221222222 0422981 0000 +M42020061111111497720600405341163113 +M520200611111114977119890715WTTTY@WY#12222122222210112131133330000 +M520200611111114977120100115WTTTPTW9B222221122222 0422031 0000 +M520200611111114977120090802WTTT#Z#W9222221122222 0422041 0000 +M42020061111111502822700406401162113 +M520200611111115028119900114WTTTY9W9@22222122222210112121113180000 +M520200611111115028120160502WTTTPBBY9222222122222 0422981 0000 +M520200611111115028120110113WTTTYT0B#222221222222 0422021 0000 +M42020061111111504120900406421161113 +M520200611111115041119640701WTTTY#BP912222222222250112111122740000 +M520200611111115041120060109WTTT#T0P@122222122222 0422081 0000 +M520200611111115041120040103WTTT0Z9ZZ122222222221 0422101 0897 +M42020061111111510121700406341013113 +M520200611111115101119840501WTTTYY0ZB22222222222250112121121940000 +M520200611111115101120120101WTTTPTY@9222222222222 0422021 0000 +M520200611111115101120090118WTTTPZB#P222222222222 0422051 0000 +M520200611111115101120070126WTTTYB9@Y222222122222 0422071 0000 +M42020061111111511320900406601993113 +M520200611111115113119860103WTTT0Y@9W22222122222220212111104160000 +M520200611111115113119840801WTTTPYP##22222212222220112111133450000 +M520200611111115113120150118WTTT0PW@T222222122222 0422981 0000 +M42020061111111512720500402421163113 +M520200611111115127119910723WTTTY09W012222222222210112111121980000 +M520200611111115127120180108WTTTYYBYT222222222222 0422981 0000 +M42020061111111515521100401541163113 +M520200611111115155119790802WTTTPB0T922212222222230112111137580000 +M520200611111115155120170108WTTTYW##Z222122222222 0422981 0000 +M520200611111115155120140506WTTT##Z#9222122122222 0422981 0000 +M520200611111115155120100614WTTT#Y@ZB222122122222 0422031 0000 +M42020061111111517421100401541163113 +M520200611111115174119950619WTTT0BB#W22222122222210112111124670000 +M520200611111115174120190715WTTTYZ#TY222221122222 0422981 0000 +M520200611111115174120180502WTTTYY9WT222221222222 0422981 0000 +M42020061111111519620600401981123113 +M520200611111115196119751101WTTTP0#WY22222222222230112121122710000 +M520200611111115196120130716WTTTP09PT222221222222 0422981 0000 +M42020061111111540020900406131163113 +M520200611111115400119940813WTTTPP@TB12222122222210112131120800000 +M520200611111115400120181115WTTTYTPYY222122222222 0422981 0000 +M42020061111111542022400400231163113 +M520200611111115420119840119WTTT00Z@T22122222222250112111120560000 +M520200611111115420120190626WTTTPP#@Y222222122222 0422981 0000 +M520200611111115420120150801WTTT0Z0PP221222222222 0422981 0000 +M520200611111115420120130103WTTT#BPPP221222122222 0422981 0000 +M42020061111111545820600403781163113 +M520200611111115458119930115WTTT0ZT@W22222122222210112081130940000 +M520200611111115458120170512WTTTY#TTY222222222222 0422981 0000 +M520200611111115458120150701WTTT0ZYWZ222221222222 0422981 0000 +M42020061111111563222400406121163113 +M520200611111115632119930101WTTT#TY9W22122222222210112111117470000 +M520200611111115632120170109WTTTPWP9P221222122222 0422981 0000 +M42020061111111582320900401031163113 +M520200611111115823119800107WTTTYYZPY22222222222220112111121020000 +M520200611111115823119680118WTTTPY@9@22222212222220212111127890000 +M520200611111115823120170707WTTT0@@@T222222222222 0422981 0000 +M520200611111115823120150803WTTTY9PY0222222222222 0422981 0000 +M520200611111115823120090112WTTT0Z909222222122222 0422041 0000 +M42020061111111584122700400671161113 +M520200611111115841119730512WTTT0TPYY12222222222230112081116840000 +M520200611111115841120030519WTTT#@BZT122222122222 0422111 0000 +M42020061111111587621100406001163113 +M520200611111115876119710123WTTTP#@PB12222222222210112111120610000 +M520200611111115876120030806WTTTY@00Z122222122222 0422101 0000 +M42020061111111588320600400871161113 +M520200611111115883119930123WTTT00@9#12222222222210112111116900000 +M520200611111115883120160121WTTTP#YZ@122222122222 0422981 0000 +M42020061111111616821100401181161113 +M520200611111116168119850503WTTT#@PYB12222222222210112121115170000 +M520200611111116168120190603WTTT#@Z#T122222122222 0422981 0000 +M520200611111116168120061119WTTTY9PYT222222122222 0422071 0000 +M42020061111111621422700402231013113 +M520200611111116214119710623WTTT#P9WT22222122222230112121134430000 +M520200611111116214120030118WTTTY9##9222221222222 0422111 0000 +M520200611111116214120020626WTTT0ZB90222221122222 0422111 0000 +M42020061111111623221700404401993113 +M520200611111116232119880119WTTTYW@#922212212222210112111117350000 +M520200611111116232120150126WTTTPY@99222222222222 0422981 0000 +M520200611111116232120110502WTTT0YTYT122222222222 0422021 0000 +M520200611111116232120100606WTTT#@YWP222222122222 0422041 0000 +M42020061111111647620900402921161113 +M520200611111116476119730815WTTTYT@B@22212222222210112131121530000 +M520200611111116476120040607WTTTYY9P0222122222222 0422101 0000 +M520200611111116476120020106WTTT0TT09222122222222 0422111 0000 +M42020061111111657420900405911161113 +M520200611111116574119940602WTTT#WPYZ12222222222210112081119850000 +M520200611111116574120150714WTTTYBY90122222122222 0422981 0000 +M520200611111116574120120101WTTTYB#PW122222122222 0422021 0000 +M42020061111111661521100406391162113 +M520200611111116615119880615WTTTPB0T012222122222210112121111050000 +M520200611111116615120150115WTTT0TT#P122221122222 0422981 0000 +M520200611111116615120080712WTTT#BP9P122221222222 0422051 0000 +M520200611111116615120060722WTTT0Z#0W122221122221 0422071 0575 +M42020061111111669321100406391122113 +M520200611111116693119690116WTTT0W0@Z12222222222230112111119580000 +M520200611111116693120020119WTTTYP@P0122222222222 0422112 0000 +M42020061111111675022200405571993113 +M520200611111116750119820126WTTT0PTW#12222222222210112121116810000 +M520200611111116750120180507WTTTY0@WB222222222222 0422981 0000 +M520200611111116750120150109WTTTPWTYB122222222222 0422981 0000 +M42020061111111682022700400441121113 +M520200611111116820119830119WTTTY9PBY12222222222210112131120270000 +M520200611111116820120180515WTTTY@YYP122222222222 0422981 0000 +M520200611111116820120090101WTTTYTWWZ222222122222 0422051 0000 +M42020061111111685620900403431162113 +M520200611111116856119810714WTTT#B0BP12222222222210112121130430000 +M520200611111116856120110823WTTT00#TT122222122222 0422021 0000 +M520200611111116856120070719WTTT0B@PW122222122221 0422061 0897 +M42020061111111696321700400981161113 +M520200611111116963119920101WTTTYYWB012222222222220112121123740000 +M520200611111116963119790121WTTTYBZ9T22222212222220212111124050000 +M520200611111116963120170103WTTT0W0W@122222122222 0422981 0000 +M520200611111116963120160126WTTTP09@W122221122222 0422981 0000 +M520200611111116963120140815WTTTPZ#@#122222222222 0422981 0000 +M520200611111116963120120721WTTT0PTYT122222222222 0422011 0000 +M42020061111111705921700405121162113 +M520200611111117059119920819WTTTYWYT012222122222230112112113410000 +M520200611111117059120180818WTTTPW0BP122121222222 0422981 0000 +M520200611111117059120140514WTTT0#@BB122221222222 0422981 0000 +M42020061111111713320000402101123113 +M520200611111117133119870706WTTTPWY#W22222122222210112111114350000 +M520200611111117133120160115WTTT0#WP0222221122222 0422981 0000 +M520200611111117133120080702WTTTY0WP@222221222222 0422051 0000 +M42020061111111719220000403551123113 +M520200611111117192119920707WTTTY0@@B22222122222210112111120870000 +M520200611111117192120160619WTTTYPZPB222221222222 0422981 0000 +M520200611111117192120100503WTTT#TP@#222222122222 0422041 0000 +M42020061111111720021700405121162113 +M520200611111117200119800703WTTTPW#Y#12222222222230112121131530000 +M520200611111117200120090115WTTTPWWY#122222222222 0422041 0000 +M520200611111117200120030715WTTT0ZW9T122222222222 0422101 0000 +M42020061111111725821100401691123113 +M520200611111117258119800607WTTT#Z@TT12222222222210112121239900000 +M520200611111117258119770509WTTTP#0ZB12222212222220212111200000000 +M520200611111117258120110501WTTTPT@9@122222122222 0422031 0000 +M520200611111117258120040508WTTTYZYWT222222122222 0422101 0000 +M42020061111111738220900400261161113 +M520200611111117382119760626WTTTPW00912212222222210112111132800000 +M520200611111117382120180726WTTTP99ZY122222222222 0422981 0000 +M520200611111117382120110801WTTTBTZP9122222122222 0422021 0000 +M520200611111117382120090602WTTT#00Y@122222222222 0422041 0000 +M42020061111111743120900401231162113 +M520200611111117431119900121WTTTYBPYW22222122222210112111114260000 +M520200611111117431120190508WTTTPZ@#P222221122222 0422981 0000 +M42020061111111749021100406391993113 +M520200611111117490119850819WTTT#Y#WY22222112222210112111100000000 +M520200611111117490119810715WTTTPTP9T22222121222250212121200000908 +M520200611111117490120060602WTTT0P#B9222221122221 0422081 0652 +M42020061111111752720600401981122113 +M520200611111117527119880709WTTTYT0YZ12222222222210112121124740000 +M520200611111117527120120114WTTT#WZ@0122222222222 0422011 0000 +M520200611111117527120071103WTTT0WBP9122222222222 0422061 0000 +M42020061111111769020000401451123113 +M520200611111117690119660621WTTTP@PYT22222122222220112111135620000 +M520200611111117690120041118WTTTP0BY9222221222222 0422091 0000 +M520200611111117690120041118WTTT0Y@PY222221222222 0422091 0000 +M42020061111111789022700405651163113 +M520200611111117890119900701WTTT0@TB@22222122222210112121127490000 +M520200611111117890120160122WTTT#WBZ@222221222222 0422981 0000 +M42020061111111792122700400671163113 +M520200611111117921119930802WTTT09BZ012222222222220112081100000940 +M520200611111117921120160722WTTTY9WWZ122222122222 0422981 0000 +M520200611111117921120120519WTTT#0WTT222222222222 0422011 0000 +M42020061111111799320900406151163113 +M520200611111117993119870702WTTT0TPWB11222222222230112111121000000 +M520200611111117993120170716WTTT#9@PP122221222222 0422981 0000 +M520200611111117993120120718WTTTYB9#W222222122222 0422011 0000 +M520200611111117993120070119WTTTP0TY@122222122222 0422061 0000 +M42020061111111805821100401691013113 +M520200611111118058119830521WTTTPWY#012222122222210112121129460000 +M520200611111118058120080613WTTT#Z#T@122221122222 0422051 0000 +M520200611111118058120020518WTTT#@Z@@122221122222 0422111 0000 +M42020061111111808022700400671161113 +M520200611111118080119950102WTTT#TZZ022212222222210112081119030000 +M520200611111118080120170126WTTT0PB0#222222122222 0422981 0000 +M520200611111118080120160123WTTT#YY9Z222222122222 0422981 0000 +M42020061111111811322400402111121113 +M520200611111118113119870619WTTT#@BZY12222222222210112111120580000 +M520200611111118113120190521WTTTP9#P#222222222222 0422981 0000 +M520200611111118113120080102WTTT#PYT@222222122222 0422061 0000 +M42020061111111816020500404091162113 +M520200611111118160119870109WTTT00BP022222122222210112121122620000 +M520200611111118160120160621WTTTP@0TY222221122222 0422981 0000 +M520200611111118160120070602WTTTP0YZ9222221122222 0422061 0000 +M42020061111111816920000400281123113 +M520200611111118169119840613WTTTY0Z0#22222122222210112111121670000 +M520200611111118169120170822WTTTP#BBY222222222222 0422981 0000 +M42020061111111822020900403031163113 +M520200611111118220119791126WTTTYTW9W22222222222210112122130630000 +M520200611111118220120180606WTTTBTTP0222222122222 0422981 0000 +M520200611111118220120160619WTTTY@#0P222222122222 0422981 0000 +M520200611111118220120050115WTTTPBYB9222222222222 0422092 0000 +M42020061111111829020900406151161113 +M520200611111118290119670115WTTT0P00@22212222222230112111136510000 +M520200611111118290120070715WTTT0YY##222122222222 0422062 0000 +M520200611111118290120030716WTTT0BPWZ222122122222 0422102 0000 +M42020061111111836122700400671123113 +M520200611111118361119890813WTTTYZ@#Z22222122222210112111124730000 +M520200611111118361120190706WTTTYZWPP222222222222 0422981 0000 +M42020061111111839920900401231163113 +M520200611111118399119870515WTTTPT@BW12222222222210112111121080000 +M520200611111118399120100119WTTT0@#TT122221122222 0422041 0000 +M520200611111118399120100119WTTT#Z0WP122221122222 0422041 0000 +M42020061111111843620900406421163113 +M520200611111118436119890106WTTT0@@0T12222222222210112121117710000 +M520200611111118436120171126WTTT0YBW#122222222222 0422981 0000 +M520200611111118436120070821WTTT#T#@#122221122222 0422061 0000 +M42020061111111844521100401551163113 +M520200611111118445119770116WTTT0#9#Z12222212222210112112126000964 +M520200611111118445120031102WTTT0#P@Z122222122222 0422102 0000 +M42020061111111856620500402421123113 +M520200611111118566119860809WTTTY@09B12222222222210112111117870000 +M520200611111118566120160515WTTT0ZZYW222222122222 0422981 0000 +M520200611111118566120130701WTTTYWW9@222222222222 0422981 0000 +M42020061111111875221100406391123113 +M520200611111118752119780501WTTTY#BY922222122222220112121128700000 +M520200611111118752120110122WTTTYTZ#P222222122222 0422031 0000 +M520200611111118752120090108WTTTPTWY#222222222222 0422041 0000 +M42020061111111879420000402281163113 +M520200611111118794119910103WTTTY#YY912222222222210112111125030000 +M520200611111118794120150107WTTTP9#Z#222221222222 0422981 0000 +M42020061111111898722700400991163113 +M520200611111118987119920615WTTTYB##P22222122222210112121114440000 +M520200611111118987120170115WTTTPP9@W222222122222 0422981 0000 +M520200611111118987120150526WTTT#@9#@222221222222 0422981 0000 +M42020061111111921920600405341163113 +M520200611111119219119880119WTTT0W##B12222222222230112111113640000 +M520200611111119219120170706WTTTYYT9T122222222222 0422981 0000 +M42020061111111922621400400561123113 +M520200611111119226119900102WTTTP9WT@22222122222210112111100000942 +M520200611111119226120190101WTTTP@W0Y222222222222 0422981 0000 +M520200611111119226120170814WTTTPWT#T222222122222 0422981 0000 +M42020061111111925720900400501992113 +M520200611111119257119970721WTTTPYWTP22212222222210112081124960000 +M520200611111119257120131118WTTTYYY@P222122222222 0422981 0000 +M42020061111111927621100405971993113 +M520200611111119276119940526WTTT#@Z#022122222222210112111123400000 +M520200611111119276120100102WTTTY#WZZ122222222222 0422031 0000 +M42020061111111941820900402921161113 +M520200611111119418119910121WTTTYT0TY22222222222210112111120100000 +M520200611111119418120150501WTTTP0@YP122222122222 0422981 0000 +M520200611111119418120130101WTTTP9PPT122221122222 0422981 0000 +M520200611111119418120080118WTTT##WT#222222122222 0422061 0000 +M42020061111111949721700402381163113 +M520200611111119497119900522WTTT#@@YY22222122222210112111123080000 +M520200611111119497120170126WTTT#BY0#222222122222 0422981 0000 +M520200611111119497120140101WTTT#YBZ@222221122222 0422981 0000 +M42020061111111961321100406391162113 +M520200611111119613119780521WTTT#WTTP12222222222210112121124260000 +M520200611111119613120170126WTTT#W0#@122221222222 0422981 0000 +M520200611111119613120080814WTTT0Z#B9122222122222 0422051 0000 +M520200611111119613120040523WTTTP@B9P122222222222 0422091 0000 +M42020061111111995020600402661163113 +M520200611111119950119880123WTTTY009Z22222122222210112111127550000 +M520200611111119950120160108WTTT0#P9W122221122222 0422981 0000 +M520200611111119950120150112WTTT0TZP#122221222222 0422981 0000 +M42020061111112014920900406421162113 +M520200611111120149119910719WTTT#W@Y022212222222210112121131200000 +M520200611111120149120130116WTTT0#W@9222122122222 0422981 0000 +M520200611111120149120090706WTTTYYTT0222122222222 0422041 0000 +M42020061111112026720600401421163113 +M520200611111120267119870708WTTT00Y#W22212222222210112121117990000 +M520200611111120267120081119WTTT#YZP9222122122222 0422051 0000 +M42020061111112042420000403011013113 +M520200611111120424119670112WTTT#PZW922222122222220112122119140000 +M520200611111120424120060626WTTT0T0W9222221222222 0422072 0000 +M42020061111112046320900401031162113 +M520200611111120463119830701WTTT#T##Y12222222222210112131123080957 +M520200611111120463120110501WTTT#P09B222122122222 0422021 0000 +M520200611111120463120070106WTTTYY@9Y222222222222 0422071 0000 +M42020061111112056620000403131123113 +M520200611111120566119890802WTTTPWTBY22222122222210112121128150000 +M520200611111120566120120121WTTT#B9TP222221222222 0422011 0000 +M42020061111112060420600400291161113 +M520200611111120604119840714WTTTPY@#012222222222230112131123290000 +M520200611111120604120080512WTTT0@BT#122222122222 0422061 0000 +M520200611111120604120041126WTTTYY#WT122222122221 0422091 0873 +M42020061111112066321100404791163113 +M520200611111120663119970513WTTT0Z#B022222122222210112131116230000 +M520200611111120663120170515WTTTPYW@9222222122222 0422981 0000 +M42020061111112079220000400131993113 +M520200611111120792119820826WTTT#Z#Z@22222122222220112111111290000 +M520200611111120792119760506WTTT#ZTTT22222112222220212111133520000 +M520200611111120792120160119WTTTBTZ#@222221222222 0422981 0000 +M520200611111120792120140623WTTT#09PW222221222222 0422981 0000 +M520200611111120792120121116WTTTPTWT0222221122222 0422011 0000 +M42020061111112082120000405551013113 +M520200611111120821119760102WTTT0Z99T22212212222250112111132490000 +M520200611111120821120190613WTTT#YYWP222122222222 0422981 0000 +M520200611111120821120090515WTTTYY@Y#222122222222 0422053 0000 +M520200611111120821120050115WTTTYZ9WP222122222222 0422083 0000 +M42020061111112092121700406831163113 +M520200611111120921119880615WTTT#WB#Y12222222222210112121122530000 +M520200611111120921120160519WTTTP00##122221122222 0422981 0000 +M520200611111120921120140503WTTT##P#Z122221222222 0422981 0000 +M520200611111120921120121106WTTTYPBT@122221122222 0422011 0000 +M42020061111112093422700403611163113 +M520200611111120934119820106WTTTP9PB022222122222250112121120800000 +M520200611111120934120140609WTTT0PW9P222221122222 0422981 0254 +M520200611111120934120130109WTTT#9TY9222221222222 0422011 0254 +M520200611111120934120040101WTTTY@TPP222221222222 0422091 0000 +M42020061111112095920900406151163113 +M520200611111120959119830609WTTTPZBTY22212222222220112121130630000 +M520200611111120959120120806WTTT0@#B@222122222222 0422011 0000 +M520200611111120959120040106WTTT##@#0222122222222 0422101 0489 +M42020061111112105620000406951993113 +M520200611111121056119820523WTTT0#T#Z12222122222210112111117000000 +M520200611111121056120160612WTTT#Y9TZ222222122222 0422981 0000 +M42020061111112113721700406891163113 +M520200611111121137119800806WTTT0T#W#12222222222210112121122570000 +M520200611111121137120090115WTTT#BBB#122222222222 0422051 0000 +M42020061111112118121100406001123113 +M520200611111121181119920123WTTTPW9#@12222222222210112112120990500 +M520200611111121181120160122WTTTYBZZ0222222122222 0422981 0000 +M520200611111121181120100515WTTT#TWBB122222122222 0422032 0000 +M42020061111112131522400406121161113 +M520200611111121315119851102WTTTYTT#T22212222222210112121117870000 +M520200611111121315120090109WTTT0TWYP222122222222 0422051 0000 +M520200611111121315120070603WTTTPTP##222222222222 0422071 0000 +M42020061111112131920600401421011113 +M520200611111121319119740609WTTTP9YW022222122222210112121122530000 +M520200611111121319120120501WTTTPW@#T222222122222 0422021 0000 +M520200611111121319120051126WTTT0WPWB222222122222 0422081 0000 +M42020061111112134821100403821163113 +M520200611111121348119850115WTTTYBBWB12222222222250112111121670000 +M520200611111121348120090503WTTT000PW122222122222 0422041 0000 +M520200611111121348120070123WTTT#YT9B122222222222 0422061 0000 +M42020061111112182921700406751163113 +M520200611111121829119880101WTTT##WP#22222122222210112141116360000 +M520200611111121829120150602WTTT0B0T9122222222222 0422981 0000 +M520200611111121829120130121WTTTY#@W#222222122222 0422011 0000 +M42020061111112186522700400671163113 +M520200611111121865119940108WTTTY0ZWP22212222222230112112116170000 +M520200611111121865120180601WTTTPYTBP222222222222 0422981 0000 +M42020061111112194022700403941122113 +M520200611111121940119750602WTTTPZ0TY22212222222210112161124630000 +M520200611111121940120110122WTTT#9PWP222122222222 0422021 0000 +M42020061111112201121700405521163113 +M520200611111122011119960715WTTT0Y@Z922222122222210112121126700000 +M520200611111122011120190512WTTT0@PBB222221222222 0422981 0000 +M42020061111112214220600402121123113 +M520200611111122142119650709WTTT#W@PW22222122222250112111123980000 +M520200611111122142120030519WTTT0Z90W222222122222 0422111 0000 +M42020061111112218120000402281163113 +M520200611111122181119970621WTTTYTZT022222122222210112081117350000 +M520200611111122181120180726WTTT0ZY#9222222122222 0422981 0000 +M42020061111112219520900401231163113 +M520200611111122195119910715WTTT#9ZP@12222122222210112111122700000 +M520200611111122195120160119WTTT##@B9122221122222 0422981 0000 +M42020061111112220321400400351161113 +M520200611111122203119840807WTTT#9ZZ922222122222220112121118520000 +M520200611111122203120180526WTTT00YBY222222222222 0422981 0000 +M520200611111122203120150601WTTT00P9Z222222122222 0422981 0000 +M520200611111122203120070702WTTT0PPZT122222222222 0422061 0000 +M520200611111122203120040626WTTT#YBT#222221122222 0422101 0000 +M42020061111112221420600405171161113 +M520200611111122214119900501WTTTY0BPZ12222122222210112111116200000 +M520200611111122214120160726WTTTPB90Y122222222222 0422981 0000 +M42020061111112242622400406121163113 +M520200611111122426119870119WTTTY0PP921212222222210112121117310000 +M520200611111122426120190601WTTT#9BPW222222222222 0422981 0000 +M520200611111122426120170119WTTTPBPY0222122222222 0422981 0000 +M520200611111122426120170119WTTT0T#T9222122222222 0422981 0000 +M520200611111122426120150118WTTT#WY@W222122222222 0422981 0000 +M42020061111112250021400401841123113 +M520200611111122500119810123WTTTYZ@@B22222122222210112121118780000 +M520200611111122500120170513WTTT#T9Z@222222122222 0422981 0000 +M520200611111122500120100113WTTTPBW9Y222221122222 0422031 0000 +M42020061111112253522700400671161113 +M520200611111122535119890701WTTTYT00@22222222222230112131126910000 +M520200611111122535120150112WTTTY9PWP222222222222 0422981 0000 +M520200611111122535120120115WTTTPY09Z222222122222 0422021 0000 +M42020061111112257821100401551123113 +M520200611111122578119920708WTTTY0YBB12222222222210112121125780000 +M520200611111122578120140509WTTTYB@#Z122222122222 0422981 0000 +M42020061111112279920000404071163113 +M520200611111122799119750506WTTT0BB#P22222112222210112111117700000 +M520200611111122799120140601WTTT0YBPB222221122222 0422981 0714 +M42020061111112280022200405781162113 +M520200611111122800119690126WTTTY@T@Y22222122222210112141121020000 +M520200611111122800120030122WTTTY0#B0222221222222 0422111 0000 +M42020061111112282622200402681123113 +M520200611111122826119890607WTTT#99ZW22222112222210112111129240000 +M520200611111122826120120607WTTTY00PW222222122222 0422011 0000 +M520200611111122826120070501WTTT#WT00222221122222 0422061 0000 +M42020061111112282720600405471163113 +M520200611111122827119841119WTTT#TBPY22122222222210112111112700000 +M520200611111122827120170519WTTT00WP@222222122222 0422981 0000 +M520200611111122827120160802WTTTY9@#T221222122222 0422981 0000 +M42020061111112284021100406001162113 +M520200611111122840119850522WTTTPBBZB12222222222230112111115770000 +M520200611111122840120170126WTTT#09PT122221122222 0422981 0000 +M520200611111122840120080112WTTT0@#PZ122222122222 0422052 0000 +M520200611111122840120050626WTTT0BWW@122222222222 0422092 0000 +M42020061111112294621400400351123113 +M520200611111122946119820523WTTT#Y9P022222222222210112111120210000 +M520200611111122946120150726WTTTP0B9P222222122222 0422981 0000 +M42020071111111111421100404801161113 +M520200711111111114119840816WTTT#PZZW12222222222230112111108890600 +M520200711111111114120170723WTTT0WWWP122222222222 0422981 0000 +M520200711111111114120140801WTTTYB0B0122222222222 0422981 0000 +M520200711111111114120080716WTTTP##YP122222222222 0422051 0000 +M520200711111111114120050115WTTTBT9@9122222222222 0422091 0000 +M42020071111111117520900406421162123 +M520200711111111175119780501WTTT0W@Z@12222122222250112121100000000 +M520200711111111175120130106WTTTY@0Y@122221222222 0422981 0000 +M520200711111111175120110115WTTT0#99Y122221222222 0422021 0000 +M42020071111111123721400400351163113 +M520200711111111237119990726WTTTPTZ#T22222122222210112111116900000 +M520200711111111237120190715WTTTPBZ@Y222222122222 0422981 0000 +M42020071111111135021100405951163113 +M520200711111111350119880115WTTT0@TB012222222222210112121113880000 +M520200711111111350120160719WTTTP9YBY122222222222 0422981 0000 +M520200711111111350120120826WTTT#9WP0222222222222 0422011 0000 +M42020071111111158220600401161163113 +M520200711111111582119900521WTTTPY9YY22222122222230112111122790000 +M520200711111111582120101108WTTTYY0P9222221222222 0422031 0000 +M42020071111111218120800406181161113 +M520200711111112181119930114WTTT#WYTP22222122222210112121119440000 +M520200711111112181120140515WTTTP@P9P222222222222 0422981 0000 +M42020071111111255421700406891993113 +M520200711111112554119820806WTTTY0Z#P22222122222230112121129460000 +M520200711111112554120140806WTTT00##T222221122222 0422981 0000 +M520200711111112554120090701WTTT0YZBZ222222222222 0422041 0000 +M520200711111112554120070113WTTTYPWPT222221122222 0422061 0000 +M42020071111111276922700403611123123 +M520200711111112769119891121WTTT#W0TB22222122222210112111100000986 +M520200711111112769120180615WTTTY#T@B122221222222 0422981 0000 +M520200711111112769120160526WTTT0TZ09222221222222 0422981 0000 +M42020071111111290022400404941122123 +M520200711111112900119731109WTTT0PPW922212222222210112121100000870 +M520200711111112900120150806WTTTY0W09222222122222 0422981 0000 +M42020071111111302020000406821123123 +M520200711111113020119720116WTTT#@9PW22212222222210112081127231123 +M520200711111113020120110101WTTTYTWZP222122122222 0422021 0000 +M520200711111113020120060815WTTT#P#T#222122122222 0422071 0000 +M42020071111111314721700402831163113 +M520200711111113147119910619WTTT0PZZP22222122222210112121116820000 +M520200711111113147120140115WTTT0T#09222222122222 0422981 0000 +M42020071111111383621400400351123113 +M520200711111113836119821106WTTTYBWP922212222222210112121112350000 +M520200711111113836120130622WTTT0B#YY222122122222 0422011 0000 +M42020071111111384822700400671163113 +M520200711111113848119790723WTTT#T@WW12222222222210112121129920000 +M520200711111113848120110719WTTTYYBBT122222122222 0422021 0000 +M520200711111113848120021122WTTTP@TZZ122222122222 0422111 0000 +M42020071111111421920000404151163113 +M520200711111114219119890826WTTT#YW@B22222122222210112121125740000 +M520200711111114219120131102WTTTP0@@Y222221222222 0422981 0000 +M42020071111111443120900402921122113 +M520200711111114431119850823WTTTY9YB@12222222222230112111124380000 +M520200711111114431120120123WTTT0TBWZ122222122222 0422011 0000 +M520200711111114431120070819WTTT0W9YB122222122222 0422061 0000 +M42020071111111494221700405821123113 +M520200711111114942119961126WTTT#P0PY12222122222210112081100000900 +M520200711111114942120160126WTTT#@BB@222222222222 0422981 0000 +M42020071111111502921100401181163113 +M520200711111115029119900614WTTTPWW@T22222122222210112121115110000 +M520200711111115029120170719WTTTYYPZY222222222222 0422981 0000 +M42020071111111510621700401121163113 +M520200711111115106119730526WTTTPWPPB22222222222220112111125960000 +M520200711111115106120140701WTTTYP0YW222222122222 0422981 0000 +M520200711111115106120100612WTTT0TPY@222222222222 0422041 0000 +M520200711111115106120060507WTTTP0@9P222122122222 0422081 0000 +M520200711111115106120030719WTTTBT9TP222122222222 0422101 0000 +M42020071111111547421700404101192113 +M520200711111115474119940501WTTTPW0TB22222122222210112111118910000 +M520200711111115474120140102WTTT#T0#@222221122222 0422981 0000 +M42020071111111585520600402031163113 +M520200711111115855119790109WTTTY@#Z912222222222210112111100000653 +M520200711111115855120160722WTTT09@B@122122122222 0422981 0000 +M520200711111115855120080502WTTTP#Y0#122222122222 0422061 0000 +M520200711111115855120030703WTTTPBYT@122222122222 0422101 0000 +M42020071111111602120500402421123113 +M520200711111116021119730102WTTTP@PB#22212222222230112121100000000 +M520200711111116021120100513WTTTY@@9Y222222122222 0422041 0000 +M42020071111111603621700403151013113 +M520200711111116036119900623WTTTP#0#912222222222210112121118200000 +M520200711111116036120160119WTTT#00YZ122221222222 0422981 0000 +M520200711111116036120140719WTTT#@9TW122221222222 0422981 0000 +M42020071111111624021100403821163113 +M520200711111116240119850109WTTT0ZP9Z12222222222210112111100000922 +M520200711111116240120160618WTTTPPWTT122222222222 0422981 0000 +M520200711111116240120150115WTTT#T@#0222222122222 0422981 0000 +M520200711111116240120110107WTTTYZ@W0122222122222 0422031 0000 +M42020071111111648422700402001123113 +M520200711111116484219940507WTTTPY0@@22222222222220212113200000000 +M520200711111116484119830522WTTT09Z@@22222112222220112111100000000 +M520200711111116484120180119WTTT0#0@P222222222222 0422981 0000 +M520200711111116484120161107WTTTPTPZ9222221222222 0422981 0000 +M42020071111111659720900402921122113 +M520200711111116597119920521WTTTPW9B#12222222222210112131133540000 +M520200711111116597120190102WTTT0WZWP222222222222 0422981 0000 +M520200711111116597120100113WTTTY9@00122222122221 0422031 0819 +M42020071111111670422700402001163113 +M520200711111116704119860619WTTTY@ZPZ22222122222210112111118060000 +M520200711111116704120080522WTTTBT@B9222221122222 0422061 0000 +M520200711111116704120060715WTTT0ZT9P222221222222 0422071 0000 +M42020071111111683522700406761163113 +M520200711111116835119850512WTTT#@W#@22222122222210112121100000000 +M520200711111116835120080106WTTTPWZY@222221222222 0422051 0000 +M520200711111116835120040101WTTT0Y#09222221122222 0422101 0000 +M42020071111111689222700402581162113 +M520200711111116892119790801WTTTYW@PZ12222222222230112111100001480 +M520200711111116892120160116WTTTPWWY@122222222222 0422981 0000 +M520200711111116892120041119WTTTYYTT@122222122222 0422091 0000 +M42020071111111778321700406831193113 +M520200711111117783119820502WTTTPWY@Y12222222222210112112100000879 +M520200711111117783120060714WTTTY9WW@122222122222 0422071 0000 +M520200711111117783120030823WTTT#YW0@122222122222 0422101 0000 +M42020071111111799720900400501161113 +M520200711111117997119860115WTTT0#TYZ22212222222210112111115400000 +M520200711111117997120160801WTTT#PZZ9222222222222 0422981 0000 +M42020071111111801520000403721121113 +M520200711111118015119840107WTTTY0W@P22222222222220112121118960000 +M520200711111118015120130703WTTTPPY@#222222222222 0422981 0000 +M42020071111111801820900406421162123 +M520200711111118018119770815WTTTYBYPW22222222222210112112118380000 +M520200711111118018120140701WTTTY@ZYT222122122222 0422981 0000 +M520200711111118018120080101WTTT#Y0BW222222222222 0422062 0000 +M520200711111118018120040501WTTTY@9#B222222122222 0422092 0000 +M42020071111111805622400401011161113 +M520200711111118056119720701WTTT#T9Y@12222222222210112121117640000 +M520200711111118056120110509WTTTPW9TZ122221122222 0422031 0000 +M42020071111111834521100406001193123 +M520200711111118345119950119WTTT090#922222222222210112112121450000 +M520200711111118345120161115WTTT#9@BT222222122222 0422981 0000 +M42020071111111857920000403181123113 +M520200711111118579119620601WTTT0#TT#22222112222230112121100000928 +M520200711111118579120110726WTTT09#0T122221222222 0422021 0000 +M42020071111111864220000403551163113 +M520200711111118642119830614WTTTYZ@0Z22222122222210112121125080000 +M520200711111118642120110602WTTT##YY9222221222222 0422031 0000 +M42020071111111870320600405341163113 +M520200711111118703119870619WTTTP90PZ12222222222221012121140000000 +M520200711111118703120080521WTTTPYZZ@122222122222 1022061 0647 +M520200711111118703120040121WTTT#BW#9122222122222 1022091 0000 +M42020071111111885120600405471192113 +M520200711111118851119970701WTTT0PZYP12222122222210112111119440000 +M520200711111118851120150714WTTTP9P#Z122222222222 0422981 0000 +M42020071111111886820600401981161113 +M520200711111118868119920514WTTTY0WBB12222222222210112121121020000 +M520200711111118868120150503WTTT#0BWB222222222222 0422981 0000 +M520200711111118868120110501WTTT0YY0Z122222122221 0422031 0813 +M520200711111118868120100501WTTTY9ZBB122222122222 0422041 0100 +M42020071111111888820600401981013113 +M520200711111118888119940513WTTT#WZWP22212222222210112081125400000 +M520200711111118888120160719WTTTY#ZTP222222222222 0422981 0000 +M42020071111111910021400400351123123 +M520200711111119100119750716WTTTP99##22212222222210112111100000849 +M520200711111119100120050821WTTTYW#WB122222122222 0422081 0000 +M42020071111111916022700403941163113 +M520200711111119160119930706WTTT#YWPP22212222222210112131123140000 +M520200711111119160120190707WTTT###YP222222122222 0422981 0000 +M42020071111111916421700403151162113 +M520200711111119164119950821WTTT#Z9@Y22222122222210112121119560000 +M520200711111119164120140118WTTT0YT#T122221122222 0422981 0000 +M42020071111111922522700400681161113 +M520200711111119225119930615WTTT#@#@922212222222210112081125670000 +M520200711111119225120120112WTTTYZT#T122122122222 0422011 0000 +M42020071111111942222700400441122123 +M520200711111119422119890714WTTTYP0@Y22222122222210112111112550725 +M520200711111119422120180721WTTTYBY@@222122122222 0422981 0000 +M42020071111111966021100401181123113 +M520200711111119660119890612WTTTY9T9P22122222222210112081100001035 +M520200711111119660120130715WTTT##PT@221222122222 0422981 0000 +M520200711111119660120080701WTTTBTT90221222122222 0422051 0000 +M42020071111111966722400401281162113 +M520200711111119667119870506WTTT#09T@22212222222210112141134160000 +M520200711111119667120160113WTTTPZW0T222122122222 0422981 0000 +M520200711111119667120160113WTTTPY@YY222122222222 0422981 0000 +M520200711111119667120090723WTTTPY99W222122122222 0422041 0000 +M42020071111111978121100406001123113 +M520200711111119781119820707WTTT##TWZ12222122222210112112100000878 +M520200711111119781120150809WTTTPZP@Z122221122222 0422981 0000 +M520200711111119781120091106WTTTY#PPT122222222222 0422041 0000 +M42020071111111997520900401031121113 +M520200711111119975119910803WTTT0@YY#22212222222210112111112310817 +M520200711111119975120200501WTTTY0PZ@222122222222 0422981 0000 +M520200711111119975120170707WTTT#YY9P222122122222 0422981 0000 +M520200711111119975120100515WTTT#90#B222122222222 0422031 0000 +M42020071111112024920000403271163113 +M520200711111120249119841121WTTT0@9B@22222112222220212111125540000 +M520200711111120249119830518WTTTYTW9Z22222222222220112111100000797 +M520200711111120249120140109WTTTPT#@0222221122222 0422981 0000 +M520200711111120249120050719WTTTY##W@222221222222 0422081 0000 +M42020071111112052720900403031163113 +M520200711111120527119930507WTTTPPT@Z22212222222210112111111960000 +M520200711111120527120150714WTTTY@@TY222122122222 0422981 0000 +M42020071111112054820900406741162113 +M520200711111120548119820726WTTT0#WYZ22212222222210112121121920000 +M520200711111120548120160126WTTTPW0@9222122122222 0422981 0000 +M520200711111120548120041115WTTTYTPTZ222122122222 0422091 0000 +M42020071111112081120300401961163113 +M520200711111120811119890502WTTTPB#9@22222122222220112111116620000 +M520200711111120811120160115WTTT#B0YB222222222222 0422981 0000 +M520200711111120811120070721WTTT#TY@@222221222222 0422061 0000 +M42020071111112083221100403821013113 +M520200711111120832119770721WTTTYWBWZ12222222222210112121126000000 +M520200711111120832120020815WTTTYYT#P122222222222 0422111 0000 +M42020071111112086721400400351161113 +M520200711111120867119970806WTTTPW#Z@22212212222211012111113770000 +M520200711111120867119940102WTTTPBPP022212222222210112111121380000 +M520200711111120867120170118WTTTYB#PZ222122222222 0422981 0000 +M520200711111120867120130108WTTT0#Z9W222122122222 0422981 0000 +M520200711111120867120130106WTTTP#0@W222122122222 0422011 0000 +M520200711111120867120110601WTTT0#BY0222122222222 0422031 0000 +M520200711111120867120091101WTTT0Y#TY222122122222 0422041 0000 +M42020071111112093520000404151123113 +M520200711111120935119800121WTTT0ZB9B22222122222210112121121000000 +M520200711111120935120050513WTTTPYW@Z222221122222 0422091 0000 +M42020071111112169321100406001123113 +M520200711111121693119850716WTTTY##TW12222222222220212112200000879 +M520200711111121693119741121WTTTP9YT012222212222220112112223050000 +M520200711111121693120180822WTTT0WPZP122222222222 0422981 0000 +M520200711111121693120081113WTTT#ZYPY122222222222 0422052 0000 +M520200711111121693120050618WTTT##9PP122222222222 0422092 0000 +M520200711111121693120030103WTTT#W0B#122222222222 0422102 0000 +M42020071111112191321400406091123113 +M520200711111121913119900719WTTTPBP@@22222122222210112111119090917 +M520200711111121913120140119WTTT#@0BZ222221122222 0422981 0000 +M42020071111112195320600405471122113 +M520200711111121953119720502WTTT00Z9012222222222210112081123800910 +M520200711111121953120130119WTTT0YBW0122222222222 0422011 0000 +M520200711111121953120040715WTTTPW@BY122222222222 0422091 0000 +M42020071111112232121700402381163113 +M520200711111122321119800716WTTT0Z@WB12222222222210112121128140000 +M520200711111122321120060115WTTTY@P#B122222222222 0422071 0000 +M520200711111122321120040126WTTTP#TPZ122222122221 0422091 0897 +M520200711111122321120030121WTTTY#0#P122222222222 0422111 0000 +M42020071111112233621100404001123113 +M520200711111122336119860606WTTTPPP@@22222122222250112141100000861 +M520200711111122336120110119WTTTYW#@Z222221122222 0422021 0000 +M520200711111122336120100601WTTT#BWB#222221122222 0422041 0000 +M42020071111112237220000405421162123 +M520200711111122372119690818WTTTY0YW#12222222222250112131127200000 +M520200711111122372120040512WTTT09@0@222122222222 0422101 0000 +M42020071111112240320000404271161113 +M520200711111122403119860602WTTT09ZZY12222222222210112121113200000 +M520200711111122403120150112WTTTY9#@W222222222222 0422981 0000 +M520200711111122403120030701WTTTYWWPP122222122222 0422101 0754 +M42020071111112263520500406931162113 +M520200711111122635119750603WTTTYB##Z22222122222210112111123530000 +M520200711111122635120050615WTTT0TY9@222221222222 0422091 0000 +M520200711111122635120021103WTTT0TPZ9222221122222 0422111 0000 +M42020071111112287821700404101123113 +M520200711111122878119970703WTTT00@TY22222122222210112081100000918 +M520200711111122878120171126WTTT0PB9#222222222222 0422981 0000 +M42020071111112290020600402031991113 +M520200711111122900119850122WTTT#9YZ912222212222250112121130320000 +M520200711111122900120100715WTTTPY09@122222222222 0422031 0000 +M520200711111122900120080621WTTTPPT9T122222222222 0422061 0000 +M520200711111122900120060501WTTT#T@@#122222222222 0422071 0000 +M42020081111111126021100406001163113 +M520200811111111260219760123WTTTP@0YP12222222222220212113220030000 +M520200811111111260119680518WTTTYWZB@12222212222220112112124160000 +M520200811111111260120130623WTTT#ZY0B122222222222 0422013 0000 +M520200811111111260120070126WTTT0Z@TY122222122222 0422072 0000 +M520200811111111260120050112WTTT#BWPB122222222222 0422082 0000 +M42020081111111126921700405821163113 +M520200811111111269119800115WTTT##ZTY22222122222250112111138130000 +M520200811111111269120120701WTTTBTTBT222121122222 0422021 0000 +M520200811111111269120090708WTTT09B00222121222222 0422051 0000 +M520200811111111269120070519WTTTP#ZYB222121122222 0422061 0000 +M520200811111111269120070519WTTTPB009222121122221 0422061 0897 +M42020081111111142022700403611163113 +M520200811111111420119860515WTTTPBBW#22222122222210112111128770000 +M520200811111111420120080519WTTT#Y999222221222222 0422051 0000 +M42020081111111142621700401441013123 +M520200811111111426119910822WTTT009WW22222122222210112111126680000 +M520200811111111426120190618WTTTP#WTP222222122222 0422981 0000 +M520200811111111426120160118WTTTP0BYT222221122222 0422981 0000 +M42020081111111151021700406571163123 +M520200811111111510119650801WTTT0PY0922212222222230112111141170000 +M520200811111111510120030106WTTTYYYY0222122122222 0422111 0000 +M42020081111111178720600402981163113 +M520200811111111787119880614WTTTYZWYW22222122222210112131142250000 +M520200811111111787120160623WTTT#W9T@122222122222 0422981 0000 +M520200811111111787120110807WTTT#PT#@122222122222 0422021 0000 +M520200811111111787120100816WTTT#00TW222221222222 0422031 0000 +M42020081111111179620000404271193113 +M520200811111111796119730106WTTT#TW@Y22122212222210112111131550000 +M520200811111111796120090608WTTTYWTB#221222222222 0422051 0000 +M520200811111111796120040813WTTT#0ZY9221222122222 0422091 0000 +M42020081111111184722700400671991113 +M520200811111111847119900518WTTTY#T#912222222222210112121128990000 +M520200811111111847120120119WTTT#0#ZZ122222222222 0422011 0000 +M520200811111111847120080121WTTTY9YPP122222222222 0422051 0000 +M42020081111111185620900402921012113 +M520200811111111856119870506WTTTY9@B012212222222210112121119910000 +M520200811111111856120070526WTTTPB0PB222122222222 0422061 0157 +M42020081111111193820600402031161113 +M520200811111111938119840119WTTT0B@@922222121222220112121134490613 +M520200811111111938120100712WTTTY0WW@122222222222 0422041 0000 +M520200811111111938120080801WTTTP0P#Z122222222222 0422051 0000 +M520200811111111938120030506WTTT0@9W9122222222222 0422111 0000 +M42020081111111194620600401421163113 +M520200811111111946119910101WTTTPP90T22222122222210112131122900000 +M520200811111111946120100515WTTT0B0PT222221122222 0422031 0000 +M42020081111111220420600401421162113 +M520200811111112204119911101WTTTPW#WB22222122222250112121121390000 +M520200811111112204120190121WTTTYPP#W122222122222 0422981 0000 +M520200811111112204120110114WTTTP@TY#122222122222 0422021 0000 +M520200811111112204120090101WTTTP0W@9122221122222 0422051 0000 +M42020081111111224820900406601163113 +M520200811111112248119890503WTTT#9#BW22122222222210112081133930000 +M520200811111112248120061123WTTT#TWWT221222122222 0422071 0000 +M520200811111112248120050615WTTT0Y@9B221222222222 0422091 0000 +M42020081111111226820600401421163113 +M520200811111112268119790515WTTTPPZZT22212222222210112111136380000 +M520200811111112268120120703WTTTPBPT#222122222222 0422021 0000 +M520200811111112268120080603WTTTP#@YT222122222222 0422061 0000 +M42020081111111231622700402001161113 +M520200811111112316119820818WTTTPP#BB12222222222210112121124990000 +M520200811111112316120090609WTTT#P0TT122222222222 0422051 0000 +M520200811111112316120070715WTTT#ZBZ#122222122222 0422071 0000 +M520200811111112316120030809WTTT0T#W9122222122221 0422101 0835 +M42020081111111233120600400871163123 +M520200811111112331119940113WTTTYTZ0922222122222220212111200000000 +M520200811111112331119890802WTTTP0@Z#22222112222220112121236290000 +M520200811111112331120180715WTTT0YP90222222222222 0422981 0000 +M520200811111112331120150619WTTT#@BY#222221222222 0422981 0000 +M42020081111111285620000404271163123 +M520200811111112856119810501WTTT#W#BP22122222222250112111132270000 +M520200811111112856120170503WTTT09P#Y222222222222 0422981 0000 +M520200811111112856120090501WTTT#T0TP221222222222 0422041 0399 +M42020081111111286921100406541163113 +M520200811111112869119680621WTTTP#P9Y22222112222220112111131750000 +M520200811111112869120080101WTTT0#@PZ222222222222 0422061 0000 +M520200811111112869120060719WTTT0W0Y0222221222222 0422081 0000 +M42020081111111291222700403941163113 +M520200811111112912119670801WTTTYY9WB22212222222210112111121100000 +M520200811111112912120050621WTTT0Z9T9222122222222 0422091 0000 +M520200811111112912120020515WTTTYP00W222122222222 0422111 0000 +M42020081111111294620600402661993113 +M520200811111112946119840106WTTTYYZ#022222112222210112111141420000 +M520200811111112946120140615WTTT0##Z@222222122222 0422981 0000 +M520200811111112946120100109WTTT#BZZY222222222222 0422041 0000 +M520200811111112946120050506WTTT0W#BW222222222222 0422081 0000 +M42020081111111295720900400391162113 +M520200811111112957119770101WTTT#Z#P912212222222230112081130910000 +M520200811111112957120040101WTTT0Y##P122222122222 0422101 0000 +M42020081111111310520000406951163113 +M520200811111113105119660613WTTTPZ#0Z22222122222220112121121200000 +M520200811111113105120060603WTTTY#0BB222221122222 0422081 0000 +M520200811111113105120031112WTTT#Z#9B222221122222 0422101 0000 +M42020081111111311421100401181012113 +M520200811111113114119800706WTTT###P022122222222210112111126240000 +M520200811111113114120060107WTTTP0B00221222222222 0422071 0000 +M520200811111113114120020808WTTTY#Y0B221222122222 0422111 0000 +M42020081111111318621100401691123123 +M520200811111113186119860606WTTTPZ@0T22222122222210112121124190000 +M520200811111113186120161123WTTT##TPB222222222222 0422981 0000 +M520200811111113186120030108WTTT#09WP222221122222 0422101 0000 +M42020081111111327620900401881163113 +M520200811111113276119950515WTTTYW09022222222222210112111111520000 +M520200811111113276120200502WTTT0P@BY222222222222 0422981 0000 +M42020081111111328820900400501163123 +M520200811111113288119880101WTTT0Y0Y#22212222222210112111135550000 +M520200811111113288120120102WTTTPZTTY122122222222 0422011 0000 +M520200811111113288120050109WTTTP99Y0122221122222 0422091 0000 +M42020081111111346320900402921161113 +M520200811111113463119820118WTTT0Z00022212222222210112121120560000 +M520200811111113463120150703WTTTPZT9P222122222222 0422981 0000 +M520200811111113463120130121WTTT#B#Y@222122122222 0422011 0000 +M520200811111113463120070119WTTTYYY0Z222122222222 0422071 0000 +M520200811111113463120060114WTTT#TBWP222122222222 0422081 0000 +M42020081111111346722700400671161113 +M520200811111113467119800616WTTTYTYZT22222122222210112121122550000 +M520200811111113467120101101WTTTY@@TT222222122222 0422031 0000 +M520200811111113467120060106WTTT#ZB0#222221122222 0422081 0000 +M42020081111111362722700402401013113 +M520200811111113627119800719WTTT0@TY022222122222210112131112570000 +M520200811111113627120150115WTTT#WZ9Z222221222222 0422981 0000 +M42020081111111379321700400511163113 +M520200811111113793119880821WTTT0@@B#22222122222210112131126310000 +M520200811111113793120110706WTTT0@TZZ222222122222 0422021 0000 +M520200811111113793120070612WTTT0Y9BT222221122222 0422071 0000 +M42020081111111387020000405351163123 +M520200811111113870119800114WTTTPPP9#22212222222250112111118620000 +M520200811111113870120150508WTTTPZB#Z222122122221 0422981 0586 +M520200811111113870120130106WTTTYBY@W222122122222 0422981 0000 +M520200811111113870120060715WTTTP@@Z0222122122221 0422071 0777 +M520200811111113870120030122WTTTYZ@WY222122222222 0422101 0000 +M42020081111111412621700401121013113 +M520200811111114126119830121WTTTYB@@B22212222222210112121132930000 +M520200811111114126120100501WTTT#@##T222222222222 0422031 0000 +M520200811111114126120050623WTTTPYZW#222122222222 0422091 0000 +M42020081111111425421200404291161113 +M520200811111114254119890519WTTT#9TTT22212222222250112131126590000 +M520200811111114254120170612WTTTYBZYT222222222222 0422981 0000 +M520200811111114254120101101WTTT0ZYYB222122222222 0422031 0000 +M42020081111111432520500402421163123 +M520200811111114325119790719WTTT0#0TZ22212222222210112111120670000 +M520200811111114325120180108WTTT0W0ZB222122222222 0422981 0000 +M520200811111114325120150616WTTTPPYZ0222222122222 0422981 0000 +M520200811111114325120130602WTTT0P#@0222122122222 0422011 0000 +M42020081111111444620000403951163113 +M520200811111114446119680116WTTT#PPW922212212222210112111128760000 +M520200811111114446120060507WTTTPB@0T222122122222 0422081 0000 +M42020081111111453120900403031161123 +M520200811111114531119840702WTTT#W9@#22222122222210112121116500000 +M520200811111114531120170718WTTT0B@##222222222222 0422981 0000 +M520200811111114531120090701WTTTBTTT@222222222222 0422041 0000 +M42020081111111454421100401181162113 +M520200811111114544119840521WTTTY@Z#P12222122222210112121132270000 +M520200811111114544120181119WTTT0W9BB122221222222 0422981 0000 +M520200811111114544120090503WTTTP9@##122221122222 0422041 0000 +M42020081111111461721400406791163113 +M520200811111114617119950107WTTTY9@0P22222122222210112081117000000 +M520200811111114617120170819WTTTY@WP9222221222222 0422981 0000 +M42020081111111464920000404271993113 +M520200811111114649119720126WTTTY@YYZ22122222222210112121131890000 +M520200811111114649120160701WTTTPWZTY221222122222 0422981 0000 +M520200811111114649120130823WTTTPYZB#221222122222 0422981 0000 +M42020081111111475020900401881162113 +M520200811111114750119800522WTTT0PYY#22212222222210112121142480000 +M520200811111114750120120514WTTTPWT#@222122122222 0422021 0000 +M520200811111114750120120514WTTT#Z0Y0222122222222 0422021 0000 +M520200811111114750120020706WTTTPY0ZT222122222222 0422111 0000 +M42020081111111479020900406131163123 +M520200811111114790119850601WTTTPBW9B22222222222210112121130030000 +M520200811111114790120160101WTTTY#TTP222222222222 0422981 0000 +M520200811111114790120090503WTTTYZ@PP222222122222 0422041 0000 +M520200811111114790120030107WTTT#0BBW222122122222 0422101 0000 +M42020081111111496421400406791163113 +M520200811111114964119870626WTTTYZZ#P22222122222210112121126560000 +M520200811111114964120100615WTTT#Y9#Y222222222222 0422041 0000 +M520200811111114964120080614WTTTYPPY0222221222222 0422061 0000 +M520200811111114964120050626WTTT#W@P0222221122222 0422091 0000 +M42020081111111513322700403941993113 +M520200811111115133119980103WTTT0P0PZ22222122222210112081122530000 +M520200811111115133120170107WTTTY9B#@222121222222 0422981 0000 +M42020081111111514020000400311163113 +M520200811111115140119920508WTTTYBTP#22222122222210112131123860000 +M520200811111115140120170109WTTT0T@W0222221122222 0422981 0000 +M42020081111111517520600405471162123 +M520200811111115175119881121WTTT#9#B@12222222222210112111113890000 +M520200811111115175120170715WTTTP99WW122222122222 0422981 0000 +M520200811111115175120120718WTTTP#0YT122222222222 0422021 0000 +M520200811111115175120101112WTTT#Y#WT122222222222 0422031 0000 +M520200811111115175120060601WTTTYTBYW122222222222 0422083 0000 +M42020081111111519020600401981162113 +M520200811111115190119950606WTTTPP00P22222122222210112081113670000 +M520200811111115190119900626WTTT0ZYB012222112222211012121132790000 +M520200811111115190120150501WTTT#Z@PW122222122222 0422981 0000 +M42020081111111521920900402621161113 +M520200811111115219119810518WTTT#W@@Y22212222222220112131122050000 +M520200811111115219120160826WTTT#0T0#222122222222 0422981 0000 +M520200811111115219120110123WTTTYZ#YY222122122222 0422031 0149 +M520200811111115219120090115WTTT##W@B222122122221 0422041 0796 +M520200811111115219120080609WTTTPPTWP222122222222 0422061 0149 +M520200811111115219120060101WTTTPZW99222122222222 0422071 0149 +M42020081111111523320900400501161113 +M520200811111115233119860623WTTT0ZY@T12222222222210112111134120000 +M520200811111115233120080512WTTT0Y0@T122222222222 0422051 0000 +M520200811111115233120080512WTTT#0Z9T122222222222 0422051 0000 +M42020081111111525320600405171162113 +M520200811111115253119610715WTTTP@99P12222222222210122111133900000 +M520200811111115253120120114WTTTP##TP122222222222 0622011 0000 +M520200811111115253120110107WTTT0T@BZ122222222222 0622031 0000 +M42020081111111549322400405611162113 +M520200811111115493119660713WTTT0BTB022212222222230112111118750000 +M520200811111115493120060521WTTT0W9B#222122122222 0422081 0000 +M520200811111115493120021126WTTT#BYPY222122122222 0422111 0000 +M42020081111111560022400401011162113 +M520200811111115600119931118WTTTYYBWZ22222122222210112111122750000 +M520200811111115600120130106WTTT0Y@0P222221122222 0422011 0000 +M42020081111111562721700404101163113 +M520200811111115627119900113WTTT#Z#TB22222122222210112121123430000 +M520200811111115627120160512WTTTYB9TZ222221222222 0422981 0000 +M520200811111115627120070523WTTT0T@TZ222221122222 0422071 0000 +M42020081111111573822700405241013113 +M520200811111115738119940101WTTTY@WPW22222122222220212121112300000 +M520200811111115738119940119WTTT#T#YZ22222112222220112081123690000 +M520200811111115738120160103WTTTP9#0W222221222222 0422981 0000 +M42020081111111582820600405471163113 +M520200811111115828119820119WTTT#PZBB12222222222210112111136400000 +M520200811111115828120030607WTTT#9T##122222222222 0422111 0000 +M42020081111111590922400406121163113 +M520200811111115909119741107WTTTP0P9W22212222222230112121126310000 +M520200811111115909120080123WTTTY#BT@122122122222 0422061 0000 +M520200811111115909120060726WTTT0B@BB222122122222 0422071 0000 +M42020081111111605622700402801013113 +M520200811111116056119930106WTTTPWYW022222222222210112111122650000 +M520200811111116056120150722WTTT#BBZW222122222222 0422981 0000 +M520200811111116056120140116WTTTYPTTT222122122222 0422981 0000 +M42020081111111634622700402321013123 +M520200811111116346119830619WTTTPZW@Z22222122222210112111118810000 +M520200811111116346120070709WTTT0Z0TP222221222222 0422061 0000 +M520200811111116346120051103WTTTYW#W@222221222222 0422081 0000 +M520200811111116346120030501WTTT#P#WP222221122222 0422101 0000 +M42020081111111639821100401181161113 +M520200811111116398119790714WTTT#0YY@12222222222230112121123570000 +M520200811111116398120110115WTTTYZTY#222222222222 0422021 0000 +M42020081111111649020000404271162123 +M520200811111116490119920526WTTTYWWP#12222222222210112121130990000 +M520200811111116490120130709WTTT##YW#222222222222 0422981 0000 +M520200811111116490120100118WTTT0WBPP222222122222 0422031 0000 +M520200811111116490120080612WTTT#Z#0#222222222222 0422061 0000 +M42020081111111657821700400781163113 +M520200811111116578119780612WTTTYWY9@22222122222230112111128690000 +M520200811111116578120080802WTTT#WBZP122221122222 0422051 0000 +M42020081111111674021100404791993113 +M520200811111116740119850703WTTTY0TW@22222122222210112111131850000 +M520200811111116740120190726WTTTP9P9W222222122222 0422981 0000 +M520200811111116740120171116WTTT0ZYY9222222122222 0422981 0000 +M42020081111111681520500404091161113 +M520200811111116815119760515WTTT#T#TB22222122222250112121126930000 +M520200811111116815120151113WTTTP@BY0222222222222 0422981 0000 +M42020081111111691620900403031013113 +M520200811111116916119850626WTTT#P0B#22212222222210112131130460000 +M520200811111116916120140602WTTT00@B#222222222222 0422981 0000 +M520200811111116916120080503WTTT#0TPY222122122222 0422051 0000 +M42020081111111696021100401691163123 +M520200811111116960119960121WTTTY9@TY12222122222210112121122320000 +M520200811111116960120161121WTTT#T0P#122222222222 0422981 0000 +M42020081111111696920600402121161113 +M520200811111116969119780726WTTT#@BYW12222222222250112121125650714 +M520200811111116969120180721WTTT#00@T222222222222 0422981 0000 +M520200811111116969120140721WTTTP@#TT222222222222 0422981 0000 +M520200811111116969120110606WTTT#0T@@222222222222 0422031 0000 +M520200811111116969120081108WTTTYYYYT222122122222 0422051 0000 +M520200811111116969120030121WTTT0Z#9Z122222222222 0422111 0000 +M42020081111111708821100401691163123 +M520200811111117088119841126WTTTPWYB022122222222210112121131150000 +M520200811111117088120060522WTTT#00Y9222222122222 0422071 0000 +M520200811111117088120020501WTTT#TP@T221222222222 0422111 0000 +M42020081111111723020600405171013113 +M520200811111117230119820115WTTT#9@YB12222222222230112111133330000 +M520200811111117230120060501WTTT0ZPW0122222122222 0422071 0000 +M520200811111117230120040103WTTT#0WTY122222222222 0422091 0000 +M42020081111111756221700400981993113 +M520200811111117562119841122WTTT0Y@@Z22222222222210112111125150000 +M520200811111117562120171116WTTT#@#@0222222122222 0422981 0243 +M520200811111117562120160113WTTTYWYYW222221222222 0422981 0000 +M42020081111111759721400400351123113 +M520200811111117597119840815WTTTYT##P22222222222230122112100000925 +M520200811111117597120160112WTTT#9B@#222221122222 0422981 0000 +M520200811111117597120090106WTTT09PTW222221122222 0422042 0000 +M42020081111111759820600403391162123 +M520200811111117598119910108WTTTPWP#P12222122222210112141132620000 +M520200811111117598120190616WTTT0T9P9122221122222 0422981 0000 +M520200811111117598120170119WTTTPBT#B122221222222 0422981 0000 +M520200811111117598120110823WTTT#9TW9122221222222 0422021 0000 +M42020081111111777521100405951163113 +M520200811111117775119830615WTTTY0TYZ22222122222210112111143520000 +M520200811111117775120150815WTTTPYY@Y122221122222 0422981 0000 +M520200811111117775120110723WTTTPTYWW122221222222 0422031 0000 +M520200811111117775120040526WTTT#0#ZW222221122222 0422101 0000 +M42020081111111792222700402001013113 +M520200811111117922119820702WTTTPYWZP22122222222210112111131340000 +M520200811111117922120090521WTTTYZT9Z221222222222 0422041 0000 +M520200811111117922120070715WTTTYZPPB221222222222 0422071 0000 +M42020081111111793120600405471013113 +M520200811111117931119911123WTTTYBP@W22212122222210112111137560000 +M520200811111117931120180123WTTTPWW@@222121122222 0422981 0000 +M520200811111117931120180123WTTTPZWYW222121222222 0422981 0000 +M520200811111117931120120107WTTT0Z@99222121122222 0422011 0000 +M42020081111111802822400406121122123 +M520200811111118028119790506WTTT#0W0#22212222222210112121100000984 +M520200811111118028120070109WTTTP9BP0222122222222 0422071 0000 +M42020081111111803420600405171163113 +M520200811111118034119840121WTTT#P#0P12222122222230112111120800000 +M520200811111118034120100102WTTTY#Y#0122222222222 0422041 0000 +M520200811111118034120050813WTTT#0#TT122222122222 0422081 0000 +M42020081111111819521100406001163113 +M520200811111118195119770523WTTT0P@W012222222222210112141130330000 +M520200811111118195120070101WTTTPTW#T222222122221 0422061 0000 +M42020081111111850621700405821163113 +M520200811111118506219770123WTTT#Y@9922222222222220212113200000000 +M520200811111118506119740115WTTTPZB@Z22212212222220112111119930000 +M520200811111118506120170806WTTT#WWTW222122222222 0422981 0000 +M520200811111118506120100716WTTTP0ZY9222122222222 0422043 0000 +M520200811111118506120060119WTTTPW9P0222122122222 0422073 0000 +M42020081111111854020300405931163113 +M520200811111118540119860601WTTT#YYBZ22222112222210112111119000000 +M520200811111118540120070112WTTT0WBT#122221222222 0422071 0000 +M42020081111111861922200402491163113 +M520200811111118619119750115WTTT#B#W#22222112222220112111137720000 +M520200811111118619120110102WTTT0WB0P222221122222 0422031 0000 +M520200811111118619120070622WTTT#YBTZ222221222222 0422071 0000 +M520200811111118619120040726WTTT#@@BZ222221122222 0422101 0000 +M42020081111111874220900404431123123 +M520200811111118742119931103WTTT#009Z12222222222210112082116680000 +M520200811111118742120160822WTTTPBBWZ222122122222 0422981 0000 +M42020081111111881621700404611993113 +M520200811111118816119690706WTTT#W##@22212222222250112141149750000 +M520200811111118816120040106WTTT090Y@222122222222 0422091 0000 +M42020081111111895421100406391163113 +M520200811111118954119920509WTTT0@0PY22222222222210112081131270000 +M520200811111118954120180123WTTT#@@Y@122221222222 0422981 0000 +M520200811111118954120120622WTTT#TWY@222222122222 0422021 0000 +M42020081111111897321400406791162113 +M520200811111118973119870818WTTTY0#WB22212222222210112131139980000 +M520200811111118973120160121WTTT0Y#YB222222222222 0422981 0000 +M520200811111118973120160121WTTT0#BY@222222222222 0422981 0000 +M520200811111118973120090126WTTT00#ZB222122222222 0422051 0000 +M42020081111111899421700404401123123 +M520200811111118994119850116WTTTYZ00Y22222122222210112131100000881 +M520200811111118994120190123WTTTY9Z0Z222222222221 0422981 0859 +M520200811111118994120061109WTTT0#00Z222222122222 0422071 0000 +M42020081111111959521100403821163113 +M520200811111119595119800114WTTTY#W9912222122222210112112132770000 +M520200811111119595120181114WTTTY9@@B122222222222 0422981 0000 +M520200811111119595120041119WTTTP0BWY222222122222 0422092 0000 +M42020081111111965520900401881123113 +M520200811111119655119970126WTTT###@T22212222222210112081121670000 +M520200811111119655120180115WTTT0W9@P222122222222 0422981 0000 +M42020081111111992320900403431161113 +M520200811111119923119811102WTTT#ZZPP22212222222210112131139350000 +M520200811111119923120140701WTTTYBP9#222122122222 0422981 0000 +M520200811111119923120100613WTTTP0ZZY222222222222 0422041 0000 +M520200811111119923120040819WTTTPW9Y0222122222222 0422091 0000 +M42020081111111995422700402231193113 +M520200811111119954119990619WTTTPYYTY22222122222210112111126000000 +M520200811111119954120200101WTTT#T#Z#222221122222 0422981 0000 +M42020081111112002822200405781162123 +M520200811111120028119860715WTTT0T90Z22222222222210112131116140000 +M520200811111120028120160112WTTTYP#BZ222221222222 0422981 0000 +M520200811111120028120130721WTTT09P@#222221122222 0422011 0000 +M520200811111120028120130721WTTT#@BPB222221122222 0422011 0000 +M42020081111112004320600405341163113 +M520200811111120043119831101WTTT0TYB#22212222222210112131134030000 +M520200811111120043120111119WTTTPB#ZW222122122222 0422021 0000 +M520200811111120043120070612WTTT#B9#0222122122222 0422071 0000 +M42020081111112010921100406541162113 +M520200811111120109119960119WTTTYW0BY22222222222210112111114360000 +M520200811111120109120160603WTTT#TWT#222222222222 0422981 0000 +M42020081111112013621100406001163113 +M520200811111120136119890518WTTT0P0Y912222222222210112081113350000 +M520200811111120136120160116WTTT0ZBZ#222222122222 0422981 0000 +M520200811111120136120090115WTTT00PT0122222222222 0422041 0000 +M42020081111112032021100404801163113 +M520200811111120320119790112WTTTYY0B#22222112222250112111134140000 +M520200811111120320120050709WTTTP@BZW222221122222 0422081 0000 +M520200811111120320120030721WTTT00YYW222221122222 0422111 0000 +M42020081111112050922700402581163113 +M520200811111120509119860515WTTTP999022222212222210112121119160000 +M520200811111120509120120623WTTTYWYBY222121122222 0422021 0000 +M42020081111112057020500401501163113 +M520200811111120570119860119WTTTYBB#B22222122222210112121120950000 +M520200811111120570120110112WTTT00Y09222221222222 0422031 0000 +M520200811111120570120080719WTTTY@@Z0222221122222 0422061 0000 +M520200811111120570120050521WTTT#Z9#9222221222222 0422081 0000 +M42020081111112057520600401151163123 +M520200811111120575119940507WTTT0@@T012222222222210112111115080000 +M520200811111120575120170113WTTT0#B9P122122122222 0422981 0000 +M520200811111120575120130101WTTTY##P0122122222222 0422011 0000 +M42020081111112058221700405121162113 +M520200811111120582119910619WTTTYPZ#912222222222210112131123350000 +M520200811111120582120160701WTTTYW#YZ222222122222 0422981 0000 +M520200811111120582120150114WTTT#Y#0Z122222122222 0422981 0000 +M520200811111120582120140601WTTT#@9PP122222122222 0422981 0000 +M520200811111120582120130615WTTTPW909122222222222 0422011 0000 +M42020081111112062820000404861162113 +M520200811111120628119830102WTTTPZ@TY12222222222210112131143810000 +M520200811111120628120190715WTTT0@T@W222222222222 0422981 0000 +M520200811111120628120080121WTTT0@P9W122122122222 0422051 0000 +M520200811111120628120070801WTTTPWZ@P122122122222 0422061 0000 +M520200811111120628120060826WTTTY@9BB122222122222 0422071 0000 +M42020081111112080820000400131161113 +M520200811111120808119790626WTTT0ZZTP22222122222210112131118200000 +M520200811111120808120080601WTTT#WBYP222221122222 0422061 0000 +M520200811111120808120040607WTTT00Y0B222221122222 0422101 0000 +M42020081111112085720600401981162113 +M520200811111120857119810819WTTTPBTB022222122222250112111137200000 +M520200811111120857120080102WTTT#Y#9@122221222222 0422051 0000 +M520200811111120857120050809WTTT#YTZP122221222222 0422081 0000 +M520200811111120857120030519WTTTPBW@Z222221122222 0422111 0000 +M42020081111112112320000400591163113 +M520200811111121123119860502WTTTYW0ZZ12222122222210112121129040000 +M520200811111121123120130701WTTTP@00P122222122222 0422011 0000 +M520200811111121123120060526WTTT09##0122222122222 0422081 0000 +M42020081111112118921100406001163113 +M520200811111121189119890506WTTT0B#BW12222222222210112112100000208 +M520200811111121189120180107WTTTPB099122222122222 0422981 0000 +M520200811111121189120140712WTTTP#ZPW122222222222 0422981 0000 +M42020081111112127621700404101161113 +M520200811111121276119810816WTTTY99#922222112222210112131113030000 +M520200811111121276120160706WTTTPZ90W222221122222 0422981 0000 +M42020081111112142221700404101993113 +M520200811111121422119810119WTTT0YWZP12222222222210112111120570000 +M520200811111121422120080503WTTTYBTW#122222222222 0422051 0000 +M520200811111121422120070601WTTT#PTWT122222122222 0422071 0000 +M42020081111112185221100401461163113 +M520200811111121852119771126WTTT0WY9012222112222210112112117780000 +M520200811111121852120090726WTTT#ZZ@T122222222222 0422052 0000 +M42020081111112194620600403391163113 +M520200811111121946119860706WTTT0P90P22222222222210112111143120000 +M520200811111121946120150719WTTTPZ##Z222222122222 0422981 0000 +M520200811111121946120100101WTTT#0#WW222222122222 0422041 0000 +M520200811111121946120080115WTTT0ZZ09222222122222 0422061 0000 +M520200811111121946120040106WTTT#YB90222222122222 0422101 0000 +M42020081111112204321400405841012113 +M520200811111122043119840102WTTTPTY#W22222122222250112111127730000 +M520200811111122043120130714WTTT0TP00222221222222 0422011 0000 +M520200811111122043120081121WTTTYWY@#222221122222 0422051 0000 +M42020081111112207620900404651163113 +M520200811111122076119860726WTTT#T9BT22212222222210112111129100000 +M520200811111122076120191118WTTTPYBZ@222122122222 0422981 0000 +M520200811111122076120050715WTTT0ZP00222122222222 0422081 0000 +M520200811111122076120040101WTTT#Z##9222122122222 0422101 0000 +M42020081111112223122700402581162113 +M520200811111122231119860603WTTT#9Z0Z12222222222210112121126080000 +M520200811111122231120071115WTTTY#@TY122222222222 0422061 0000 +M520200811111122231120060626WTTTYBT#B122222122222 0422081 0000 +M42020081111112226121700403901163113 +M520200811111122261119800526WTTTPPY#022222122222210112161127800000 +M520200811111122261120130123WTTTPP@B#222221222222 0422981 0000 +M520200811111122261120111109WTTT#9WZW222221122222 0422021 0000 +M42020081111112229021700404201161123 +M520200811111122290119860715WTTT#@#9P12222222222210112111127750000 +M520200811111122290120070621WTTTY@@YT122222122222 0422071 0000 +M520200811111122290120040718WTTT#0@B@122222122222 0422101 0000 +M42020081111112230121700405121163113 +M520200811111122301119690603WTTTYTT#022212222222210112112121380000 +M520200811111122301120110101WTTT##BTZ222122122222 0422021 0000 +M520200811111122301120061109WTTTPZWB0222122122221 0422071 0897 +M42020081111112232822700400671993113 +M520200811111122328119740503WTTTYY9PB12222222222210112131133920000 +M520200811111122328120150108WTTT#W0@Z122222122222 0422981 0000 +M520200811111122328120100101WTTTYBY#T122222122222 0422031 0000 +M42020081111112246920900404651162113 +M520200811111122469119810519WTTT0W#YW22122222222210112122123660000 +M520200811111122469120050102WTTT#@0@T221222222222 0422081 0000 +M42020081111112256720900402621162123 +M520200811111122567119900119WTTT0#9YT12222222222210112131134080000 +M520200811111122567120170619WTTTPPW@T222222222222 0422981 0000 +M520200811111122567120110608WTTT#@@PB122222222222 0422031 0000 +M42020081111112264621700400471163123 +M520200811111122646119791123WTTT#B#B922222122222230112111143330000 +M520200811111122646120140515WTTT0#@P9222221222222 0422981 0000 +M520200811111122646120080507WTTTYWP##222221122222 0422061 0000 +M520200811111122646120080507WTTTPZTB0222221222222 0422061 0000 +M42020081111112282421100406001993113 +M520200811111122824119990606WTTT0Y#BW12222222222210112112114620300 +M520200811111122824120190515WTTTPW0@Y122222222222 0422981 0000 +M42020091111111113722700403611162113 +M520200911111111137119830709WTTT0@Y9012222122222220112121119990000 +M520200911111111137120090506WTTTPT@#@122221122222 0422041 0000 +M520200911111111137120060623WTTT#P0PP122222222222 0422081 0000 +M42020091111111119220000406351163113 +M520200911111111192119830623WTTT0@@TY22212222222210112161127600000 +M520200911111111192120190507WTTT##ZTT222122222222 0422981 0000 +M520200911111111192120160119WTTT00BYZ222122122222 0422981 0000 +M520200911111111192120120601WTTTYWP99222122122222 0422021 0000 +M520200911111111192120060103WTTT0T#Y@222222122222 0422081 0000 +M42020091111111131121700405121013113 +M520200911111111311119870115WTTT#Z@#Y12222222222210112121122920000 +M520200911111111311120090522WTTT0#@TT122222222222 0422041 0000 +M42020091111111133920900401031161113 +M520200911111111339119900608WTTTYPPBZ22212222222210112111130600000 +M520200911111111339120160719WTTTPZB#@222122122222 0422981 0000 +M520200911111111339120130101WTTT0PB0W222122122222 0422011 0000 +M42020091111111134320900403431161113 +M520200911111111343119750719WTTTY#P#Y12222222222210112131126890000 +M520200911111111343120100502WTTTPBYY0122222122222 0422041 0000 +M520200911111111343120081106WTTTPY@9Y222222122222 0422051 0000 +M520200911111111343120030103WTTTP0@#B122222222222 0422101 0000 +M42020091111111140622700400681163113 +M520200911111111406119920601WTTTPTT0W22212222222210112121113320000 +M520200911111111406120190716WTTT0YP#Z222222122222 0422981 0000 +M520200911111111406120120118WTTT0#TWP222122122222 0422021 0000 +M42020091111111147120500402421993113 +M520200911111111471119950101WTTT##YZ#22222122222210112081114730000 +M520200911111111471120200612WTTT#0@9@222221222222 0422981 0000 +M42020091111111166922700404841993113 +M520200911111111669119970113WTTT0Z99922212222222210112131118850000 +M520200911111111669120190115WTTT0T09P222222222222 0422981 0000 +M42020091111111182720900402921163113 +M520200911111111827119850621WTTTY99YT22212222222230112121131200000 +M520200911111111827120100115WTTTY@P0W222122122222 0422031 0000 +M520200911111111827120070716WTTT0P0@T122122122222 0422071 0000 +M520200911111111827120050509WTTTYYTB#122122222222 0422091 0000 +M42020091111111192320900406151163113 +M520200911111111923119900508WTTT0#YZ922212222222210112111117950000 +M520200911111111923120130118WTTTPYZ9Y222122222222 0422981 0000 +M42020091111111258822200400631163113 +M520200911111112588119910519WTTTPWBY#22222122222210112131119250000 +M520200911111112588120150822WTTT0W#9B222222122222 0422981 0000 +M520200911111112588120130818WTTT#TB@#222222122222 0422011 0000 +M520200911111112588120110723WTTT#0@ZB222222122222 0422031 0000 +M42020091111111262821100406001163123 +M520200911111112628119820119WTTTP##0B12222222222210112141119890000 +M520200911111112628120160501WTTTPT@@0122222222222 0422981 0000 +M520200911111112628120140801WTTT0PYZW122221122222 0422981 0000 +M520200911111112628120050708WTTTPYBP9222222122222 0422091 0000 +M42020091111111264822400400881163123 +M520200911111112648119860101WTTTY0#Z922222122222210112131122020000 +M520200911111112648120070507WTTT0@YP@222222122222 0422061 0000 +M42020091111111305421100401691163113 +M520200911111113054119871121WTTTYW9WY21222222222210112111121530000 +M520200911111113054120130707WTTTYYB0#212222122222 0422011 0000 +M520200911111113054120070726WTTTY9ZY@212221222222 0422071 0000 +M42020091111111310121100401461163113 +M520200911111113101119861114WTTTP0@Z@12222222222210112111117100000 +M520200911111113101120150703WTTT#Y0Z@122222222222 0422981 0000 +M520200911111113101120090818WTTT00B9Z122221122222 0422051 0000 +M42020091111111334820600401421163113 +M520200911111113348119830626WTTT#YP0#22212222222210112121123310000 +M520200911111113348120060703WTTT0P0YY222122122222 0422081 0000 +M520200911111113348120060703WTTT#WTW9222122122222 0422081 0000 +M520200911111113348120030114WTTTY9Y@B222122122222 0422101 0000 +M42020091111111358320900401881161113 +M520200911111113583119830101WTTT00W9912222222222230112112121750000 +M520200911111113583120140119WTTTP#BTZ222222222222 0422981 0000 +M520200911111113583120130612WTTT#9Y@W222222222222 0422011 0000 +M42020091111111392420900406601013113 +M520200911111113924119890523WTTT0@TPW22222122222210112081132680000 +M520200911111113924219800621WTTT#Z@9W12222212222220212113200000000 +M520200911111113924120160709WTTTY0@0T222222222222 0422981 0000 +M520200911111113924120160709WTTTP@Y@0222222222222 0422981 0000 +M520200911111113924120100122WTTT09ZYW222222122222 0422031 0000 +M520200911111113924120050106WTTTP00WT122222222222 0422091 0000 +M42020091111111406922700402001163123 +M520200911111114069119950103WTTTP9T#022222122222210112111122690000 +M520200911111114069120200121WTTTYY0P@222222122222 0422981 0000 +M520200911111114069120160513WTTT0#TYY222221222222 0422981 0000 +M42020091111111410020300404901163123 +M520200911111114100119810815WTTTPYP0@22222122222250112111122030000 +M520200911111114100120160702WTTTYTBY#222221122222 0422981 0000 +M42020091111111410921100401461161113 +M520200911111114109119900112WTTTY#@YB12222122222210112121121440000 +M520200911111114109120100802WTTTYP#WT122222122222 0422031 0000 +M42020091111111413322700402001163113 +M520200911111114133119710807WTTT#T9T922222122222220112111121450000 +M520200911111114133120100615WTTTPPZPP222221222222 0422041 0000 +M520200911111114133120060123WTTT090WT222221122222 0422071 0000 +M520200911111114133120040501WTTT09BTT222221122222 0422091 0000 +M42020091111111423121700405121163113 +M520200911111114231119791126WTTT0PZZ012222222222230112111127400000 +M520200911111114231120100512WTTT#@##P222222122222 0422041 0000 +M42020091111111430721100402441161113 +M520200911111114307119860513WTTTY#WZB22222122222210112131119490000 +M520200911111114307120110726WTTTY@99Z222222222222 0422031 0000 +M42020091111111472721700402341163113 +M520200911111114727119910103WTTTP#TY#12222122222220112111120370000 +M520200911111114727120180818WTTTY0#PZ122222222222 0422981 0000 +M520200911111114727120120115WTTT00009122222222222 0422011 0000 +M42020091111111487020600401981993113 +M520200911111114870119770501WTTT0Z90@22122222222210112111132980000 +M520200911111114870120090703WTTT0ZBTB122222222222 0422051 0000 +M520200911111114870120090703WTTTY09Z0221222122222 0422051 0000 +M520200911111114870120050126WTTTYW@PW221222222222 0422091 0000 +M520200911111114870120030719WTTTYBW#B221222222222 0422111 0000 +M42020091111111531220900403031011113 +M520200911111115312119910102WTTT0PZZB22212222222210112121121510000 +M520200911111115312120130601WTTTPB9@W222122122222 0422011 0000 +M42020091111111532120000406821163113 +M520200911111115321119780115WTTTP90@#22212222222230112122126000000 +M520200911111115321120080615WTTT099WW222221122222 0422061 0000 +M520200911111115321120030501WTTTP@T#T222122222222 0422101 0000 +M42020091111111543221200402571163113 +M520200911111115432119950101WTTT#P@#Y22222122222230112121122190000 +M520200911111115432120141106WTTT#@ZZ9222221122222 0422981 0000 +M42020091111111548920900406601161113 +M520200911111115489119820821WTTT#ZTTP22222122222230112121118470000 +M520200911111115489120170702WTTTY09TW222221122222 0422981 0000 +M520200911111115489120070619WTTTY@@WW122221122222 0422071 0000 +M520200911111115489120060715WTTT0WPTW122221222222 0422081 0000 +M42020091111111570220600402121163113 +M520200911111115702119860501WTTTP9#B912222222222210112111130000000 +M520200911111115702120160112WTTT0#PTW222222122222 0422981 0000 +M520200911111115702120120801WTTT#BTTY122222122222 0422011 0000 +M42020091111111597421700405821163113 +M520200911111115974119810714WTTT0BTZ@22222222222210112121126070000 +M520200911111115974120080118WTTT#W@ZT222222122222 0422061 0000 +M42020091111111626320900401881163113 +M520200911111116263119970726WTTTPY9P012222222222210112121113840000 +M520200911111116263120170526WTTTPBT0Z222222122222 0422981 0000 +M42020091111111635021100401691163113 +M520200911111116350119890114WTTT#ZZTB12222222222210112082122170000 +M520200911111116350120170101WTTTPTP#Y122222222222 0422981 0000 +M520200911111116350120150126WTTTYWZZT122222122222 0422981 0000 +M520200911111116350120060114WTTT0#0TY122222222222 0422072 0000 +M42020091111111672120900404651162113 +M520200911111116721119800101WTTTYY9W922212222222210112121109530000 +M520200911111116721120100809WTTTP@W@Z222122222222 0422031 0000 +M520200911111116721120090101WTTT0@TPZ222122122221 0422051 0318 +M520200911111116721120050114WTTT0TYYZ222122222222 0422081 0000 +M42020091111111727020600401161163123 +M520200911111117270219910119WTTTYP@Z@22122222222220212113200000000 +M520200911111117270119900123WTTT0#Y##22122212222220112112100000000 +M520200911111117270120190126WTTT#B90P221222222222 0422981 0000 +M520200911111117270120160119WTTT0#Y@0221222122222 0422983 0000 +M520200911111117270120130115WTTTYZP9T221222122222 0422983 0000 +M42020091111111733922700400671163113 +M520200911111117339119920619WTTT0BZ@#22222122222210112121125730000 +M520200911111117339120180119WTTT#@@@Z222221122222 0422981 0000 +M520200911111117339120180119WTTTYYWP@222221222222 0422981 0000 +M520200911111117339120170606WTTT#PWY@222222222222 0422981 0000 +M42020091111111793420500402421012113 +M520200911111117934119820721WTTT0BTZY22222122222210112121124410000 +M520200911111117934120100723WTTT#WB9T222222222222 0422041 0000 +M42020091111111798521100401691163113 +M520200911111117985119830119WTTTPT@WY22222122222210112131100000254 +M520200911111117985120180612WTTT0Z9##122222122222 0422981 0000 +M520200911111117985120160126WTTT0Y@@9222222122222 0422981 0000 +M42020091111111831620600400871192123 +M520200911111118316119890601WTTTYPB#P22222122222210112121113260000 +M520200911111118316120160816WTTT##@YW222221222222 0422981 0000 +M520200911111118316120130719WTTT0999B222221222222 0422011 0000 +M520200911111118316120090715WTTTPW99T222122122222 0422051 0000 +M42020091111111838120600405341163113 +M520200911111118381119850106WTTTPY#B922222222222210112121125400000 +M520200911111118381120100706WTTT#TBPZ222222122222 0422041 0000 +M520200911111118381120030508WTTT0W0#W222222122222 0422111 0000 +M42020091111111860821400400351163113 +M520200911111118608119900619WTTTYPWT912222222222210112111127180000 +M520200911111118608120130716WTTT0WW#Y222222122222 0422011 0000 +M42020091111111862520900406601162113 +M520200911111118625119770719WTTT09WW#12222222222230112121136640000 +M520200911111118625120100821WTTTP9@99222222222222 0422031 0000 +M520200911111118625120070502WTTT0W0PZ222222122222 0422071 0000 +M520200911111118625120030508WTTT0PWY9222222222222 0422111 0000 +M42020091111111869421100406001163113 +M520200911111118694119900119WTTTP@9PW12222122222230112112113860000 +M520200911111118694120190101WTTT0ZBBP122222122222 0422981 0000 +M520200911111118694120160813WTTT#@PY9122221122222 0422981 0000 +M42020091111111897220000403951163113 +M520200911111118972119860121WTTTY@#PY12222222222210112121123380000 +M520200911111118972120160708WTTTYPWTZ222222222222 0422981 0000 +M520200911111118972120120526WTTTY0#@Y222222122222 0422011 0000 +M42020091111111899922700402231163123 +M520200911111118999119920601WTTTPZ9Z022222122222210112121100000000 +M520200911111118999120140101WTTT0@B#Z122221222222 0422981 0000 +M520200911111118999120120518WTTT#9#PB122221222222 0422021 0000 +M42020091111111904120000402281163113 +M520200911111119041119930708WTTTPB0Z012222222222210112121119310000 +M520200911111119041120171113WTTT#BP#@222222222222 0422981 0000 +M520200911111119041120120626WTTTYWPYW222222222222 0422021 0000 +M42020091111112018321700401121161113 +M520200911111120183119840708WTTTPWT##22222122222210112141113380000 +M520200911111120183120150114WTTTP09Y0222222222222 0422981 0271 +M42020091111112021720600405471161113 +M520200911111120217119870618WTTTP@YWP12222222222210112111119630000 +M520200911111120217120070626WTTT00ZTZ122222122222 0422071 0000 +M520200911111120217120041101WTTT#0P00122222222221 0422091 0739 +M42020091111112039620600405341161113 +M520200911111120396119830101WTTTY09P012222222222210112131125300000 +M520200911111120396120150516WTTTP#P0Y222222222222 0422981 0000 +M520200911111120396120131123WTTTP9ZTT122221222222 0422981 0000 +M520200911111120396120110807WTTT#0B@@222222222222 0422021 0000 +M520200911111120396120070515WTTT0@@Y0122222122222 0422071 0000 +M520200911111120396120030506WTTT#T9BB122222222221 0422101 0897 +M42020091111112039720600401981163113 +M520200911111120397119750106WTTT00TW922222122222250112111125750000 +M520200911111120397120080715WTTTYY0BT222221122222 0422061 0000 +M520200911111120397120060719WTTT#PB#9222221122222 0422081 0000 +M42020091111112060621400400351163113 +M520200911111120606119780122WTTTPY@Z@22212122222220112111128980528 +M520200911111120606120140713WTTTY#W@Z222121222222 0422981 0000 +M520200911111120606120090102WTTT0TTTT222121122222 0422041 0000 +M520200911111120606120030515WTTTY9B#T222121222222 0422101 0000 +M42020091111112081222400402111161113 +M520200911111120812119911122WTTT#Z9YZ22222122222210112111123770000 +M520200911111120812120190102WTTTYZBYZ222221122222 0422981 0000 +M520200911111120812120130601WTTT#0#TB222221122222 0422011 0000 +M42020091111112092821700406831163113 +M520200911111120928119980102WTTTYBT0@22222122222210112111123070000 +M520200911111120928120180119WTTTYTPY9222222222222 0422981 0000 +M42020091111112124922700402801162113 +M520200911111121249119900119WTTTY#WP922212222222210112131117290819 +M520200911111121249120121114WTTT00PWP222222122222 0422011 0000 +M520200911111121249120110119WTTT0WYZ@222122222222 0422031 0000 +M42020091111112135220600405171163123 +M520200911111121352119970514WTTTYTPBW12222222222210112081127140000 +M520200911111121352120180606WTTTYZZP9122222122222 0422981 0000 +M42020091111112145720000402281163113 +M520200911111121457119910815WTTTPBZ9Y12222222222210112081114680000 +M520200911111121457120190716WTTT0@#ZW122221122222 0422981 0000 +M520200911111121457120120823WTTTPWY@T122222222222 0422011 0000 +M42020091111112165720600404951013113 +M520200911111121657119960519WTTT#00PY22222122222210112121126030000 +M520200911111121657120180819WTTTPW@0Y122222122222 0422981 0000 +M520200911111121657120160109WTTT#WBW9222222122222 0422981 0000 +M42020091111112166321400400351193113 +M520200911111121663119760623WTTTPB@@@22222222222210112111133950000 +M520200911111121663120100715WTTT0@9T0222222222222 0422041 0000 +M520200911111121663120100715WTTT##@WB222122122222 0422041 0000 +M520200911111121663120040512WTTT#@Y0Y222122122222 0422092 0000 +M42020091111112169921700406831161113 +M520200911111121699119920706WTTTYYTW@12222122222210112131115110000 +M520200911111121699120190607WTTT0Y#BZ122221122222 0422981 0000 +M520200911111121699120120115WTTT#TB9W122221122222 0422021 0000 +M42020091111112182621100401181161113 +M520200911111121826119880808WTTTY@PPP22222222222220112121118760000 +M520200911111121826120150509WTTT0ZZW0222122222222 0422981 0000 +M520200911111121826120080621WTTT#PP90222122222222 0422061 0000 +M42020091111112185721400400351163113 +M520200911111121857119820115WTTTYPZ@922212222222210112131126060000 +M520200911111121857120170103WTTTY9T0Y222221222222 0422981 0000 +M520200911111121857120100715WTTT0YBB9222122222222 0422041 0000 +M520200911111121857120070815WTTTYWYYZ222122222222 0422061 0000 +M42020091111112196321100406001163123 +M520200911111121963119910601WTTTYWTBT12222222222210112121100000000 +M520200911111121963120161106WTTT09YW9122222122221 0422981 0581 +M42020091111112211321700401121163113 +M520200911111122113119830819WTTTPPB#T12222122222210122121127360000 +M520200911111122113120020818WTTTYTYWB222222222222 0422121 0000 +M42020091111112234821100406001163113 +M520200911111122348119910616WTTTPW0#W12222222222210112121114740000 +M520200911111122348120150723WTTTPP@T9222222122222 0422981 0000 +M520200911111122348120130712WTTT0W0#@222222222222 0422011 0000 +M42020091111112242422700400671163113 +M520200911111122424119810822WTTT#0PBP12222222222210112121118080000 +M520200911111122424120100501WTTTPZ0BT222222122222 0422041 0000 +M520200911111122424120060103WTTTPZ@PT122222222222 0422071 0000 +M42020091111112268820600401981121113 +M520200911111122688119890823WTTTYYB#T22222222222210112081121950871 +M520200911111122688120140501WTTTBTTZB222222122222 0422981 0000 +M42020101111111115621100406001162113 +M520201011111111156119810112WTTTPZWTT12222222222210112111124700000 +M520201011111111156120020113WTTT#T9B9122222122222 0422111 0000 +M42020101111111118721700405121013113 +M520201011111111187119920812WTTT0ZWP922222122222210112111126640000 +M520201011111111187120170809WTTT#0W@T222221122222 0422981 0000 +M42020101111111119721100406391163113 +M520201011111111197119850619WTTT#Y#9912222222222210112111127820000 +M520201011111111197120160113WTTTP0TT@222222122222 0422981 0000 +M520201011111111197120110108WTTT#YYW#122222122222 0422031 0000 +M520201011111111197120080519WTTT#9WWZ222222122222 0422061 0000 +M520201011111111197120060501WTTT0YTTT122222222222 0422081 0000 +M520201011111111197120040123WTTTYZ@WP122222122221 0422101 0813 +M42020101111111157520500402421163113 +M520201011111111575119760722WTTT0#B0P22212222222250112161123130000 +M520201011111111575120110719WTTTP@ZPP222122222222 0422031 0000 +M520201011111111575120090723WTTT0#ZWB222222122222 0422051 0000 +M42020101111111200820600401981162113 +M520201011111112008119800101WTTTYBB#T12222222222220212121115030000 +M520201011111112008119770801WTTTPZ9B012222212222220112121118610000 +M520201011111112008120041106WTTT#TY@Y122222222222 0422091 0000 +M42020101111111202722400406121163113 +M520201011111112027119950119WTTTPPP0@22212222222210112111116241000 +M520201011111112027120180116WTTT0WPWP222122122222 0422981 0000 +M42020101111111215221700405821163113 +M520201011111112152119790621WTTTYT9ZT12222222222210112121130330000 +M520201011111112152120130102WTTTPYWB#122222122221 0422011 0309 +M520201011111112152120030809WTTTPZ#YB122222122222 0422111 0000 +M42020101111111236021100401181163113 +M520201011111112360119870102WTTTPBPYP12222222222210112121118000000 +M520201011111112360120080519WTTT0TZB@122222222222 0422051 0000 +M42020101111111237520000401821162113 +M520201011111112375119800614WTTT#99T012222122222250112122123300000 +M520201011111112375120160713WTTT0WB#@122221222222 0422981 0582 +M520201011111112375120050521WTTT09Y9Y122221222222 0422091 0000 +M520201011111112375120030121WTTT#P0B0122221222222 0422111 0000 +M42020101111111263222700403241161113 +M520201011111112632119780614WTTT#YZ9012222222222210112141121360000 +M520201011111112632120070103WTTT0Z0@W122222222222 0422061 0000 +M42020101111111266121200404691163113 +M520201011111112661119960615WTTTY#9WZ12222122222210112111126860000 +M520201011111112661120170822WTTT0BB9Z122221222222 0422981 0000 +M42020101111111325722700400671161123 +M520201011111113257119910502WTTT0Z@YZ12222222222210112081113750000 +M520201011111113257120180126WTTT#TB9#222222122222 0422981 0000 +M520201011111113257120140119WTTT#YB0T122221122222 0422981 0000 +M42020101111111343021100401551163113 +M520201011111113430119990601WTTT0ZYP@12222222222210112081120800000 +M520201011111113430120160713WTTTY##@0122222122222 0422981 0000 +M42020101111111363221100406471162113 +M520201011111113632119630726WTTTP9TZB12222222222210122121124490000 +M520201011111113632120140123WTTTY0#TP122222122222 0622981 0000 +M42020101111111392320000403721162113 +M520201011111113923119980115WTTTP9YWT12222212222210412111115170000 +M520201011111113923120151123WTTTPYP0Z222222122222 0622981 0000 +M42020101111111404221400406791163113 +M520201011111114042119920106WTTTYZ9YP22222222222210112111129190000 +M520201011111114042120160526WTTT0TWBP222122122222 0422981 0000 +M520201011111114042120140801WTTT0YYYP222222222222 0422981 0000 +M520201011111114042120130601WTTT#Y0@P222222122222 0422011 0000 +M520201011111114042120110118WTTTPPBBZ222222222222 0422031 0000 +M42020101111111409520900400501991113 +M520201011111114095119710619WTTTP@@PZ22212212222210112121117600191 +M520201011111114095120160116WTTT#@##Y222222222222 0422981 0000 +M520201011111114095120150519WTTTPY90Y222122222222 0422981 0000 +M42020101111111411820000402281162113 +M520201011111114118119840626WTTT0#PYB12222222222230112111117880000 +M520201011111114118120160618WTTTP09WZ222222122222 0422981 0000 +M520201011111114118120030718WTTTPT0YZ122222122222 0422111 0000 +M42020101111111433322700402801161113 +M520201011111114333119960123WTTT0909922212222222210112082112290000 +M520201011111114333120150622WTTTPBWTY222122222222 0422981 0000 +M42020101111111486722700402801013113 +M520201011111114867119920719WTTTP09P022222122222210112111125220000 +M520201011111114867120181123WTTTPWWZ#222222122222 0422981 0000 +M42020101111111502521700400981161113 +M520201011111115025119930101WTTT#0WZW12222222222210112141112080000 +M520201011111115025120140514WTTTP9W@Y122222222222 0422981 0000 +M520201011111115025120131101WTTT0TZW@122222222222 0422981 0000 +M42020101111111502720600405471993113 +M520201011111115027119960519WTTTP#BTP12222122222210112111116010000 +M520201011111115027120160509WTTTPB0Z@222222222222 0422981 0000 +M42020101111111531420900401881163113 +M520201011111115314119960115WTTTPY@YP12222222222230112111128540000 +M520201011111115314120180719WTTTPY@BW122222122222 0422981 0000 +M42020101111111591221200401971163113 +M520201011111115912119860106WTTTY0@PT22222122222210112121120580000 +M520201011111115912120130103WTTTY0#PB222221122222 0422981 0000 +M520201011111115912120130103WTTTYZ9BW222221122222 0422981 0000 +M42020101111111610120600402981163113 +M520201011111116101119960501WTTTY9WYB12222122222210112081116030000 +M520201011111116101120190608WTTT#09TW222222122222 0422981 0000 +M42020101111111611420600403781162113 +M520201011111116114119850123WTTT#WW0P12222222222210112141125900000 +M520201011111116114120090619WTTTP9P9@122222222222 0422051 0000 +M520201011111116114120060108WTTTY@##P122222222222 0422081 0000 +M42020101111111612122700400681163113 +M520201011111116121119770515WTTT0@Z##22222122222210112111133880000 +M520201011111116121120090719WTTTP9@0#222221222222 0422051 0000 +M520201011111116121120050115WTTTYP#PW222222122222 0422081 0000 +M42020101111111613222700400211163113 +M520201011111116132119950119WTTTPZZWB22222122222210112131113870000 +M520201011111116132120180113WTTT##TT#122221122222 0422981 0000 +M520201011111116132120160723WTTT09#0P122221222222 0422981 0000 +M42020101111111636620600401421012113 +M520201011111116366119840616WTTTYWP9P12222222222210112111120400000 +M520201011111116366120090103WTTT#ZW@9122221222221 0422041 0467 +M42020101111111638322700402801163113 +M520201011111116383119830702WTTTYZZWB22222122222210112111116530000 +M520201011111116383120180519WTTT#YWYW222221122222 0422981 0000 +M520201011111116383120150119WTTTYBZTZ222222222222 0422981 0000 +M42020101111111694120900403071161113 +M520201011111116941119900508WTTTYWPY022212222222210112121100000391 +M520201011111116941120190508WTTT#WBW0222122222222 0422981 0000 +M520201011111116941120160119WTTT#YY#@222122122222 0422981 0000 +M520201011111116941120120615WTTTPYTT0222122222222 0422021 0000 +M42020101111111705120300400651163113 +M520201011111117051119970616WTTT0B9WW22222122222210112111117330000 +M520201011111117051120170613WTTTPBZPY222221222222 0422981 0000 +M42020101111111711721100402161993113 +M520201011111117117119940112WTTTP#@#@22222112222210112111126000000 +M520201011111117117120160101WTTT00PYT222222122222 0422981 0000 +M42020101111111724120000401821993113 +M520201011111117241119910807WTTT#TP#Z12222222222210112113117150000 +M520201011111117241120190102WTTT0WWY0222222222222 0422981 0000 +M42020101111111734620900401881163113 +M520201011111117346119950521WTTTY0TWW22212222222210112111124000000 +M520201011111117346120191116WTTT0B@0W222222122222 0422981 0000 +M520201011111117346120171116WTTTYY0TP222122122222 0422981 0000 +M42020101111111740621100401181163113 +M520201011111117406119880113WTTT#@@#P22212222222210112111118260000 +M520201011111117406120170723WTTT0@B@W222122122222 0422981 0000 +M42020101111111741820900406131162113 +M520201011111117418119800503WTTT#09Z912222222222230112111121350000 +M520201011111117418120150723WTTT##YBW122222222222 0422981 0000 +M520201011111117418120130601WTTTPYTZ0222222122222 0422011 0000 +M42020101111111763921700404201993113 +M520201011111117639119730501WTTT0T9BZ22212222222210112111124550000 +M520201011111117639120040823WTTTPWPTB222122122222 0422101 0000 +M42020101111111767220000406951163113 +M520201011111117672119910703WTTT09@@Z12222222222210112111124390000 +M520201011111117672120130123WTTTPBTBY122222222222 0422981 0000 +M520201011111117672120120522WTTT0@PTW122222222222 0422011 0000 +M520201011111117672120110706WTTT0Y0B@122221222222 0422031 0000 +M42020101111111833221400400351162113 +M520201011111118332119840101WTTT09W@P22212222222210112121117430000 +M520201011111118332120090122WTTTYTZ9W222222222222 0422051 0000 +M520201011111118332120040126WTTT##@PW122222222222 0422101 0000 +M42020101111111841520900402921162113 +M520201011111118415119920618WTTT#Z9P012222222222220112121118740000 +M520201011111118415120130126WTTTPBWBZ122222222222 0422981 0000 +M42020101111111844920600402121163113 +M520201011111118449119930626WTTT0TWW022212122222210112121123920000 +M520201011111118449120200619WTTTP#@T0222121222222 0422981 0000 +M520201011111118449120100608WTTT#WZPT222221122222 0422041 0000 +M520201011111118449120080115WTTTYYT@@222221122222 0422051 0000 +M42020101111111897821100406391162113 +M520201011111118978119750101WTTT0WWBP22212222222210112111122810000 +M520201011111118978120120615WTTT##PTB222122122222 0422021 0000 +M520201011111118978120090701WTTT0@W@P222122222222 0422051 0000 +M520201011111118978120070715WTTTPB09@222122222222 0422071 0000 +M42020101111111946122700400671163123 +M520201011111119461119710602WTTT#P0Y022222122222220112161113870000 +M520201011111119461120150503WTTTPW0W@222222222222 0422981 0000 +M520201011111119461120100121WTTT0@9#P222221122222 0422031 0000 +M42020101111112007522400406441163113 +M520201011111120075119860626WTTTP#0WZ22222122222210112111121070000 +M520201011111120075120110526WTTT0@9BW222222122222 0422021 0000 +M520201011111120075120081126WTTTYT9@#222222122222 0422051 0000 +M42020101111112014820600405171162113 +M520201011111120148119730601WTTTYZ9T#12222222222210112121121020000 +M520201011111120148120040121WTTT0BY90122222122222 0422091 0000 +M42020101111112056521700401121163113 +M520201011111120565119790107WTTT#0WZP22212222222230112111129840000 +M520201011111120565120190621WTTTPB0YT222122222222 0422981 0000 +M520201011111120565120150102WTTT#W#B#222122222222 0422981 0000 +M520201011111120565120130119WTTT0WBW9222122222222 0422981 0000 +M520201011111120565120120815WTTT#@B@@222122122222 0422021 0000 +M42020101111112081422400404731163113 +M520201011111120814119780718WTTT0BYZ921222112222210112121119730000 +M520201011111120814120070513WTTT#0W09222221122222 0422061 0000 +M42020101111112093620600405171161113 +M520201011111120936119920723WTTTY#TT@12222222222210112111124430000 +M520201011111120936120190115WTTT#TTBT122222222222 0422981 0000 +M520201011111120936120170701WTTTYT#TB222222122222 0422981 0000 +M520201011111120936120100715WTTTPZ0W#122222222222 0422041 0000 +M42020101111112160022400401011163123 +M520201011111121600119850119WTTTY0PYZ22222122222230112121121180000 +M520201011111121600120040101WTTT00#TY222221122222 0422101 0000 +M42020101111112177921100401181123123 +M520201011111121779119890519WTTT#@@ZY22212222222210112131100000577 +M520201011111121779120130719WTTT#P@9W222122122222 0422011 0000 +M42020101111112207521700404101012113 +M520201011111122075119940109WTTTYYTP#12222222222220112121124260000 +M520201011111122075120180723WTTT#TTYP122222122222 0422981 0000 +M520201011111122075120160115WTTT#TBP@222222222222 0422981 0000 +M42020101111112223320900403071162113 +M520201011111122233119890126WTTTYYB@P22212222222230112132134680000 +M520201011111122233120170821WTTTYY9W#222122222222 0422981 0000 +M520201011111122233120110615WTTTYBTBY222122122222 0422031 0000 +M520201011111122233120080102WTTTY@ZWW222122122222 0422051 0000 +M42020101111112240821100401781013113 +M520201011111122408119860813WTTT###B912222222222210112111127730000 +M520201011111122408120090815WTTT#PZBT222222122222 0422051 0000 +M520201011111122408120071107WTTTPYBZP122222122222 0422061 0000 +M42020101111112240920000403951163113 +M520201011111122409119940718WTTTYZZ9Y22222222222210112081122420328 +M520201011111122409120180115WTTTYYWYP222222122222 0422981 0000 +M520201011111122409120160118WTTTPBYBB222222222222 0422981 0000 +M42020101111112246321700401121012123 +M520201011111122463119860716WTTT#9@P912222212222210212111122840000 +M520201011111122463219860501WTTT#WB9@12222222222220112113200000000 +M520201011111122463120170502WTTT#@0YT122222222222 0422981 0000 +M42020101111112260722400406121163113 +M520201011111122607119620716WTTT#WW@T22212222222220112111124860000 +M520201011111122607120060701WTTTYPTBY222122222222 0422081 0000 +M42020101111112278820000404271161113 +M520201011111122788119750621WTTT#T0YT22122212222250112111128820000 +M520201011111122788120050121WTTTYTYP0221222222222 0422081 0000 +M42020111111111141622700403941163113 +M520201111111111416119950102WTTT#@#0B22222122222210112111123390000 +M520201111111111416120160622WTTT###B@222222122222 0422981 0000 +M42020111111111142921400400351163113 +M520201111111111429119780706WTTTY@W0W22212222222230112111135380000 +M520201111111111429120140713WTTTPY000222222222222 0422981 0000 +M520201111111111429120090701WTTTPTT0Z222222222222 0422051 0000 +M42020111111111156620600401421163113 +M520201111111111566119940118WTTT#BZ9W22222222222210412081116570000 +M520201111111111566120170108WTTTP@9B9122222222222 0622981 0000 +M520201111111111566120120603WTTTYYY#Y122222122222 0622021 0000 +M520201111111111566120110126WTTTPYBPT122222122222 0622031 0000 +M42020111111111162521100405401162113 +M520201111111111625119840118WTTTY0ZP#12222222222210112111122760000 +M520201111111111625120090702WTTT0Z#Z@122222122222 0422051 0000 +M520201111111111625120060815WTTTYTYT9122222222222 0422081 0000 +M42020111111111171520600400291163113 +M520201111111111715119800118WTTT0#ZWZ22222122222210112111121670000 +M520201111111111715120180502WTTT#PPYB222222222222 0422981 0000 +M520201111111111715120130608WTTT0YPPY222222122222 0422011 0000 +M42020111111111172020600400871163123 +M520201111111111720119920106WTTTYB0WZ12222222222230112121127080000 +M520201111111111720120170503WTTTYP@YT122222122222 0422981 0000 +M520201111111111720120090807WTTT#Z9PW122222222222 0422051 0000 +M42020111111111179521700401121161113 +M520201111111111795119940723WTTTYZ@9Y12222222222210112081118900000 +M520201111111111795120200516WTTT#W@Z@222222222222 0422981 0000 +M520201111111111795120200516WTTT##@9T222222222222 0422981 0000 +M520201111111111795120170506WTTTYZPBP122222222222 0422981 0000 +M520201111111111795120120115WTTTPTYY#122221122222 0422011 0000 +M42020111111111212322200405781163113 +M520201111111112123119860126WTTT#90B921222222222230112161127150000 +M520201111111112123120161115WTTTY#BYW222222222222 0422981 0000 +M520201111111112123120110112WTTT0P@Z@222222122222 0422031 0000 +M42020111111111226921700404101163113 +M520201111111112269119860115WTTT0TBB#12222222222210112121116660000 +M520201111111112269120150101WTTT##@ZZ122222122222 0422981 0000 +M520201111111112269120070122WTTT#T@T@122222122222 0422061 0000 +M520201111111112269120030806WTTTP#9YY122222222222 0422111 0216 +M42020111111111259120900403071163113 +M520201111111112591119840108WTTT0Z9#T12222222222230112111138870000 +M520201111111112591120100815WTTT#T0TW122222122222 0422041 0000 +M520201111111112591120071121WTTT#00#B122222222222 0422061 0000 +M520201111111112591120060623WTTTY0B0Z122222222222 0422081 0000 +M42020111111111289720000403951163113 +M520201111111112897119910723WTTT0YPBB22222122222210112111117730000 +M520201111111112897120180815WTTT#W@TP222122122222 0422981 0137 +M42020111111111384721100406001013113 +M520201111111113847119770706WTTT099YY12222222222210112111136170000 +M520201111111113847120170115WTTTYY@@Z222222222222 0422981 0000 +M520201111111113847120090119WTTTPY9YP122221122222 0422041 0000 +M520201111111113847120020101WTTTY@WY@122222222222 0422111 0000 +M42020111111111408420900401031162123 +M520201111111114084119880806WTTT#T0@@12222222222210112131140410000 +M520201111111114084120160102WTTT#@WY0122222222222 0422981 0000 +M520201111111114084120140706WTTT0@W@@222222222222 0422981 0000 +M520201111111114084120090121WTTT#TZ@Z122222222222 0422041 0000 +M42020111111111420420900403031163113 +M520201111111114204119940119WTTTY0WT@22212222222210112111127670000 +M520201111111114204120180802WTTT#0PB9222122222222 0422981 0000 +M520201111111114204120160721WTTT#T0TB222122122222 0422981 0000 +M42020111111111428720000403951161113 +M520201111111114287119880102WTTTYBWWY12222222222210112081116900000 +M520201111111114287120180118WTTTP#0#0122222222222 0422981 0000 +M520201111111114287120121112WTTTP#9Z9122222222222 0422011 0000 +M42020111111111480820600401151161113 +M520201111111114808119880822WTTTYYB0@12222222222210112131100000000 +M520201111111114808120130126WTTTYZ0@T122221222222 0422011 0000 +M520201111111114808120100123WTTTPZ0ZW222122122222 0422041 0000 +M42020111111111484021200404691163113 +M520201111111114840119800122WTTT0@Y0#12222222222250112121114650000 +M520201111111114840120150622WTTT0ZBZ@122222122222 0422981 0000 +M520201111111114840120040113WTTT0WBWB122222222222 0422091 0000 +M520201111111114840120030801WTTTP0W#P122222222222 0422111 0000 +M42020111111111487621700402861163113 +M520201111111114876119881101WTTTY##BP22222122222210112111130170000 +M520201111111114876120190723WTTT0@0#P222222222222 0422981 0000 +M520201111111114876120150621WTTT#PYZT222222122222 0422981 0000 +M42020111111111495120900403031163113 +M520201111111114951119740623WTTT00B9T22212222222210112111124620000 +M520201111111114951120130715WTTT0PB@#222122122221 0422011 0766 +M520201111111114951120130715WTTTPZWP@222122122222 0422011 0000 +M42020111111111585220900403071162113 +M520201111111115852119800116WTTT#P9BW22212222222210112161133800000 +M520201111111115852120100501WTTTYBYTZ222122222222 0422041 0000 +M520201111111115852120050708WTTTYPTTZ222122222222 0422091 0000 +M42020111111111653421100402161013113 +M520201111111116534119831114WTTT0#9Z022222222222210112121120450000 +M520201111111116534120100101WTTT#BYY9222222122222 0422031 0000 +M42020111111111677521200404691163123 +M520201111111116775119861118WTTT0ZBW#22222111222210112111116251085 +M520201111111116775120190119WTTT#P#P#222222222222 0422981 0000 +M520201111111116775120180126WTTTYZ#P@222222122222 0422981 0000 +M520201111111116775120160103WTTTY0#PT222222122222 0422981 0000 +M520201111111116775120121101WTTT0@YWT222221222222 0422011 0000 +M520201111111116775120100126WTTT#0BTB222221222222 0422031 0000 +M42020111111111765820900406421163113 +M520201111111117658119830126WTTTYZPYB22212222222210112111117580000 +M520201111111117658120150715WTTT0@T@Z222122122222 0422981 0000 +M520201111111117658120110708WTTTPWYW#222122222222 0422031 0000 +M42020111111111766820500404091163113 +M520201111111117668119880113WTTTYB9YT22222122222210112121125190000 +M520201111111117668120121101WTTTYPY#9222221222222 0422011 0000 +M520201111111117668120070501WTTTPYWW@222221222222 0422071 0000 +M42020111111111778922400402911993113 +M520201111111117789119710103WTTTP0BZT22212212222210112111124160000 +M520201111111117789120080615WTTTYZWBP222122122222 0422061 0000 +M42020111111111785220000406951163113 +M520201111111117852119890509WTTTYWTYY12222122222210112112128570000 +M520201111111117852120150107WTTT#TBYB122221122222 0422981 0000 +M520201111111117852120060606WTTTPPW#0122221122222 0422082 0000 +M42020111111111818421700404101163113 +M520201111111118184119910726WTTTYY@Z012222122222210112121127650000 +M520201111111118184120160815WTTTY@0@B122222122222 0422981 0000 +M520201111111118184120120606WTTT0@#PY122122122222 0422021 0000 +M42020111111111838221700403151163123 +M520201111111118382119940708WTTT0T0BW22212222222210112111124740000 +M520201111111118382120160121WTTT0Z0@0222222122222 0422981 0000 +M42020111111111857020000404071161113 +M520201111111118570119840622WTTT0@B#012222222222210112111124960000 +M520201111111118570120080123WTTTP#YYB122221122222 0422051 0000 +M520201111111118570120030106WTTT#9P#9122222122222 0422111 0000 +M42020111111111869922700400681162113 +M520201111111118699119830101WTTTYZ9PB12222212222220212121243880000 +M520201111111118699119820102WTTTYBPBB12212222222220112131200000000 +M520201111111118699120180508WTTT#ZYTW222222122222 0422981 0000 +M520201111111118699120130116WTTTYZTZ#122222122222 0422981 0000 +M520201111111118699120101107WTTT0#90T122222122222 0422031 0000 +M520201111111118699120080513WTTTPZT9Y222221122222 0422061 0000 +M42020111111111918920600405341162113 +M520201111111119189119800621WTTTYZP0P12222222222210112111129550000 +M520201111111119189120050801WTTTP@YBZ122222222222 0422091 0000 +M42020111111111925922700402801163113 +M520201111111119259119960715WTTTY@0ZP12222222222210412121119830000 +M520201111111119259120151126WTTT0B009122222122222 0622981 0000 +M520201111111119259120130823WTTTPT@T@122222222222 0622011 0000 +M520201111111119259120120119WTTTBTTTZ122222222222 0622021 0000 +M42020111111111940020600402031163113 +M520201111111119400119920707WTTTPZTPZ12222222222210112081128000000 +M520201111111119400120110102WTTT0TY09122222122222 0422021 0000 +M42020111111111940122700403611162113 +M520201111111119401119910506WTTTPP#YZ22222122222210112121120660000 +M520201111111119401120090521WTTTBTTW#222221122222 0422051 0000 +M42020111111111952220000403011013113 +M520201111111119522119920118WTTTPW0#@22122222222230112081125940000 +M520201111111119522120131121WTTTYTP0#221222122222 0422981 0000 +M42020111111111967720000404151993113 +M520201111111119677119710119WTTTY#Y#P22212222222210112111122000000 +M520201111111119677120120101WTTT0YBZB222222222222 0422011 0000 +M42020111111112019122700400671163113 +M520201111111120191119950606WTTTPW9YT22222122222210112121114200000 +M520201111111120191120170119WTTTPPTPY222222222222 0422981 0000 +M520201111111120191120170119WTTT0P@9W222222222222 0422981 0000 +M42020111111112024821100401691163123 +M520201111111120248119820119WTTT#BW#Y22222122222210112121134880000 +M520201111111120248120171107WTTTYY0YW222222222222 0422981 0000 +M520201111111120248120080522WTTT#WP@B222221122221 0422061 0798 +M520201111111120248120060621WTTT#@@P#222122222222 0422081 0000 +M520201111111120248120040615WTTT09PWW222221222222 0422101 0000 +M42020111111112026422700400671163113 +M520201111111120264119860121WTTT0PBZ#22222122222210112111126990000 +M520201111111120264120100726WTTTYPYYY222221122222 0422041 0000 +M42020111111112026820600400871162113 +M520201111111120268119811126WTTTPW0ZY22212222222210112121129600000 +M520201111111120268120120621WTTTBT9W#222221222222 0422021 0000 +M520201111111120268120090509WTTTPW0TW222122222222 0422051 0000 +M520201111111120268120080518WTTT#0W@P222122222222 0422061 0000 +M42020111111112038920900402921013113 +M520201111111120389119980126WTTT0T#W@12212222222210112131124000000 +M520201111111120389120200615WTTTYWYW#222222122222 0422981 0000 +M42020111111112061222700403351163113 +M520201111111120612119600106WTTT0PZ9Z22222112222220112111144190000 +M520201111111120612120050601WTTT0WTP9222221122222 0422091 0000 +M42020111111112089821100406001163113 +M520201111111120898119840819WTTTP#YBB12222222222220112122130280000 +M520201111111120898120130601WTTTPPW#9122222222222 0422011 0000 +M520201111111120898120050109WTTT0T099122222122222 0422082 0000 +M520201111111120898120040126WTTTY9#9W122222122222 0422102 0000 +M42020111111112118020000404271163113 +M520201111111121180119910715WTTTPBB0@22122222222210112121121670000 +M520201111111121180120180115WTTT#TZ9T221222122222 0422981 0000 +M520201111111121180120140715WTTTPYTWZ221222222222 0422981 0000 +M520201111111121180120101119WTTTP@@9#222222122222 0422031 0000 +M42020111111112119821100401181013113 +M520201111111121198119930521WTTT0#0WZ12222222222210112111118570000 +M520201111111121198120170614WTTT#9WT9122222222222 0422981 0000 +M42020111111112121321100406471163113 +M520201111111121213119851119WTTT0PT0T22222122222210112121123830000 +M520201111111121213120080118WTTTYZB#W222221222222 0422051 0000 +M520201111111121213120020119WTTT#P@Z0222221222222 0422111 0000 +M42020111111112175720000404151013113 +M520201111111121757119920619WTTTPZ@@012222222222210112111117250000 +M520201111111121757120140119WTTT#ZPBP122222122222 0422981 0000 +M42020111111112183620900406131163123 +M520201111111121836119910515WTTTY9ZTT12222222222230112112118000000 +M520201111111121836120140109WTTTYPY90122222222222 0422981 0000 +M520201111111121836120120821WTTTPY0@#122221222222 0422021 0000 +M42020111111112193221400400351163113 +M520201111111121932119890601WTTT#@#Z@22212222222210112112112370000 +M520201111111121932120160606WTTT#W9PP222222222222 0422981 0000 +M520201111111121932120050108WTTT#@#9W222122122222 0422082 0000 +M42020111111112201922400406251012113 +M520201111111122019119771126WTTTY@W9022212222222210112132119500000 +M520201111111122019120080101WTTTY09P9222122122222 0422051 0000 +M42020111111112254921700405321162113 +M520201111111122549119860503WTTT09PWZ22222222222210112111113000000 +M520201111111122549120171107WTTTPP09T222222222222 0422981 0000 +M42020111111112257621700406571163113 +M520201111111122576119940806WTTTYTB9022222122222210112161113660000 +M520201111111122576120161114WTTTP9WT0222222122222 0422981 0000 +M42020121111111112921100401181161113 +M520201211111111129119920601WTTTYWTY022212222222210112121119240000 +M520201211111111129120180116WTTTP9ZYB222221222222 0422981 0000 +M42020121111111160520900400501162113 +M520201211111111605119830502WTTTYY90B12222122222210112111120770000 +M520201211111111605120080815WTTT0YB9B122221122222 0422061 0000 +M42020121111111178320600405341193113 +M520201211111111783119830112WTTT#T0@Y12222222222210112111126870000 +M520201211111111783120040122WTTTPWYW9122222222222 0422101 0000 +M42020121111111185922400401281161113 +M520201211111111859119880102WTTTPTPPY22212222222110112111121230792 +M520201211111111859120181101WTTTBTZ0T222222222222 0422981 0000 +M42020121111111195522700403241163113 +M520201211111111955119970123WTTTY@Y#912212222222210112122114650000 +M520201211111111955120190521WTTT0@YWZ222222222222 0422981 0000 +M42020121111111299222400401471163113 +M520201211111112992119940715WTTTYB#B@12222222222210112121132330000 +M520201211111112992120191102WTTT00PPW122221222222 0422981 0000 +M520201211111112992120180701WTTT0BW@T122122222222 0422981 0000 +M520201211111112992120170102WTTTY@Y0B222221222222 0422981 0000 +M520201211111112992120140523WTTT#Z@P#222221222222 0422981 0385 +M42020121111111317520900401231163113 +M520201211111113175119870116WTTT##YBB12222212222210112111119800000 +M520201211111113175120050101WTTT#YZ0B122222222222 0422091 0000 +M42020121111111332521100401691163113 +M520201211111113325119900721WTTTPZW@@22222122222210112121112350000 +M520201211111113325120160101WTTTPZ0W@122221222222 0422981 0000 +M42020121111111378121400400351163113 +M520201211111113781119910522WTTTP@P##22222222222210112111118320000 +M520201211111113781120130819WTTT0PBP0222122222222 0422011 0000 +M42020121111111410121100403821993113 +M520201211111114101120001123WTTT0Z9#P12222122222210112111115180000 +M520201211111114101120190809WTTT0T@YY122222222222 0422981 0000 +M42020121111111441721700400981162113 +M520201211111114417119890822WTTT#T0#P12222222222210112121114010000 +M520201211111114417120190507WTTT#B#00222222222222 0422981 0000 +M520201211111114417120091121WTTT0###P122222122222 0422041 0470 +M520201211111114417120060713WTTT#Z99#122222122222 0422081 0470 +M42020121111111448120600403391163123 +M520201211111114481119710815WTTTY9##B22222122222220212121116590000 +M520201211111114481219660715WTTT0##PP22212212222120112121200000835 +M520201211111114481120060723WTTTPT9BP222221122222 0422081 0000 +M520201211111114481120030115WTTTPW@9@222122222222 0422111 0000 +M42020121111111465120900403071161113 +M520201211111114651119861102WTTT0P9WZ12222222222210112111126950000 +M520201211111114651120130119WTTT00WB@122222122222 0422981 0000 +M520201211111114651120060621WTTTPTWPB122222122222 0422081 0000 +M520201211111114651120030807WTTT#B9@9122222122222 0422111 0000 +M42020121111111531521400401581993113 +M520201211111115315119951121WTTT#@#WP22222122222210112111117060000 +M520201211111115315120200108WTTTYY00#222221122222 0422981 0000 +M520201211111115315120180723WTTT#@TTB222221122222 0422981 0000 +M42020121111111573220000403761012113 +M520201211111115732119770713WTTT#@#WW22212222222230112111146380000 +M520201211111115732120180621WTTTPPT9P222222122222 0422981 0000 +M520201211111115732120130115WTTTYT#YB222222222222 0422011 0000 +M520201211111115732120091102WTTT#ZTPP222222222222 0422041 0000 +M42020121111111573722200404011123113 +M520201211111115737119830123WTTTP9PPY22222122222210112121130330000 +M520201211111115737120130815WTTT0TB#9222222222222 0422011 0000 +M520201211111115737120120602WTTTP@ZPB222222222222 0422021 0000 +M520201211111115737120090715WTTTYPZY#222222122222 0422051 0000 +M42020121111111589020600402031123123 +M520201211111115890119880126WTTT00ZP#12222222222210112121123030000 +M520201211111115890120141115WTTT#TWB0222222122222 0422981 0000 +M520201211111115890120061101WTTTYYP#9122222122222 0422071 0000 +M42020121111111592520600404951163113 +M520201211111115925119750712WTTT#Z@0Z22222122222210112111120800000 +M520201211111115925120031119WTTTBTZZ#222221222222 0422101 0000 +M42020121111111603920000404151162123 +M520201211111116039119800706WTTT09W#P22212222222210112981127230000 +M520201211111116039120170608WTTT0PZ#Z222122122222 0422981 0000 +M520201211111116039120110114WTTTYP0TP222222222222 0422031 0000 +M42020121111111610421100401181163113 +M520201211111116104119860521WTTT#90Y#22212222222210112121122710000 +M520201211111116104120140818WTTT0ZZ9@222222222222 0422981 0000 +M42020121111111652520600401421163123 +M520201211111116525119800109WTTT0WPB022212222222210112161132430000 +M520201211111116525120180612WTTTY0@9B122222222222 0422981 0000 +M520201211111116525120130101WTTT#@TW9222222222222 0422011 0000 +M520201211111116525120050112WTTTPP9P@222122222222 0422081 0000 +M42020121111111723120000404581163113 +M520201211111117231119770802WTTT09W9Y22222122222220112141118110000 +M520201211111117231119710507WTTT0ZWY012222211222220212131200000827 +M520201211111117231120021126WTTT0WP#P122222122222 0422111 0000 +M42020121111111760720600401981161113 +M520201211111117607119920101WTTT0TTWB22222122222210112121119940000 +M520201211111117607120170123WTTTYTP#T122222122222 0422981 0000 +M520201211111117607120120815WTTT0P0#0222221122222 0422021 0000 +M42020121111111784220000404271163113 +M520201211111117842119900515WTTTP@99@22122222222210112111131140000 +M520201211111117842119870119WTTTY0W0Z22122212222211012111127960000 +M520201211111117842120171102WTTTY@9YP221222122222 0422981 0000 +M520201211111117842120110113WTTTYT9BY221221122222 0422021 0000 +M520201211111117842120090514WTTTP9Z#Z221222222222 0422051 0000 +M42020121111111791121100406541163113 +M520201211111117911119880619WTTTY@@BT12222222222210112111125950000 +M520201211111117911120140102WTTTYW#Z9122221122222 0422981 0000 +M42020121111111842122700403611163113 +M520201211111118421119910813WTTTY@@TB22222122222210112121114460000 +M520201211111118421120100106WTTT0B9TY222222122221 0422041 0819 +M42020121111111866621100401551163113 +M520201211111118666119761119WTTTY@90912222222222220112142137370000 +M520201211111118666120150719WTTTPP90Z122222122222 0422981 0000 +M520201211111118666120060521WTTT0P@@0122222222222 0422081 0000 +M42020121111111881321400406791163113 +M520201211111118813119880501WTTT0P#TP22212222222210112111122420000 +M520201211111118813120131119WTTTY@B9T222122222222 0422981 0000 +M520201211111118813120100809WTTT0BTTB222222122222 0422041 0000 +M42020121111111885220600402031161123 +M520201211111118852119870106WTTT00P0#12222222222210112131113470000 +M520201211111118852120170713WTTT##W0B122221122222 0422981 0000 +M520201211111118852120130119WTTTPZ9YZ122222222222 0422981 0000 +M42020121111111929720900403071993113 +M520201211111119297119930615WTTTP900Y12222222222210112111124040000 +M520201211111119297120160723WTTTP9WWB222221222222 0422981 0000 +M42020121111111946221700405821161113 +M520201211111119462119861103WTTTYW0B022222222222210112121121700000 +M520201211111119462120090102WTTTP0#YT222222122222 0422041 0000 +M520201211111119462120070515WTTTP@T0W222222122222 0422071 0000 +M520201211111119462120040126WTTT#ZZZ@222222122222 0422101 0000 +M42020121111112064521700405821161113 +M520201211111120645119870106WTTTYBTWP12222222222230112121116290000 +M520201211111120645120170801WTTT#ZT0T122222222222 0422981 0000 +M520201211111120645120100706WTTTY909W122222222222 0422041 0000 +M520201211111120645120060601WTTTPP#Y9122222222222 0422081 0000 +M42020121111112137322700403611992113 +M520201211111121373119921119WTTT0BZ@Y12222222222210112121127990000 +M520201211111121373120180115WTTTPWY09122221122222 0422981 0000 +M520201211111121373120130101WTTTY0@@W122222222222 0422011 0000 +M42020121111112140220600401151992113 +M520201211111121402119840726WTTT#9@0012222222222210112111118860000 +M520201211111121402120120626WTTT#@9Y9122222222222 0422021 0000 +M520201211111121402120080502WTTTYYY0B122222222222 0422061 0000 +M42020121111112173021400401581163113 +M520201211111121730119910823WTTTYW@0Y22222122222210112111115690000 +M520201211111121730120180621WTTT0@BB0222222222222 0422981 0000 +M42020121111112194022700403941122113 +M520201211111121940119750602WTTTPZ0TY22212222222210112161120560000 +M520201211111121940120110122WTTT#9PWP222122222222 0422031 0000 +M42020121111112199121100401181163113 +M520201211111121991119820701WTTT0P@9Z22222222222220112111118060000 +M520201211111121991120170126WTTTPYW9T122222122221 0422981 0644 +M520201211111121991120170126WTTT0BPB@122222122221 0422981 0644 +M520201211111121991120090619WTTTY0B9T222222222222 0422051 0000 +M42020121111112247620900403031013113 +M520201211111122476219820101WTTT#W9WY22212212222220212113200000000 +M520201211111122476119810614WTTTYT@Y022212222222220112141144190000 +M520201211111122476120170615WTTT0@P#@222122122222 0422981 0000 +M520201211111122476120040615WTTT#900T222122222222 0422101 0000 +M42020121111112251620900404651163113 +M520201211111122516119750618WTTT0@00#22222222222210112081125710000 +M520201211111122516120050707WTTTY90T@222222122222 0422091 0000 +M42020121111112251721700401121193113 +M520201211111122517119780108WTTT##PZ#22212222222210112111130760579 +M520201211111122517120180719WTTTY090@222122222222 0422981 0000 +M520201211111122517120100619WTTTPWPPZ222122222222 0422041 0000 +M520201211111122517120070106WTTTYZ@PB222122122222 0422071 0000 +M520201211111122517120050801WTTTYT9WT222122122222 0422091 0000 +M42021011111111115321200404541013113 +M520210111111111153119790109WTTT0PYYT22222122222210112121124100000 +M520210111111111153120070101WTTTYP99Z222221222222 0422071 0000 +M42021011111111141920600405171161113 +M520210111111111419119920808WTTT0B#0T22212222222210112121122580000 +M520210111111111419120170708WTTTPZ@BW222122122222 0422981 0000 +M42021011111111149420900406601012113 +M520210111111111494119820119WTTT00Y9912222222222210112111123400238 +M520210111111111494120191107WTTTPYPBB222222122222 0422981 0000 +M520210111111111494120120823WTTT#P#TY122222122222 0422021 0000 +M42021011111111228120600402121163113 +M520210111111112281119810601WTTT#PT@@22222122222210112131123400000 +M520210111111112281120130813WTTTPT9WT222221122222 0422011 0000 +M42021011111111229420000404661991113 +M520210111111112294119830608WTTTYWPWY22222122222230112981133880000 +M520210111111112294120111123WTTT##TZ#222221222222 0422031 0000 +M520210111111112294120070721WTTTPZ0#P222221222222 0422071 0000 +M520210111111112294120050807WTTTP@BP0222221122222 0422091 0000 +M520210111111112294120040715WTTTPBT#0222221222222 0422101 0000 +M42021011111111250121400406791163113 +M520210111111112501119910114WTTT##T@P22222122222210112111122680000 +M520210111111112501120170702WTTT0P#@B222222222222 0422981 0000 +M520210111111112501120150702WTTTY0T@Z222221222222 0422981 0000 +M42021011111111259420600401161163113 +M520210111111112594119780621WTTT#0W#B12222222222210112141126090000 +M520210111111112594120140119WTTT0W@B#222222222222 0422981 0000 +M520210111111112594120030513WTTTPYBZ0222122222222 0422111 0000 +M42021011111111283620000402281013113 +M520210111111112836119920506WTTTPWW0P12222122222210112981112120000 +M520210111111112836120180114WTTTP0BWT122222122222 0422981 0000 +M42021011111111299821700406571163113 +M520210111111112998119950502WTTT0BYBB22222122222210112121127300000 +M520210111111112998120190115WTTTP0ZT#222222122222 0422981 0000 +M520210111111112998120171102WTTT0BPZT222221222222 0422981 0000 +M42021011111111341822700403241163113 +M520210111111113418119980701WTTTPZYY922212222222210112121112080000 +M520210111111113418120190806WTTT#0B00222222122222 0422981 0000 +M520210111111113418120160102WTTT09Y@P222122222222 0422981 0000 +M42021011111111357522700400381163113 +M520210111111113575119820113WTTTP0PT#22222122222250112111123480000 +M520210111111113575120101102WTTT0ZPWB222221122222 0422041 0200 +M520210111111113575120070509WTTT0P0TT222221222222 0422071 0200 +M520210111111113575120050807WTTT0WB#T222221222222 0422091 0200 +M42021011111111447720000400791163113 +M520210111111114477119840826WTTT#ZWYZ22222122222220212121120990000 +M520210111111114477119770501WTTTY0ZB022222112222220112121152910000 +M520210111111114477120160715WTTT#YZB@222221122222 0422981 0000 +M520210111111114477120100515WTTTBT9WZ221222222221 0422041 0215 +M520210111111114477120071108WTTT0ZTBT222221222222 0422071 0000 +M42021011111111492620900400261122113 +M520210111111114926119910126WTTT#P0ZB12222222222210112081111050000 +M520210111111114926120150706WTTT0P@PZ122221122222 0422981 0000 +M42021011111111539921100406471163113 +M520210111111115399219930102WTTT##YPT12222222222130112081200000779 +M520210111111115399119770714WTTTYPTZT22212212222211012121120910000 +M520210111111115399120201116WTTT0TBWW222222122222 0422981 0000 +M42021011111111557720600405471163113 +M520210111111115577119860126WTTTYP9Z912222212222210112111132730000 +M520210111111115577120080126WTTTPB@TW122222122222 0422061 0000 +M520210111111115577120060106WTTTYTP#0222222122222 0422071 0000 +M520210111111115577120050108WTTTP00T#122222222222 0422081 0000 +M42021011111111563320600401601993113 +M520210111111115633119930119WTTT00T0@22212212222210112111126610000 +M520210111111115633120160521WTTTPB99Y222222122222 0422981 0000 +M42021011111111563520900400501163113 +M520210111111115635119780815WTTTY9BY@22212222222210112112118730000 +M520210111111115635120190723WTTTPZ0Z9222222222222 0422981 0000 +M42021011111111572920900403031012113 +M520210111111115729119840721WTTTP@0T012212222222210112121126900000 +M520210111111115729120060708WTTTPP0W#222222122222 0422081 0160 +M520210111111115729120040126WTTTY@TB0222222122222 0422091 0000 +M42021011111111603720500402421163113 +M520210111111116037119690719WTTT0B09Z22222122222250112111123170000 +M520210111111116037120020119WTTT09ZYZ222221122222 0422111 0000 +M42021011111111671921100401691163113 +M520210111111116719119820615WTTT#TYW022222122222250112111120980000 +M520210111111116719120080715WTTT##BW#222222222222 0422061 0000 +M520210111111116719120060115WTTT0PB@Z222222222222 0422081 0000 +M42021011111111683320900402921163123 +M520210111111116833119850123WTTTP0W9922212212222230112111100000000 +M520210111111116833120170707WTTT#@9TT222222122222 0422981 0000 +M520210111111116833120110101WTTT0TBP#222122222222 0422031 0000 +M520210111111116833120090723WTTTPW0TZ222122222222 0422051 0000 +M42021011111111684820000402281993113 +M520210111111116848219840507WTTT##TP@22122222222220212113200000000 +M520210111111116848119810726WTTTYY@T#22122212222220112111133350000 +M520210111111116848120200115WTTTBTZT@221222222222 0422981 0000 +M520210111111116848120160815WTTTPPZ0Y221222122222 0422981 0000 +M42021011111111725021100406391163113 +M520210111111117250219880115WTTT0TB9022222222222230212113200000040 +M520210111111117250119840118WTTT#9@TP22212212222220112111116900000 +M520210111111117250120180626WTTT#YBWY222222222222 0422981 0000 +M520210111111117250120170108WTTT0BWTW222222122222 0422981 0000 +M42021011111111726922400400121013113 +M520210111111117269119830815WTTT#90ZY22212222222210112111137050000 +M520210111111117269120150122WTTTP#YZY222222122222 0422981 0000 +M520210111111117269120090101WTTTYZTYT222122122222 0422041 0000 +M42021011111111737820000404151163113 +M520210111111117378119840116WTTT#PYW#22222122222230112121100000000 +M520210111111117378120180607WTTTYW0YB222122122222 0422981 0000 +M520210111111117378120150709WTTT0Y#@#222221122222 0422981 0000 +M520210111111117378120130716WTTT#@TP0222221122222 0422011 0000 +M42021011111111748620900406151162113 +M520210111111117486119880715WTTT0BB0B22212222222210112121112970000 +M520210111111117486120170101WTTTPBT@9222122122222 0422981 0000 +M520210111111117486120160601WTTTY#0PT222222222222 0422981 0000 +M520210111111117486120090722WTTT09WWW222122122222 0422051 0000 +M42021011111111781520600402031993113 +M520210111111117815119910512WTTTYW9Z@22212222222210112121128070000 +M520210111111117815120150702WTTT#P#PT222222122222 0422981 0000 +M520210111111117815120130702WTTT#WY9B222222222222 0422011 0000 +M520210111111117815120100121WTTTYB00#222222122222 0422041 0000 +M42021011111111783121400401581013113 +M520210111111117831119940616WTTTY0TP@22222122222210112111128530000 +M520210111111117831120170119WTTT0#9B0222221122222 0422981 0000 +M42021011111111798922700403241163113 +M520210111111117989119920815WTTT0TWWW22222122222210112111122610000 +M520210111111117989120140106WTTTYWB99222122222222 0422981 0000 +M42021011111111810620000403721162113 +M520210111111118106119710113WTTTBTZ@P22222122222210112131132100000 +M520210111111118106120070523WTTTYPY9P122222222222 0422071 0000 +M520210111111118106120040106WTTTYPZBY122222122222 0422101 0000 +M42021011111111822922700402231013113 +M520210111111118229119830515WTTTPTBZ912222212222250112121136070000 +M520210111111118229120150715WTTT0ZZB0122222122222 0422981 0000 +M520210111111118229120060106WTTT0BZ0Y122222122222 0422071 0000 +M520210111111118229120040701WTTT0B0YT122222222222 0422101 0000 +M42021011111111861122400401481993113 +M520210111111118611119910701WTTT0BB9T22212222222210112111122950000 +M520210111111118611120190501WTTT##WPP222222222222 0422981 0000 +M42021011111111874522700400671012113 +M520210111111118745119830503WTTT#B##B22222122222210112131118290000 +M520210111111118745120150103WTTT09@ZB222222122222 0422981 0000 +M520210111111118745120060519WTTTYTB0W222222122222 0422081 0000 +M42021011111111921120000404151163113 +M520210111111119211219860718WTTT##BZZ22122222222220112113200000000 +M520210111111119211119830107WTTTP0WWW22122212222220212112126000000 +M520210111111119211120180119WTTT##@WP222222122222 0422981 0000 +M520210111111119211120170126WTTTPP0T@221222122222 0422981 0000 +M520210111111119211120100721WTTTPYY@#221222122222 0422043 0000 +M42021011111111958620900406421163113 +M520210111111119586119991101WTTTPYTY#22212222222210112111112010150 +M520210111111119586120180701WTTTP#TYZ222122222222 0422981 0000 +M42021011111111993721700401121161123 +M520210111111119937119660613WTTT#WZ9Y12222222222220112112121900000 +M520210111111119937120110119WTTTPZ@Y0122222122222 0422021 0000 +M42021011111111993921400405841162113 +M520210111111119939119840815WTTT#000Z12222122222210112141130330000 +M520210111111119939120120513WTTT0W@ZT222221122222 0422021 0000 +M520210111111119939120090106WTTTPYP09122221122222 0422051 0000 +M42021011111112016321700405121161113 +M520210111111120163119970101WTTT#YW##12222222222210112081112480000 +M520210111111120163120170101WTTTY@WB9122222222222 0422981 0000 +M520210111111120163120150506WTTT0PT0#122221122222 0422981 0000 +M42021011111112027120000401371163113 +M520210111111120271119820126WTTT#9PW022222112222250112111159540000 +M520210111111120271120130701WTTT00@ZW222222122222 0422011 0000 +M520210111111120271120120618WTTT0PT#Z222221122222 0422021 0000 +M520210111111120271120100701WTTT0P#90222221222222 0422041 0000 +M42021011111112089621400400351163113 +M520210111111120896119670114WTTTPT@Y#22212222222220212112120090000 +M520210111111120896119610715WTTT0TYP022212212222220112121124290000 +M520210111111120896120110723WTTTP#B90222122222222 0422031 0000 +M520210111111120896120080623WTTT#0BP9222122122222 0422061 0000 +M520210111111120896120030126WTTT0PYP9222122222222 0422111 0000 +M42021011111112096421400401581013113 +M520210111111120964119840123WTTT0P9#Z22222122222210112111118580230 +M520210111111120964120200614WTTTPZZPP222221122222 0422981 0000 +M520210111111120964120190621WTTT0#9BT222221222222 0422981 0000 +M42021011111112099420600401981163113 +M520210111111120994119981103WTTT##P@Y22212222222210112121122840000 +M520210111111120994120200515WTTT0ZZ#P222122222222 0422981 0000 +M520210111111120994120180119WTTTYBPPB122222122222 0422981 0000 +M520210111111120994120160702WTTT#BYP0222122122222 0422981 0000 +M42021011111112119321100401691163113 +M520210111111121193119720115WTTTPTYBW12222222222210112121124570000 +M520210111111121193120060702WTTTP#9ZW122222222222 0422081 0000 +M520210111111121193120040607WTTTPWZP9122222122222 0422101 0000 +M42021011111112178320600402981122113 +M520210111111121783119880101WTTT0BYB912222222222210112121231600000 +M520210111111121783119860607WTTT#@Z@Y12222212222210212121200000238 +M520210111111121783120120108WTTT#9TZ@122222122222 0422021 0000 +M520210111111121783120081118WTTTP#T#T122222222222 0422061 0000 +M520210111111121783120060802WTTT09TYT122222222222 0422081 0000 +M42021011111112181321700404201163113 +M520210111111121813119870121WTTT09WT@12222122222210112131130600000 +M520210111111121813120180123WTTT00Y9Z222222122222 0422981 0000 +M520210111111121813120160509WTTTYYYTY122221122222 0422981 0000 +M520210111111121813120050118WTTTPYW@T222221222222 0422091 0000 +M42021011111112210221700400981162113 +M520210111111122102119860515WTTT#Z@BW12222222222220112121126690000 +M520210111111122102120180726WTTTYYWBW122222222222 0422981 0000 +M520210111111122102120161113WTTT#PZ@9122221122222 0422981 0000 +M520210111111122102120150712WTTTPYPZ@122221222222 0422981 0000 +M520210111111122102120120109WTTT#YBYZ122222222222 0422021 0000 +M520210111111122102120090121WTTTP@0YB122221222222 0422051 0000 +M520210111111122102120070107WTTTPW9BW122222222222 0422071 0000 +M520210111111122102120060115WTTT0TWY9122222222222 0422081 0000 +M42021011111112225521100406001161123 +M520210111111122255119830126WTTTP@W#012222222222210112112125110000 +M520210111111122255120080515WTTTY00TY122222122222 0422061 0000 +M520210111111122255120060713WTTT##0@9122222222222 0422081 0000 +M520210111111122255120040601WTTT0#YPY222222122222 0422102 0000 +M42021011111112292622700402231193113 +M520210111111122926119830103WTTT0990P22222122222250112111118330000 +M520210111111122926120160101WTTT0W0@W222222122222 0422981 0000 +M42021021111111182421700405821163113 +M520210211111111824119890626WTTTYBW9#12212222222210112141142910000 +M520210211111111824120190718WTTT#@TBP122122222222 0422981 0000 +M520210211111111824120180522WTTTY@0ZZ122122122222 0422981 0000 +M520210211111111824120120709WTTTPZZP9122222122222 0422021 0000 +M42021021111111225722700400681163113 +M520210211111112257119870116WTTTYPBWY22212122222210112121120800000 +M520210211111112257120100118WTTTPPWPT222221222222 0422041 0000 +M520210211111112257120081119WTTT00YTP222221122222 0422061 0000 +M42021021111111284321100406001161113 +M520210211111112843119800101WTTTYT0TZ22212222222210112121122100000 +M520210211111112843120060815WTTT0TT0Z222122222222 0422081 0000 +M520210211111112843120050713WTTTPZ0@W222122122222 0422091 0000 +M520210211111112843120030723WTTT0TBBT222122122222 0422111 0000 +M42021021111111337521400403641013113 +M520210211111113375119810119WTTT#99PT22222122222210112131116300000 +M520210211111113375120170714WTTTPBBYB222221122222 0422981 0000 +M42021021111111357420600402031162113 +M520210211111113574119910721WTTT0#WWT11111122222210112121119350000 +M520210211111113574120160119WTTTPTWYZ122222222222 0422981 0000 +M42021021111111362320600405471163113 +M520210211111113623119920622WTTTYB90Z12222222222210112121124710000 +M520210211111113623120110815WTTT0B0#B122222222222 0422031 0000 +M42021021111111379121100406001993113 +M520210211111113791119890626WTTT0TB9Y12222222222220112111124260000 +M520210211111113791120150108WTTTY9##Z122222222222 0422981 0000 +M520210211111113791120110109WTTTYTPYW122222122222 0422031 0000 +M42021021111111380421100405971161113 +M520210211111113804119900507WTTT#B0T912222222222210112131136390000 +M520210211111113804120100519WTTT0@YZ9122222222222 0422041 0000 +M520210211111113804120100519WTTTP9@T@122222122222 0422041 0000 +M520210211111113804120090723WTTTY@9YY122222222222 0422051 0000 +M42021021111111393420000400941991113 +M520210211111113934119870602WTTT#BB0P12222222222210112111114070000 +M520210211111113934120160107WTTTPPPB9122222122222 0422981 0000 +M520210211111113934120120719WTTT0YZTW122222122222 0422021 0000 +M520210211111113934120101121WTTTP9BY0122222122222 0422041 0000 +M42021021111111401722400401011013123 +M520210211111114017119891107WTTTPZBWT22222212222250112111130770000 +M520210211111114017120160101WTTT#09#Z222222222222 0422981 0000 +M520210211111114017120130108WTTTPZ#90222222122222 0422011 0000 +M42021021111111403020900401031163113 +M520210211111114030119840101WTTT0#WY022222222222220112112117330000 +M520210211111114030120040102WTTT0@TW@222222122222 0422102 0000 +M42021021111111434021400401581163113 +M520210211111114340119890701WTTT0YPBW22222122222210112111115770000 +M520210211111114340120200715WTTT0PZ0W222221222222 0422981 0000 +M520210211111114340120170119WTTTP90ZB222121122222 0422981 0000 +M520210211111114340120120809WTTTPB@@0222121122222 0422021 0000 +M42021021111111503521700402341163113 +M520210211111115035119940126WTTT0Z0YY12222222222210112111118960087 +M520210211111115035120181103WTTT0TPTW122221222222 0422981 0000 +M520210211111115035120140515WTTT#999Y222222222222 0422981 0000 +M42021021111111524422400404731161113 +M520210211111115244119880706WTTT#WTZZ22212222222210112131118120172 +M520210211111115244120150615WTTTPWZ0P222122222222 0422981 0000 +M520210211111115244120130716WTTT0ZW9P222122122222 0422011 0000 +M520210211111115244120100502WTTT09BTZ222122122222 0422041 0000 +M42021021111111548521700401121012113 +M520210211111115485119630101WTTT#@ZBZ22222122222250112121128640000 +M520210211111115485120030123WTTTPWWPP222221222222 0422111 0000 +M42021021111111602020000403951162113 +M520210211111116020119830521WTTTYB@T@12222222222210112111122380000 +M520210211111116020120180609WTTT09Z9B122222222222 0422981 0000 +M520210211111116020120140119WTTT#@YW0122222122222 0422981 0000 +M520210211111116020120110509WTTT#WY#T122221222222 0422031 0000 +M520210211111116020120080709WTTT0#BBY122222222222 0422061 0000 +M520210211111116020120070703WTTTYZTTW122222122222 0422071 0000 +M42021021111111613020000402591161113 +M520210211111116130119870703WTTTPYZWB12222222222210112121124670000 +M520210211111116130120120101WTTT0W9#Y122222222222 0422021 0000 +M520210211111116130120120101WTTT0@#TY122222122222 0422021 0000 +M520210211111116130120110712WTTTYP##W122222222222 0422031 0000 +M520210211111116130120060106WTTT0WBW#122222222222 0422081 0000 +M42021021111111621621100401461162113 +M520210211111116216119770801WTTTP#ZWW12222222222210112122120790000 +M520210211111116216120100601WTTT0@Z#Z222222222222 0422042 0000 +M42021021111111802520500402421163113 +M520210211111118025119890701WTTTYYTWB22222122222210112111120180000 +M520210211111118025120071106WTTT0@BB@222221222222 0422071 0000 +M42021021111111820221400400161163113 +M520210211111118202119930703WTTT#9PZ#22212222222230112131126050000 +M520210211111118202120160113WTTT##ZYZ222222122222 0422981 0000 +M520210211111118202120120726WTTT#WPWT222122222222 0422021 0000 +M42021021111111868420600405341163113 +M520210211111118684119890515WTTT0PZB@12222222222210112121116350000 +M520210211111118684120150121WTTT#P0@Y122221122221 0422981 0813 +M520210211111118684120120719WTTTPZP9#122222222222 0422021 0000 +M520210211111118684120100714WTTTPTB@@122222222222 0422041 0000 +M520210211111118684120080803WTTTYYB#W122222122221 0422061 0803 +M520210211111118684120060112WTTTPPT9#122222122222 0422081 0000 +M42021021111111885620300404901163113 +M520210211111118856119951112WTTTPT#9W22122222222210112111126000000 +M520210211111118856120160119WTTTYPZW0221222222222 0422981 0000 +M520210211111118856120130115WTTTP##WT221222222222 0422011 0000 +M42021021111111923722700401651162113 +M520210211111119237119900823WTTT#WTBP22222122222210112121122860000 +M520210211111119237120180119WTTTPP@BB222222222222 0422981 0000 +M520210211111119237120130101WTTT0W0WB222221222222 0422011 0000 +M520210211111119237120090821WTTTP#T90222221122222 0422051 0000 +M42021021111111928022700400681163113 +M520210211111119280119930803WTTTPT##T12222222222210112121117460000 +M520210211111119280120120509WTTT#@WTB122222222222 0422021 0000 +M520210211111119280120110601WTTT#@WPW122222222222 0422031 0000 +M42021021111111952720600402981161113 +M520210211111119527119890606WTTT0YYBW22212222222210112131122830000 +M520210211111119527120100601WTTT0Y@PP222122222222 0422041 0000 +M42021021111111973720900402151161113 +M520210211111119737119850114WTTTP@Z0#22222122222210112121116980000 +M520210211111119737120150115WTTT09PT0222122222222 0422981 0000 +M42021021111111996920900401881161123 +M520210211111119969119890606WTTTY@0YY12222222222210112121130160000 +M520210211111119969120170719WTTT#PBTW222222222222 0422981 0000 +M520210211111119969120090616WTTT00YBB122222222222 0422051 0000 +M42021021111112068521400400561013113 +M520210211111120685119800821WTTT0PBWT22222122222220212131133180000 +M520210211111120685119760601WTTTPYYY#22222112222210112111123150000 +M520210211111120685120190516WTTTY@YBT222222122222 0422981 0000 +M520210211111120685120060708WTTTY#T@W222221122222 0422081 0000 +M520210211111120685120040121WTTTPT#@Y222221122222 0422101 0000 +M42021021111112139921700402381013113 +M520210211111121399119860819WTTT0990B22222122222230112121129670000 +M520210211111121399120130506WTTT0Z9W0222222222222 0422011 0000 +M520210211111121399120060608WTTT#T@@P222222122222 0422081 0000 +M42021021111112145921700406831123113 +M520210211111121459119930101WTTT0PP#B12222122222210112121133530000 +M520210211111121459120190113WTTTYT@YP222222222222 0422981 0000 +M520210211111121459120180101WTTT#@TT#222222122222 0422981 0000 +M42021021111112165820600401981163113 +M520210211111121658119710501WTTT#0W0T12222212222210112111119150000 +M520210211111121658120030526WTTTYTW@B122221222222 0422111 0000 +M42021021111112234621100406001163113 +M520210211111122346119800118WTTT#PBT912222222222210112121116640399 +M520210211111122346120160621WTTT0#W9@122221122222 0422981 0000 +M520210211111122346120100118WTTTP@WBY122222122222 0422041 0000 +M520210211111122346120060522WTTTP@Y#9122222222222 0422081 0000 +M42021021111112247320000406951163123 +M520210211111122473220060715WTTT0B@#Y22222212222210412113200000000 +M520210211111122473219750502WTTT#B#0922222222222220212113200000000 +M520210211111122473119610101WTTTPZY9922222212222220112111121550000 +M520210211111122473120150726WTTTPTBPY222222222222 0422981 0000 +M520210211111122473120090519WTTTPBWZT222222122222 0422053 0000 +M520210211111122473120070721WTTTPPT0#222222222222 0422073 0000 +M42021031111111120420600405771162113 +M520210311111111204119920608WTTT#@W#912222222222210112111118180000 +M520210311111111204120171102WTTT#Z9TZ122222122222 0422981 0000 +M520210311111111204120130701WTTT#0ZP0122222122222 0422011 0000 +M42021031111111129122700403941013113 +M520210311111111291119900708WTTTYTTZ922212222222210112141128510000 +M520210311111111291120180521WTTTP##BT222122122222 0422981 0000 +M42021031111111132122700402231163113 +M520210311111111321119810613WTTTYW@@Y22212221222220112082120030295 +M520210311111111321120150115WTTTY@B@Z122222222222 0422981 0295 +M520210311111111321120100119WTTT0#T##222222222222 0422042 0295 +M520210311111111321120040126WTTT#B#ZT222222222222 0422102 0295 +M42021031111111229020900401231163113 +M520210311111112290119810721WTTT#0ZWY12222122222210112132128330000 +M520210311111112290120120101WTTT#BPZ0122221122222 0422022 0000 +M520210311111112290120090815WTTTPPP#@122221122222 0422051 0000 +M520210311111112290120060119WTTTYTY9T122221222222 0422081 0000 +M42021031111111316422700403941163113 +M520210311111113164119760702WTTT#00W922222222222210112112125010000 +M520210311111113164120160501WTTTYZ90Y222222122222 0422981 0000 +M520210311111113164120051108WTTT0@W9#222222222222 0422092 0000 +M42021031111111437120500406931163113 +M520210311111114371119921121WTTTP0PY022222122222210112111119960000 +M520210311111114371120200119WTTT#YW#T222222122222 0422981 0000 +M42021031111111451822700403941191113 +M520210311111114518119880108WTTTYWBBW22212222222210112121127570000 +M520210311111114518120180103WTTT#WB@Z122222122222 0422981 0000 +M520210311111114518120180103WTTTP@@P0122222122222 0422981 0000 +M520210311111114518120170722WTTTPW9BP222222122222 0422981 0000 +M42021031111111491620600405171163113 +M520210311111114916120000521WTTTY9BPW12222222222210112121115000128 +M520210311111114916120180102WTTT0BWTB122222122222 0422981 0000 +M42021031111111506520600401981163113 +M520210311111115065119860601WTTTP9TP922212222222210112111123520000 +M520210311111115065120100618WTTTY0@YP222122122222 0422041 0000 +M520210311111115065120040106WTTT0#@W#222122222222 0422101 0000 +M520210311111115065120030709WTTT0WP9Z222122122222 0422111 0000 +M42021031111111518820000405691163113 +M520210311111115188119960815WTTT0YWZZ22222222222210112131113350000 +M520210311111115188120160116WTTT#Y0YZ122221222222 0422981 0000 +M42021031111111573020000404271013113 +M520210311111115730119910801WTTTYT#0922122222222210112081132060000 +M520210311111115730120170721WTTT#TZPW222222222222 0422981 0000 +M520210311111115730120120716WTTT#ZP#W221222222222 0422021 0000 +M42021031111111625221100406001163113 +M520210311111116252119910803WTTTP0BY@12222222222210112111114300000 +M520210311111116252120190115WTTTYB9ZW122221222222 0422981 0000 +M42021031111111626121700405121993113 +M520210311111116261119990109WTTT0@T0P12222122222210112111121270000 +M520210311111116261120190721WTTT#ZZWB222222222222 0422981 0000 +M42021031111111678921700401121161113 +M520210311111116789119800626WTTTYP@#B22222222222210112121131940000 +M520210311111116789120130709WTTT0PTBY222222122222 0422011 0000 +M520210311111116789120130709WTTT0Z0B9222222122222 0422011 0000 +M520210311111116789120110101WTTT#BTBY222222222222 0422031 0000 +M42021031111111709520600405471991113 +M520210311111117095119851107WTTTPPB0Z12222122222210112121122230000 +M520210311111117095120040106WTTT#B9@P122221222222 0422111 0000 +M42021031111111724021700406571163113 +M520210311111117240119850123WTTTPTW#P22222222222210112112125100000 +M520210311111117240120160723WTTTP9BW@222222122222 0422981 0000 +M520210311111117240120140515WTTTYW@ZP222222222222 0422981 0000 +M42021031111111733821100403751163113 +M520210311111117338119780108WTTT#@YYP22222122222210112121129270000 +M520210311111117338120080619WTTT0T#PY222222222222 0422061 0000 +M42021031111111761521100401461163113 +M520210311111117615119930619WTTTY0T@Y22212222222210112111124050000 +M520210311111117615120120107WTTT#ZTZW222122222222 0422021 0000 +M520210311111117615120110622WTTTP#WPY222122222222 0422031 0000 +M42021031111111848821400406481163113 +M520210311111118488119770622WTTT0ZB@922222122222210112111120790000 +M520210311111118488120090121WTTT0BY#0222222122222 0422051 0000 +M520210311111118488120050121WTTT#BP#0222221122222 0422091 0000 +M42021031111111895721400400351133113 +M520210311111118957119910602WTTT0@BPW22212222222210112131130000000 +M520210311111118957120160113WTTTPZZYY222222222222 0422981 0000 +M520210311111118957120150506WTTT0@P#9222122122222 0422981 0000 +M42021031111111927420600401421163113 +M520210311111119274119910113WTTTYB@#912222222222210112111116090000 +M520210311111119274120150715WTTTPB0@Z122222222222 0422981 0000 +M520210311111119274120110101WTTTY#@BW122222122222 0422041 0000 +M42021031111111978620300404901163123 +M520210311111119786120000626WTTT#@0Y922222122222210112121139580050 +M520210311111119786120180622WTTTYWZYW222222122222 0422981 0000 +M42021031111112009920000406201163113 +M520210311111120099119940114WTTTPY9BW22222122222210112111120480000 +M520210311111120099120200501WTTT#@P#B222222122222 0422981 0000 +M520210311111120099120160523WTTTPZ#BY222221222222 0422981 0000 +M520210311111120099120140119WTTT#9T#Z222221122222 0422011 0080 +M42021031111112028720000404551993113 +M520210311111120287119880123WTTT#T@PP22222122222230112111146581750 +M520210311111120287120170801WTTT#TW09122222222222 0422981 0000 +M520210311111120287120130103WTTTYPTBZ122222222222 0422011 0000 +M42021031111112152921100406541162113 +M520210311111121529119711119WTTT#@@YZ12222222222210112121128100000 +M520210311111121529120071119WTTTPTZ#9222122222222 0422071 0000 +M520210311111121529120030115WTTTP0TPT222122222222 0422111 0000 +M42021031111112160822700402581162113 +M520210311111121608119780107WTTTYPB@B12212122222210112111123470000 +M520210311111121608120030621WTTT0@99Z122222122222 0422111 0000 +M42021031111112182621100401181162113 +M520210311111121826119880808WTTTY@PPP22222222222220112121121340000 +M520210311111121826120150509WTTT0ZZW0222122222222 0422981 0000 +M520210311111121826120080621WTTT#PP90222122222222 0422061 0000 +M42021031111112189420000404271161123 +M520210311111121894119810608WTTT0WYBW22122222222250112112118420000 +M520210311111121894120190115WTTTBT@B#221222122222 0422981 0000 +M520210311111121894120120802WTTT#TTW@221222122222 0422021 0000 +M520210311111121894120110706WTTT#ZZY9221222122222 0422031 0000 +M42021031111112189520900404421163113 +M520210311111121895119901115WTTTPZ0ZP22212222222210112112117000000 +M520210311111121895120181113WTTT0@YW9222122122222 0422981 0000 +M520210311111121895120151126WTTT#TZ@B222122122222 0422981 0000 +M42021031111112189821100406001161113 +M520210311111121898119881114WTTT#YBZW12222222222210112121126890000 +M520210311111121898120120519WTTT#@#WZ222222122222 0422021 0000 +M520210311111121898120110115WTTTPBPZT222222122222 0422031 0000 +M520210311111121898120091107WTTT0ZBWB222222122222 0422051 0000 +M520210311111121898120080115WTTTYZZWZ222222122222 0422061 0000 +M520210311111121898120070126WTTTP99BW122222222222 0422081 0000 +M42021031111112197122700403241163123 +M520210311111121971119950509WTTT#@W#B22212222222210112112119590000 +M520210311111121971120170119WTTTP#@BT222122222222 0422981 0000 +M42021031111112222820900402921161123 +M520210311111122228119770709WTTT##Z@T12222222222210112112100000368 +M520210311111122228120160718WTTTYWZYY122222222222 0422981 0000 +M520210311111122228120031122WTTTY00B#122222222222 0422111 0000 +TRAILER0008941 diff --git a/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM4.MS24 b/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM4.MS24 new file mode 100644 index 000000000..1393729b8 --- /dev/null +++ b/tdrs-backend/tdpservice/parsers/test/data/ADS.E2J.NDM4.MS24 @@ -0,0 +1,3 @@ +HEADER20184S24 SSP1 N +M720184101000176900013100001111102000074800007670000768103001335200139310014077200000120200011890001229 +TRAILER0000001 diff --git a/tdrs-backend/tdpservice/parsers/test/factories.py b/tdrs-backend/tdpservice/parsers/test/factories.py index b12d3c5ad..63a6d237d 100644 --- a/tdrs-backend/tdpservice/parsers/test/factories.py +++ b/tdrs-backend/tdpservice/parsers/test/factories.py @@ -349,3 +349,39 @@ class Meta: TDRS_SECTION_IND = '1' STRATUM = '01' FAMILIES_MONTH = 1 + +class SSPM5Factory(factory.django.DjangoModelFactory): + """Generate SSP M5 record for testing.""" + + class Meta: + """Hardcoded meta data for SSP_M5.""" + + model = "search_indexes.SSP_M5" + + RPT_MONTH_YEAR = 1 + CASE_NUMBER = '1' + + FAMILY_AFFILIATION = 1 + DATE_OF_BIRTH = '11111111' + SSN = '123456789' + RACE_HISPANIC = 1 + RACE_AMER_INDIAN = 1 + RACE_ASIAN = 1 + RACE_BLACK = 1 + RACE_HAWAIIAN = 1 + RACE_WHITE = 1 + GENDER = 1 + REC_OASDI_INSURANCE = 1 + REC_FEDERAL_DISABILITY = 1 + REC_AID_TOTALLY_DISABLED = 1 + REC_AID_AGED_BLIND = 1 + REC_SSI = 1 + MARITAL_STATUS = 1 + RELATIONSHIP_HOH = '01' + PARENT_MINOR_CHILD = 1 + NEEDS_OF_PREGNANT_WOMAN = 1 + EDUCATION_LEVEL = '01' + CITIZENSHIP_STATUS = 1 + EMPLOYMENT_STATUS = 1 + AMOUNT_EARNED_INCOME = '1000' + AMOUNT_UNEARNED_INCOME = '1000' diff --git a/tdrs-backend/tdpservice/parsers/test/test_parse.py b/tdrs-backend/tdpservice/parsers/test/test_parse.py index 764de2990..2849b15ab 100644 --- a/tdrs-backend/tdpservice/parsers/test/test_parse.py +++ b/tdrs-backend/tdpservice/parsers/test/test_parse.py @@ -5,7 +5,7 @@ from .. import parse from ..models import ParserError, ParserErrorCategoryChoices, DataFileSummary from tdpservice.search_indexes.models.tanf import TANF_T1, TANF_T2, TANF_T3, TANF_T4, TANF_T5, TANF_T6, TANF_T7 -from tdpservice.search_indexes.models.ssp import SSP_M1, SSP_M2, SSP_M3, SSP_M6 +from tdpservice.search_indexes.models.ssp import SSP_M1, SSP_M2, SSP_M3, SSP_M4, SSP_M5, SSP_M6, SSP_M7 from .factories import DataFileSummaryFactory from tdpservice.data_files.models import DataFile from .. import schema_defs, util @@ -469,6 +469,14 @@ def test_parse_ssp_section1_datafile(ssp_section1_datafile): parse.parse_datafile(ssp_section1_datafile) parser_errors = ParserError.objects.filter(file=ssp_section1_datafile) + + err = parser_errors.first() + + assert err.row_number == 2 + assert err.error_type == ParserErrorCategoryChoices.FIELD_VALUE + assert err.error_message == '3 is not larger or equal to 1 and smaller or equal to 2.' + assert err.content_type is not None + assert err.object_id is not None assert parser_errors.count() == 19846 assert SSP_M1.objects.count() == expected_m1_record_count @@ -561,6 +569,7 @@ def super_big_s1_file(stt_user, stt): @pytest.mark.django_db() +@pytest.mark.skip(reason="long runtime") # big_files def test_parse_super_big_s1_file(super_big_s1_file): """Test parsing of super_big_s1_file and validate all T1/T2/T3 records are created.""" parse.parse_datafile(super_big_s1_file) @@ -909,13 +918,54 @@ def test_parse_tanf_section4_file(tanf_section4_file): assert first.FAMILIES_MONTH == 274 assert sixth.FAMILIES_MONTH == 499 +@pytest.fixture +def ssp_section4_file(stt_user, stt): + """Fixture for ADS.E2J.NDM4.MS24.""" + return util.create_test_datafile('ADS.E2J.NDM4.MS24', stt_user, stt, "SSP Stratum Data") + +@pytest.mark.django_db() +def test_parse_ssp_section4_file(ssp_section4_file): + """Test parsing SSP Section 4 submission.""" + parse.parse_datafile(ssp_section4_file) + + m7_objs = SSP_M7.objects.all().order_by('FAMILIES_MONTH') + + assert m7_objs.count() == 12 + + first = m7_objs.first() + assert first.RPT_MONTH_YEAR == 201810 + assert first.FAMILIES_MONTH == 748 + +@pytest.fixture +def ssp_section2_file(stt_user, stt): + """Fixture for ADS.E2J.FTP4.TS06.""" + return util.create_test_datafile('ADS.E2J.NDM2.MS24', stt_user, stt, 'SSP Closed Case Data') + +@pytest.mark.django_db() +def test_parse_ssp_section2_file(ssp_section2_file): + """Test parsing SSP Section 2 submission.""" + parse.parse_datafile(ssp_section2_file) + + m4_objs = SSP_M4.objects.all().order_by('id') + m5_objs = SSP_M5.objects.all().order_by('AMOUNT_EARNED_INCOME') + + assert SSP_M4.objects.all().count() == 2205 + assert SSP_M5.objects.all().count() == 6736 + + m4 = m4_objs.first() + assert m4.DISPOSITION == 1 + assert m4.REC_SUB_CC == 3 + + m5 = m5_objs.first() + assert m5.FAMILY_AFFILIATION == 1 + assert m5.AMOUNT_EARNED_INCOME == '0000' + assert m5.AMOUNT_UNEARNED_INCOME == '0000' @pytest.fixture def ssp_section3_file(stt_user, stt): """Fixture for ADS.E2J.FTP3.TS06.""" return util.create_test_datafile('ADS.E2J.NDM3.MS24', stt_user, stt, "SSP Aggregate Data") - @pytest.mark.django_db() def test_parse_ssp_section3_file(ssp_section3_file): """Test parsing TANF Section 3 submission.""" diff --git a/tdrs-backend/tdpservice/parsers/test/test_util.py b/tdrs-backend/tdpservice/parsers/test/test_util.py index 03997597a..2736eab55 100644 --- a/tdrs-backend/tdpservice/parsers/test/test_util.py +++ b/tdrs-backend/tdpservice/parsers/test/test_util.py @@ -1,9 +1,9 @@ """Test the methods of RowSchema to ensure parsing and validation work in all individual cases.""" import pytest -from ..fields import Field, value_is_empty +from ..fields import Field from ..row_schema import RowSchema -from ..util import SchemaManager +from ..util import SchemaManager, make_generate_parser_error, create_test_datafile def passing_validator(): @@ -15,6 +15,14 @@ def failing_validator(): """Fake validator that always returns invalid.""" return lambda _: (False, 'Value is not valid.') +def passing_postparsing_validator(): + """Fake validator that always returns valid.""" + return lambda _: (True, None, []) + + +def failing_postparsing_validator(): + """Fake validator that always returns invalid.""" + return lambda _: (False, 'Value is not valid.', []) def error_func(schema, error_category, error_message, record, field): """Fake error func that returns an error_message.""" @@ -56,11 +64,11 @@ def test_parse_line_parses_line_from_schema_to_dict(): schema = RowSchema( model=dict, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=3), - Field(item=2, name='second', type='string', startIndex=3, endIndex=4), - Field(item=3, name='third', type='string', startIndex=4, endIndex=5), - Field(item=4, name='fourth', type='number', startIndex=5, endIndex=7), - Field(item=5, name='fifth', type='number', startIndex=7, endIndex=8), + Field(item=1, name='first', friendly_name='first', type='string', startIndex=0, endIndex=3), + Field(item=2, name='second', friendly_name='second', type='string', startIndex=3, endIndex=4), + Field(item=3, name='third', friendly_name='third', type='string', startIndex=4, endIndex=5), + Field(item=4, name='fourth', friendly_name='fourth', type='number', startIndex=5, endIndex=7), + Field(item=5, name='fifth', friendly_name='fifth', type='number', startIndex=7, endIndex=8), ] ) @@ -86,11 +94,11 @@ class TestModel: schema = RowSchema( model=TestModel, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=3), - Field(item=2, name='second', type='string', startIndex=3, endIndex=4), - Field(item=3, name='third', type='string', startIndex=4, endIndex=5), - Field(item=4, name='fourth', type='number', startIndex=5, endIndex=7), - Field(item=5, name='fifth', type='number', startIndex=7, endIndex=8), + Field(item=1, name='first', friendly_name='first', type='string', startIndex=0, endIndex=3), + Field(item=2, name='second', friendly_name='second', type='string', startIndex=3, endIndex=4), + Field(item=3, name='third', friendly_name='third', type='string', startIndex=4, endIndex=5), + Field(item=4, name='fourth', friendly_name='fourth', type='number', startIndex=5, endIndex=7), + Field(item=5, name='fifth', friendly_name='fifth', type='number', startIndex=7, endIndex=8), ] ) @@ -113,13 +121,13 @@ def test_run_field_validators_returns_valid_with_dict(): schema = RowSchema( model=dict, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=3, validators=[ + Field(item=1, name='first', friendly_name='first', type='string', startIndex=0, endIndex=3, validators=[ passing_validator() ]), - Field(item=2, name='second', type='string', startIndex=3, endIndex=4, validators=[ + Field(item=2, name='second', friendly_name='second', type='string', startIndex=3, endIndex=4, validators=[ passing_validator() ]), - Field(item=3, name='third', type='string', startIndex=4, endIndex=5, validators=[ + Field(item=3, name='third', friendly_name='third', type='string', startIndex=4, endIndex=5, validators=[ passing_validator() ]), ] @@ -145,13 +153,13 @@ class TestModel: schema = RowSchema( model=TestModel, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=3, validators=[ + Field(item=1, name='first', friendly_name='first', type='string', startIndex=0, endIndex=3, validators=[ passing_validator() ]), - Field(item=2, name='second', type='string', startIndex=3, endIndex=4, validators=[ + Field(item=2, name='second', friendly_name='second', type='string', startIndex=3, endIndex=4, validators=[ passing_validator() ]), - Field(item=3, name='third', type='string', startIndex=4, endIndex=5, validators=[ + Field(item=3, name='third', friendly_name='third', type='string', startIndex=4, endIndex=5, validators=[ passing_validator() ]), ] @@ -172,14 +180,14 @@ def test_run_field_validators_returns_invalid_with_dict(): schema = RowSchema( model=dict, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=3, validators=[ + Field(item=1, name='first', friendly_name='first', type='string', startIndex=0, endIndex=3, validators=[ passing_validator(), failing_validator() ]), - Field(item=2, name='second', type='string', startIndex=3, endIndex=4, validators=[ + Field(item=2, name='second', friendly_name='second', type='string', startIndex=3, endIndex=4, validators=[ passing_validator() ]), - Field(item=3, name='third', type='string', startIndex=4, endIndex=5, validators=[ + Field(item=3, name='third', friendly_name='third', type='string', startIndex=4, endIndex=5, validators=[ passing_validator() ]), ] @@ -205,14 +213,14 @@ class TestModel: schema = RowSchema( model=TestModel, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=3, validators=[ + Field(item=1, name='first', friendly_name='first', type='string', startIndex=0, endIndex=3, validators=[ passing_validator(), failing_validator() ]), - Field(item=2, name='second', type='string', startIndex=3, endIndex=4, validators=[ + Field(item=2, name='second', friendly_name='second', type='string', startIndex=3, endIndex=4, validators=[ passing_validator() ]), - Field(item=3, name='third', type='string', startIndex=4, endIndex=5, validators=[ + Field(item=3, name='third', friendly_name='third', type='string', startIndex=4, endIndex=5, validators=[ passing_validator() ]), ] @@ -224,6 +232,7 @@ class TestModel: @pytest.mark.parametrize('first,second', [ + ('', ''), (' ', ' '), ('#', '##'), (None, None), @@ -237,12 +246,30 @@ def test_field_validators_blank_and_required_returns_error(first, second): schema = RowSchema( model=dict, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=1, required=True, validators=[ - passing_validator(), - ]), - Field(item=2, name='second', type='string', startIndex=1, endIndex=3, required=True, validators=[ - passing_validator(), - ]), + Field( + item=1, + name='first', + friendly_name='first', + type='string', + startIndex=0, + endIndex=1, + required=True, + validators=[ + passing_validator(), + ] + ), + Field( + item=2, + name='second', + friendly_name='second', + type='string', + startIndex=1, + endIndex=3, + required=True, + validators=[ + passing_validator(), + ] + ), ] ) @@ -254,12 +281,12 @@ def test_field_validators_blank_and_required_returns_error(first, second): ] -@pytest.mark.parametrize('first', [ - (' '), - ('#'), - (None), +@pytest.mark.parametrize('first, expected_valid, expected_errors', [ + (' ', True, []), + ('####', False, ['Value is not valid.']), + (None, True, []), ]) -def test_field_validators_blank_and_not_required_returns_valid(first): +def test_field_validators_blank_and_not_required_returns_valid(first, expected_valid, expected_errors): """Test not required field returns valid if value not provided (blank).""" instance = { 'first': first, @@ -267,16 +294,25 @@ def test_field_validators_blank_and_not_required_returns_valid(first): schema = RowSchema( model=dict, fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=1, required=False, validators=[ - passing_validator(), - failing_validator() - ]), + Field( + item=1, + name='first', + friendly_name='first', + type='string', + startIndex=0, + endIndex=3, + required=False, + validators=[ + passing_validator(), + failing_validator() + ] + ), ] ) is_valid, errors = schema.run_field_validators(instance, error_func) - assert is_valid is True - assert errors == [] + assert is_valid is expected_valid + assert errors == expected_errors def test_run_postparsing_validators_returns_valid(): @@ -284,7 +320,7 @@ def test_run_postparsing_validators_returns_valid(): instance = {} schema = RowSchema( postparsing_validators=[ - passing_validator() + passing_postparsing_validator() ] ) @@ -298,8 +334,8 @@ def test_run_postparsing_validators_returns_invalid_and_errors(): instance = {} schema = RowSchema( postparsing_validators=[ - passing_validator(), - failing_validator() + passing_postparsing_validator(), + failing_postparsing_validator() ] ) @@ -308,33 +344,6 @@ def test_run_postparsing_validators_returns_invalid_and_errors(): assert errors == ['Value is not valid.'] -@pytest.mark.parametrize("value,length", [ - (None, 0), - (None, 10), - (' ', 5), - ('###', 3) -]) -def test_value_is_empty_returns_true(value, length): - """Test value_is_empty returns valid.""" - result = value_is_empty(value, length) - assert result is True - - -@pytest.mark.parametrize("value,length", [ - (0, 1), - (1, 1), - (10, 2), - ('0', 1), - ('0000', 4), - ('1 ', 5), - ('##3', 3) -]) -def test_value_is_empty_returns_false(value, length): - """Test value_is_empty returns invalid.""" - result = value_is_empty(value, length) - assert result is False - - def test_multi_record_schema_parses_and_validates(): """Test SchemaManager parse_and_validate.""" line = '12345' @@ -346,12 +355,18 @@ def test_multi_record_schema_parses_and_validates(): passing_validator() ], postparsing_validators=[ - failing_validator() + failing_postparsing_validator() ], fields=[ - Field(item=1, name='first', type='string', startIndex=0, endIndex=3, validators=[ - passing_validator() - ]), + Field( + item=1, + name='first', + friendly_name='first', + type='string', + startIndex=0, + endIndex=3, + validators=[passing_validator()] + ), ] ), RowSchema( @@ -360,12 +375,17 @@ def test_multi_record_schema_parses_and_validates(): passing_validator() ], postparsing_validators=[ - passing_validator() + passing_postparsing_validator() ], fields=[ - Field(item=2, name='second', type='string', startIndex=2, endIndex=4, validators=[ - passing_validator() - ]), + Field( + item=2, + name='second', + friendly_name='first', + type='string', + startIndex=2, + endIndex=4, + validators=[passing_validator()]), ] ), RowSchema( @@ -374,12 +394,18 @@ def test_multi_record_schema_parses_and_validates(): failing_validator() ], postparsing_validators=[ - passing_validator() + passing_postparsing_validator() ], fields=[ - Field(item=3, name='third', type='string', startIndex=4, endIndex=5, validators=[ - passing_validator() - ]), + Field( + item=3, + name='third', + friendly_name='first', + type='string', + startIndex=4, + endIndex=5, + validators=[passing_validator()] + ), ] ), RowSchema( @@ -388,12 +414,18 @@ def test_multi_record_schema_parses_and_validates(): passing_validator() ], postparsing_validators=[ - passing_validator() + passing_postparsing_validator() ], fields=[ - Field(item=4, name='fourth', type='string', startIndex=4, endIndex=5, validators=[ - failing_validator() - ]), + Field( + item=4, + name='fourth', + friendly_name='first', + type='string', + startIndex=4, + endIndex=5, + validators=[failing_validator()] + ), ] ) ] @@ -421,3 +453,53 @@ def test_multi_record_schema_parses_and_validates(): assert r3_record == {'fourth': '5'} assert r3_is_valid is False assert r3_errors == ['Value is not valid.'] + +@pytest.fixture +def test_datafile_empty_file(stt_user, stt): + """Fixture for small_correct_file.""" + return create_test_datafile('empty_file', stt_user, stt) + +@pytest.mark.django_db() +def test_run_postparsing_validators_returns_frinedly_fieldnames(test_datafile_empty_file): + """Test run_postparsing_validators executes all postparsing_validators provided in schema.""" + + def postparse_validator(): + """Fake validator that always returns valid.""" + return lambda _: (False, "an Error", ["FIRST", "SECOND"]) + + instance = {} + schema = RowSchema( + model=dict, + postparsing_validators=[ + postparse_validator() + ], + fields=[ + Field( + item=1, + name='FIRST', + friendly_name='first', + type='string', + startIndex=0, + endIndex=3, + required=False, + validators=[] + ), + Field( + item=2, + name='SECOND', + friendly_name='second', + type='string', + startIndex=3, + endIndex=4, + required=False, + validators=[] + ), + ] + ) + + is_valid, errors = schema.run_postparsing_validators(instance, make_generate_parser_error( + test_datafile_empty_file, 10 + )) + assert is_valid is False + assert errors[0].fields_json == {'friendly_name': {'FIRST': 'first', 'SECOND': 'second'}} + assert errors[0].error_message == "an Error" diff --git a/tdrs-backend/tdpservice/parsers/test/test_validators.py b/tdrs-backend/tdpservice/parsers/test/test_validators.py index ecca06561..dc65d2745 100644 --- a/tdrs-backend/tdpservice/parsers/test/test_validators.py +++ b/tdrs-backend/tdpservice/parsers/test/test_validators.py @@ -3,6 +3,36 @@ import pytest from .. import validators from tdpservice.parsers.test.factories import TanfT1Factory, TanfT2Factory, TanfT3Factory, TanfT5Factory, TanfT6Factory +from tdpservice.parsers.test.factories import SSPM5Factory + + +@pytest.mark.parametrize("value,length", [ + (None, 0), + (None, 10), + (' ', 5), + ('###', 3), + ('', 0), + ('', 10), +]) +def test_value_is_empty_returns_true(value, length): + """Test value_is_empty returns valid.""" + result = validators.value_is_empty(value, length) + assert result is True + + +@pytest.mark.parametrize("value,length", [ + (0, 1), + (1, 1), + (10, 2), + ('0', 1), + ('0000', 4), + ('1 ', 5), + ('##3', 3), +]) +def test_value_is_empty_returns_false(value, length): + """Test value_is_empty returns invalid.""" + result = validators.value_is_empty(value, length) + assert result is False def test_or_validators(): @@ -38,14 +68,14 @@ def test_if_validators(): condition_field="Field1", condition_function=validators.matches('1'), result_field="Field2", result_function=validators.matches('2'), ) - assert validator(value) == (True, None) + assert validator(value) == (True, None, ['Field1', 'Field2']) validator = validator = validators.if_then_validator( condition_field="Field1", condition_function=validators.matches('1'), result_field="Field2", result_function=validators.matches('1'), ) result = validator(value) - assert result == (False, 'if Field1 :1 validator1 passed then Field2 2 does not match 1.') + assert result == (False, 'if Field1 :1 validator1 passed then Field2 2 does not match 1.', ['Field1', 'Field2']) def test_and_validators(): @@ -64,10 +94,11 @@ def test_validate__FAM_AFF__SSN(): } result = validators.validate__FAM_AFF__SSN()(instance) assert result == (False, - 'If FAMILY_AFFILIATION ==2 and CITIZENSHIP_STATUS==1 or 2, then SSN != 000000000 -- 999999999.') + 'If FAMILY_AFFILIATION ==2 and CITIZENSHIP_STATUS==1 or 2, then SSN != 000000000 -- 999999999.', + ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS', 'SSN']) instance['SSN'] = '1'*8 + '0' result = validators.validate__FAM_AFF__SSN()(instance) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS', 'SSN']) def test_dateYearIsLargerThan(): """Test `dateYearIsLargerThan` gives a valid result.""" @@ -294,6 +325,17 @@ def test_notEmpty_returns_invalid_substring(): assert is_valid is False assert error == "111 333 contains blanks between positions 3 and 5." + +def test_notEmpty_returns_nonexistent_substring(): + """Test `notEmpty` gives an invalid result for a nonexistent substring.""" + value = '111 333' + + validator = validators.notEmpty(start=10, end=12) + is_valid, error = validator(value) + + assert is_valid is False + assert error == "111 333 contains blanks between positions 10 and 12." + @pytest.mark.usefixtures('db') class TestCat3ValidatorsBase: """A base test class for tests that evaluate category three validators.""" @@ -324,12 +366,13 @@ def test_validate_food_stamps(self, record): record.RECEIVES_FOOD_STAMPS = 1 record.AMT_FOOD_STAMP_ASSISTANCE = 1 result = val(record) - assert result == (True, None) + assert result == (True, None, ['RECEIVES_FOOD_STAMPS', 'AMT_FOOD_STAMP_ASSISTANCE']) record.AMT_FOOD_STAMP_ASSISTANCE = 0 result = val(record) assert result == (False, 'if RECEIVES_FOOD_STAMPS :1 validator1 passed then ' - + 'AMT_FOOD_STAMP_ASSISTANCE 0 is not larger than 0.') + + 'AMT_FOOD_STAMP_ASSISTANCE 0 is not larger than 0.', + ['RECEIVES_FOOD_STAMPS', 'AMT_FOOD_STAMP_ASSISTANCE']) def test_validate_subsidized_child_care(self, record): """Test cat3 validator for subsidized child care.""" @@ -340,12 +383,13 @@ def test_validate_subsidized_child_care(self, record): record.RECEIVES_SUB_CC = 4 record.AMT_SUB_CC = 1 result = val(record) - assert result == (True, None) + assert result == (True, None, ['RECEIVES_SUB_CC', 'AMT_SUB_CC']) record.RECEIVES_SUB_CC = 4 record.AMT_SUB_CC = 0 result = val(record) - assert result == (False, 'if RECEIVES_SUB_CC :4 validator1 passed then AMT_SUB_CC 0 is not larger than 0.') + assert result == (False, 'if RECEIVES_SUB_CC :4 validator1 passed then AMT_SUB_CC 0 is not larger than 0.', + ['RECEIVES_SUB_CC', 'AMT_SUB_CC']) def test_validate_cash_amount_and_nbr_months(self, record): """Test cat3 validator for cash amount and number of months.""" @@ -354,12 +398,13 @@ def test_validate_cash_amount_and_nbr_months(self, record): result_field='NBR_MONTHS', result_function=validators.isLargerThan(0), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['CASH_AMOUNT', 'NBR_MONTHS']) record.CASH_AMOUNT = 1 record.NBR_MONTHS = -1 result = val(record) - assert result == (False, 'if CASH_AMOUNT :1 validator1 passed then NBR_MONTHS -1 is not larger than 0.') + assert result == (False, 'if CASH_AMOUNT :1 validator1 passed then NBR_MONTHS -1 is not larger than 0.', + ['CASH_AMOUNT', 'NBR_MONTHS']) def test_validate_child_care(self, record): """Test cat3 validator for child care.""" @@ -368,12 +413,13 @@ def test_validate_child_care(self, record): result_field='CHILDREN_COVERED', result_function=validators.isLargerThan(0), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['CC_AMOUNT', 'CHILDREN_COVERED']) record.CC_AMOUNT = 1 record.CHILDREN_COVERED = -1 result = val(record) - assert result == (False, 'if CC_AMOUNT :1 validator1 passed then CHILDREN_COVERED -1 is not larger than 0.') + assert result == (False, 'if CC_AMOUNT :1 validator1 passed then CHILDREN_COVERED -1 is not larger than 0.', + ['CC_AMOUNT', 'CHILDREN_COVERED']) val = validators.if_then_validator( condition_field='CC_AMOUNT', condition_function=validators.isLargerThan(0), @@ -382,7 +428,8 @@ def test_validate_child_care(self, record): record.CC_AMOUNT = 10 record.CC_NBR_MONTHS = -1 result = val(record) - assert result == (False, 'if CC_AMOUNT :10 validator1 passed then CC_NBR_MONTHS -1 is not larger than 0.') + assert result == (False, 'if CC_AMOUNT :10 validator1 passed then CC_NBR_MONTHS -1 is not larger than 0.', + ['CC_AMOUNT', 'CC_NBR_MONTHS']) def test_validate_transportation(self, record): """Test cat3 validator for transportation.""" @@ -391,13 +438,14 @@ def test_validate_transportation(self, record): result_field='TRANSP_NBR_MONTHS', result_function=validators.isLargerThan(0), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['TRANSP_AMOUNT', 'TRANSP_NBR_MONTHS']) record.TRANSP_AMOUNT = 1 record.TRANSP_NBR_MONTHS = -1 result = val(record) assert result == (False, 'if TRANSP_AMOUNT :1 validator1 passed then ' - + 'TRANSP_NBR_MONTHS -1 is not larger than 0.') + + 'TRANSP_NBR_MONTHS -1 is not larger than 0.', + ['TRANSP_AMOUNT', 'TRANSP_NBR_MONTHS']) def test_validate_transitional_services(self, record): """Test cat3 validator for transitional services.""" @@ -406,13 +454,14 @@ def test_validate_transitional_services(self, record): result_field='TRANSITION_NBR_MONTHS', result_function=validators.isLargerThan(0), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['TRANSITION_SERVICES_AMOUNT', 'TRANSITION_NBR_MONTHS']) record.TRANSITION_SERVICES_AMOUNT = 1 record.TRANSITION_NBR_MONTHS = -1 result = val(record) assert result == (False, 'if TRANSITION_SERVICES_AMOUNT :1 validator1 passed then ' - + 'TRANSITION_NBR_MONTHS -1 is not larger than 0.') + + 'TRANSITION_NBR_MONTHS -1 is not larger than 0.', + ['TRANSITION_SERVICES_AMOUNT', 'TRANSITION_NBR_MONTHS']) def test_validate_other(self, record): """Test cat3 validator for other.""" @@ -421,12 +470,13 @@ def test_validate_other(self, record): result_field='OTHER_NBR_MONTHS', result_function=validators.isLargerThan(0), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['OTHER_AMOUNT', 'OTHER_NBR_MONTHS']) record.OTHER_AMOUNT = 1 record.OTHER_NBR_MONTHS = -1 result = val(record) - assert result == (False, 'if OTHER_AMOUNT :1 validator1 passed then OTHER_NBR_MONTHS -1 is not larger than 0.') + assert result == (False, 'if OTHER_AMOUNT :1 validator1 passed then OTHER_NBR_MONTHS -1 is not larger than 0.', + ['OTHER_AMOUNT', 'OTHER_NBR_MONTHS']) def test_validate_reasons_for_amount_of_assistance_reductions(self, record): """Test cat3 validator for assistance reductions.""" @@ -436,20 +486,22 @@ def test_validate_reasons_for_amount_of_assistance_reductions(self, record): ) record.SANC_REDUCTION_AMT = 1 result = val(record) - assert result == (True, None) + assert result == (True, None, ['SANC_REDUCTION_AMT', 'WORK_REQ_SANCTION']) record.SANC_REDUCTION_AMT = 10 record.WORK_REQ_SANCTION = -1 result = val(record) assert result == (False, 'if SANC_REDUCTION_AMT :10 validator1 passed then ' - + 'WORK_REQ_SANCTION -1 is not in (1, 2).') + + 'WORK_REQ_SANCTION -1 is not in (1, 2).', + ['SANC_REDUCTION_AMT', 'WORK_REQ_SANCTION']) def test_validate_sum(self, record): """Test cat3 validator for sum of cash fields.""" val = validators.sumIsLarger(("AMT_FOOD_STAMP_ASSISTANCE", "AMT_SUB_CC", "CC_AMOUNT", "TRANSP_AMOUNT", "TRANSITION_SERVICES_AMOUNT", "OTHER_AMOUNT"), 0) result = val(record) - assert result == (True, None) + assert result == (True, None, ['AMT_FOOD_STAMP_ASSISTANCE', 'AMT_SUB_CC', 'CC_AMOUNT', 'TRANSP_AMOUNT', + 'TRANSITION_SERVICES_AMOUNT', 'OTHER_AMOUNT']) record.AMT_FOOD_STAMP_ASSISTANCE = 0 record.AMT_SUB_CC = 0 @@ -459,7 +511,9 @@ def test_validate_sum(self, record): record.OTHER_AMOUNT = 0 result = val(record) assert result == (False, "The sum of ('AMT_FOOD_STAMP_ASSISTANCE', 'AMT_SUB_CC', 'CC_AMOUNT', " + - "'TRANSP_AMOUNT', 'TRANSITION_SERVICES_AMOUNT', 'OTHER_AMOUNT') is not larger than 0.") + "'TRANSP_AMOUNT', 'TRANSITION_SERVICES_AMOUNT', 'OTHER_AMOUNT') is not larger than 0.", + ['AMT_FOOD_STAMP_ASSISTANCE', 'AMT_SUB_CC', 'CC_AMOUNT', 'TRANSP_AMOUNT', + 'TRANSITION_SERVICES_AMOUNT', 'OTHER_AMOUNT']) class TestT2Cat3Validators(TestCat3ValidatorsBase): @@ -482,7 +536,7 @@ def test_validate_ssn(self, record): record.SSN = "999989999" record.FAMILY_AFFILIATION = 1 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'SSN']) record.FAMILY_AFFILIATION = 1 record.SSN = "999999999" @@ -490,7 +544,7 @@ def test_validate_ssn(self, record): assert result == (False, "if FAMILY_AFFILIATION :1 validator1 passed then " + "SSN 999999999 is in ('000000000', '111111111', " + "'222222222', '333333333', '444444444', '555555555', '666666666', '777777777', '888888888'," + - " '999999999').") + " '999999999').", ['FAMILY_AFFILIATION', 'SSN']) def test_validate_race_ethnicity(self, record): """Test cat3 validator for race/ethnicity.""" @@ -502,7 +556,7 @@ def test_validate_race_ethnicity(self, record): result_field=race, result_function=validators.isInLimits(1, 2), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', race]) record.FAMILY_AFFILIATION = 0 for race in races: @@ -511,7 +565,7 @@ def test_validate_race_ethnicity(self, record): result_field=race, result_function=validators.isInLimits(1, 2) ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', race]) def test_validate_marital_status(self, record): """Test cat3 validator for marital status.""" @@ -521,13 +575,13 @@ def test_validate_marital_status(self, record): ) record.FAMILY_AFFILIATION = 1 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'MARITAL_STATUS']) record.FAMILY_AFFILIATION = 3 record.MARITAL_STATUS = 0 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :3 validator1 passed then MARITAL_STATUS 0 is not larger or ' + - 'equal to 1 and smaller or equal to 5.') + 'equal to 1 and smaller or equal to 5.', ['FAMILY_AFFILIATION', 'MARITAL_STATUS']) def test_validate_parent_with_minor(self, record): """Test cat3 validator for parent with a minor child.""" @@ -536,12 +590,13 @@ def test_validate_parent_with_minor(self, record): result_field='PARENT_WITH_MINOR_CHILD', result_function=validators.isInLimits(1, 3), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'PARENT_WITH_MINOR_CHILD']) record.PARENT_WITH_MINOR_CHILD = 0 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then PARENT_WITH_MINOR_CHILD 0 is not ' + - 'larger or equal to 1 and smaller or equal to 3.') + 'larger or equal to 1 and smaller or equal to 3.', + ['FAMILY_AFFILIATION', 'PARENT_WITH_MINOR_CHILD']) def test_validate_education_level(self, record): """Test cat3 validator for education level.""" @@ -554,14 +609,15 @@ def test_validate_education_level(self, record): ) record.FAMILY_AFFILIATION = 3 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) record.FAMILY_AFFILIATION = 1 record.EDUCATION_LEVEL = "00" result = val(record) assert result == (False, "if FAMILY_AFFILIATION :1 validator1 passed then " + "EDUCATION_LEVEL 00 is not in ('01', '02', '03', '04', '05', '06'," - + " '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '98', '99').") + + " '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '98', '99').", + ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) def test_validate_citizenship(self, record): """Test cat3 validator for citizenship.""" @@ -571,13 +627,13 @@ def test_validate_citizenship(self, record): ) record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) record.FAMILY_AFFILIATION = 1 record.CITIZENSHIP_STATUS = 0 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then CITIZENSHIP_STATUS 0 ' + - 'is not in (1, 2).') + 'is not in (1, 2).', ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) def test_validate_cooperation_with_child_support(self, record): """Test cat3 validator for cooperation with child support.""" @@ -587,13 +643,13 @@ def test_validate_cooperation_with_child_support(self, record): ) record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'COOPERATION_CHILD_SUPPORT']) record.FAMILY_AFFILIATION = 1 record.COOPERATION_CHILD_SUPPORT = 0 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then COOPERATION_CHILD_SUPPORT 0 ' + - 'is not in (1, 2, 9).') + 'is not in (1, 2, 9).', ['FAMILY_AFFILIATION', 'COOPERATION_CHILD_SUPPORT']) def test_validate_months_federal_time_limit(self, record): """Test cat3 validator for federal time limit.""" @@ -601,14 +657,15 @@ def test_validate_months_federal_time_limit(self, record): val = validators.validate__FAM_AFF__HOH__Fed_Time() record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'RELATIONSHIP_HOH', 'MONTHS_FED_TIME_LIMIT']) record.FAMILY_AFFILIATION = 1 record.MONTHS_FED_TIME_LIMIT = "000" record.RELATIONSHIP_HOH = "01" result = val(record) assert result == (False, 'If FAMILY_AFFILIATION == 2 and MONTHS_FED_TIME_LIMIT== 1 or 2, ' + - 'then MONTHS_FED_TIME_LIMIT > 1.') + 'then MONTHS_FED_TIME_LIMIT > 1.', + ['FAMILY_AFFILIATION', 'MONTHS_FED_TIME_LIMIT']) def test_validate_employment_status(self, record): """Test cat3 validator for employment status.""" @@ -618,13 +675,13 @@ def test_validate_employment_status(self, record): ) record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'EMPLOYMENT_STATUS']) record.FAMILY_AFFILIATION = 3 record.EMPLOYMENT_STATUS = 4 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :3 validator1 passed then EMPLOYMENT_STATUS 4 is not larger ' + - 'or equal to 1 and smaller or equal to 3.') + 'or equal to 1 and smaller or equal to 3.', ['FAMILY_AFFILIATION', 'EMPLOYMENT_STATUS']) def test_validate_work_eligible_indicator(self, record): """Test cat3 validator for work eligibility.""" @@ -637,13 +694,14 @@ def test_validate_work_eligible_indicator(self, record): ) record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'WORK_ELIGIBLE_INDICATOR']) record.FAMILY_AFFILIATION = 1 record.WORK_ELIGIBLE_INDICATOR = "00" result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then WORK_ELIGIBLE_INDICATOR 00 is not ' + - 'in range [1, 9]. or 00 does not match 12.') + 'in range [1, 9]. or 00 does not match 12.', + ['FAMILY_AFFILIATION', 'WORK_ELIGIBLE_INDICATOR']) def test_validate_work_participation(self, record): """Test cat3 validator for work participation.""" @@ -655,13 +713,14 @@ def test_validate_work_participation(self, record): ) record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'WORK_PART_STATUS']) record.FAMILY_AFFILIATION = 2 record.WORK_PART_STATUS = "04" result = val(record) assert result == (False, "if FAMILY_AFFILIATION :2 validator1 passed then WORK_PART_STATUS 04 is not " + - "in ['01', '02', '05', '07', '09', '15', '17', '18', '19', '99'].") + "in ['01', '02', '05', '07', '09', '15', '17', '18', '19', '99'].", + ['FAMILY_AFFILIATION', 'WORK_PART_STATUS']) val = validators.if_then_validator( condition_field='WORK_ELIGIBLE_INDICATOR', condition_function=validators.isInStringRange(1, 5), @@ -671,7 +730,7 @@ def test_validate_work_participation(self, record): record.WORK_ELIGIBLE_INDICATOR = "01" result = val(record) assert result == (False, 'if WORK_ELIGIBLE_INDICATOR :01 validator1 passed then ' - + 'WORK_PART_STATUS 99 matches 99.') + + 'WORK_PART_STATUS 99 matches 99.', ['WORK_ELIGIBLE_INDICATOR', 'WORK_PART_STATUS']) class TestT3Cat3Validators(TestCat3ValidatorsBase): @@ -691,13 +750,13 @@ def test_validate_ssn(self, record): result_field='SSN', result_function=validators.notOneOf(("999999999", "000000000")), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'SSN']) record.FAMILY_AFFILIATION = 1 record.SSN = "999999999" result = val(record) assert result == (False, "if FAMILY_AFFILIATION :1 validator1 passed then " - + "SSN 999999999 is in ('999999999', '000000000').") + + "SSN 999999999 is in ('999999999', '000000000').", ['FAMILY_AFFILIATION', 'SSN']) def test_validate_t3_race_ethnicity(self, record): """Test cat3 validator for race/ethnicity.""" @@ -709,7 +768,7 @@ def test_validate_t3_race_ethnicity(self, record): result_field=race, result_function=validators.oneOf((1, 2)), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', race]) record.FAMILY_AFFILIATION = 0 for race in races: @@ -718,7 +777,7 @@ def test_validate_t3_race_ethnicity(self, record): result_field=race, result_function=validators.oneOf((1, 2)), ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', race]) def test_validate_relationship_hoh(self, record): """Test cat3 validator for relationship to head of household.""" @@ -729,13 +788,13 @@ def test_validate_relationship_hoh(self, record): record.FAMILY_AFFILIATION = 0 record.RELATIONSHIP_HOH = "04" result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'RELATIONSHIP_HOH']) record.FAMILY_AFFILIATION = 1 record.RELATIONSHIP_HOH = "01" result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then RELATIONSHIP_HOH 01 is ' + - 'not in range [4, 9].') + 'not in range [4, 9].', ['FAMILY_AFFILIATION', 'RELATIONSHIP_HOH']) def test_validate_t3_education_level(self, record): """Test cat3 validator for education level.""" @@ -745,12 +804,13 @@ def test_validate_t3_education_level(self, record): ) record.FAMILY_AFFILIATION = 1 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) record.FAMILY_AFFILIATION = 1 record.EDUCATION_LEVEL = "99" result = val(record) - assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then EDUCATION_LEVEL 99 matches 99.') + assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then EDUCATION_LEVEL 99 matches 99.', + ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) def test_validate_t3_citizenship(self, record): """Test cat3 validator for citizenship.""" @@ -760,13 +820,13 @@ def test_validate_t3_citizenship(self, record): ) record.FAMILY_AFFILIATION = 1 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) record.FAMILY_AFFILIATION = 1 record.CITIZENSHIP_STATUS = 3 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then CITIZENSHIP_STATUS 3 ' + - 'is not in (1, 2).') + 'is not in (1, 2).', ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) val = validators.if_then_validator( condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(2), @@ -776,7 +836,7 @@ def test_validate_t3_citizenship(self, record): record.CITIZENSHIP_STATUS = 3 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :2 validator1 passed then CITIZENSHIP_STATUS 3 ' + - 'is not in (1, 2, 9).') + 'is not in (1, 2, 9).', ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) class TestT5Cat3Validators(TestCat3ValidatorsBase): @@ -795,27 +855,28 @@ def test_validate_ssn(self, record): ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'SSN']) record.SSN = "abc" record.FAMILY_AFFILIATION = 2 result = val(record) - assert result == (False, 'if FAMILY_AFFILIATION :2 validator1 passed then SSN abc is not a number.') + assert result == (False, 'if FAMILY_AFFILIATION :2 validator1 passed then SSN abc is not a number.', + ['FAMILY_AFFILIATION', 'SSN']) def test_validate_ssn_citizenship(self, record): """Test cat3 validator for SSN/citizenship.""" val = validators.validate__FAM_AFF__SSN() result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS', 'SSN']) record.FAMILY_AFFILIATION = 2 record.SSN = "000000000" result = val(record) assert result == (False, "If FAMILY_AFFILIATION ==2 and CITIZENSHIP_STATUS==1 or 2, then SSN " + - "!= 000000000 -- 999999999.") + "!= 000000000 -- 999999999.", ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS', 'SSN']) def test_validate_race_ethnicity(self, record): """Test cat3 validator for race/ethnicity.""" @@ -827,7 +888,7 @@ def test_validate_race_ethnicity(self, record): result_field='RACE_HISPANIC', result_function=validators.isInLimits(1, 2) ) result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'RACE_HISPANIC']) record.FAMILY_AFFILIATION = 1 record.RACE_HISPANIC = 0 @@ -843,7 +904,8 @@ def test_validate_race_ethnicity(self, record): ) result = val(record) assert result == (False, f'if FAMILY_AFFILIATION :1 validator1 passed then {race} 0 is not larger or ' + - 'equal to 1 and smaller or equal to 2.') + 'equal to 1 and smaller or equal to 2.', + ['FAMILY_AFFILIATION', race]) def test_validate_marital_status(self, record): """Test cat3 validator for marital status.""" @@ -854,14 +916,15 @@ def test_validate_marital_status(self, record): record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'MARITAL_STATUS']) record.FAMILY_AFFILIATION = 2 record.MARITAL_STATUS = 6 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :2 validator1 passed then MARITAL_STATUS 6 is not larger or ' + - 'equal to 0 and smaller or equal to 5.') + 'equal to 0 and smaller or equal to 5.', + ['FAMILY_AFFILIATION', 'MARITAL_STATUS']) def test_validate_parent_minor(self, record): """Test cat3 validator for parent with minor.""" @@ -872,14 +935,15 @@ def test_validate_parent_minor(self, record): record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'PARENT_MINOR_CHILD']) record.FAMILY_AFFILIATION = 2 record.PARENT_MINOR_CHILD = 0 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :2 validator1 passed then PARENT_MINOR_CHILD 0 is not larger ' + - 'or equal to 1 and smaller or equal to 3.') + 'or equal to 1 and smaller or equal to 3.', + ['FAMILY_AFFILIATION', 'PARENT_MINOR_CHILD']) def test_validate_education(self, record): """Test cat3 validator for education level.""" @@ -893,14 +957,15 @@ def test_validate_education(self, record): record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) record.FAMILY_AFFILIATION = 2 record.EDUCATION_LEVEL = "0" result = val(record) assert result == (False, "if FAMILY_AFFILIATION :2 validator1 passed then EDUCATION_LEVEL 0 is not in range " + - "[1, 16]. or 0 is not in range [98, 99].") + "[1, 16]. or 0 is not in range [98, 99].", + ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) def test_validate_citizenship_status(self, record): """Test cat3 validator for citizenship status.""" @@ -911,14 +976,15 @@ def test_validate_citizenship_status(self, record): record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) record.FAMILY_AFFILIATION = 1 record.CITIZENSHIP_STATUS = 0 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then CITIZENSHIP_STATUS 0 is not larger ' + - 'or equal to 1 and smaller or equal to 2.') + 'or equal to 1 and smaller or equal to 2.', + ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) def test_validate_hoh_fed_time(self, record): """Test cat3 validator for federal disability.""" @@ -926,7 +992,7 @@ def test_validate_hoh_fed_time(self, record): record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'RELATIONSHIP_HOH', 'COUNTABLE_MONTH_FED_TIME']) record.FAMILY_AFFILIATION = 1 record.RELATIONSHIP_HOH = 1 @@ -934,7 +1000,8 @@ def test_validate_hoh_fed_time(self, record): result = val(record) assert result == (False, 'If FAMILY_AFFILIATION == 2 and COUNTABLE_MONTH_FED_TIME== 1 or 2, then ' + - 'COUNTABLE_MONTH_FED_TIME > 1.') + 'COUNTABLE_MONTH_FED_TIME > 1.', + ['FAMILY_AFFILIATION', 'RELATIONSHIP_HOH', 'COUNTABLE_MONTH_FED_TIME']) def test_validate_oasdi_insurance(self, record): """Test cat3 validator for OASDI insurance.""" @@ -945,14 +1012,14 @@ def test_validate_oasdi_insurance(self, record): record.DATE_OF_BIRTH = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['DATE_OF_BIRTH', 'REC_OASDI_INSURANCE']) record.DATE_OF_BIRTH = 200001 record.REC_OASDI_INSURANCE = 0 result = val(record) assert result == (False, 'if DATE_OF_BIRTH :200001 validator1 passed then REC_OASDI_INSURANCE 0 is not ' + - 'larger or equal to 1 and smaller or equal to 2.') + 'larger or equal to 1 and smaller or equal to 2.', ['DATE_OF_BIRTH', 'REC_OASDI_INSURANCE']) def test_validate_federal_disability(self, record): """Test cat3 validator for federal disability.""" @@ -963,14 +1030,15 @@ def test_validate_federal_disability(self, record): record.FAMILY_AFFILIATION = 0 result = val(record) - assert result == (True, None) + assert result == (True, None, ['FAMILY_AFFILIATION', 'REC_FEDERAL_DISABILITY']) record.FAMILY_AFFILIATION = 1 record.REC_FEDERAL_DISABILITY = 0 result = val(record) assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then REC_FEDERAL_DISABILITY 0 is not ' + - 'larger or equal to 1 and smaller or equal to 2.') + 'larger or equal to 1 and smaller or equal to 2.', + ['FAMILY_AFFILIATION', 'REC_FEDERAL_DISABILITY']) class TestT6Cat3Validators(TestCat3ValidatorsBase): @@ -988,12 +1056,13 @@ def test_sum_of_applications(self, record): record.NUM_APPLICATIONS = 2 result = val(record) - assert result == (True, None) + assert result == (True, None, ['NUM_APPLICATIONS', 'NUM_APPROVED', 'NUM_DENIED']) record.NUM_APPLICATIONS = 1 result = val(record) - assert result == (False, "The sum of ['NUM_APPROVED', 'NUM_DENIED'] does not equal NUM_APPLICATIONS.") + assert result == (False, "The sum of ['NUM_APPROVED', 'NUM_DENIED'] does not equal NUM_APPLICATIONS.", + ['NUM_APPLICATIONS', 'NUM_APPROVED', 'NUM_DENIED']) def test_sum_of_families(self, record): """Test cat3 validator for sum of families.""" @@ -1002,13 +1071,13 @@ def test_sum_of_families(self, record): record.NUM_FAMILIES = 3 result = val(record) - assert result == (True, None) + assert result == (True, None, ['NUM_FAMILIES', 'NUM_2_PARENTS', 'NUM_1_PARENTS', 'NUM_NO_PARENTS']) record.NUM_FAMILIES = 1 result = val(record) assert result == (False, "The sum of ['NUM_2_PARENTS', 'NUM_1_PARENTS', 'NUM_NO_PARENTS'] does not equal " + - "NUM_FAMILIES.") + "NUM_FAMILIES.", ['NUM_FAMILIES', 'NUM_2_PARENTS', 'NUM_1_PARENTS', 'NUM_NO_PARENTS']) def test_sum_of_recipients(self, record): """Test cat3 validator for sum of recipients.""" @@ -1017,10 +1086,146 @@ def test_sum_of_recipients(self, record): record.NUM_RECIPIENTS = 2 result = val(record) - assert result == (True, None) + assert result == (True, None, ['NUM_RECIPIENTS', 'NUM_ADULT_RECIPIENTS', 'NUM_CHILD_RECIPIENTS']) record.NUM_RECIPIENTS = 1 result = val(record) assert result == (False, "The sum of ['NUM_ADULT_RECIPIENTS', 'NUM_CHILD_RECIPIENTS'] does not equal " + - "NUM_RECIPIENTS.") + "NUM_RECIPIENTS.", ['NUM_RECIPIENTS', 'NUM_ADULT_RECIPIENTS', 'NUM_CHILD_RECIPIENTS']) + +class TestM5Cat3Validators(TestCat3ValidatorsBase): + """Test category three validators for TANF T6 records.""" + + @pytest.fixture + def record(self): + """Override default record with TANF T6 record.""" + return SSPM5Factory.create() + + def test_fam_affil_ssn(self, record): + """Test cat3 validator for family affiliation and ssn.""" + val = validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='SSN', result_function=validators.validateSSN(), + ) + + result = val(record) + assert result == (True, None, ["FAMILY_AFFILIATION", "SSN"]) + + record.SSN = '111111111' + result = val(record) + + assert result == (False, "if FAMILY_AFFILIATION :1 validator1 passed then SSN 111111111 is in ['000000000', " + + "'111111111', '222222222', '333333333', '444444444', '555555555', '666666666', '777777777'," + + " '888888888', '999999999'].", ["FAMILY_AFFILIATION", "SSN"]) + + def test_validate_race_ethnicity(self, record): + """Test cat3 validator for race/ethnicity.""" + races = ["RACE_HISPANIC", "RACE_AMER_INDIAN", "RACE_ASIAN", "RACE_BLACK", "RACE_HAWAIIAN", "RACE_WHITE"] + for race in races: + val = validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), + result_field=race, result_function=validators.isInLimits(1, 2), + ) + result = val(record) + assert result == (True, None, ['FAMILY_AFFILIATION', race]) + + def test_fam_affil_marital_stat(self, record): + """Test cat3 validator for family affiliation, and marital status.""" + val = validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), + result_field='MARITAL_STATUS', result_function=validators.isInLimits(1, 5), + ) + + result = val(record) + assert result == (True, None, ['FAMILY_AFFILIATION', 'MARITAL_STATUS']) + + record.MARITAL_STATUS = 0 + + result = val(record) + assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then MARITAL_STATUS 0 is not larger ' + + 'or equal to 1 and smaller or equal to 5.', ['FAMILY_AFFILIATION', 'MARITAL_STATUS']) + + def test_fam_affil_parent_with_minor(self, record): + """Test cat3 validator for family affiliation, and parent with minor child.""" + val = validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 2), + result_field='PARENT_MINOR_CHILD', result_function=validators.isInLimits(1, 3), + ) + + result = val(record) + assert result == (True, None, ['FAMILY_AFFILIATION', 'PARENT_MINOR_CHILD']) + + record.PARENT_MINOR_CHILD = 0 + + result = val(record) + assert result == (False, + 'if FAMILY_AFFILIATION :1 validator1 passed then PARENT_MINOR_CHILD 0 is not ' + + 'larger or equal to 1 and smaller or equal to 3.', + ['FAMILY_AFFILIATION', 'PARENT_MINOR_CHILD']) + + def test_fam_affil_ed_level(self, record): + """Test cat3 validator for family affiliation, and education level.""" + val = validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.isInLimits(1, 3), + result_field='EDUCATION_LEVEL', result_function=validators.or_validators( + validators.isInStringRange(1, 16), validators.isInStringRange(98, 99)), + ) + + result = val(record) + assert result == (True, None, ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) + + record.EDUCATION_LEVEL = 0 + + result = val(record) + assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then EDUCATION_LEVEL 0 is not in range ' + + '[1, 16]. or 0 is not in range [98, 99].', ['FAMILY_AFFILIATION', 'EDUCATION_LEVEL']) + + def test_fam_affil_citz_stat(self, record): + """Test cat3 validator for family affiliation, and citizenship status.""" + val = validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='CITIZENSHIP_STATUS', result_function=validators.isInLimits(1, 3), + ) + + result = val(record) + assert result == (True, None, ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) + + record.CITIZENSHIP_STATUS = 0 + + result = val(record) + assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then CITIZENSHIP_STATUS 0 is not larger ' + + 'or equal to 1 and smaller or equal to 3.', ['FAMILY_AFFILIATION', 'CITIZENSHIP_STATUS']) + + def test_dob_oasdi_insur(self, record): + """Test cat3 validator for dob, and REC_OASDI_INSURANCE.""" + val = validators.if_then_validator( + condition_field='DATE_OF_BIRTH', condition_function=validators.olderThan(18), + result_field='REC_OASDI_INSURANCE', result_function=validators.isInLimits(1, 2), + ) + + result = val(record) + assert result == (True, None, ['DATE_OF_BIRTH', 'REC_OASDI_INSURANCE']) + + record.REC_OASDI_INSURANCE = 0 + + result = val(record) + assert result == (False, 'if DATE_OF_BIRTH :11111111 validator1 passed then REC_OASDI_INSURANCE 0 is not ' + + 'larger or equal to 1 and smaller or equal to 2.', ['DATE_OF_BIRTH', 'REC_OASDI_INSURANCE']) + + def test_fam_affil_fed_disability(self, record): + """Test cat3 validator for family affiliation, and REC_FEDERAL_DISABILITY.""" + val = validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='REC_FEDERAL_DISABILITY', result_function=validators.isInLimits(1, 2), + ) + + result = val(record) + assert result == (True, None, ['FAMILY_AFFILIATION', 'REC_FEDERAL_DISABILITY']) + + record.REC_FEDERAL_DISABILITY = 0 + + result = val(record) + assert result == (False, 'if FAMILY_AFFILIATION :1 validator1 passed then REC_FEDERAL_DISABILITY 0 is not ' + + 'larger or equal to 1 and smaller or equal to 2.', + ['FAMILY_AFFILIATION', 'REC_FEDERAL_DISABILITY']) diff --git a/tdrs-backend/tdpservice/parsers/util.py b/tdrs-backend/tdpservice/parsers/util.py index 6c7e4020a..2a497e48e 100644 --- a/tdrs-backend/tdpservice/parsers/util.py +++ b/tdrs-backend/tdpservice/parsers/util.py @@ -30,6 +30,13 @@ def create_test_datafile(filename, stt_user, stt, section='Active Case Data'): def generate_parser_error(datafile, line_number, schema, error_category, error_message, record=None, field=None): """Create and return a ParserError using args.""" + fields = [*field] if type(field) is list else [field] + fields_json = { + "friendly_name": { + getattr(f, 'name', ''): getattr(f, 'friendly_name', '') for f in fields + } + } + return ParserError( file=datafile, row_number=line_number, @@ -44,7 +51,7 @@ def generate_parser_error(datafile, line_number, schema, error_category, error_m model=schema.model if schema else None ) if record and not isinstance(record, dict) else None, object_id=getattr(record, 'id', None) if record and not isinstance(record, dict) else None, - fields_json=None + fields_json=fields_json ) @@ -58,7 +65,7 @@ def generate(schema, error_category, error_message, record=None, field=None): error_category=error_category, error_message=error_message, record=record, - field=field + field=field, ) return generate @@ -161,8 +168,8 @@ def get_schema_options(program, section, query=None, model=None, model_name=None 'C': { 'section': DataFile.Section.SSP_CLOSED_CASE_DATA, 'models': { - # 'S4': schema_defs.ssp.m4, - # 'S5': schema_defs.ssp.m5, + 'M4': schema_defs.ssp.m4, + 'M5': schema_defs.ssp.m5, } }, 'G': { @@ -174,7 +181,7 @@ def get_schema_options(program, section, query=None, model=None, model_name=None 'S': { 'section': DataFile.Section.SSP_STRATUM_DATA, 'models': { - # 'S7': schema_defs.ssp.m7, + 'M7': schema_defs.ssp.m7, } } }, diff --git a/tdrs-backend/tdpservice/parsers/validators.py b/tdrs-backend/tdpservice/parsers/validators.py index e516a6530..ee86063fc 100644 --- a/tdrs-backend/tdpservice/parsers/validators.py +++ b/tdrs-backend/tdpservice/parsers/validators.py @@ -6,8 +6,21 @@ logger = logging.getLogger(__name__) + +def value_is_empty(value, length): + """Handle 'empty' values as field inputs.""" + empty_values = [ + '', + ' '*length, # ' ' + '#'*length, # '#####' + '_'*length, # '_____' + ] + + return value is None or value in empty_values + # higher order validator func + def make_validator(validator_func, error_func): """Return a function accepting a value input and returning (bool, string) to represent validation state.""" def validator(value): @@ -23,24 +36,47 @@ def validator(value): def or_validators(*args, **kwargs): """Return a validator that is true only if one of the validators is true.""" - return lambda value: (True, None) if any([validator(value)[0] for validator in args])\ - else (False, ' or '.join([validator(value)[1] for validator in args])) + return ( + lambda value: (True, None) + if any([validator(value)[0] for validator in args]) + else (False, " or ".join([validator(value)[1] for validator in args])) + ) def and_validators(validator1, validator2): """Return a validator that is true only if both validators are true.""" - return lambda value: (True, None) if (validator1(value)[0] and validator2(value)[0])\ - else (False, (validator1(value)[1]) if validator1(value)[1] is not None else '' + - ' and ' + validator2(value)[1] if validator2(value)[1] is not None else '') + return ( + lambda value: (True, None) + if (validator1(value)[0] and validator2(value)[0]) + else ( + False, + (validator1(value)[1]) + if validator1(value)[1] is not None + else "" + " and " + validator2(value)[1] + if validator2(value)[1] is not None + else "", + ) + ) + def extended_and_validators(*args, **kwargs): """Return a validator that is true only if all validators are true.""" - return lambda value: (True, None) if all([validator(value)[0] for validator in args])\ - else (False, ''.join([' and ' + validator(value)[1] if validator(value)[0] else '' for validator in args])) - - -def if_then_validator(condition_field, condition_function, - result_field, result_function): + def returned_func(value): + if all([validator(value)[0] for validator in args]): + return (True, None) + else: + return (False, "".join( + [ + " and " + validator(value)[1] if validator(value)[0] else "" + for validator in args + ] + )) + return returned_func + + +def if_then_validator( + condition_field, condition_function, result_field, result_function +): """Return second validation if the first validator is true. :param condition_field: function that returns (bool, string) to represent validation state @@ -48,79 +84,127 @@ def if_then_validator(condition_field, condition_function, :param result_field: function that returns (bool, string) to represent validation state :param result_function: function that returns (bool, string) to represent validation state """ + def if_then_validator_func(value): - value1 = value[condition_field] if type(value) is dict else getattr(value, condition_field) - value2 = value[result_field] if type(value) is dict else getattr(value, result_field) + value1 = ( + value[condition_field] + if type(value) is dict + else getattr(value, condition_field) + ) + value2 = ( + value[result_field] if type(value) is dict else getattr(value, result_field) + ) validator1_result = condition_function(value1) validator2_result = result_function(value2) - return (True, None) if not validator1_result[0] else ( - validator2_result[0], (f'if {condition_field} ' - + (validator1_result[1] if validator1_result[1] is not None - else f":{value1} validator1 passed") - + f' then {result_field} ' - + (validator2_result[1] if validator2_result[1] is not None - else "validator2 passed")) if not validator2_result[0] else None) + + if not validator1_result[0]: + returned_value = (True, None, [condition_field, result_field]) + else: + if not validator2_result[0]: + + # center of error message + if validator1_result[1] is not None: + center_error = validator1_result[1] + else: + center_error = f":{value1} validator1 passed" + + # ending of error message + if validator2_result[1] is not None: + ending_error = validator2_result[1] + else: + ending_error = "validator2 passed" + + error_message = f"if {condition_field} " + (center_error) + f" then {result_field} " + ending_error + else: + error_message = None + + returned_value = (validator2_result[0], error_message, [condition_field, result_field]) + + return returned_value return lambda value: if_then_validator_func(value) + def sumIsEqual(condition_field, sum_fields=[]): """Validate that the sum of the sum_fields equals the condition_field.""" + def sumIsEqualFunc(value): sum = 0 for field in sum_fields: val = value[field] if type(value) is dict else getattr(value, field) sum += 0 if val is None else val - condition_val = value[condition_field] if type(value) is dict else getattr(value, condition_field) - return (True, None) if sum == condition_val else (False, - f"The sum of {sum_fields} does not equal {condition_field}.") + condition_val = ( + value[condition_field] + if type(value) is dict + else getattr(value, condition_field) + ) + fields = [condition_field] + fields.extend(sum_fields) + return ( + (True, None, fields) + if sum == condition_val + else ( + False, + f"The sum of {sum_fields} does not equal {condition_field}.", + fields, + ) + ) return lambda value: sumIsEqualFunc(value) + def sumIsLarger(fields, val): """Validate that the sum of the fields is larger than val.""" + def sumIsLargerFunc(value): sum = 0 for field in fields: temp_val = value[field] if type(value) is dict else getattr(value, field) sum += 0 if temp_val is None else temp_val - return (True, None) if sum > val else (False, f"The sum of {fields} is not larger than {val}.") + return ( + (True, None, [field for field in fields]) + if sum > val + else ( + False, + f"The sum of {fields} is not larger than {val}.", + [field for field in fields], + ) + ) return lambda value: sumIsLargerFunc(value) # generic validators + def matches(option): """Validate that value is equal to option.""" return make_validator( - lambda value: value == option, - lambda value: f'{value} does not match {option}.' + lambda value: value == option, lambda value: f"{value} does not match {option}." ) + def notMatches(option): """Validate that value is not equal to option.""" return make_validator( - lambda value: value != option, - lambda value: f'{value} matches {option}.' + lambda value: value != option, lambda value: f"{value} matches {option}." ) def oneOf(options=[]): """Validate that value does not exist in the provided options array.""" return make_validator( - lambda value: value in options, - lambda value: f'{value} is not in {options}.' + lambda value: value in options, lambda value: f"{value} is not in {options}." ) def notOneOf(options=[]): """Validate that value exists in the provided options array.""" return make_validator( - lambda value: value not in options, - lambda value: f'{value} is in {options}.' + lambda value: value not in options, lambda value: f"{value} is in {options}." ) @@ -128,7 +212,7 @@ def between(min, max): """Validate value, when casted to int, is greater than min and less than max.""" return make_validator( lambda value: int(value) > min and int(value) < max, - lambda value: f'{value} is not between {min} and {max}.' + lambda value: f"{value} is not between {min} and {max}.", ) @@ -136,7 +220,9 @@ def hasLength(length, error_func=None): """Validate that value (string or array) has a length matching length param.""" return make_validator( lambda value: len(value) == length, - lambda value: error_func(value, length) if error_func else f'Value length {len(value)} does not match {length}.' + lambda value: error_func(value, length) + if error_func + else f"Value length {len(value)} does not match {length}.", ) @@ -144,7 +230,7 @@ def contains(substring): """Validate that string value contains the given substring param.""" return make_validator( lambda value: value.find(substring) != -1, - lambda value: f'{value} does not contain {substring}.' + lambda value: f"{value} does not contain {substring}.", ) @@ -152,56 +238,66 @@ def startsWith(substring): """Validate that string value starts with the given substring param.""" return make_validator( lambda value: value.startswith(substring), - lambda value: f'{value} does not start with {substring}.' + lambda value: f"{value} does not start with {substring}.", ) def isNumber(): """Validate that value can be casted to a number.""" return make_validator( - lambda value: value.isnumeric(), - lambda value: f'{value} is not a number.' + lambda value: value.isnumeric(), lambda value: f"{value} is not a number." ) + def isAlphaNumeric(): """Validate that value is alphanumeric.""" return make_validator( - lambda value: value.isalnum(), - lambda value: f'{value} is not alphanumeric.' + lambda value: value.isalnum(), lambda value: f"{value} is not alphanumeric." ) + def isBlank(): """Validate that string value is blank.""" return make_validator( - lambda value: value.isspace(), - lambda value: f'{value} is not blank.' + lambda value: value.isspace(), lambda value: f"{value} is not blank." ) + def isInStringRange(lower, upper): """Validate that string value is in a specific range.""" return make_validator( lambda value: int(value) >= lower and int(value) <= upper, - lambda value: f'{value} is not in range [{lower}, {upper}].' + lambda value: f"{value} is not in range [{lower}, {upper}].", ) + def isStringLargerThan(val): """Validate that string value is larger than val.""" return make_validator( lambda value: int(value) > val, - lambda value: f'{value} is not larger than {val}.' + lambda value: f"{value} is not larger than {val}.", ) + +def _is_empty(value, start, end): + end = end if end else len(str(value)) + vlen = end - start + subv = str(value)[start:end] + return value_is_empty(subv, vlen) or len(subv) < vlen + + def notEmpty(start=0, end=None): """Validate that string value isn't only blanks.""" return make_validator( - lambda value: not str(value)[start:end if end else len(str(value))].isspace(), + lambda value: not _is_empty(value, start, end), lambda value: f'{str(value)} contains blanks between positions {start} and {end if end else len(str(value))}.' ) + def isEmpty(start=0, end=None): """Validate that string value is only blanks.""" return make_validator( - lambda value: value[start:end if end else len(value)].isspace(), + lambda value: _is_empty(value, start, end), lambda value: f'{value} is not blank between positions {start} and {end if end else len(value)}.' ) @@ -209,8 +305,7 @@ def isEmpty(start=0, end=None): def notZero(number_of_zeros=1): """Validate that value is not zero.""" return make_validator( - lambda value: value != '0' * number_of_zeros, - lambda value: f'{value} is zero.' + lambda value: value != "0" * number_of_zeros, lambda value: f"{value} is zero." ) @@ -218,7 +313,7 @@ def isLargerThan(LowerBound): """Validate that value is larger than the given value.""" return make_validator( lambda value: float(value) > LowerBound if value is not None else False, - lambda value: f'{value} is not larger than {LowerBound}.' + lambda value: f"{value} is not larger than {LowerBound}.", ) @@ -226,73 +321,82 @@ def isSmallerThan(UpperBound): """Validate that value is smaller than the given value.""" return make_validator( lambda value: value < UpperBound, - lambda value: f'{value} is not smaller than {UpperBound}.' + lambda value: f"{value} is not smaller than {UpperBound}.", ) + def isLargerThanOrEqualTo(LowerBound): """Validate that value is larger than the given value.""" return make_validator( lambda value: value >= LowerBound, - lambda value: f'{value} is not larger than {LowerBound}.' + lambda value: f"{value} is not larger than {LowerBound}.", ) + def isSmallerThanOrEqualTo(UpperBound): """Validate that value is smaller than the given value.""" return make_validator( lambda value: value <= UpperBound, - lambda value: f'{value} is not smaller than {UpperBound}.' + lambda value: f"{value} is not smaller than {UpperBound}.", ) + def isInLimits(LowerBound, UpperBound): """Validate that value is in a range including the limits.""" return make_validator( lambda value: value >= LowerBound and value <= UpperBound, - lambda value: f'{value} is not larger or equal to {LowerBound} and smaller or equal to {UpperBound}.' + lambda value: f"{value} is not larger or equal to {LowerBound} and smaller or equal to {UpperBound}.", ) + # custom validators + def dateMonthIsValid(): """Validate that in a monthyear combination, the month is a valid month.""" return make_validator( lambda value: int(str(value)[4:6]) in range(1, 13), - lambda value: f'{str(value)[4:6]} is not a valid month.' + lambda value: f"{str(value)[4:6]} is not a valid month.", ) + def olderThan(min_age): """Validate that value is larger than min_age.""" return make_validator( lambda value: date.today().year - int(str(value)[:4]) > min_age, - lambda value: f'{date.today().year - int(str(value)[:4])} is not larger than {min_age}.' + lambda value: f"{date.today().year - int(str(value)[:4])} is not larger than {min_age}.", ) + def dateYearIsLargerThan(year): """Validate that in a monthyear combination, the year is larger than the given year.""" return make_validator( lambda value: int(str(value)[:4]) > year, - lambda value: f'{str(value)[:4]} year must be larger than {year}.' + lambda value: f"{str(value)[:4]} year must be larger than {year}.", ) + def quarterIsValid(): """Validate in a year quarter combination, the quarter is valid.""" return make_validator( lambda value: int(str(value)[-1]) > 0 and int(str(value)[-1]) < 5, - lambda value: f'{str(value)[-1]} is not a valid quarter.' + lambda value: f"{str(value)[-1]} is not a valid quarter.", ) + def validateSSN(): """Validate that SSN value is not a repeating digit.""" - options = [str(i)*9 for i in range(0, 10)] + options = [str(i) * 9 for i in range(0, 10)] return make_validator( - lambda value: value not in options, - lambda value: f'{value} is in {options}.' + lambda value: value not in options, lambda value: f"{value} is in {options}." ) + def validateRace(): """Validate race.""" return make_validator( lambda value: value >= 0 and value <= 2, - lambda value: f'{value} is not greater than or equal to 0 or smaller than or equal to 1.' + lambda value: f"{value} is not greater than or equal to 0 or smaller than or equal to 1.", ) @@ -306,62 +410,126 @@ def validate__FAM_AFF__SSN(): """ # value is instance def validate(instance): - FAMILY_AFFILIATION = instance['FAMILY_AFFILIATION'] if type(instance) is dict else \ - getattr(instance, 'FAMILY_AFFILIATION') - CITIZENSHIP_STATUS = instance['CITIZENSHIP_STATUS'] if type(instance) is dict else \ - getattr(instance, 'CITIZENSHIP_STATUS') - SSN = instance['SSN'] if type(instance) is dict else getattr(instance, 'SSN') - if FAMILY_AFFILIATION == 2 and (CITIZENSHIP_STATUS == 1 or CITIZENSHIP_STATUS == 2): + FAMILY_AFFILIATION = ( + instance["FAMILY_AFFILIATION"] + if type(instance) is dict + else getattr(instance, "FAMILY_AFFILIATION") + ) + CITIZENSHIP_STATUS = ( + instance["CITIZENSHIP_STATUS"] + if type(instance) is dict + else getattr(instance, "CITIZENSHIP_STATUS") + ) + SSN = instance["SSN"] if type(instance) is dict else getattr(instance, "SSN") + if FAMILY_AFFILIATION == 2 and ( + CITIZENSHIP_STATUS == 1 or CITIZENSHIP_STATUS == 2 + ): if SSN in [str(i) * 9 for i in range(10)]: - return (False, - 'If FAMILY_AFFILIATION ==2 and CITIZENSHIP_STATUS==1 or 2, then SSN != 000000000 -- 999999999.') + return ( + False, + "If FAMILY_AFFILIATION ==2 and CITIZENSHIP_STATUS==1 or 2, then SSN != 000000000 -- 999999999.", + ["FAMILY_AFFILIATION", "CITIZENSHIP_STATUS", "SSN"], + ) else: - return (True, None) + return (True, None, ["FAMILY_AFFILIATION", "CITIZENSHIP_STATUS", "SSN"]) else: - return (True, None) + return (True, None, ["FAMILY_AFFILIATION", "CITIZENSHIP_STATUS", "SSN"]) + return lambda instance: validate(instance) + def validate__FAM_AFF__HOH__Fed_Time(): """If FAMILY_AFFILIATION == 1 and RELATIONSHIP_HOH== 1 or 2, then MONTHS_FED_TIME_LIMIT >= 1.""" # value is instance def validate(instance): - FAMILY_AFFILIATION = instance['FAMILY_AFFILIATION'] if type(instance) is dict else \ - getattr(instance, 'FAMILY_AFFILIATION') - RELATIONSHIP_HOH = instance['RELATIONSHIP_HOH'] if type(instance) is dict else \ - getattr(instance, 'RELATIONSHIP_HOH') + FAMILY_AFFILIATION = ( + instance["FAMILY_AFFILIATION"] + if type(instance) is dict + else getattr(instance, "FAMILY_AFFILIATION") + ) + RELATIONSHIP_HOH = ( + instance["RELATIONSHIP_HOH"] + if type(instance) is dict + else getattr(instance, "RELATIONSHIP_HOH") + ) RELATIONSHIP_HOH = int(RELATIONSHIP_HOH) - MONTHS_FED_TIME_LIMIT = instance['MONTHS_FED_TIME_LIMIT'] if type(instance) is dict else \ - getattr(instance, 'MONTHS_FED_TIME_LIMIT') + MONTHS_FED_TIME_LIMIT = ( + instance["MONTHS_FED_TIME_LIMIT"] + if type(instance) is dict + else getattr(instance, "MONTHS_FED_TIME_LIMIT") + ) if FAMILY_AFFILIATION == 1 and (RELATIONSHIP_HOH == 1 or RELATIONSHIP_HOH == 2): if MONTHS_FED_TIME_LIMIT is None or int(MONTHS_FED_TIME_LIMIT) < 1: return (False, - 'If FAMILY_AFFILIATION == 2 and MONTHS_FED_TIME_LIMIT== 1 or 2, then MONTHS_FED_TIME_LIMIT > 1.' + "If FAMILY_AFFILIATION == 2 and MONTHS_FED_TIME_LIMIT== 1 or 2," + + " then MONTHS_FED_TIME_LIMIT > 1.", + ['FAMILY_AFFILIATION', 'MONTHS_FED_TIME_LIMIT'] ) else: - return (True, None) + return ( + True, + None, + ["FAMILY_AFFILIATION", "RELATIONSHIP_HOH", "MONTHS_FED_TIME_LIMIT"], + ) else: - return (True, None) + return ( + True, + None, + ["FAMILY_AFFILIATION", "RELATIONSHIP_HOH", "MONTHS_FED_TIME_LIMIT"], + ) + return lambda instance: validate(instance) + def validate__FAM_AFF__HOH__Count_Fed_Time(): """If FAMILY_AFFILIATION == 1 and RELATIONSHIP_HOH== 1 or 2, then COUNTABLE_MONTH_FED_TIME >= 1.""" # value is instance def validate(instance): - FAMILY_AFFILIATION = instance['FAMILY_AFFILIATION'] if type(instance) is dict else \ - getattr(instance, 'FAMILY_AFFILIATION') - RELATIONSHIP_HOH = instance['RELATIONSHIP_HOH'] if type(instance) is dict else \ - getattr(instance, 'RELATIONSHIP_HOH') + FAMILY_AFFILIATION = ( + instance["FAMILY_AFFILIATION"] + if type(instance) is dict + else getattr(instance, "FAMILY_AFFILIATION") + ) + RELATIONSHIP_HOH = ( + instance["RELATIONSHIP_HOH"] + if type(instance) is dict + else getattr(instance, "RELATIONSHIP_HOH") + ) RELATIONSHIP_HOH = int(RELATIONSHIP_HOH) - COUNTABLE_MONTH_FED_TIME = instance['COUNTABLE_MONTH_FED_TIME'] if type(instance) is dict else \ - getattr(instance, 'COUNTABLE_MONTH_FED_TIME') + COUNTABLE_MONTH_FED_TIME = ( + instance["COUNTABLE_MONTH_FED_TIME"] + if type(instance) is dict + else getattr(instance, "COUNTABLE_MONTH_FED_TIME") + ) if FAMILY_AFFILIATION == 1 and (RELATIONSHIP_HOH == 1 or RELATIONSHIP_HOH == 2): if int(COUNTABLE_MONTH_FED_TIME) < 1: - return (False, 'If FAMILY_AFFILIATION == 2 and COUNTABLE_MONTH_FED_TIME== 1 or 2, then ' + - 'COUNTABLE_MONTH_FED_TIME > 1.') + return ( + False, + "If FAMILY_AFFILIATION == 2 and COUNTABLE_MONTH_FED_TIME== 1 or 2, then " + + "COUNTABLE_MONTH_FED_TIME > 1.", + [ + "FAMILY_AFFILIATION", + "RELATIONSHIP_HOH", + "COUNTABLE_MONTH_FED_TIME", + ], + ) else: - return (True, None) + return ( + True, + None, + [ + "FAMILY_AFFILIATION", + "RELATIONSHIP_HOH", + "COUNTABLE_MONTH_FED_TIME", + ], + ) else: - return (True, None) + return ( + True, + None, + ["FAMILY_AFFILIATION", "RELATIONSHIP_HOH", "COUNTABLE_MONTH_FED_TIME"], + ) + return lambda instance: validate(instance) @@ -376,7 +544,7 @@ def validate_header_section_matches_submission(datafile, section, generate_error error_category=ParserErrorCategoryChoices.PRE_CHECK, error_message=f"Data does not match the expected layout for {datafile.section}.", record=None, - field=None + field=None, ) return is_valid, error diff --git a/tdrs-backend/tdpservice/parsers/views.py b/tdrs-backend/tdpservice/parsers/views.py index 8e40b79e4..72d84e4f7 100644 --- a/tdrs-backend/tdpservice/parsers/views.py +++ b/tdrs-backend/tdpservice/parsers/views.py @@ -8,6 +8,7 @@ import base64 from io import BytesIO import xlsxwriter +import calendar logger = logging.getLogger() @@ -38,19 +39,32 @@ def get_queryset(self): def _get_xls_serialized_file(self, data): """Return xls file created from the error.""" + + def format_error_msg(x): + """Format error message.""" + error_msg = x['error_message'] + for key, value in x['fields_json']['friendly_name'].items(): + error_msg = error_msg.replace(key, value) if value else error_msg + return error_msg + row, col = 0, 0 output = BytesIO() workbook = xlsxwriter.Workbook(output) worksheet = workbook.add_worksheet() - - report_columns = ['case_number', - 'rpt_month_year', - 'error_type', - 'error_message', - 'item_number', - 'field_name', - 'row_number', - 'column_number'] + report_columns = [ + ('case_number', lambda x: x['case_number']), + ('year', lambda x: str(x['rpt_month_year'])[0:4] if x['rpt_month_year'] else None), + ('month', lambda x: calendar.month_name[ + int(str(x['rpt_month_year'])[4:]) + ] if x['rpt_month_year'] else None), + ('error_type', lambda x: x['error_type']), + ('error_message', lambda x: format_error_msg(x)), + ('item_number', lambda x: x['item_number']), + ('item_name', lambda x: ','.join([i for i in x['fields_json']['friendly_name'].values()])), + ('internal_variable_name', lambda x: ','.join([i for i in x['fields_json']['friendly_name'].keys()])), + ('row_number', lambda x: x['row_number']), + ('column_number', lambda x: x['column_number']) + ] # write beta banner worksheet.write(row, col, @@ -59,14 +73,24 @@ def _get_xls_serialized_file(self, data): "For now please refer to the reports you receive via email") row, col = 2, 0 # write csv header - [worksheet.write(row, col, key) for col, key in enumerate(report_columns)] - - for i in data: - row += 1 - col = 0 - for key in report_columns: - worksheet.write(row, col, i[key]) # writes value by looking up data by key - col += 1 + bold = workbook.add_format({'bold': True}) + + def format_header(header_list: list): + """Format header.""" + return ' '.join([i.capitalize() for i in header_list.split('_')]) + + # We will write the headers in the first row + [worksheet.write(row, col, format_header(key[0]), bold) for col, key in enumerate(report_columns)] + + [ + worksheet.write(row + 3, col, key[1](data_i)) for col, key in enumerate(report_columns) + for row, data_i in enumerate(data) + ] + + # autofit all columns except for the first one + worksheet.autofit() + worksheet.set_column(0, 0, 20) + workbook.close() return {"data": data, "xls_report": base64.b64encode(output.getvalue()).decode("utf-8")} diff --git a/tdrs-backend/tdpservice/search_indexes/admin/__init__.py b/tdrs-backend/tdpservice/search_indexes/admin/__init__.py index 19ad02979..29e140056 100644 --- a/tdrs-backend/tdpservice/search_indexes/admin/__init__.py +++ b/tdrs-backend/tdpservice/search_indexes/admin/__init__.py @@ -13,4 +13,7 @@ admin.site.register(models.ssp.SSP_M1, ssp.SSP_M1Admin) admin.site.register(models.ssp.SSP_M2, ssp.SSP_M2Admin) admin.site.register(models.ssp.SSP_M3, ssp.SSP_M3Admin) +admin.site.register(models.ssp.SSP_M4, ssp.SSP_M4Admin) +admin.site.register(models.ssp.SSP_M5, ssp.SSP_M5Admin) admin.site.register(models.ssp.SSP_M6, ssp.SSP_M6Admin) +admin.site.register(models.ssp.SSP_M7, ssp.SSP_M7Admin) diff --git a/tdrs-backend/tdpservice/search_indexes/admin/ssp.py b/tdrs-backend/tdpservice/search_indexes/admin/ssp.py index d8e2088af..8c590e14e 100644 --- a/tdrs-backend/tdpservice/search_indexes/admin/ssp.py +++ b/tdrs-backend/tdpservice/search_indexes/admin/ssp.py @@ -55,6 +55,35 @@ class SSP_M3Admin(admin.ModelAdmin): 'RPT_MONTH_YEAR', ] +class SSP_M4Admin(admin.ModelAdmin): + """ModelAdmin class for parsed M3 data files.""" + + list_display = [ + 'RecordType', + 'RPT_MONTH_YEAR', + 'CASE_NUMBER', + 'datafile', + ] + + list_filter = [ + CreationDateFilter, + 'RPT_MONTH_YEAR', + ] + +class SSP_M5Admin(admin.ModelAdmin): + """ModelAdmin class for parsed M3 data files.""" + + list_display = [ + 'RecordType', + 'RPT_MONTH_YEAR', + 'CASE_NUMBER', + 'datafile', + ] + + list_filter = [ + CreationDateFilter, + 'RPT_MONTH_YEAR', + ] class SSP_M6Admin(admin.ModelAdmin): """ModelAdmin class for parsed M6 data files.""" @@ -71,3 +100,22 @@ class SSP_M6Admin(admin.ModelAdmin): CreationDateFilter, 'RPT_MONTH_YEAR' ] + +class SSP_M7Admin(admin.ModelAdmin): + """ModelAdmin class for parsed M7 data files.""" + + list_display = [ + 'RecordType', + 'CALENDAR_QUARTER', + 'RPT_MONTH_YEAR', + 'TDRS_SECTION_IND', + 'STRATUM', + 'FAMILIES_MONTH', + 'datafile', + ] + + list_filter = [ + 'CALENDAR_QUARTER', + CreationDateFilter, + 'RPT_MONTH_YEAR', + ] diff --git a/tdrs-backend/tdpservice/search_indexes/documents/ssp.py b/tdrs-backend/tdpservice/search_indexes/documents/ssp.py index d047acd0d..c8018287f 100644 --- a/tdrs-backend/tdpservice/search_indexes/documents/ssp.py +++ b/tdrs-backend/tdpservice/search_indexes/documents/ssp.py @@ -2,7 +2,7 @@ from django_elasticsearch_dsl import Document from django_elasticsearch_dsl.registries import registry -from ..models.ssp import SSP_M1, SSP_M2, SSP_M3, SSP_M6 +from ..models.ssp import SSP_M1, SSP_M2, SSP_M3, SSP_M4, SSP_M5, SSP_M6, SSP_M7 from .document_base import DocumentBase @@ -200,6 +200,84 @@ class Django: 'OTHER_UNEARNED_INCOME', ] +@registry.register_document +class SSP_M4DataSubmissionDocument(DocumentBase, Document): + """Elastic search model mapping for a parsed SSP M4 data file.""" + + class Index: + """ElasticSearch index generation settings.""" + + name = 'ssp_m4_submissions' + settings = { + 'number_of_shards': 1, + 'number_of_replicas': 0, + } + + class Django: + """Django model reference and field mapping.""" + + model = SSP_M4 + fields = [ + 'RecordType', + 'RPT_MONTH_YEAR', + 'CASE_NUMBER', + 'COUNTY_FIPS_CODE', + 'STRATUM', + 'ZIP_CODE', + 'DISPOSITION', + 'CLOSURE_REASON', + 'REC_SUB_HOUSING', + 'REC_MED_ASSIST', + 'REC_FOOD_STAMPS', + 'REC_SUB_CC', + ] + +@registry.register_document +class SSP_M5DataSubmissionDocument(DocumentBase, Document): + """Elastic search model mapping for a parsed SSP M5 data file.""" + + class Index: + """ElasticSearch index generation settings.""" + + name = 'ssp_m5_submissions' + settings = { + 'number_of_shards': 1, + 'number_of_replicas': 0, + } + + class Django: + """Django model reference and field mapping.""" + + model = SSP_M5 + fields = [ + 'RecordType', + 'RPT_MONTH_YEAR', + 'CASE_NUMBER', + 'FAMILY_AFFILIATION', + 'DATE_OF_BIRTH', + 'SSN', + 'RACE_HISPANIC', + 'RACE_AMER_INDIAN', + 'RACE_ASIAN', + 'RACE_BLACK', + 'RACE_HAWAIIAN', + 'RACE_WHITE', + 'GENDER', + 'REC_OASDI_INSURANCE', + 'REC_FEDERAL_DISABILITY', + 'REC_AID_TOTALLY_DISABLED', + 'REC_AID_AGED_BLIND', + 'REC_SSI', + 'MARITAL_STATUS', + 'RELATIONSHIP_HOH', + 'PARENT_MINOR_CHILD', + 'NEEDS_OF_PREGNANT_WOMAN', + 'EDUCATION_LEVEL', + 'CITIZENSHIP_STATUS', + 'EMPLOYMENT_STATUS', + 'AMOUNT_EARNED_INCOME', + 'AMOUNT_UNEARNED_INCOME', + ] @registry.register_document class SSP_M6DataSubmissionDocument(DocumentBase, Document): @@ -233,3 +311,29 @@ class Django: 'AMT_ASSISTANCE', 'CLOSED_CASES', ] + +@registry.register_document +class SSP_M7DataSubmissionDocument(DocumentBase, Document): + """Elastic search model mapping for a parsed SSP M7 data file.""" + + class Index: + """ElasticSearch index generation settings.""" + + name = 'ssp_m7_submissions' + settings = { + 'number_of_shards': 1, + 'number_of_replicas': 0, + } + + class Django: + """Django model reference and field mapping.""" + + model = SSP_M7 + fields = [ + "RecordType", + "CALENDAR_QUARTER", + "RPT_MONTH_YEAR", + "TDRS_SECTION_IND", + "STRATUM", + "FAMILIES_MONTH", + ] diff --git a/tdrs-backend/tdpservice/search_indexes/migrations/0020_ssp_m4_ssp_m5.py b/tdrs-backend/tdpservice/search_indexes/migrations/0020_ssp_m4_ssp_m5.py new file mode 100644 index 000000000..ae07879a6 --- /dev/null +++ b/tdrs-backend/tdpservice/search_indexes/migrations/0020_ssp_m4_ssp_m5.py @@ -0,0 +1,69 @@ +# Generated by Django 3.2.15 on 2023-10-10 18:12 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('data_files', '0012_datafile_s3_versioning_id'), + ('search_indexes', '0019_ssp_m6'), + ] + + operations = [ + migrations.CreateModel( + name='SSP_M5', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('RecordType', models.CharField(max_length=156, null=True)), + ('RPT_MONTH_YEAR', models.IntegerField(null=True)), + ('CASE_NUMBER', models.CharField(max_length=11, null=True)), + ('FAMILY_AFFILIATION', models.IntegerField(null=True)), + ('DATE_OF_BIRTH', models.CharField(max_length=8, null=True)), + ('SSN', models.CharField(max_length=9, null=True)), + ('RACE_HISPANIC', models.IntegerField(null=True)), + ('RACE_AMER_INDIAN', models.IntegerField(null=True)), + ('RACE_ASIAN', models.IntegerField(null=True)), + ('RACE_BLACK', models.IntegerField(null=True)), + ('RACE_HAWAIIAN', models.IntegerField(null=True)), + ('RACE_WHITE', models.IntegerField(null=True)), + ('GENDER', models.IntegerField(null=True)), + ('REC_OASDI_INSURANCE', models.IntegerField(null=True)), + ('REC_FEDERAL_DISABILITY', models.IntegerField(null=True)), + ('REC_AID_TOTALLY_DISABLED', models.IntegerField(null=True)), + ('REC_AID_AGED_BLIND', models.IntegerField(null=True)), + ('REC_SSI', models.IntegerField(null=True)), + ('MARITAL_STATUS', models.IntegerField(null=True)), + ('RELATIONSHIP_HOH', models.CharField(max_length=2, null=True)), + ('PARENT_MINOR_CHILD', models.IntegerField(null=True)), + ('NEEDS_OF_PREGNANT_WOMAN', models.IntegerField(null=True)), + ('EDUCATION_LEVEL', models.CharField(max_length=2, null=True)), + ('CITIZENSHIP_STATUS', models.IntegerField(null=True)), + ('EMPLOYMENT_STATUS', models.IntegerField(null=True)), + ('AMOUNT_EARNED_INCOME', models.CharField(max_length=4, null=True)), + ('AMOUNT_UNEARNED_INCOME', models.CharField(max_length=4, null=True)), + ('datafile', models.ForeignKey(blank=True, help_text='The parent file from which this record was created.', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='m5_parent', to='data_files.datafile')), + ], + ), + migrations.CreateModel( + name='SSP_M4', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('RecordType', models.CharField(max_length=156, null=True)), + ('RPT_MONTH_YEAR', models.IntegerField(null=True)), + ('CASE_NUMBER', models.CharField(max_length=11, null=True)), + ('COUNTY_FIPS_CODE', models.CharField(max_length=3, null=True)), + ('STRATUM', models.CharField(max_length=2, null=True)), + ('ZIP_CODE', models.CharField(max_length=5, null=True)), + ('DISPOSITION', models.IntegerField(null=True)), + ('CLOSURE_REASON', models.CharField(max_length=2, null=True)), + ('REC_SUB_HOUSING', models.IntegerField(null=True)), + ('REC_MED_ASSIST', models.IntegerField(null=True)), + ('REC_FOOD_STAMPS', models.IntegerField(null=True)), + ('REC_SUB_CC', models.IntegerField(null=True)), + ('datafile', models.ForeignKey(blank=True, help_text='The parent file from which this record was created.', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='m4_parent', to='data_files.datafile')), + ], + ), + ] diff --git a/tdrs-backend/tdpservice/search_indexes/migrations/0021_ssp_m7.py b/tdrs-backend/tdpservice/search_indexes/migrations/0021_ssp_m7.py new file mode 100644 index 000000000..3bfa7f5e1 --- /dev/null +++ b/tdrs-backend/tdpservice/search_indexes/migrations/0021_ssp_m7.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.15 on 2023-10-19 14:24 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('data_files', '0012_datafile_s3_versioning_id'), + ('search_indexes', '0020_ssp_m4_ssp_m5'), + ] + + operations = [ + migrations.CreateModel( + name='SSP_M7', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('RecordType', models.CharField(max_length=156, null=True)), + ('CALENDAR_QUARTER', models.IntegerField(blank=True, null=True)), + ('RPT_MONTH_YEAR', models.IntegerField(null=True)), + ('TDRS_SECTION_IND', models.CharField(max_length=1, null=True)), + ('STRATUM', models.CharField(max_length=2, null=True)), + ('FAMILIES_MONTH', models.IntegerField(null=True)), + ('datafile', models.ForeignKey(blank=True, help_text='The parent file from which this record was created.', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='m7_parent', to='data_files.datafile')), + ], + ), + ] diff --git a/tdrs-backend/tdpservice/search_indexes/models/ssp.py b/tdrs-backend/tdpservice/search_indexes/models/ssp.py index 05c599c39..b11e6fff5 100644 --- a/tdrs-backend/tdpservice/search_indexes/models/ssp.py +++ b/tdrs-backend/tdpservice/search_indexes/models/ssp.py @@ -2,9 +2,7 @@ import uuid from django.db import models -from django.contrib.contenttypes.fields import GenericRelation from tdpservice.data_files.models import DataFile -from tdpservice.parsers.models import ParserError class SSP_M1(models.Model): @@ -24,7 +22,6 @@ class SSP_M1(models.Model): related_name='m1_parent' ) - error = GenericRelation(ParserError) RecordType = models.CharField(max_length=156, null=True, blank=False) RPT_MONTH_YEAR = models.IntegerField(null=True, blank=False) CASE_NUMBER = models.CharField(max_length=11, null=True, blank=False) @@ -36,9 +33,7 @@ class SSP_M1(models.Model): ) STRATUM = models.CharField(max_length=2, null=True, blank=False) ZIP_CODE = models.CharField(max_length=5, null=True, blank=False) - # FUNDING_STREAM = models.IntegerField(null=True, blank=False) DISPOSITION = models.IntegerField(null=True, blank=False) - # NEW_APPLICANT = models.IntegerField(null=True, blank=False) NBR_FAMILY_MEMBERS = models.IntegerField(null=True, blank=False) FAMILY_TYPE = models.IntegerField(null=True, blank=False) TANF_ASST_IN_6MONTHS = models.IntegerField(null=True, blank=False) @@ -74,8 +69,6 @@ class SSP_M1(models.Model): REDUCTIONS_ON_RECEIPTS = models.IntegerField(null=True, blank=False) OTHER_NON_SANCTION = models.IntegerField(null=True, blank=False) WAIVER_EVAL_CONTROL_GRPS = models.IntegerField(null=True, blank=False) - # FAMILY_EXEMPT_TIME_LIMITS = models.IntegerField(null=True, blank=False) - # FAMILY_NEW_CHILD = models.IntegerField(null=True, blank=False) class SSP_M2(models.Model): @@ -95,7 +88,6 @@ class SSP_M2(models.Model): related_name='m2_parent' ) - error = GenericRelation(ParserError) RecordType = models.CharField(max_length=156, null=True, blank=False) RPT_MONTH_YEAR = models.IntegerField(null=True, blank=False) CASE_NUMBER = models.CharField(max_length=11, null=True, blank=False) @@ -124,9 +116,6 @@ class SSP_M2(models.Model): EDUCATION_LEVEL = models.IntegerField(null=True, blank=False) CITIZENSHIP_STATUS = models.IntegerField(null=True, blank=False) COOPERATION_CHILD_SUPPORT = models.IntegerField(null=True, blank=False) - # months_fed_time_limit = models.FloatField(null=True, blank=False) - # months_state_time_limit = models.FloatField(null=True, blank=False) - # current_month_state_exempt = models.IntegerField(null=True, blank=False) EMPLOYMENT_STATUS = models.IntegerField(null=True, blank=False) WORK_ELIGIBLE_INDICATOR = models.IntegerField(null=True, blank=False) WORK_PART_STATUS = models.IntegerField(null=True, blank=False) @@ -186,7 +175,6 @@ class SSP_M3(models.Model): related_name='m3_parent' ) - error = GenericRelation(ParserError) RecordType = models.CharField(max_length=156, null=True, blank=False) RPT_MONTH_YEAR = models.IntegerField(null=True, blank=False) CASE_NUMBER = models.CharField(max_length=11, null=True, blank=False) @@ -211,6 +199,85 @@ class SSP_M3(models.Model): UNEARNED_SSI = models.IntegerField(null=True, blank=False) OTHER_UNEARNED_INCOME = models.IntegerField(null=True, blank=False) +class SSP_M4(models.Model): + """ + Parsed record representing an SSP M1 data submission. + + Mapped to an elastic search index. + """ + + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + datafile = models.ForeignKey( + DataFile, + blank=True, + help_text='The parent file from which this record was created.', + null=True, + on_delete=models.CASCADE, + related_name='m4_parent' + ) + + RecordType = models.CharField(max_length=156, null=True, blank=False) + RPT_MONTH_YEAR = models.IntegerField(null=True, blank=False) + CASE_NUMBER = models.CharField(max_length=11, null=True, blank=False) + COUNTY_FIPS_CODE = models.CharField( + max_length=3, + null=True, + blank=False + ) + STRATUM = models.CharField(max_length=2, null=True, blank=False) + ZIP_CODE = models.CharField(max_length=5, null=True, blank=False) + DISPOSITION = models.IntegerField(null=True, blank=False) + CLOSURE_REASON = models.CharField(max_length=2, null=True, blank=False) + REC_SUB_HOUSING = models.IntegerField(null=True, blank=False) + REC_MED_ASSIST = models.IntegerField(null=True, blank=False) + REC_FOOD_STAMPS = models.IntegerField(null=True, blank=False) + REC_SUB_CC = models.IntegerField(null=True, blank=False) + +class SSP_M5(models.Model): + """ + Parsed record representing an SSP M1 data submission. + + Mapped to an elastic search index. + """ + + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + datafile = models.ForeignKey( + DataFile, + blank=True, + help_text='The parent file from which this record was created.', + null=True, + on_delete=models.CASCADE, + related_name='m5_parent' + ) + + RecordType = models.CharField(max_length=156, null=True, blank=False) + RPT_MONTH_YEAR = models.IntegerField(null=True, blank=False) + CASE_NUMBER = models.CharField(max_length=11, null=True, blank=False) + + FAMILY_AFFILIATION = models.IntegerField(null=True, blank=False) + DATE_OF_BIRTH = models.CharField(max_length=8, null=True, blank=False) + SSN = models.CharField(max_length=9, null=True, blank=False) + RACE_HISPANIC = models.IntegerField(null=True, blank=False) + RACE_AMER_INDIAN = models.IntegerField(null=True, blank=False) + RACE_ASIAN = models.IntegerField(null=True, blank=False) + RACE_BLACK = models.IntegerField(null=True, blank=False) + RACE_HAWAIIAN = models.IntegerField(null=True, blank=False) + RACE_WHITE = models.IntegerField(null=True, blank=False) + GENDER = models.IntegerField(null=True, blank=False) + REC_OASDI_INSURANCE = models.IntegerField(null=True, blank=False) + REC_FEDERAL_DISABILITY = models.IntegerField(null=True, blank=False) + REC_AID_TOTALLY_DISABLED = models.IntegerField(null=True, blank=False) + REC_AID_AGED_BLIND = models.IntegerField(null=True, blank=False) + REC_SSI = models.IntegerField(null=True, blank=False) + MARITAL_STATUS = models.IntegerField(null=True, blank=False) + RELATIONSHIP_HOH = models.CharField(max_length=2, null=True, blank=False) + PARENT_MINOR_CHILD = models.IntegerField(null=True, blank=False) + NEEDS_OF_PREGNANT_WOMAN = models.IntegerField(null=True, blank=False) + EDUCATION_LEVEL = models.CharField(max_length=2, null=True, blank=False) + CITIZENSHIP_STATUS = models.IntegerField(null=True, blank=False) + EMPLOYMENT_STATUS = models.IntegerField(null=True, blank=False) + AMOUNT_EARNED_INCOME = models.CharField(max_length=4, null=True, blank=False) + AMOUNT_UNEARNED_INCOME = models.CharField(max_length=4, null=True, blank=False) class SSP_M6(models.Model): """ @@ -243,3 +310,31 @@ class SSP_M6(models.Model): NONCUSTODIALS = models.IntegerField(null=True, blank=True) AMT_ASSISTANCE = models.IntegerField(null=True, blank=True) CLOSED_CASES = models.IntegerField(null=True, blank=True) + +class SSP_M7(models.Model): + """ + Parsed record representing an SSP M3 data submission. + + Mapped to an elastic search index. + """ + + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + datafile = models.ForeignKey( + DataFile, + blank=True, + help_text='The parent file from which this record was created.', + null=True, + on_delete=models.CASCADE, + related_name='m7_parent' + ) + + RecordType = models.CharField(max_length=156, null=True, blank=False) + CALENDAR_QUARTER = models.IntegerField(null=True, blank=True) + RPT_MONTH_YEAR = models.IntegerField(null=True, blank=False) + TDRS_SECTION_IND = models.CharField( + max_length=1, + null=True, + blank=False + ) + STRATUM = models.CharField(max_length=2, null=True, blank=False) + FAMILIES_MONTH = models.IntegerField(null=True, blank=False) diff --git a/tdrs-backend/tdpservice/search_indexes/models/tanf.py b/tdrs-backend/tdpservice/search_indexes/models/tanf.py index 9e31fffe2..f6ba10f29 100644 --- a/tdrs-backend/tdpservice/search_indexes/models/tanf.py +++ b/tdrs-backend/tdpservice/search_indexes/models/tanf.py @@ -2,9 +2,7 @@ import uuid from django.db import models -from django.contrib.contenttypes.fields import GenericRelation from tdpservice.data_files.models import DataFile -from tdpservice.parsers.models import ParserError class TANF_T1(models.Model): @@ -24,7 +22,6 @@ class TANF_T1(models.Model): related_name='t1_parent' ) - error = GenericRelation(ParserError) RecordType = models.CharField(max_length=156, null=True, blank=False) RPT_MONTH_YEAR = models.IntegerField(null=True, blank=False) CASE_NUMBER = models.CharField(max_length=11, null=True, blank=False) diff --git a/tdrs-backend/tdpservice/search_indexes/test/test_model_mapping.py b/tdrs-backend/tdpservice/search_indexes/test/test_model_mapping.py index 15581d304..d6089228f 100644 --- a/tdrs-backend/tdpservice/search_indexes/test/test_model_mapping.py +++ b/tdrs-backend/tdpservice/search_indexes/test/test_model_mapping.py @@ -350,9 +350,7 @@ def test_can_create_and_index_tanf_t7_submission(test_datafile): submission.CALENDAR_QUARTER = 1 submission.TDRS_SECTION_IND = '1' submission.STRATUM = '01' - submission.FAMILIES_MONTH_1 = 47655 - submission.FAMILIES_MONTH_2 = 81982 - submission.FAMILIES_MONTH_3 = 9999999 + submission.FAMILIES_MONTH = 47655 submission.save() @@ -579,6 +577,85 @@ def test_can_create_and_index_ssp_m3_submission(): assert response.hits.total.value == 1 +@pytest.mark.django_db +def test_can_create_and_index_ssp_m4_submission(): + """SSP M4 submissions can be created and mapped.""" + record_num = fake.uuid4() + + submission = models.ssp.SSP_M4.objects.create( + RecordType=record_num, + RPT_MONTH_YEAR=1, + CASE_NUMBER='1', + COUNTY_FIPS_CODE='1', + STRATUM='01', + ZIP_CODE='11111', + DISPOSITION=1, + CLOSURE_REASON='01', + REC_SUB_HOUSING=1, + REC_MED_ASSIST=1, + REC_FOOD_STAMPS=1, + REC_SUB_CC=1 + ) + + assert models.ssp.SSP_M4.objects.count() == 1 + + assert submission.id is not None + + assert submission.id is not None + + search = documents.ssp.SSP_M4DataSubmissionDocument.search().query( + 'match', + RecordType=record_num + ) + response = search.execute() + + assert response.hits.total.value == 1 + +@pytest.mark.django_db +def test_can_create_and_index_ssp_m5_submission(): + """SSP M5 submissions can be created and mapped.""" + record_num = fake.uuid4() + + submission = models.ssp.SSP_M5.objects.create( + RecordType=record_num, + RPT_MONTH_YEAR=1, + CASE_NUMBER='1', + + FAMILY_AFFILIATION=1, + DATE_OF_BIRTH='11111111', + SSN='123456789', + RACE_HISPANIC=1, + RACE_AMER_INDIAN=1, + RACE_ASIAN=1, + RACE_BLACK=1, + RACE_HAWAIIAN=1, + RACE_WHITE=1, + GENDER=1, + REC_OASDI_INSURANCE=1, + REC_FEDERAL_DISABILITY=1, + REC_AID_TOTALLY_DISABLED=1, + REC_AID_AGED_BLIND=1, + REC_SSI=1, + MARITAL_STATUS=1, + RELATIONSHIP_HOH='01', + PARENT_MINOR_CHILD=1, + NEEDS_OF_PREGNANT_WOMAN=1, + EDUCATION_LEVEL='01', + CITIZENSHIP_STATUS=1, + EMPLOYMENT_STATUS=1, + AMOUNT_EARNED_INCOME='1000', + AMOUNT_UNEARNED_INCOME='1000' + ) + + assert submission.id is not None + + search = documents.ssp.SSP_M5DataSubmissionDocument.search().query( + 'match', + RecordType=record_num + ) + response = search.execute() + + assert response.hits.total.value == 1 @pytest.mark.django_db def test_can_create_and_index_ssp_m6_submission(test_datafile): @@ -617,3 +694,30 @@ def test_can_create_and_index_ssp_m6_submission(test_datafile): response = search.execute() assert response.hits.total.value == 1 + +@pytest.mark.django_db +def test_can_create_and_index_ssp_m7_submission(test_datafile): + """SSP M7 submissions can be created and mapped.""" + record_num = fake.uuid4() + + submission = models.ssp.SSP_M7() + submission.datafile = test_datafile + submission.RecordType = record_num + submission.CALENDAR_YEAR = 2020 + submission.CALENDAR_QUARTER = 1 + submission.TDRS_SECTION_IND = '1' + submission.STRATUM = '01' + submission.FAMILIES_MONTH = 47655 + + submission.save() + + # No checks her because m7 records can't be parsed currently. + assert submission.id is not None + + search = documents.ssp.SSP_M7DataSubmissionDocument.search().query( + 'match', + RecordType=record_num + ) + response = search.execute() + + assert response.hits.total.value == 1 diff --git a/tdrs-backend/tdpservice/settings/cloudgov.py b/tdrs-backend/tdpservice/settings/cloudgov.py index b7def9383..b00f76fa9 100644 --- a/tdrs-backend/tdpservice/settings/cloudgov.py +++ b/tdrs-backend/tdpservice/settings/cloudgov.py @@ -155,7 +155,14 @@ class Development(CloudGov): # https://docs.djangoproject.com/en/2.0/ref/settings/#allowed-hosts ALLOWED_HOSTS = ['.app.cloud.gov'] - + CORS_ORIGIN_ALLOW_ALL = False + CORS_ALLOWED_ORIGINS = ['https://*.app.cloud.gov'] + CORS_ALLOW_CREDENTIALS = True + CORS_ALLOW_METHODS = ( + "GET", + "PATCH", + "POST", + ) class Staging(CloudGov): """Settings for applications deployed in the Cloud.gov staging space.""" @@ -164,7 +171,14 @@ class Staging(CloudGov): 'tdp-frontend-staging.acf.hhs.gov', 'tdp-frontend-develop.acf.hhs.gov' ] - + CORS_ALLOWED_ORIGINS = ['https://*.acf.hhs.gov'] + CORS_ORIGIN_ALLOW_ALL = False + CORS_ALLOW_CREDENTIALS = True + CORS_ALLOW_METHODS = ( + "GET", + "PATCH", + "POST", + ) LOGIN_GOV_CLIENT_ID = os.getenv( 'OIDC_RP_CLIENT_ID', 'urn:gov:gsa:openidconnect.profiles:sp:sso:hhs:tanf-proto-staging' @@ -189,3 +203,10 @@ class Production(CloudGov): # CORS allowed origins CORS_ALLOWED_ORIGINS = ['https://tanfdata.acf.hhs.gov'] + CORS_ORIGIN_ALLOW_ALL = False + CORS_ALLOW_CREDENTIALS = True + CORS_ALLOW_METHODS = ( + "GET", + "PATCH", + "POST", + ) diff --git a/tdrs-backend/tdpservice/settings/common.py b/tdrs-backend/tdpservice/settings/common.py index cd01de016..000ef3d1e 100644 --- a/tdrs-backend/tdpservice/settings/common.py +++ b/tdrs-backend/tdpservice/settings/common.py @@ -469,7 +469,8 @@ class Common(Configuration): # Elastic ELASTICSEARCH_DSL = { 'default': { - 'hosts': os.getenv('ELASTIC_HOST', 'elastic:9200') + 'hosts': os.getenv('ELASTIC_HOST', 'elastic:9200'), + 'http_auth': ('elastic', os.getenv('ELASTIC_PASSWORD', 'changeme')) }, } diff --git a/tdrs-backend/tdpservice/users/test/test_permissions.py b/tdrs-backend/tdpservice/users/test/test_permissions.py index d942fd0c8..4ac21409a 100644 --- a/tdrs-backend/tdpservice/users/test/test_permissions.py +++ b/tdrs-backend/tdpservice/users/test/test_permissions.py @@ -123,9 +123,18 @@ def test_ofa_system_admin_permissions(ofa_system_admin): 'search_indexes.add_ssp_m3', 'search_indexes.view_ssp_m3', 'search_indexes.change_ssp_m3', + 'search_indexes.add_ssp_m4', + 'search_indexes.view_ssp_m4', + 'search_indexes.change_ssp_m4', + 'search_indexes.add_ssp_m5', + 'search_indexes.view_ssp_m5', + 'search_indexes.change_ssp_m5', 'search_indexes.add_ssp_m6', 'search_indexes.view_ssp_m6', 'search_indexes.change_ssp_m6', + 'search_indexes.add_ssp_m7', + 'search_indexes.view_ssp_m7', + 'search_indexes.change_ssp_m7', } group_permissions = ofa_system_admin.get_group_permissions() assert group_permissions == expected_permissions diff --git a/tdrs-frontend/nginx/cloud.gov/locations.conf b/tdrs-frontend/nginx/cloud.gov/locations.conf index 779dc9f2a..1bccf800e 100644 --- a/tdrs-frontend/nginx/cloud.gov/locations.conf +++ b/tdrs-frontend/nginx/cloud.gov/locations.conf @@ -16,9 +16,16 @@ location ~ ^/(v1|admin|static/admin|swagger|redocs) { proxy_buffer_size 4k; proxy_temp_file_write_size 64k; + limit_except GET HEAD POST { deny all; + } + add_header Access-Control-Allow-Origin 's3-us-gov-west-1.amazonaws.com'; } +if ($request_method ~ ^(PATCH|TRACE|OPTION)$) { + return 405; +} + location = /profile { index index.html index.htm; try_files $uri $uri/ /index.html;