From 1da23350945da11aeba5c2a7c5677cce60c0b176 Mon Sep 17 00:00:00 2001 From: Chris Hendrix Date: Wed, 2 Jan 2019 15:05:58 -0800 Subject: [PATCH] Point to fork of archiver - This has the changes necessary to preserve the folder permissions - Also updated to use latest version and fix usage [#162895264] pivotal-cf/winfs-injector #5: `winfs-injector` doesn't work on windows due to permission errors Signed-off-by: Caitlyn Yu --- Gopkg.lock | 34 +- Gopkg.toml | 3 +- tile/zipper.go | 2 +- vendor/github.com/golang/snappy/.gitignore | 16 + vendor/github.com/golang/snappy/AUTHORS | 15 + vendor/github.com/golang/snappy/CONTRIBUTORS | 37 + vendor/github.com/golang/snappy/LICENSE | 27 + vendor/github.com/golang/snappy/README | 107 + .../golang/snappy/cmd/snappytool/main.go | 46 + vendor/github.com/golang/snappy/decode.go | 237 + .../github.com/golang/snappy/decode_amd64.go | 14 + .../github.com/golang/snappy/decode_amd64.s | 490 + .../github.com/golang/snappy/decode_other.go | 101 + vendor/github.com/golang/snappy/encode.go | 285 + .../github.com/golang/snappy/encode_amd64.go | 29 + .../github.com/golang/snappy/encode_amd64.s | 730 + .../github.com/golang/snappy/encode_other.go | 238 + .../github.com/golang/snappy/golden_test.go | 1965 + vendor/github.com/golang/snappy/misc/main.cpp | 79 + vendor/github.com/golang/snappy/snappy.go | 98 + .../github.com/golang/snappy/snappy_test.go | 1353 + .../snappy/testdata/Mark.Twain-Tom.Sawyer.txt | 396 + .../Mark.Twain-Tom.Sawyer.txt.rawsnappy | Bin 0 -> 9871 bytes .../.github/ISSUE_TEMPLATE/bug_report.md | 41 + .../ISSUE_TEMPLATE/generic-feature-request.md | 28 + .../ISSUE_TEMPLATE/new-format-request.md | 32 + vendor/github.com/mholt/archiver/.travis.yml | 4 +- vendor/github.com/mholt/archiver/README.md | 218 +- vendor/github.com/mholt/archiver/appveyor.yml | 21 +- vendor/github.com/mholt/archiver/archiver.go | 468 +- .../mholt/archiver/archiver_test.go | 480 +- vendor/github.com/mholt/archiver/build.bash | 20 +- vendor/github.com/mholt/archiver/bz2.go | 64 + .../github.com/mholt/archiver/cmd/arc/main.go | 329 + .../mholt/archiver/cmd/archiver/main.go | 84 - vendor/github.com/mholt/archiver/doc_test.go | 260 + .../mholt/archiver/filecompressor.go | 67 + .../mholt/archiver/filecompressor_test.go | 122 + vendor/github.com/mholt/archiver/gz.go | 61 + vendor/github.com/mholt/archiver/lz4.go | 56 + vendor/github.com/mholt/archiver/rar.go | 388 +- vendor/github.com/mholt/archiver/sz.go | 51 + vendor/github.com/mholt/archiver/tar.go | 627 +- vendor/github.com/mholt/archiver/tarbz2.go | 140 +- vendor/github.com/mholt/archiver/targz.go | 134 +- vendor/github.com/mholt/archiver/tarlz4.go | 122 + vendor/github.com/mholt/archiver/tarsz.go | 114 + vendor/github.com/mholt/archiver/tarxz.go | 135 +- .../github.com/mholt/archiver/testdata/exist | 1 + .../mholt/archiver/testdata/proverb3.txt | 1 + vendor/github.com/mholt/archiver/xz.go | 58 + vendor/github.com/mholt/archiver/zip.go | 583 +- vendor/github.com/pierrec/lz4/.gitignore | 33 + vendor/github.com/pierrec/lz4/.travis.yml | 22 + vendor/github.com/pierrec/lz4/LICENSE | 28 + vendor/github.com/pierrec/lz4/README.md | 24 + vendor/github.com/pierrec/lz4/bench_test.go | 119 + vendor/github.com/pierrec/lz4/block.go | 397 + vendor/github.com/pierrec/lz4/block_test.go | 98 + vendor/github.com/pierrec/lz4/debug.go | 23 + vendor/github.com/pierrec/lz4/debug_stub.go | 7 + vendor/github.com/pierrec/lz4/export_test.go | 13 + ...1572067d493db8dc8161f05c339a5192b0b4087-22 | Bin 0 -> 105 bytes ...02766f768fbfbd81b752cce427eb5242a44929cc-5 | Bin 0 -> 19 bytes ...32f04032e12567057782672bb12670c20d38439-10 | Bin 0 -> 23 bytes ...367b985641aca66e6e4eeea68acf5e2a02c62a8-16 | Bin 0 -> 38 bytes ...03e85abc49352b2f7cc83efd7e4274da02d78b84-6 | Bin 0 -> 13 bytes ...049f82a81bb6b4d7cf69fac5e413f6ce299d48cf-8 | Bin 0 -> 19 bytes ...04c05c7956f17e57a91a47909bd0706135cf17a6-1 | Bin 0 -> 46 bytes ...50e2af2a57d8044139ba21375f0ac6fcb7ab0b1-12 | Bin 0 -> 84 bytes ...519d86e62cc577b98e9a4836b071ba1692c7674-30 | Bin 0 -> 88 bytes ...0547c73efb9b6a345fd9a52aa0798b48dd9aca62-2 | Bin 0 -> 33 bytes ...5aae2cf8756f66066cf623618042ebaa92ec745-14 | Bin 0 -> 73 bytes ...608f9eba5e6fd4d70241a81a6950ca51d78eb64-33 | Bin 0 -> 88 bytes ...07fe3e792f0d2862dccc04db22c0e4aef4d41b49-6 | Bin 0 -> 12 bytes ...990ac54decbca1a97893e83c7feb2be89cb10ea-14 | Bin 0 -> 68 bytes ...9f2eda28ecc97304659afded4d13a188baf2107-22 | Bin 0 -> 51 bytes ...a4ff2ab3a01888686c5bc358b72be108bbb4721-16 | Bin 0 -> 20 bytes ...a7fddf3c8aa1c781223748129c9dc0807de3a6b-28 | Bin 0 -> 51 bytes ...0b5bec228930b2cfcda3be9a39107a6bc8044f1e-3 | Bin 0 -> 16 bytes ...ca5fd3841a6777873c7ef26f65a384e7b15d065-18 | Bin 0 -> 61 bytes ...0ce9c3bac93df0ea1f6343d223d5220f9eb2383a-8 | Bin 0 -> 22 bytes ...cf885cd35e7124005b0ba0c3c4431ddfaeff84d-11 | Bin 0 -> 48 bytes ...0d7c02d4e91d82b0355baaca1237062639442db6-3 | 1 + ...0e1b2b0c49dfb86fe01d3453dd24e39482e132e8-7 | Bin 0 -> 21 bytes .../github.com/pierrec/lz4/fuzz/corpus/1.bz2 | Bin 0 -> 42 bytes .../github.com/pierrec/lz4/fuzz/corpus/10.bz2 | Bin 0 -> 14 bytes ...06b9d718c97bb7c872847d3070a570e99d9fa3e-22 | Bin 0 -> 82 bytes ...0fa5d9f0fe75f73c0e92a1fe1c00f0041ec8f39-24 | Bin 0 -> 51 bytes .../github.com/pierrec/lz4/fuzz/corpus/11.bz2 | Bin 0 -> 14 bytes ...113a12cbb28b83fcee714d58c35bbf52c0740e90-7 | Bin 0 -> 21 bytes .../github.com/pierrec/lz4/fuzz/corpus/12.bz2 | Bin 0 -> 14 bytes ...288161f8ce422490f63f257ce7338ef90fb8827-15 | Bin 0 -> 70 bytes .../github.com/pierrec/lz4/fuzz/corpus/13.bz2 | Bin 0 -> 14 bytes ...36f7224ae337a61df2e72b80af8b1aaa5933af3-10 | Bin 0 -> 21 bytes ...3c3c26f7a34d01fc89c92ca8ba2ba5ae430c225-16 | Bin 0 -> 38 bytes ...3db64707d1ea3070b4a37b6c1291d6125acbbd3-10 | Bin 0 -> 22 bytes .../github.com/pierrec/lz4/fuzz/corpus/14.bz2 | Bin 0 -> 14 bytes ...4193748a7b6cda204b11d042a35635151e90dbb-20 | Bin 0 -> 65 bytes ...42d4f8cb427dd3562d72d889dfc0ea3a2b03d98-22 | Bin 0 -> 83 bytes .../github.com/pierrec/lz4/fuzz/corpus/15.bz2 | Bin 0 -> 14 bytes ...5663b854e9a4f193502ea6463dae38b4d8fca90-19 | Bin 0 -> 71 bytes ...15e223354eb5378a7ee74a41dfab28ffc895ca33-1 | Bin 0 -> 55 bytes .../github.com/pierrec/lz4/fuzz/corpus/16.bz2 | Bin 0 -> 14 bytes .../github.com/pierrec/lz4/fuzz/corpus/17.bz2 | Bin 0 -> 14 bytes ...177c1c68fead4507aa47dd2455fd17a10ceda5ea-1 | Bin 0 -> 31 bytes ...7871030a73ac4d12ada652948135cb4639d679c-34 | Bin 0 -> 42 bytes .../github.com/pierrec/lz4/fuzz/corpus/18.bz2 | Bin 0 -> 14 bytes ...80a2772b126d31abcb3ef692a14b13cf47f103e-17 | Bin 0 -> 38 bytes .../github.com/pierrec/lz4/fuzz/corpus/19.bz2 | Bin 0 -> 48 bytes ...91e0dd24b8c7f8babeae4839768df39acc17eb1-17 | Bin 0 -> 32 bytes ...971e6ed6c6f6069fc2a9ed3038101e89bbcc381-26 | Bin 0 -> 68 bytes ...1a582381781f264f551bd6f0f2284a931147e6d9-4 | Bin 0 -> 9 bytes ...a58f02dc83ac8315a85babdea6d757cbff2bb03-30 | Bin 0 -> 66 bytes ...a5a08b67764facaad851b9f1cbc5cfb31b7fb56-29 | Bin 0 -> 118 bytes ...c2781a1ffae4059ce3e93a55ec8d8cbf8bdecdf-22 | Bin 0 -> 105 bytes ...c944d5065b1a2b30e412604a14aa52565a5765b-35 | Bin 0 -> 44 bytes ...1d37fb332301cf7de0bd51a8c1aa9be4935e89fc-1 | 1 + ...1d6b87b52e62cb84be834478ad88129f5e1f247b-9 | Bin 0 -> 32 bytes ...1ec2f11a8d8b9cf188a58f673a0b4a8608a926ca-3 | 1 + ...fc2ba0bb981fec47badea1c80219452c9e3c76c-22 | Bin 0 -> 88 bytes ...1fd8444ac43541c44a1c6ed8df2f688b1fa09681-1 | Bin 0 -> 29 bytes .../github.com/pierrec/lz4/fuzz/corpus/2.bz2 | Bin 0 -> 42 bytes .../github.com/pierrec/lz4/fuzz/corpus/20.bz2 | Bin 0 -> 48 bytes ...02a9c8b188cae90f29bce3bf0438a035c504eb4-20 | Bin 0 -> 62 bytes ...065ba3177c7dc5047742faa7158b3faeaac1f3c-32 | Bin 0 -> 88 bytes ...0cf0057443ecb322ff1169ecbe6cf20250f15af-13 | Bin 0 -> 32 bytes ...0d1a26afe563ad77e7a95fbee6ff59ebf3e61ab-13 | Bin 0 -> 46 bytes .../github.com/pierrec/lz4/fuzz/corpus/21.bz2 | Bin 0 -> 48 bytes ...1c8be1bb9eeea5b141500dee4987ab7fbd40d4a-23 | Bin 0 -> 20 bytes .../github.com/pierrec/lz4/fuzz/corpus/22.bz2 | Bin 0 -> 48 bytes ...2201e32d052c15874f0323a09c330f3666029a72-1 | Bin 0 -> 1473 bytes ...26780b32ba8f87ec614fdb376aa0884011c4ca9-17 | Bin 0 -> 32 bytes ...2897c61698649d7570de91613afdc19b66e6965-20 | Bin 0 -> 71 bytes .../github.com/pierrec/lz4/fuzz/corpus/23.bz2 | Bin 0 -> 48 bytes ...34cc427d9be32470f3c2e11a6bc16567f558e55-22 | Bin 0 -> 37 bytes .../github.com/pierrec/lz4/fuzz/corpus/24.bz2 | Bin 0 -> 48 bytes ...2486a84bf0f161f45b050d9c19ea9e35f5def864-8 | Bin 0 -> 25 bytes .../github.com/pierrec/lz4/fuzz/corpus/25.bz2 | Bin 0 -> 48 bytes ...5252b16cd4afa8ef86122448688c7095684c86b-12 | Bin 0 -> 25 bytes .../github.com/pierrec/lz4/fuzz/corpus/26.bz2 | Bin 0 -> 48 bytes ...63fb3d738b862ec4050e5a9fbabfbd99cb0d9a5-16 | Bin 0 -> 32 bytes .../github.com/pierrec/lz4/fuzz/corpus/27.bz2 | Bin 0 -> 48 bytes ...76580343a14eec04143e89a778dae3e14df472c-17 | Bin 0 -> 52 bytes ...27fb5dc4016dc640e55a60719a222c38c604fa6b-2 | Bin 0 -> 14 bytes .../github.com/pierrec/lz4/fuzz/corpus/28.bz2 | Bin 0 -> 157 bytes .../github.com/pierrec/lz4/fuzz/corpus/29.bz2 | Bin 0 -> 157 bytes ...2a08d7c56ff9959698688f19ddd2e1e4d4651270-3 | 1 + ...a33d8514fb512aa20b0a56800cd3e12f3952b6b-26 | Bin 0 -> 51 bytes ...2a52400dd3aa2d2a40657d1e51c47c1929912927-3 | Bin 0 -> 18 bytes ...ab005ac79cd4dada693dd2a747c001898d45e1e-16 | Bin 0 -> 43 bytes ...2b39aa66ecfac58e61185c9664a968233931496a-9 | 1 + ...c2a5947341d76797a7e2299f39d01e3aebb2eb8-19 | Bin 0 -> 70 bytes ...cc2308b75a2e8f7eafcf69370767e5fce314892-13 | Bin 0 -> 32 bytes ...cdafdadb156e2759c389b6b8edf6a402034886c-26 | Bin 0 -> 51 bytes ...2d7f0171116eec9984eaa9138e1312e90a7d67ee-1 | Bin 0 -> 47 bytes ...de93224b5f0db491ced1ec491a9f41d71820671-11 | Bin 0 -> 23 bytes ...2e8487cf61feda70c0d74f12bfb5b692b684f82a-9 | Bin 0 -> 25 bytes ...2f0ee9cf4bb951a37efc6460d5709442bc3de54e-6 | Bin 0 -> 23 bytes ...f1ba7fe1cd90a4023706a2ea9c7c9dca8128119-30 | Bin 0 -> 167 bytes ...fad20024167a500cdb8df5334a614f113efae00-20 | Bin 0 -> 76 bytes .../github.com/pierrec/lz4/fuzz/corpus/3.bz2 | Bin 0 -> 42 bytes .../github.com/pierrec/lz4/fuzz/corpus/30.bz2 | Bin 0 -> 157 bytes ...00579a548d96d64c9da8470efa15e787f1a36f1-28 | Bin 0 -> 51 bytes .../github.com/pierrec/lz4/fuzz/corpus/31.bz2 | Bin 0 -> 157 bytes ...1c6c22708d346ed9e936fa7e77c8d9ab6da8d1e-33 | Bin 0 -> 88 bytes .../github.com/pierrec/lz4/fuzz/corpus/32.bz2 | Bin 0 -> 157 bytes .../github.com/pierrec/lz4/fuzz/corpus/33.bz2 | Bin 0 -> 157 bytes .../github.com/pierrec/lz4/fuzz/corpus/34.bz2 | Bin 0 -> 157 bytes ...44d38ec2ec90cb617e809439938b4cbf3b11f02-10 | Bin 0 -> 40 bytes .../github.com/pierrec/lz4/fuzz/corpus/35.bz2 | Bin 0 -> 157 bytes ...52631eab692c4a2c378b231fb3407ebcc0c3039-33 | Bin 0 -> 88 bytes .../github.com/pierrec/lz4/fuzz/corpus/36.bz2 | Bin 0 -> 157 bytes ...363d4559cac10516289fe1b6029590c4c7a6d8eb-5 | Bin 0 -> 12 bytes .../github.com/pierrec/lz4/fuzz/corpus/37.bz2 | Bin 0 -> 58 bytes ...771c6e8ea0f20350dae0180a9b14e36b8aef244-22 | Bin 0 -> 71 bytes ...37ee7fab504f2d2039753d73dd0290c884bd57bf-8 | Bin 0 -> 25 bytes .../github.com/pierrec/lz4/fuzz/corpus/38.bz2 | Bin 0 -> 58 bytes .../github.com/pierrec/lz4/fuzz/corpus/39.bz2 | Bin 0 -> 58 bytes ...96101a712463bb336a18f4096fc3eb5923600c1-10 | Bin 0 -> 74 bytes ...96146e06d3a4b2468d080f89ab5862348073424-28 | Bin 0 -> 118 bytes ...97127b75cb59b253ed49206082b0428b6b23d02-17 | Bin 0 -> 43 bytes ...9ccf446395ef707cf92a04b5508deda399372c2-15 | Bin 0 -> 32 bytes ...b6fd6da48bb34284390a75e22940e7234dbbd28-34 | Bin 0 -> 24 bytes ...3de3c5c394a3cf05620bb80871a1f10e9e36f25b-8 | Bin 0 -> 25 bytes ...3dee65f1cf51dfe2e5be498150ce22d2ac5a07fd-1 | Bin 0 -> 22 bytes ...3e34341fb51769fd9d948bdd20c011e335b145f4-1 | Bin 0 -> 64 bytes ...3ee211efb3d5d8058cd9a8c59e40c8d0f7a3df53-1 | Bin 0 -> 51 bytes .../github.com/pierrec/lz4/fuzz/corpus/4.bz2 | Bin 0 -> 42 bytes .../github.com/pierrec/lz4/fuzz/corpus/40.bz2 | Bin 0 -> 58 bytes ...05726718b3f54a0cfae1666f06d3cc1ee747104-14 | Bin 0 -> 27 bytes ...07188676d45d6f9dd5f3c84e7df0e763c7cca57-22 | Bin 0 -> 82 bytes ...08ac1a4a83e082e848c208eed903930d81e81b6-17 | Bin 0 -> 67 bytes .../github.com/pierrec/lz4/fuzz/corpus/41.bz2 | Bin 0 -> 58 bytes ...114fd99aaa4dc95365dc4bbcb3c9a8a03434a5a-29 | Bin 0 -> 55 bytes ...131f155339a3476898088b065b8588a2b28278e-26 | Bin 0 -> 88 bytes ...413e39442f005279560ddad02bbdd1a05c9f0eaf-4 | 1 + ...41b7eaf8892043eccf381ccbc46ab024eb9c503c-4 | Bin 0 -> 9 bytes .../github.com/pierrec/lz4/fuzz/corpus/42.bz2 | Bin 0 -> 58 bytes ...208b7fe7ac3a530c159a1c8fd09dd3078b5650f-15 | Bin 0 -> 35 bytes ...421bd1daa317c5d67fa21879de29d062c342294b-5 | Bin 0 -> 19 bytes ...2544ff3318fe86dd466e9a05068e752a1057fcc-32 | Bin 0 -> 123 bytes ...2b056f9dac9cc658c80092e490b3dbcd436e3f8-15 | Bin 0 -> 32 bytes .../github.com/pierrec/lz4/fuzz/corpus/43.bz2 | Bin 0 -> 58 bytes ...432c09281c46537c98864bc7d601780562b68410-1 | Bin 0 -> 22 bytes .../github.com/pierrec/lz4/fuzz/corpus/44.bz2 | Bin 0 -> 58 bytes ...46dc91ff0ddc34c3b02f741e3f6f079a4dfcae8-17 | Bin 0 -> 81 bytes .../github.com/pierrec/lz4/fuzz/corpus/45.bz2 | Bin 0 -> 58 bytes ...51831159c1afb87077066147630b4b6caeb54c3-11 | Bin 0 -> 25 bytes .../github.com/pierrec/lz4/fuzz/corpus/46.bz2 | Bin 0 -> 82 bytes .../github.com/pierrec/lz4/fuzz/corpus/47.bz2 | Bin 0 -> 82 bytes .../github.com/pierrec/lz4/fuzz/corpus/48.bz2 | Bin 0 -> 82 bytes .../github.com/pierrec/lz4/fuzz/corpus/49.bz2 | Bin 0 -> 82 bytes ...49861b3d9bca3e2857d806aaecaac09af4bff1dd-2 | Bin 0 -> 35 bytes ...9a3ead0ad96e8da5a4c8f89bd140e1d8af8995a-17 | Bin 0 -> 128 bytes ...a14a3883f5c8819405319e8fb96234f5746a0ef-22 | Bin 0 -> 48 bytes ...a625a4b4f3069707e88f16db88e993dabc41aa2-27 | Bin 0 -> 51 bytes ...a6464c2aba2492f5122856de7ac451994eadda4-10 | Bin 0 -> 20 bytes ...b0ab2fc1fdfc56066c5c1f2751b292f4ddc557e-16 | Bin 0 -> 71 bytes ...4b55f37e6637f4246a41caa490da4bec632379d4-7 | Bin 0 -> 21 bytes ...4bb422b835278e4aca92d076331d9c8cc5752345-1 | Bin 0 -> 47 bytes ...bd00d26b893ce064dad6e771f30541b541d43b9-18 | Bin 0 -> 114 bytes ...cde5adc216a29fff2ec39e23ccc6fca80cd4a15-21 | Bin 0 -> 83 bytes ...d1b64babe1f045b8374f4d74949622591546eb5-17 | Bin 0 -> 56 bytes ...d49686993529cfe29473c50b9b0fb2b6ea4f6bf-13 | Bin 0 -> 25 bytes ...4ea726d6736026a733707e695d9c2cdc83efc05b-5 | Bin 0 -> 32 bytes ...ef3e6d20ccec24376a526ab9ec9f6f2cc604129-25 | Bin 0 -> 147 bytes .../github.com/pierrec/lz4/fuzz/corpus/5.bz2 | Bin 0 -> 42 bytes .../github.com/pierrec/lz4/fuzz/corpus/50.bz2 | Bin 0 -> 82 bytes ...0a87eb0c097a7ebf7f1bf3be2c6a7dbe6b6c5c3-23 | Bin 0 -> 105 bytes ...0e3ac1126c605158726db6f2cca3120f99b8e73-22 | Bin 0 -> 105 bytes .../github.com/pierrec/lz4/fuzz/corpus/51.bz2 | Bin 0 -> 82 bytes ...1075c34f23d161fb97edcf6f1b73ee6005009a0-28 | Bin 0 -> 61 bytes ...12ed5fb4e92818b75bd7633f58d6ca5340ffd94-27 | Bin 0 -> 195 bytes ...514a62216c761adf23d946f11c0d1a0410990641-3 | Bin 0 -> 15 bytes ...16d84c21ac984bd1cae56910d71b62e39610c5d-29 | Bin 0 -> 51 bytes ...17d39f406222f0a0121b7a1961953204674c251-33 | Bin 0 -> 88 bytes .../github.com/pierrec/lz4/fuzz/corpus/52.bz2 | Bin 0 -> 82 bytes .../github.com/pierrec/lz4/fuzz/corpus/53.bz2 | Bin 0 -> 82 bytes .../github.com/pierrec/lz4/fuzz/corpus/54.bz2 | Bin 0 -> 82 bytes ...5431cabbc58d8dc143ece079de40300c1ce6e101-1 | Bin 0 -> 144 bytes ...5700385089e16e44968ea410c6b90206b16d72a-14 | Bin 0 -> 20 bytes ...55b9a902445e2bfa2f0f37d630779d329eeda20e-1 | Bin 0 -> 33 bytes ...620a492eaf067734e5b8b64517b28ec3beaa97e-12 | Bin 0 -> 46 bytes ...5699fea659964d8ab94069d08b0b97834c0a42df-2 | 1 + ...765fc21629571e51adf2fc2bc8b64541a1ea08d-18 | Bin 0 -> 81 bytes ...768ea5d1911143f4b1c0585b9b864ebe16aa004-12 | Bin 0 -> 33 bytes ...7b780437f4abf2d5cba0775bf802a4dfdb067d6-25 | Bin 0 -> 195 bytes ...8f53d40265c9a49c0d3b4292cb637464a4e376a-17 | Bin 0 -> 35 bytes ...59b254c3565c9eed2bc93385b821da897afcbb15-1 | Bin 0 -> 44 bytes ...a962e3d6a128983afe9ea78a28cce0f40a790c0-14 | Bin 0 -> 42 bytes ...af52ef91b6f717ffdd805585e24806407e9621b-14 | Bin 0 -> 114 bytes ...5b01aeb030dc1dc9568fd32f1647d92f0692a411-6 | 1 + ...bbd27cea704a4e6ff3f42f4792a91eb7839bc0d-12 | Bin 0 -> 28 bytes ...5bd895c23369df9505dd99ffcd035dc5e897264b-1 | Bin 0 -> 49 bytes ...5bfd84d7b2ba6b6325d5135fb0a9ae1ec5d7d3e1-2 | Bin 0 -> 48 bytes ...5c4f347c3567baf700dfccf49a91192c83b89da2-8 | 1 + ...5dd8001f8a87c24f866074c36b6b80f42b298ff0-1 | Bin 0 -> 38 bytes ...ddf63d61aa38da1d409e37b301e0fe5a207a051-27 | Bin 0 -> 156 bytes ...e19e298d051aac48b7683dc24577b46268b630c-35 | Bin 0 -> 24 bytes ...e54c67050ee8583c7453ff13d6eec15b2255288-20 | Bin 0 -> 83 bytes ...f946423d1138924933334c6e5d3eb13e1020e9c-33 | Bin 0 -> 33 bytes ...5fbebd9edd144c4b9869ed4ab40c7cc3c46a4a8f-4 | 1 + .../github.com/pierrec/lz4/fuzz/corpus/6.bz2 | Bin 0 -> 42 bytes ...046b14dd1f6925bcfe470a8484353f525db6a9c-19 | Bin 0 -> 57 bytes ...608a9993a51ec7bf252ac76b163def5f7002d2e4-4 | 1 + ...610d8dc3cf4012e4e2d070988b0720285a4c361e-7 | Bin 0 -> 21 bytes ...1b196987682fb64ef9c4ff37532bf9b2ac201bc-14 | Bin 0 -> 30 bytes ...26f8b6efa3ea0f254789fe6cf52f6e52538f357-25 | Bin 0 -> 219 bytes ...6277f2e0a6df2ac61660ee1965c690b87c26b556-7 | Bin 0 -> 21 bytes ...2c738f00c488f493989b2037d9cf1781f0bbd40-11 | Bin 0 -> 38 bytes ...631ffa88df9713a124b3ba6c704c0c75727af2ff-6 | Bin 0 -> 16 bytes ...33df0cd78621cd45067a58d23c6ed67bb1b60cb-31 | Bin 0 -> 88 bytes ...35d5de257a1910a7fd0db2e567edfa348e47270-11 | Bin 0 -> 38 bytes ...64c500b5addcbf8c673188a1477e4159851ae04f-1 | Bin 0 -> 124 bytes ...60387064a3cf4cb81046989929abe1b4fbfc815-17 | Bin 0 -> 51 bytes ...66068a7e7bdfd1038a84aeb3dec6e3cb4d17ad57-2 | Bin 0 -> 16 bytes ...66c34847568ac9cb3ccbb8be26f494988a3e0628-7 | Bin 0 -> 23 bytes ...7534dbd68040fb9a8867e6af384d33ea323758b-29 | Bin 0 -> 67 bytes ...7ab3037ff49f082a877224d68e35069cc4d45eb-16 | Bin 0 -> 32 bytes ...8612136c2017f9caf87122155f82a25f57c2d2a-32 | Bin 0 -> 36 bytes ...981397d97c481e39d563d43916377fb3c74c60e-28 | Bin 0 -> 88 bytes ...9c2accb74456005e2a9bbef15ccad3d076f2124-28 | Bin 0 -> 112 bytes ...69dcc80940a26844b0afe7898fea9cf68b698214-4 | Bin 0 -> 12 bytes ...9fcd886042d5c3ebe89afd561782ac25619e35b-27 | Bin 0 -> 88 bytes ...a04b54e1511633ec895326b4e043e186fa5693b-29 | Bin 0 -> 171 bytes ...6a3e8935204dcd3dc48a1ff7415c305f0e5863aa-9 | Bin 0 -> 28 bytes ...b351674a45f2d9be602fe8d3fb84229551b4ce3-16 | Bin 0 -> 69 bytes ...b72fdd9989971ecc3b50c34ee420f56a03e1026-27 | Bin 0 -> 112 bytes ...b7f4ac7aa8b357dee3067d7a60143c03b54bb8d-16 | Bin 0 -> 42 bytes ...6bc138796e9b80572a6cb1b4a7ba30c97c22359d-1 | Bin 0 -> 46636 bytes ...6e14a407faae939957b80e641a836735bbdcad5a-2 | 1 + ...6f24be0bcac848e4e5b4b85bc60f70f12388a5ed-4 | 1 + .../github.com/pierrec/lz4/fuzz/corpus/7.bz2 | Bin 0 -> 42 bytes ...102c7f297296821114661e00e5bf54d0891d105-21 | Bin 0 -> 76 bytes ...151692dfebfc82876676e65ee9b807d83a3df54-22 | Bin 0 -> 92 bytes ...1a24ce771fb7f1a4163e57a478c3044ad42e62d-24 | Bin 0 -> 51 bytes ...2c738d7492d3055c6fe7391198422984b9e4702-32 | Bin 0 -> 88 bytes ...2f032947602f1be74f01c91165c5118121f36c7-24 | Bin 0 -> 51 bytes ...3b6bd1462a0521b4bf76abb1fd80df6e180dc80-17 | Bin 0 -> 62 bytes ...3c81fef0997a4929b303e02a99f3977870f2013-29 | Bin 0 -> 159 bytes ...3efed803abadf6167fc3f04e0674cc39c30f6af-21 | Bin 0 -> 37 bytes ...603f5f266de813608c4cc1ccd1c798ef8065c5c-23 | Bin 0 -> 51 bytes ...64571571e4d46f4397ed534d0160718ce578da4-26 | Bin 0 -> 88 bytes ...67d1943125a0f6e9397779cc757c9cdd1e05631-17 | Bin 0 -> 62 bytes ...6d22068e2ed4a5952d4adc7ea8dada5509a784c-13 | Bin 0 -> 30 bytes ...740102922cb9933980bb800c1115daf38edf654-24 | Bin 0 -> 72 bytes ...83270b1e353ba3895b7d0c4135b8592e22f6508-12 | Bin 0 -> 56 bytes ...7851a406571c6b4c1aeed0af16db8c48444c3f2b-1 | Bin 0 -> 34 bytes ...78981d313038119ac4f7017349e50a1cba56b382-7 | Bin 0 -> 23 bytes ...8c88c4afaf5962056b1aea720509b9f6f286b91-15 | Bin 0 -> 64 bytes ...8e59daada9b9be755d1b508dd392fa9fc6fa9c2-27 | Bin 0 -> 156 bytes ...8ef686662a059f053f80c1c63c2921deff073fb-31 | Bin 0 -> 55 bytes ...9c5ac978f5aee35e123f523369aa46b1d0a995d-11 | Bin 0 -> 26 bytes ...a0fc8dacceae32a59589711dce63800085c22c7-23 | Bin 0 -> 88 bytes ...adf4aa021efaa953268c817467959fa3c42ca42-13 | Bin 0 -> 25 bytes ...7b8c99ded96973a6e8f523bc1c6ed4ef5c515aa1-1 | 1 + ...b919213d591e6ce4355c635dc1ecc0d8e78befe-30 | Bin 0 -> 66 bytes ...7ba80199cbce9a2eb47da15f0c62fd1fb8fa67d9-3 | 1 + ...cdc0917ad63ce7a7c98301a366c31635f0f099d-14 | Bin 0 -> 32 bytes ...7ce37ad19bfe9f52eeadda03e6b8448e5bf57800-3 | Bin 0 -> 1452 bytes ...7e3132012be223fd55e5e7a7fc2ea602361ed2b4-5 | Bin 0 -> 8 bytes ...e9a88118e4c41e61f5c501e6edf9a5bd2432be3-23 | Bin 0 -> 135 bytes ...7f081c89cfb6344f4aac5f813da1fd15f8bab022-1 | Bin 0 -> 26 bytes ...f8c3b163798c8d5e1b65e03f411b56b6c9384bb-28 | Bin 0 -> 124 bytes ...f970f16026c689c096a19fef1a3282a13ee69dc-20 | Bin 0 -> 65 bytes ...7fa96d28faf45062eb803ea84a334b607e966f90-1 | Bin 0 -> 31 bytes .../github.com/pierrec/lz4/fuzz/corpus/8.bz2 | Bin 0 -> 42 bytes ...261f0c1799ca71c411f6d3f34069b25dac8b739-18 | Bin 0 -> 52 bytes ...2a499521f34b6a9aff3b71d5f8bfd358933a4b2-36 | Bin 0 -> 44 bytes ...82afa534de59025bf1e3358919286525ae7d3347-2 | 1 + ...2c627991d65c5c4e88c9ccac39be082cca40765-24 | Bin 0 -> 82 bytes ...435aa58e67c4de798375b44c11bffa5b680f615-32 | Bin 0 -> 88 bytes ...496965f7aa6cea3e080dbfb911a7034e6623cb7-10 | Bin 0 -> 23 bytes ...84a9bda8369d33ffe0d6f520c24331ae64e9dc88-3 | Bin 0 -> 10 bytes ...86513e3435adaf7c493dd50eb5de372010185e36-1 | 1 + ...6637b211f4fa0118ccab9ee193c66286126bb5d-20 | Bin 0 -> 35 bytes ...695984335fa005895377a8a60000a921d7efd99-10 | Bin 0 -> 25 bytes ...6baa53eb98a9a342b0d5b79dfa5c58aa9c1b05e-16 | Bin 0 -> 35 bytes ...7caf7737ebb025ec2d908224818ceb2bc76b658-28 | Bin 0 -> 156 bytes ...8e6e46ab1ec92ce694b8d4c3d816491169d2bb6-10 | Bin 0 -> 25 bytes ...9216c662a46d50f37cfa08963acad8c6f7aace7-11 | Bin 0 -> 20 bytes ...8d70b7de160bbef22ab46f798d687a69dbda772c-5 | 1 + ...8e533f8a1e58710d99d6b7d39af7034961aa4fbe-5 | 1 + ...f0d2862c49eebbcd473a38c8fa1e76288f47127-26 | Bin 0 -> 51 bytes ...f4788d30edd22ebcfef0e52bbf9e8c3d1e8d7e9-27 | Bin 0 -> 105 bytes ...f61ea021e02cc609baafbdf714b9577e4bcb05f-16 | Bin 0 -> 74 bytes ...8f7a47710904981ffaa1fefa21fa95fd2d818487-7 | Bin 0 -> 23 bytes .../github.com/pierrec/lz4/fuzz/corpus/9.bz2 | Bin 0 -> 42 bytes ...0a227d3beab730ed6eecd63657f5406beccabdf-12 | Bin 0 -> 39 bytes ...2197169aded0d5d0407e3925959e922257a101d-28 | Bin 0 -> 195 bytes ...24e17974cd194fa756d23394676d37cc3641f64-17 | Bin 0 -> 25 bytes ...92a785b5ea93d36e27029e281e9a34377d81ce55-5 | 1 + ...2d41e4fca52311e848fac274144b6293d9260f7-34 | Bin 0 -> 65 bytes ...92fda3aa2adbe37ff690c59939ca1e1b2a8a7936-1 | Bin 0 -> 40 bytes ...363b81db6b35e8beebcc32d560f786472829bd8-21 | Bin 0 -> 88 bytes ...48b1ce043c82d0cfbaa910b6989a1b35a19b8ae-16 | Bin 0 -> 32 bytes ...505b43fcbc3139441e35bdaaec138e28af076f6-25 | Bin 0 -> 91 bytes ...51bb02c199adb52e9e300e9fc070bf55980b910-14 | Bin 0 -> 25 bytes ...55404fe3f375361f5c3be1dbcd28eb9a28f06e4-13 | Bin 0 -> 23 bytes ...55c823909722e2693dd7cea3eadc17833dddf86-24 | Bin 0 -> 88 bytes ...5ca8da5556065f33b46c2c8186c2f1cebb1b5da-29 | Bin 0 -> 112 bytes ...67e50c6c1bc99aa5e7fa07c2de14564f52b0fd3-20 | Bin 0 -> 28 bytes ...6c9a1fa8b0184ad486f8f68a9ddc88434579080-30 | Bin 0 -> 159 bytes ...6cc45abef3bc9fb6659714b9743cda92ec0abb9-16 | Bin 0 -> 38 bytes ...719ea029fdf8c837f991ac3548145485cc1f06e-13 | Bin 0 -> 73 bytes ...84480af27d1640fd02f40e736ffcde3a91e4abb-22 | Bin 0 -> 88 bytes ...8d40a50ee58c05727777e242ecbc0d4e214f7fe-21 | Bin 0 -> 35 bytes ...915e9bb007bc2c1f3d346123933923279f0dec1-27 | Bin 0 -> 51 bytes ...992413e17d64968cb04af34c7761182f20fc97b6-2 | Bin 0 -> 30 bytes ...95d50f1cb750cbf038246d6cb0cf8db11d7e60e-33 | Bin 0 -> 88 bytes ...9cfa74a1fea5d16168dd9efc720425b85e95eb7-15 | Bin 0 -> 32 bytes ...a552bab72f174ede3b9bdb7a663c963fd1463d3-16 | Bin 0 -> 32 bytes ...a5ab6c72a445b3b27129004d2a1a417cd4d8440-26 | Bin 0 -> 88 bytes ...9aa3050cb38a6ad276cb5e5ca0c4776d92cb7b0f-1 | 1 + ...9be44693435bc6c51980f30418bcc690d8c25fe7-6 | 1 + ...c0420bf00f888487d543f42fc48b407c65d4717-17 | Bin 0 -> 95 bytes ...ca2a086f1f08c7dec54d52425bd72f17c11056e-21 | Bin 0 -> 37 bytes ...db70b1edad2317d94dcaafe7f5c5e3145084167-12 | Bin 0 -> 37 bytes ...e160ae007fc11092a3fd877ebe706c4d841db49-19 | Bin 0 -> 32 bytes .../fuzz/corpus/Mark.Twain-Tom.Sawyer.txt.bz2 | Bin 0 -> 124744 bytes ...01e13c3e401957031defb62b05434c65b01d5c4-10 | Bin 0 -> 31 bytes ...059044bdb0402471dbe9aaaa555a063a6bc1e6a-16 | Bin 0 -> 38 bytes ...06b1a08fcda463f1d51c485b0e7271ff9048b41-16 | Bin 0 -> 35 bytes ...0f3d67e96968a267366be380147cbc7b17e5b2b-16 | Bin 0 -> 68 bytes ...18d849dc2a98c4ebb6000b2cc853f21fb64d9e5-24 | Bin 0 -> 195 bytes ...2e5916be780e35e9ecb7c42be52dd5e134f3363-25 | Bin 0 -> 195 bytes ...33252a74974fc86df30c311d501a1f363d350cd-12 | Bin 0 -> 33 bytes ...462f03ee666a20244d3331e3635b7eb796d906d-15 | Bin 0 -> 60 bytes ...a56e983782e49f8267a61d4375e98b1a862862ac-9 | Bin 0 -> 17 bytes ...58a9f9caca5e73b4296b931201a5ea870974c26-15 | Bin 0 -> 116 bytes ...a628194a08ff63e98625b1786175026c5f02c716-5 | Bin 0 -> 38 bytes ...64f2336fd4a9ec8153b95f40c383e1ecfed9e73-25 | Bin 0 -> 51 bytes ...a6a5682a6663e0c548c9e5acbad4958e2c256b32-7 | Bin 0 -> 60 bytes ...6dbaac639f3b82609ec27c80fbd003684c28867-21 | Bin 0 -> 61 bytes ...8c6a4509b61d8baa71f59f9e1eb95712b10626c-23 | Bin 0 -> 51 bytes ...a97d9bf241e8ec73f99205b32c24fcd64194f0b9-8 | Bin 0 -> 19 bytes ...9e348d9896cc740f7e910d0a70c080adb65cc77-13 | Bin 0 -> 34 bytes ...a04575587509ffc65a6b0224d24ad1125cb0f63-26 | Bin 0 -> 91 bytes ...a290b4dcc8198945311c8149fc1252f14555e70-15 | Bin 0 -> 63 bytes ...abb8fa4913c79f0a42494ad2215a32927adbd45-16 | Bin 0 -> 63 bytes ...c7077c5220abe6cd481318c42dfe6cb2cb2c666-10 | Bin 0 -> 40 bytes ...cbef0322169a93c7421902883cc8057675c953b-26 | Bin 0 -> 195 bytes ...ec95871bc7d87cae16c36a0d30955b43076aec5-17 | Bin 0 -> 35 bytes ...20e3f27f4e8d41f16124881f92546f0fb2edc16-13 | Bin 0 -> 33 bytes ...27fb21ecbe6e77c91341738621ad7092c29bca5-17 | Bin 0 -> 89 bytes ...38ce47b707326024fb24860c4365d58ab9f3528-29 | Bin 0 -> 166 bytes ...b3eaea244bd47b64c8de3d81c7b5e94e421d7f32-5 | Bin 0 -> 9 bytes ...3fd355dc090a732d5cf3b25151f165ea901a682-24 | Bin 0 -> 51 bytes ...53101ec4348e9c329c13e22790ffde246743030-35 | Bin 0 -> 71 bytes ...58429fd1107617191026029cf327b2ebed963bb-18 | Bin 0 -> 6 bytes ...58846d79a8dc960a718ef88dd3a06ad49b1fe72-16 | Bin 0 -> 35 bytes ...b5b5b895b4619fa039ea99520b9947de2996c38f-6 | Bin 0 -> 16 bytes ...b6aca5c55295d93491e47817f46ca372c9078cec-3 | 1 + ...b6ddb90092b3087158dc32669529db2012f14c3c-7 | Bin 0 -> 20 bytes ...b6e7a519d013ddb67313af02a9ce966877949487-4 | Bin 0 -> 24 bytes ...b71a5a7c576e5cc5ba23845d352b2af16737c03c-7 | Bin 0 -> 17 bytes ...7815c3b5649d9a367ba99e7e09cf1f251ab6f83-18 | Bin 0 -> 44 bytes ...7a5b15c9e2d4d659d421de8e3b463200f71f1ec-23 | Bin 0 -> 143 bytes ...83b3d04ada1403578065d7f10aa7441830dea3c-11 | Bin 0 -> 20 bytes ...b92c70d3f12e67c69ba5db9ad491b7a4e075ece8-7 | Bin 0 -> 23 bytes ...94b7ebc6d153e0c99a97864f58b26f7192f66a5-20 | Bin 0 -> 35 bytes ...ba98469ede70309f18893f0ff95380f5a0486fcd-6 | Bin 0 -> 52 bytes ...c0c31f304c1a1f8be0c8a0d9daa3b8aa1f23799-14 | Bin 0 -> 41 bytes ...c3ac4aae07cba8d7f657a8739d1774e44bde613-31 | Bin 0 -> 116 bytes ...c650b6a5356c1935f64f6fb755e43bc5f5187c4-26 | Bin 0 -> 195 bytes ...dc123d9da19a7ae0ff87ca0741002fbd8bb2cca-34 | Bin 0 -> 41 bytes ...be06bb3c3b604660fd36b2af8860d35e31c8bbf3-8 | Bin 0 -> 66 bytes ...e5767f4d79c5a0b2643d8eddb74eca0598674dc-19 | Bin 0 -> 75 bytes ...07f4e4cb1d0a34dc6899097fd27ee9f1744cb70-12 | Bin 0 -> 19 bytes ...1972d0c898848e6188b69bcdbb7d14fcc780ee5-26 | Bin 0 -> 88 bytes ...2ac55a7fb702dd9a527b576d99008fe9b4f376f-14 | Bin 0 -> 36 bytes ...2c3d29bce8aae89fed326832b3e1e1077cef1da-18 | Bin 0 -> 61 bytes ...c321670bbcd985327045dd1468bf2ac4ae7333e5-7 | Bin 0 -> 32 bytes ...34998d9a8893eca9cdeafe7b2482469ad98192b-25 | Bin 0 -> 51 bytes ...42ae63ab9584753959f4692cef9fd8513b54691-30 | Bin 0 -> 88 bytes ...5522d11f314fc46de58e15116b6910d52acf866-17 | Bin 0 -> 69 bytes ...c652c46aba3567521f912bae6dc263b668c34c9c-7 | Bin 0 -> 17 bytes ...c6610b87900912d462229a5259dab51ea0aeef33-4 | 1 + ...c6c37f6c89fe55768f8b3f7b28b99467c239703a-1 | Bin 0 -> 39 bytes ...c71abfffdcf530a6d28fd99cd2c3505c61ef0ac5-8 | Bin 0 -> 26 bytes ...77304b250e887b39b5447d19b9c106fcebe7e66-20 | Bin 0 -> 71 bytes ...78cd8530e6d8a606a28797552ce3f5494763621-25 | Bin 0 -> 195 bytes ...790308a65efa1b895bc57abe53e4fbcdb2b7d0e-13 | Bin 0 -> 88 bytes ...c7fe1fe2e3fc19fab3766f9fdb1d22c848d49aed-2 | Bin 0 -> 53 bytes ...c8b01a7ea9c1b84e4ee5eb68121c64f183e7ea10-9 | Bin 0 -> 34 bytes ...a5d375d8a66727221d3e198d4ad360782944de7-27 | Bin 0 -> 195 bytes ...b1314cc880a1a389cedf5c16cc4b8ad505b4506-23 | Bin 0 -> 105 bytes ...cb635ef244cb6affc005c63d0bf8b52aecb1d986-4 | 1 + ...d67bf90feaeb1912792508afa01a09fe1f044c6-13 | Bin 0 -> 33 bytes ...cda434677d4bdd969a3bbf84086349f821e39c80-1 | Bin 0 -> 48 bytes ...eb22e7f581d85ed876e3d61da7df65da8954bf2-32 | Bin 0 -> 88 bytes ...fe7201e28d42484764264c231663e6372e95ef7-14 | Bin 0 -> 32 bytes ...ff88dd94ee94e1901d25a74e29ad863bb78b1e4-16 | Bin 0 -> 32 bytes ...cffc7573debb5af80aaddfa752538825275fd6a9-7 | 1 + ...0ae058f71e53a7afd648b859cd7485886be550d-22 | Bin 0 -> 127 bytes ...0e6298a63ffc2695cf7d016a124db7375f197cf-21 | Bin 0 -> 88 bytes ...24f23a23508dd6bc93ea6283ed49c8ba4b737ed-15 | Bin 0 -> 49 bytes ...d295ca4c78f7fd3ff10b0520b09a0a346310e0a9-1 | Bin 0 -> 58 bytes ...3ddffcd038a5646a53d48b684eac5b721c7062a-18 | Bin 0 -> 59 bytes ...4275f1f814a5b24f7b4788d15f3fef7b2be8aef-23 | Bin 0 -> 72 bytes ...d57eaf0fada8726afac2287cafb7720af7417b16-1 | 1 + ...d5c9dc3b5b4e71d902fe4cf5c44b237b104a32a9-4 | Bin 0 -> 30 bytes ...d7855c38db11bfeeb474a4782f1ea293192f786f-1 | Bin 0 -> 42 bytes ...7912c5e2a776c408e7640f10bd7d655a6a0f31b-27 | Bin 0 -> 51 bytes ...8873ec9a0344ea23f70d1ffd78c2fd0435b9885-27 | Bin 0 -> 88 bytes ...a3418e70658be491531ef6524f6ef7984ff9e96-27 | Bin 0 -> 147 bytes .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 ...da39a3ee5e6b4b0d3255bfef95601890afd80709-1 | 0 ...affc68f738bd5945de9c7babd4e01cc4438fae8-31 | Bin 0 -> 88 bytes ...dba53c14b92561071ccd7762550d53cf43027bdf-1 | Bin 0 -> 32 bytes ...c61bdd2fb983111d1392cd79ba9b39e0a3b869f-20 | Bin 0 -> 71 bytes ...dcb49d3d45d32601fa27208cec33813e03ff6179-1 | Bin 0 -> 47 bytes ...dce9966b94744440d75a845a48c806041f5a6612-3 | Bin 0 -> 31 bytes ...d799919262810add464dbb4ee39a38f1e4ed258-13 | Bin 0 -> 25 bytes .../dd92516fbea2d0f96abc78f325d731053a451e16 | 1 + ...df986569f89016184b5b6e924d5ba827c9980ca-28 | Bin 0 -> 156 bytes ...e0acf1136a1e05cd27345ce135ea26abd32bbfe-18 | Bin 0 -> 36 bytes ...e33e3ef8a5780c7d3458188a423c00f470904d0-15 | Bin 0 -> 32 bytes ...de501127da94246b2d3aa947637b49fbc17d5e47-1 | 1 + ...e702cd20caeb08a843e0c09b0ce87a74e300415-20 | Bin 0 -> 71 bytes ...e8abda1b9bd5628ca99c8f97237fa885a857bb5-19 | Bin 0 -> 35 bytes ...def6a9e986daf0b268ef29ef7e821a9f6840ef2c-8 | Bin 0 -> 20 bytes ...f0768cf0c709a1ff1a93cc0dad23979501c54ff-21 | Bin 0 -> 115 bytes ...f5bd5044e9b74c648b5f5fcb4dbdf953175f9f9-27 | Bin 0 -> 88 bytes ...dfad565009b0667ef2ee10ea9c1286ee5c3ce6b2-1 | 1 + .../pierrec/lz4/fuzz/corpus/e.txt.bz2 | Bin 0 -> 43149 bytes ...1556049ba9794a15ee21aa283876bf63e531a4f-24 | Bin 0 -> 147 bytes ...e17af76e8c119233dbd2888ab519bd76d7aa7fe9-6 | Bin 0 -> 19 bytes ...22a5ac115e8bfd3468c9e6ad73ea11b8743798a-30 | Bin 0 -> 75 bytes ...346c715ac3187598d8c0453d9e741fae1232c99-11 | Bin 0 -> 29 bytes ...3acf6f2b5a1b97f5a82ebf7d1822077561583fe-26 | Bin 0 -> 195 bytes ...e4a2a1469de980756c607cdc2584fc94bc109382-1 | Bin 0 -> 58 bytes ...544de8de59a005934dd4b7fd465c5bb0046482e-26 | Bin 0 -> 88 bytes ...68b04a675d8d4192565a808955764c77ae510e6-16 | Bin 0 -> 122 bytes ...7ea1bfd65ca7db84f0984474658bfc3b063c63a-13 | Bin 0 -> 32 bytes ...7f55f4c85203100c3cd819cdc87abb0e9e86374-32 | Bin 0 -> 88 bytes ...ea212596f8a7aec4eb2e85fd2cdb5c2816b58495-5 | Bin 0 -> 12 bytes ...a83e3b78398628e8a85e2e618fa956c0ffbd733-35 | Bin 0 -> 42 bytes ...a9af92f89e6889b523461ae7b2b9fecee5a7280-18 | Bin 0 -> 130 bytes ...b967d9cb0407c2328bbdbf98b5602274452d900-23 | Bin 0 -> 32 bytes ...bc69b7ca13ae23b075c9b21ebc283278714e3aa-18 | Bin 0 -> 32 bytes ...c8e760e79dc08a79af0d79c510cafb74e504472-18 | Bin 0 -> 28 bytes ...c93fb54ce508e132c89b6637913f84c3c78bafd-29 | Bin 0 -> 67 bytes ...c984b6fb8e41dbcd4299ecd1dd6fd0a77347122-13 | Bin 0 -> 32 bytes ...cbd6bdea50b52d263b4e9cdb96c7ce078d2b780-25 | Bin 0 -> 147 bytes ...cdd1df7d975c8cf8d015b2f1d0d7c6e00eb578b-15 | Bin 0 -> 33 bytes ...da1ee9cf85f3f71ec8a4eec7534ed2677b47775-15 | Bin 0 -> 32 bytes ...dbc11de7dd074c367a69532db023cd810bb3978-13 | Bin 0 -> 43 bytes ...ee6afbf375619a2bd6fb0abe0e42e51ab3b0ab13-6 | Bin 0 -> 20 bytes ...ee907d38c1394c4971b389a99a3be0913836212b-9 | Bin 0 -> 72 bytes ...ebbefa1983c9e1aeb5217aabcac7ab24dfe166f-17 | Bin 0 -> 75 bytes ...ee3d4a9a8b297f016c23f50a9792c30a621720e-21 | Bin 0 -> 71 bytes ...ef87432939473264357babc06257b0280ffd15ee-5 | 1 + ...fd3db86b12d209db7f0b24281a2cccebff526cd-33 | Bin 0 -> 36 bytes ...fdd522fe3abb88204f63b1fe7312f62b6ee593d-16 | Bin 0 -> 67 bytes ...31dcf6e3044e050f2396b601ebe420e89749c07-27 | Bin 0 -> 117 bytes ...35bdf2e8b4af93c6a73e564055aa4eacd9f0d0c-13 | Bin 0 -> 25 bytes ...f3a2381d6f39defe22520aea46201e6ce6d37f80-1 | Bin 0 -> 31 bytes ...f3e916907eab3412b5875e5eca05bf3eac8a8d5e-1 | Bin 0 -> 37 bytes ...3f49f3016c41052be090544cf110c322bc7ef63-24 | Bin 0 -> 82 bytes ...4003ca01b90a4ee1be5701a5dd7d5f04e00c8f8-28 | Bin 0 -> 147 bytes ...f493376c3eda80cbe822ac456486734b72f891fc-2 | Bin 0 -> 44 bytes ...55efbb04cd32f7828e951d067319db00627153f-28 | Bin 0 -> 51 bytes ...5ecb47dfd92bb0564588beefd03ffcb0bbdae54-29 | Bin 0 -> 88 bytes ...71b4776ecbbe47746fb53d7749751c5c5bbff05-22 | Bin 0 -> 61 bytes ...724d4c839c012c7772618e28ef68d478cc00c74-21 | Bin 0 -> 37 bytes ...f86152e5ce510dc674fa73d20b324e2d3c4d145b-1 | 1 + ...f931bee2e7f1fefd8bb2fabf88f8f3d2b3ea78fa-2 | Bin 0 -> 36 bytes ...9bcd3660c355799a865fedd15cb27a18591f244-33 | Bin 0 -> 33 bytes ...ac6c4165067ef2d87a23a2530a59eb560d470e0-23 | Bin 0 -> 51 bytes ...fb56a1001599e07354ce3101af111554c6c9bb40-1 | Bin 0 -> 60 bytes ...fb75f3059f8835a7e8781c899af756f22d1c06b4-7 | Bin 0 -> 13 bytes ...bfe35b0485040874ed564b94ba764bdd17e80fc-10 | Bin 0 -> 20 bytes ...cb1c8b1893ca85647581cadec481754d8f35c96-12 | Bin 0 -> 25 bytes ...cb33fb48e48acd9155fd7ed8e82e71c850ffd22-16 | Bin 0 -> 32 bytes ...fcd47a15e10a21e1eb13aeac223becc89aac4c69-2 | Bin 0 -> 38 bytes ...d4f0dc77a022a8140ffe5b2e1a5ff577e844878-27 | Bin 0 -> 51 bytes ...db78af507e72288b059ff902ae5e76538d1e6ea-14 | Bin 0 -> 32 bytes ...fe002e4c7731ecb4c09c09a4e1fa29c0c61874bc-7 | Bin 0 -> 15 bytes ...e78d4faf4ce717d84938010f92ca5e844f9980b-13 | Bin 0 -> 24 bytes ...f3b7ea844eb197dc6bd59d9f8e4a4a5718a6771-18 | Bin 0 -> 36 bytes ...f47856b8fa7323572c8b4a6d8028dcb2663a37a-11 | Bin 0 -> 84 bytes ...fa97253e1ab365b84eebb9d257f9370b7796fbf-28 | Bin 0 -> 51 bytes .../pierrec/lz4/fuzz/corpus/pss-vect.txt.bz2 | Bin 0 -> 28526 bytes .../github.com/pierrec/lz4/fuzz/lz4-fuzz.zip | Bin 0 -> 2149434 bytes vendor/github.com/pierrec/lz4/fuzz/lz4.go | 45 + vendor/github.com/pierrec/lz4/go.mod | 3 + vendor/github.com/pierrec/lz4/go.sum | 2 + .../pierrec/lz4/internal/xxh32/xxh32zero.go | 222 + .../lz4/internal/xxh32/xxh32zero_test.go | 161 + vendor/github.com/pierrec/lz4/lz4.go | 68 + vendor/github.com/pierrec/lz4/lz4_go1.10.go | 29 + .../github.com/pierrec/lz4/lz4_notgo1.10.go | 29 + vendor/github.com/pierrec/lz4/lz4c/main.go | 122 + vendor/github.com/pierrec/lz4/reader.go | 295 + vendor/github.com/pierrec/lz4/reader_test.go | 60 + .../lz4/testdata/Mark.Twain-Tom.Sawyer.txt | 8465 ++ .../testdata/Mark.Twain-Tom.Sawyer.txt.lz4 | Bin 0 -> 256403 bytes .../testdata/Mark.Twain-Tom.Sawyer_long.txt | 93115 ++++++++++++++++ .../Mark.Twain-Tom.Sawyer_long.txt.lz4 | Bin 0 -> 2811779 bytes .../pierrec/lz4/testdata/README.txt | 1 + vendor/github.com/pierrec/lz4/testdata/e.txt | 1 + .../github.com/pierrec/lz4/testdata/e.txt.lz4 | Bin 0 -> 95284 bytes .../pierrec/lz4/testdata/gettysburg.txt | 29 + .../pierrec/lz4/testdata/gettysburg.txt.lz4 | Bin 0 -> 1234 bytes .../pierrec/lz4/testdata/pg1661.txt | 13052 +++ .../pierrec/lz4/testdata/pg1661.txt.lz4 | Bin 0 -> 377367 bytes vendor/github.com/pierrec/lz4/testdata/pi.txt | 1 + .../pierrec/lz4/testdata/pi.txt.lz4 | Bin 0 -> 95355 bytes .../pierrec/lz4/testdata/random.data | Bin 0 -> 16384 bytes .../pierrec/lz4/testdata/random.data.lz4 | Bin 0 -> 16403 bytes .../pierrec/lz4/testdata/repeat.txt | 1 + .../pierrec/lz4/testdata/repeat.txt.lz4 | Bin 0 -> 59 bytes vendor/github.com/pierrec/lz4/writer.go | 267 + vendor/github.com/pierrec/lz4/writer_test.go | 79 + vendor/github.com/xi2/xz/AUTHORS | 8 + vendor/github.com/xi2/xz/LICENSE | 18 + vendor/github.com/xi2/xz/README.md | 10 + vendor/github.com/xi2/xz/dec_bcj.go | 461 + vendor/github.com/xi2/xz/dec_delta.go | 55 + vendor/github.com/xi2/xz/dec_lzma2.go | 1235 + vendor/github.com/xi2/xz/dec_stream.go | 932 + vendor/github.com/xi2/xz/dec_util.go | 52 + vendor/github.com/xi2/xz/dec_xz.go | 124 + vendor/github.com/xi2/xz/doc.go | 35 + vendor/github.com/xi2/xz/example_test.go | 95 + vendor/github.com/xi2/xz/reader.go | 256 + vendor/github.com/xi2/xz/reader_test.go | 710 + .../other/good-1-x86-lzma2-offset-2048.xz | Bin 0 -> 724 bytes .../xz/testdata/other/good-2-lzma2-corrupt.xz | Bin 0 -> 92 bytes .../xi2/xz/testdata/other/random-1mb.xz | Bin 0 -> 1000108 bytes .../github.com/xi2/xz/testdata/other/words.xz | Bin 0 -> 42664 bytes .../xi2/xz/testdata/other/zeros-100mb.xz | Bin 0 -> 14676 bytes .../xi2/xz/testdata/xz-utils/README | 240 + .../testdata/xz-utils/bad-0-backward_size.xz | Bin 0 -> 32 bytes .../xz-utils/bad-0-empty-truncated.xz | Bin 0 -> 31 bytes .../testdata/xz-utils/bad-0-footer_magic.xz | Bin 0 -> 32 bytes .../testdata/xz-utils/bad-0-header_magic.xz | Bin 0 -> 32 bytes .../testdata/xz-utils/bad-0-nonempty_index.xz | Bin 0 -> 32 bytes .../xz/testdata/xz-utils/bad-0cat-alone.xz | Bin 0 -> 55 bytes .../xz-utils/bad-0cat-header_magic.xz | Bin 0 -> 64 bytes .../xz/testdata/xz-utils/bad-0catpad-empty.xz | Bin 0 -> 69 bytes .../xz/testdata/xz-utils/bad-0pad-empty.xz | Bin 0 -> 37 bytes .../testdata/xz-utils/bad-1-block_header-1.xz | Bin 0 -> 64 bytes .../testdata/xz-utils/bad-1-block_header-2.xz | Bin 0 -> 64 bytes .../testdata/xz-utils/bad-1-block_header-3.xz | Bin 0 -> 68 bytes .../testdata/xz-utils/bad-1-block_header-4.xz | Bin 0 -> 76 bytes .../testdata/xz-utils/bad-1-block_header-5.xz | Bin 0 -> 72 bytes .../testdata/xz-utils/bad-1-block_header-6.xz | Bin 0 -> 72 bytes .../xz/testdata/xz-utils/bad-1-check-crc32.xz | Bin 0 -> 68 bytes .../xz/testdata/xz-utils/bad-1-check-crc64.xz | Bin 0 -> 72 bytes .../testdata/xz-utils/bad-1-check-sha256.xz | Bin 0 -> 96 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-1.xz | Bin 0 -> 64 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-2.xz | Bin 0 -> 424 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-3.xz | Bin 0 -> 424 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-4.xz | Bin 0 -> 408 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-5.xz | Bin 0 -> 408 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-6.xz | Bin 0 -> 68 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-7.xz | Bin 0 -> 408 bytes .../xi2/xz/testdata/xz-utils/bad-1-lzma2-8.xz | Bin 0 -> 464 bytes .../testdata/xz-utils/bad-1-stream_flags-1.xz | Bin 0 -> 68 bytes .../testdata/xz-utils/bad-1-stream_flags-2.xz | Bin 0 -> 68 bytes .../testdata/xz-utils/bad-1-stream_flags-3.xz | Bin 0 -> 68 bytes .../xi2/xz/testdata/xz-utils/bad-1-vli-1.xz | Bin 0 -> 72 bytes .../xi2/xz/testdata/xz-utils/bad-1-vli-2.xz | Bin 0 -> 76 bytes .../xz-utils/bad-2-compressed_data_padding.xz | Bin 0 -> 92 bytes .../xi2/xz/testdata/xz-utils/bad-2-index-1.xz | Bin 0 -> 92 bytes .../xi2/xz/testdata/xz-utils/bad-2-index-2.xz | Bin 0 -> 92 bytes .../xi2/xz/testdata/xz-utils/bad-2-index-3.xz | Bin 0 -> 92 bytes .../xi2/xz/testdata/xz-utils/bad-2-index-4.xz | Bin 0 -> 92 bytes .../xi2/xz/testdata/xz-utils/bad-2-index-5.xz | Bin 0 -> 92 bytes .../xi2/xz/testdata/xz-utils/good-0-empty.xz | Bin 0 -> 32 bytes .../xz/testdata/xz-utils/good-0cat-empty.xz | Bin 0 -> 64 bytes .../testdata/xz-utils/good-0catpad-empty.xz | Bin 0 -> 68 bytes .../xz/testdata/xz-utils/good-0pad-empty.xz | Bin 0 -> 36 bytes .../testdata/xz-utils/good-1-3delta-lzma2.xz | Bin 0 -> 528 bytes .../xz-utils/good-1-block_header-1.xz | Bin 0 -> 72 bytes .../xz-utils/good-1-block_header-2.xz | Bin 0 -> 68 bytes .../xz-utils/good-1-block_header-3.xz | Bin 0 -> 68 bytes .../testdata/xz-utils/good-1-check-crc32.xz | Bin 0 -> 68 bytes .../testdata/xz-utils/good-1-check-crc64.xz | Bin 0 -> 72 bytes .../xz/testdata/xz-utils/good-1-check-none.xz | Bin 0 -> 64 bytes .../testdata/xz-utils/good-1-check-sha256.xz | Bin 0 -> 96 bytes .../xz-utils/good-1-delta-lzma2.tiff.xz | Bin 0 -> 51316 bytes .../xz/testdata/xz-utils/good-1-lzma2-1.xz | Bin 0 -> 424 bytes .../xz/testdata/xz-utils/good-1-lzma2-2.xz | Bin 0 -> 424 bytes .../xz/testdata/xz-utils/good-1-lzma2-3.xz | Bin 0 -> 408 bytes .../xz/testdata/xz-utils/good-1-lzma2-4.xz | Bin 0 -> 464 bytes .../xz/testdata/xz-utils/good-1-lzma2-5.xz | Bin 0 -> 52 bytes .../testdata/xz-utils/good-1-sparc-lzma2.xz | Bin 0 -> 612 bytes .../xz/testdata/xz-utils/good-1-x86-lzma2.xz | Bin 0 -> 716 bytes .../xi2/xz/testdata/xz-utils/good-2-lzma2.xz | Bin 0 -> 92 bytes .../xz-utils/unsupported-block_header.xz | Bin 0 -> 68 bytes .../xz/testdata/xz-utils/unsupported-check.xz | Bin 0 -> 68 bytes .../xz-utils/unsupported-filter_flags-1.xz | Bin 0 -> 68 bytes .../xz-utils/unsupported-filter_flags-2.xz | Bin 0 -> 68 bytes .../xz-utils/unsupported-filter_flags-3.xz | Bin 0 -> 68 bytes 658 files changed, 131507 insertions(+), 578 deletions(-) create mode 100644 vendor/github.com/golang/snappy/.gitignore create mode 100644 vendor/github.com/golang/snappy/AUTHORS create mode 100644 vendor/github.com/golang/snappy/CONTRIBUTORS create mode 100644 vendor/github.com/golang/snappy/LICENSE create mode 100644 vendor/github.com/golang/snappy/README create mode 100644 vendor/github.com/golang/snappy/cmd/snappytool/main.go create mode 100644 vendor/github.com/golang/snappy/decode.go create mode 100644 vendor/github.com/golang/snappy/decode_amd64.go create mode 100644 vendor/github.com/golang/snappy/decode_amd64.s create mode 100644 vendor/github.com/golang/snappy/decode_other.go create mode 100644 vendor/github.com/golang/snappy/encode.go create mode 100644 vendor/github.com/golang/snappy/encode_amd64.go create mode 100644 vendor/github.com/golang/snappy/encode_amd64.s create mode 100644 vendor/github.com/golang/snappy/encode_other.go create mode 100644 vendor/github.com/golang/snappy/golden_test.go create mode 100644 vendor/github.com/golang/snappy/misc/main.cpp create mode 100644 vendor/github.com/golang/snappy/snappy.go create mode 100644 vendor/github.com/golang/snappy/snappy_test.go create mode 100644 vendor/github.com/golang/snappy/testdata/Mark.Twain-Tom.Sawyer.txt create mode 100644 vendor/github.com/golang/snappy/testdata/Mark.Twain-Tom.Sawyer.txt.rawsnappy create mode 100644 vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/generic-feature-request.md create mode 100644 vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/new-format-request.md create mode 100644 vendor/github.com/mholt/archiver/bz2.go create mode 100644 vendor/github.com/mholt/archiver/cmd/arc/main.go delete mode 100644 vendor/github.com/mholt/archiver/cmd/archiver/main.go create mode 100644 vendor/github.com/mholt/archiver/doc_test.go create mode 100644 vendor/github.com/mholt/archiver/filecompressor.go create mode 100644 vendor/github.com/mholt/archiver/filecompressor_test.go create mode 100644 vendor/github.com/mholt/archiver/gz.go create mode 100644 vendor/github.com/mholt/archiver/lz4.go create mode 100644 vendor/github.com/mholt/archiver/sz.go create mode 100644 vendor/github.com/mholt/archiver/tarlz4.go create mode 100644 vendor/github.com/mholt/archiver/tarsz.go create mode 120000 vendor/github.com/mholt/archiver/testdata/exist create mode 120000 vendor/github.com/mholt/archiver/testdata/proverb3.txt create mode 100644 vendor/github.com/mholt/archiver/xz.go create mode 100644 vendor/github.com/pierrec/lz4/.gitignore create mode 100644 vendor/github.com/pierrec/lz4/.travis.yml create mode 100644 vendor/github.com/pierrec/lz4/LICENSE create mode 100644 vendor/github.com/pierrec/lz4/README.md create mode 100644 vendor/github.com/pierrec/lz4/bench_test.go create mode 100644 vendor/github.com/pierrec/lz4/block.go create mode 100644 vendor/github.com/pierrec/lz4/block_test.go create mode 100644 vendor/github.com/pierrec/lz4/debug.go create mode 100644 vendor/github.com/pierrec/lz4/debug_stub.go create mode 100644 vendor/github.com/pierrec/lz4/export_test.go create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/01572067d493db8dc8161f05c339a5192b0b4087-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/02766f768fbfbd81b752cce427eb5242a44929cc-5 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/032f04032e12567057782672bb12670c20d38439-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0367b985641aca66e6e4eeea68acf5e2a02c62a8-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/03e85abc49352b2f7cc83efd7e4274da02d78b84-6 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/049f82a81bb6b4d7cf69fac5e413f6ce299d48cf-8 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/04c05c7956f17e57a91a47909bd0706135cf17a6-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/050e2af2a57d8044139ba21375f0ac6fcb7ab0b1-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0519d86e62cc577b98e9a4836b071ba1692c7674-30 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/0547c73efb9b6a345fd9a52aa0798b48dd9aca62-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/05aae2cf8756f66066cf623618042ebaa92ec745-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0608f9eba5e6fd4d70241a81a6950ca51d78eb64-33 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/07fe3e792f0d2862dccc04db22c0e4aef4d41b49-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0990ac54decbca1a97893e83c7feb2be89cb10ea-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/09f2eda28ecc97304659afded4d13a188baf2107-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0a4ff2ab3a01888686c5bc358b72be108bbb4721-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0a7fddf3c8aa1c781223748129c9dc0807de3a6b-28 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/0b5bec228930b2cfcda3be9a39107a6bc8044f1e-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0ca5fd3841a6777873c7ef26f65a384e7b15d065-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0ce9c3bac93df0ea1f6343d223d5220f9eb2383a-8 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0cf885cd35e7124005b0ba0c3c4431ddfaeff84d-11 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0d7c02d4e91d82b0355baaca1237062639442db6-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/0e1b2b0c49dfb86fe01d3453dd24e39482e132e8-7 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/1.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/10.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/106b9d718c97bb7c872847d3070a570e99d9fa3e-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/10fa5d9f0fe75f73c0e92a1fe1c00f0041ec8f39-24 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/11.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/113a12cbb28b83fcee714d58c35bbf52c0740e90-7 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/12.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1288161f8ce422490f63f257ce7338ef90fb8827-15 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/13.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/136f7224ae337a61df2e72b80af8b1aaa5933af3-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/13c3c26f7a34d01fc89c92ca8ba2ba5ae430c225-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/13db64707d1ea3070b4a37b6c1291d6125acbbd3-10 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/14.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/14193748a7b6cda204b11d042a35635151e90dbb-20 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/142d4f8cb427dd3562d72d889dfc0ea3a2b03d98-22 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/15.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/15663b854e9a4f193502ea6463dae38b4d8fca90-19 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/15e223354eb5378a7ee74a41dfab28ffc895ca33-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/16.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/17.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/177c1c68fead4507aa47dd2455fd17a10ceda5ea-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/17871030a73ac4d12ada652948135cb4639d679c-34 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/18.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/180a2772b126d31abcb3ef692a14b13cf47f103e-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/19.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/191e0dd24b8c7f8babeae4839768df39acc17eb1-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1971e6ed6c6f6069fc2a9ed3038101e89bbcc381-26 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/1a582381781f264f551bd6f0f2284a931147e6d9-4 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1a58f02dc83ac8315a85babdea6d757cbff2bb03-30 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1a5a08b67764facaad851b9f1cbc5cfb31b7fb56-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1c2781a1ffae4059ce3e93a55ec8d8cbf8bdecdf-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1c944d5065b1a2b30e412604a14aa52565a5765b-35 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1d37fb332301cf7de0bd51a8c1aa9be4935e89fc-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1d6b87b52e62cb84be834478ad88129f5e1f247b-9 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1ec2f11a8d8b9cf188a58f673a0b4a8608a926ca-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/1fc2ba0bb981fec47badea1c80219452c9e3c76c-22 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/1fd8444ac43541c44a1c6ed8df2f688b1fa09681-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/2.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/20.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/202a9c8b188cae90f29bce3bf0438a035c504eb4-20 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2065ba3177c7dc5047742faa7158b3faeaac1f3c-32 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/20cf0057443ecb322ff1169ecbe6cf20250f15af-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/20d1a26afe563ad77e7a95fbee6ff59ebf3e61ab-13 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/21.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/21c8be1bb9eeea5b141500dee4987ab7fbd40d4a-23 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/22.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/2201e32d052c15874f0323a09c330f3666029a72-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/226780b32ba8f87ec614fdb376aa0884011c4ca9-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/22897c61698649d7570de91613afdc19b66e6965-20 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/23.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/234cc427d9be32470f3c2e11a6bc16567f558e55-22 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/24.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2486a84bf0f161f45b050d9c19ea9e35f5def864-8 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/25.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/25252b16cd4afa8ef86122448688c7095684c86b-12 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/26.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/263fb3d738b862ec4050e5a9fbabfbd99cb0d9a5-16 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/27.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/276580343a14eec04143e89a778dae3e14df472c-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/27fb5dc4016dc640e55a60719a222c38c604fa6b-2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/28.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/29.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/2a08d7c56ff9959698688f19ddd2e1e4d4651270-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2a33d8514fb512aa20b0a56800cd3e12f3952b6b-26 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/2a52400dd3aa2d2a40657d1e51c47c1929912927-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2ab005ac79cd4dada693dd2a747c001898d45e1e-16 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/2b39aa66ecfac58e61185c9664a968233931496a-9 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2c2a5947341d76797a7e2299f39d01e3aebb2eb8-19 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2cc2308b75a2e8f7eafcf69370767e5fce314892-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2cdafdadb156e2759c389b6b8edf6a402034886c-26 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/2d7f0171116eec9984eaa9138e1312e90a7d67ee-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2de93224b5f0db491ced1ec491a9f41d71820671-11 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2e8487cf61feda70c0d74f12bfb5b692b684f82a-9 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2f0ee9cf4bb951a37efc6460d5709442bc3de54e-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2f1ba7fe1cd90a4023706a2ea9c7c9dca8128119-30 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/2fad20024167a500cdb8df5334a614f113efae00-20 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/3.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/30.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/300579a548d96d64c9da8470efa15e787f1a36f1-28 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/31.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/31c6c22708d346ed9e936fa7e77c8d9ab6da8d1e-33 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/32.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/33.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/34.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/344d38ec2ec90cb617e809439938b4cbf3b11f02-10 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/35.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/352631eab692c4a2c378b231fb3407ebcc0c3039-33 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/36.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/363d4559cac10516289fe1b6029590c4c7a6d8eb-5 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/37.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/3771c6e8ea0f20350dae0180a9b14e36b8aef244-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/37ee7fab504f2d2039753d73dd0290c884bd57bf-8 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/38.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/39.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/396101a712463bb336a18f4096fc3eb5923600c1-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/396146e06d3a4b2468d080f89ab5862348073424-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/397127b75cb59b253ed49206082b0428b6b23d02-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/39ccf446395ef707cf92a04b5508deda399372c2-15 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/3b6fd6da48bb34284390a75e22940e7234dbbd28-34 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/3de3c5c394a3cf05620bb80871a1f10e9e36f25b-8 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/3dee65f1cf51dfe2e5be498150ce22d2ac5a07fd-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/3e34341fb51769fd9d948bdd20c011e335b145f4-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/3ee211efb3d5d8058cd9a8c59e40c8d0f7a3df53-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/4.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/40.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/405726718b3f54a0cfae1666f06d3cc1ee747104-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/407188676d45d6f9dd5f3c84e7df0e763c7cca57-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/408ac1a4a83e082e848c208eed903930d81e81b6-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/41.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4114fd99aaa4dc95365dc4bbcb3c9a8a03434a5a-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4131f155339a3476898088b065b8588a2b28278e-26 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/413e39442f005279560ddad02bbdd1a05c9f0eaf-4 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/41b7eaf8892043eccf381ccbc46ab024eb9c503c-4 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/42.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4208b7fe7ac3a530c159a1c8fd09dd3078b5650f-15 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/421bd1daa317c5d67fa21879de29d062c342294b-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/42544ff3318fe86dd466e9a05068e752a1057fcc-32 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/42b056f9dac9cc658c80092e490b3dbcd436e3f8-15 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/43.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/432c09281c46537c98864bc7d601780562b68410-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/44.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/446dc91ff0ddc34c3b02f741e3f6f079a4dfcae8-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/45.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/451831159c1afb87077066147630b4b6caeb54c3-11 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/46.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/47.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/48.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/49.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/49861b3d9bca3e2857d806aaecaac09af4bff1dd-2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/49a3ead0ad96e8da5a4c8f89bd140e1d8af8995a-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4a14a3883f5c8819405319e8fb96234f5746a0ef-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4a625a4b4f3069707e88f16db88e993dabc41aa2-27 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/4a6464c2aba2492f5122856de7ac451994eadda4-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4b0ab2fc1fdfc56066c5c1f2751b292f4ddc557e-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4b55f37e6637f4246a41caa490da4bec632379d4-7 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/4bb422b835278e4aca92d076331d9c8cc5752345-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4bd00d26b893ce064dad6e771f30541b541d43b9-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4cde5adc216a29fff2ec39e23ccc6fca80cd4a15-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4d1b64babe1f045b8374f4d74949622591546eb5-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4d49686993529cfe29473c50b9b0fb2b6ea4f6bf-13 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/4ea726d6736026a733707e695d9c2cdc83efc05b-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/4ef3e6d20ccec24376a526ab9ec9f6f2cc604129-25 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/50.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/50a87eb0c097a7ebf7f1bf3be2c6a7dbe6b6c5c3-23 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/50e3ac1126c605158726db6f2cca3120f99b8e73-22 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/51.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/51075c34f23d161fb97edcf6f1b73ee6005009a0-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/512ed5fb4e92818b75bd7633f58d6ca5340ffd94-27 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/514a62216c761adf23d946f11c0d1a0410990641-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/516d84c21ac984bd1cae56910d71b62e39610c5d-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/517d39f406222f0a0121b7a1961953204674c251-33 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/52.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/53.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/54.bz2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5431cabbc58d8dc143ece079de40300c1ce6e101-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/55700385089e16e44968ea410c6b90206b16d72a-14 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/55b9a902445e2bfa2f0f37d630779d329eeda20e-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5620a492eaf067734e5b8b64517b28ec3beaa97e-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5699fea659964d8ab94069d08b0b97834c0a42df-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5765fc21629571e51adf2fc2bc8b64541a1ea08d-18 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5768ea5d1911143f4b1c0585b9b864ebe16aa004-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/57b780437f4abf2d5cba0775bf802a4dfdb067d6-25 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/58f53d40265c9a49c0d3b4292cb637464a4e376a-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/59b254c3565c9eed2bc93385b821da897afcbb15-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5a962e3d6a128983afe9ea78a28cce0f40a790c0-14 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5af52ef91b6f717ffdd805585e24806407e9621b-14 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5b01aeb030dc1dc9568fd32f1647d92f0692a411-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5bbd27cea704a4e6ff3f42f4792a91eb7839bc0d-12 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5bd895c23369df9505dd99ffcd035dc5e897264b-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5bfd84d7b2ba6b6325d5135fb0a9ae1ec5d7d3e1-2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5c4f347c3567baf700dfccf49a91192c83b89da2-8 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/5dd8001f8a87c24f866074c36b6b80f42b298ff0-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5ddf63d61aa38da1d409e37b301e0fe5a207a051-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5e19e298d051aac48b7683dc24577b46268b630c-35 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5e54c67050ee8583c7453ff13d6eec15b2255288-20 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5f946423d1138924933334c6e5d3eb13e1020e9c-33 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/5fbebd9edd144c4b9869ed4ab40c7cc3c46a4a8f-4 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/6.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6046b14dd1f6925bcfe470a8484353f525db6a9c-19 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/608a9993a51ec7bf252ac76b163def5f7002d2e4-4 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/610d8dc3cf4012e4e2d070988b0720285a4c361e-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/61b196987682fb64ef9c4ff37532bf9b2ac201bc-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/626f8b6efa3ea0f254789fe6cf52f6e52538f357-25 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6277f2e0a6df2ac61660ee1965c690b87c26b556-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/62c738f00c488f493989b2037d9cf1781f0bbd40-11 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/631ffa88df9713a124b3ba6c704c0c75727af2ff-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/633df0cd78621cd45067a58d23c6ed67bb1b60cb-31 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/635d5de257a1910a7fd0db2e567edfa348e47270-11 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/64c500b5addcbf8c673188a1477e4159851ae04f-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/660387064a3cf4cb81046989929abe1b4fbfc815-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/66068a7e7bdfd1038a84aeb3dec6e3cb4d17ad57-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/66c34847568ac9cb3ccbb8be26f494988a3e0628-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/67534dbd68040fb9a8867e6af384d33ea323758b-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/67ab3037ff49f082a877224d68e35069cc4d45eb-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/68612136c2017f9caf87122155f82a25f57c2d2a-32 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6981397d97c481e39d563d43916377fb3c74c60e-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/69c2accb74456005e2a9bbef15ccad3d076f2124-28 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/69dcc80940a26844b0afe7898fea9cf68b698214-4 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/69fcd886042d5c3ebe89afd561782ac25619e35b-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6a04b54e1511633ec895326b4e043e186fa5693b-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6a3e8935204dcd3dc48a1ff7415c305f0e5863aa-9 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6b351674a45f2d9be602fe8d3fb84229551b4ce3-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6b72fdd9989971ecc3b50c34ee420f56a03e1026-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6b7f4ac7aa8b357dee3067d7a60143c03b54bb8d-16 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/6bc138796e9b80572a6cb1b4a7ba30c97c22359d-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/6e14a407faae939957b80e641a836735bbdcad5a-2 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/6f24be0bcac848e4e5b4b85bc60f70f12388a5ed-4 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/7.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7102c7f297296821114661e00e5bf54d0891d105-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7151692dfebfc82876676e65ee9b807d83a3df54-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/71a24ce771fb7f1a4163e57a478c3044ad42e62d-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/72c738d7492d3055c6fe7391198422984b9e4702-32 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/72f032947602f1be74f01c91165c5118121f36c7-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/73b6bd1462a0521b4bf76abb1fd80df6e180dc80-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/73c81fef0997a4929b303e02a99f3977870f2013-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/73efed803abadf6167fc3f04e0674cc39c30f6af-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7603f5f266de813608c4cc1ccd1c798ef8065c5c-23 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/764571571e4d46f4397ed534d0160718ce578da4-26 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/767d1943125a0f6e9397779cc757c9cdd1e05631-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/76d22068e2ed4a5952d4adc7ea8dada5509a784c-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7740102922cb9933980bb800c1115daf38edf654-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/783270b1e353ba3895b7d0c4135b8592e22f6508-12 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/7851a406571c6b4c1aeed0af16db8c48444c3f2b-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/78981d313038119ac4f7017349e50a1cba56b382-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/78c88c4afaf5962056b1aea720509b9f6f286b91-15 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/78e59daada9b9be755d1b508dd392fa9fc6fa9c2-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/78ef686662a059f053f80c1c63c2921deff073fb-31 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/79c5ac978f5aee35e123f523369aa46b1d0a995d-11 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7a0fc8dacceae32a59589711dce63800085c22c7-23 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7adf4aa021efaa953268c817467959fa3c42ca42-13 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/7b8c99ded96973a6e8f523bc1c6ed4ef5c515aa1-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7b919213d591e6ce4355c635dc1ecc0d8e78befe-30 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7ba80199cbce9a2eb47da15f0c62fd1fb8fa67d9-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7cdc0917ad63ce7a7c98301a366c31635f0f099d-14 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/7ce37ad19bfe9f52eeadda03e6b8448e5bf57800-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7e3132012be223fd55e5e7a7fc2ea602361ed2b4-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7e9a88118e4c41e61f5c501e6edf9a5bd2432be3-23 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/7f081c89cfb6344f4aac5f813da1fd15f8bab022-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7f8c3b163798c8d5e1b65e03f411b56b6c9384bb-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/7f970f16026c689c096a19fef1a3282a13ee69dc-20 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/7fa96d28faf45062eb803ea84a334b607e966f90-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/8.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8261f0c1799ca71c411f6d3f34069b25dac8b739-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/82a499521f34b6a9aff3b71d5f8bfd358933a4b2-36 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/82afa534de59025bf1e3358919286525ae7d3347-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/82c627991d65c5c4e88c9ccac39be082cca40765-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8435aa58e67c4de798375b44c11bffa5b680f615-32 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8496965f7aa6cea3e080dbfb911a7034e6623cb7-10 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/84a9bda8369d33ffe0d6f520c24331ae64e9dc88-3 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/86513e3435adaf7c493dd50eb5de372010185e36-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/86637b211f4fa0118ccab9ee193c66286126bb5d-20 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8695984335fa005895377a8a60000a921d7efd99-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/86baa53eb98a9a342b0d5b79dfa5c58aa9c1b05e-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/87caf7737ebb025ec2d908224818ceb2bc76b658-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/88e6e46ab1ec92ce694b8d4c3d816491169d2bb6-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/89216c662a46d50f37cfa08963acad8c6f7aace7-11 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8d70b7de160bbef22ab46f798d687a69dbda772c-5 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/8e533f8a1e58710d99d6b7d39af7034961aa4fbe-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8f0d2862c49eebbcd473a38c8fa1e76288f47127-26 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8f4788d30edd22ebcfef0e52bbf9e8c3d1e8d7e9-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8f61ea021e02cc609baafbdf714b9577e4bcb05f-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/8f7a47710904981ffaa1fefa21fa95fd2d818487-7 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/9.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/90a227d3beab730ed6eecd63657f5406beccabdf-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/92197169aded0d5d0407e3925959e922257a101d-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/924e17974cd194fa756d23394676d37cc3641f64-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/92a785b5ea93d36e27029e281e9a34377d81ce55-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/92d41e4fca52311e848fac274144b6293d9260f7-34 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/92fda3aa2adbe37ff690c59939ca1e1b2a8a7936-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9363b81db6b35e8beebcc32d560f786472829bd8-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/948b1ce043c82d0cfbaa910b6989a1b35a19b8ae-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9505b43fcbc3139441e35bdaaec138e28af076f6-25 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/951bb02c199adb52e9e300e9fc070bf55980b910-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/955404fe3f375361f5c3be1dbcd28eb9a28f06e4-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/955c823909722e2693dd7cea3eadc17833dddf86-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/95ca8da5556065f33b46c2c8186c2f1cebb1b5da-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/967e50c6c1bc99aa5e7fa07c2de14564f52b0fd3-20 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/96c9a1fa8b0184ad486f8f68a9ddc88434579080-30 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/96cc45abef3bc9fb6659714b9743cda92ec0abb9-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9719ea029fdf8c837f991ac3548145485cc1f06e-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/984480af27d1640fd02f40e736ffcde3a91e4abb-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/98d40a50ee58c05727777e242ecbc0d4e214f7fe-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9915e9bb007bc2c1f3d346123933923279f0dec1-27 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/992413e17d64968cb04af34c7761182f20fc97b6-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/995d50f1cb750cbf038246d6cb0cf8db11d7e60e-33 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/99cfa74a1fea5d16168dd9efc720425b85e95eb7-15 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9a552bab72f174ede3b9bdb7a663c963fd1463d3-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9a5ab6c72a445b3b27129004d2a1a417cd4d8440-26 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/9aa3050cb38a6ad276cb5e5ca0c4776d92cb7b0f-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/9be44693435bc6c51980f30418bcc690d8c25fe7-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9c0420bf00f888487d543f42fc48b407c65d4717-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9ca2a086f1f08c7dec54d52425bd72f17c11056e-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9db70b1edad2317d94dcaafe7f5c5e3145084167-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/9e160ae007fc11092a3fd877ebe706c4d841db49-19 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/Mark.Twain-Tom.Sawyer.txt.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a01e13c3e401957031defb62b05434c65b01d5c4-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a059044bdb0402471dbe9aaaa555a063a6bc1e6a-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a06b1a08fcda463f1d51c485b0e7271ff9048b41-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a0f3d67e96968a267366be380147cbc7b17e5b2b-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a18d849dc2a98c4ebb6000b2cc853f21fb64d9e5-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a2e5916be780e35e9ecb7c42be52dd5e134f3363-25 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a33252a74974fc86df30c311d501a1f363d350cd-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a462f03ee666a20244d3331e3635b7eb796d906d-15 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/a56e983782e49f8267a61d4375e98b1a862862ac-9 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/a58a9f9caca5e73b4296b931201a5ea870974c26-15 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/a628194a08ff63e98625b1786175026c5f02c716-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a64f2336fd4a9ec8153b95f40c383e1ecfed9e73-25 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/a6a5682a6663e0c548c9e5acbad4958e2c256b32-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a6dbaac639f3b82609ec27c80fbd003684c28867-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a8c6a4509b61d8baa71f59f9e1eb95712b10626c-23 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a97d9bf241e8ec73f99205b32c24fcd64194f0b9-8 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/a9e348d9896cc740f7e910d0a70c080adb65cc77-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/aa04575587509ffc65a6b0224d24ad1125cb0f63-26 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/aa290b4dcc8198945311c8149fc1252f14555e70-15 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/aabb8fa4913c79f0a42494ad2215a32927adbd45-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ac7077c5220abe6cd481318c42dfe6cb2cb2c666-10 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/acbef0322169a93c7421902883cc8057675c953b-26 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/aec95871bc7d87cae16c36a0d30955b43076aec5-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/b20e3f27f4e8d41f16124881f92546f0fb2edc16-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b27fb21ecbe6e77c91341738621ad7092c29bca5-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b38ce47b707326024fb24860c4365d58ab9f3528-29 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/b3eaea244bd47b64c8de3d81c7b5e94e421d7f32-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b3fd355dc090a732d5cf3b25151f165ea901a682-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b53101ec4348e9c329c13e22790ffde246743030-35 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b58429fd1107617191026029cf327b2ebed963bb-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b58846d79a8dc960a718ef88dd3a06ad49b1fe72-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b5b5b895b4619fa039ea99520b9947de2996c38f-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b6aca5c55295d93491e47817f46ca372c9078cec-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b6ddb90092b3087158dc32669529db2012f14c3c-7 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/b6e7a519d013ddb67313af02a9ce966877949487-4 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b71a5a7c576e5cc5ba23845d352b2af16737c03c-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b7815c3b5649d9a367ba99e7e09cf1f251ab6f83-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b7a5b15c9e2d4d659d421de8e3b463200f71f1ec-23 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/b83b3d04ada1403578065d7f10aa7441830dea3c-11 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b92c70d3f12e67c69ba5db9ad491b7a4e075ece8-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/b94b7ebc6d153e0c99a97864f58b26f7192f66a5-20 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/ba98469ede70309f18893f0ff95380f5a0486fcd-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/bc0c31f304c1a1f8be0c8a0d9daa3b8aa1f23799-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/bc3ac4aae07cba8d7f657a8739d1774e44bde613-31 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/bc650b6a5356c1935f64f6fb755e43bc5f5187c4-26 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/bdc123d9da19a7ae0ff87ca0741002fbd8bb2cca-34 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/be06bb3c3b604660fd36b2af8860d35e31c8bbf3-8 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/be5767f4d79c5a0b2643d8eddb74eca0598674dc-19 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c07f4e4cb1d0a34dc6899097fd27ee9f1744cb70-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c1972d0c898848e6188b69bcdbb7d14fcc780ee5-26 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c2ac55a7fb702dd9a527b576d99008fe9b4f376f-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c2c3d29bce8aae89fed326832b3e1e1077cef1da-18 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/c321670bbcd985327045dd1468bf2ac4ae7333e5-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c34998d9a8893eca9cdeafe7b2482469ad98192b-25 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c42ae63ab9584753959f4692cef9fd8513b54691-30 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c5522d11f314fc46de58e15116b6910d52acf866-17 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/c652c46aba3567521f912bae6dc263b668c34c9c-7 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/c6610b87900912d462229a5259dab51ea0aeef33-4 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/c6c37f6c89fe55768f8b3f7b28b99467c239703a-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c71abfffdcf530a6d28fd99cd2c3505c61ef0ac5-8 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c77304b250e887b39b5447d19b9c106fcebe7e66-20 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c78cd8530e6d8a606a28797552ce3f5494763621-25 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/c790308a65efa1b895bc57abe53e4fbcdb2b7d0e-13 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/c7fe1fe2e3fc19fab3766f9fdb1d22c848d49aed-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/c8b01a7ea9c1b84e4ee5eb68121c64f183e7ea10-9 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ca5d375d8a66727221d3e198d4ad360782944de7-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/cb1314cc880a1a389cedf5c16cc4b8ad505b4506-23 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/cb635ef244cb6affc005c63d0bf8b52aecb1d986-4 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/cd67bf90feaeb1912792508afa01a09fe1f044c6-13 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/cda434677d4bdd969a3bbf84086349f821e39c80-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ceb22e7f581d85ed876e3d61da7df65da8954bf2-32 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/cfe7201e28d42484764264c231663e6372e95ef7-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/cff88dd94ee94e1901d25a74e29ad863bb78b1e4-16 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/cffc7573debb5af80aaddfa752538825275fd6a9-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/d0ae058f71e53a7afd648b859cd7485886be550d-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/d0e6298a63ffc2695cf7d016a124db7375f197cf-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/d24f23a23508dd6bc93ea6283ed49c8ba4b737ed-15 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/d295ca4c78f7fd3ff10b0520b09a0a346310e0a9-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/d3ddffcd038a5646a53d48b684eac5b721c7062a-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/d4275f1f814a5b24f7b4788d15f3fef7b2be8aef-23 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/d57eaf0fada8726afac2287cafb7720af7417b16-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/d5c9dc3b5b4e71d902fe4cf5c44b237b104a32a9-4 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/d7855c38db11bfeeb474a4782f1ea293192f786f-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/d7912c5e2a776c408e7640f10bd7d655a6a0f31b-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/d8873ec9a0344ea23f70d1ffd78c2fd0435b9885-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/da3418e70658be491531ef6524f6ef7984ff9e96-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/da39a3ee5e6b4b0d3255bfef95601890afd80709-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/daffc68f738bd5945de9c7babd4e01cc4438fae8-31 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/dba53c14b92561071ccd7762550d53cf43027bdf-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/dc61bdd2fb983111d1392cd79ba9b39e0a3b869f-20 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/dcb49d3d45d32601fa27208cec33813e03ff6179-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/dce9966b94744440d75a845a48c806041f5a6612-3 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/dd799919262810add464dbb4ee39a38f1e4ed258-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/dd92516fbea2d0f96abc78f325d731053a451e16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ddf986569f89016184b5b6e924d5ba827c9980ca-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/de0acf1136a1e05cd27345ce135ea26abd32bbfe-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/de33e3ef8a5780c7d3458188a423c00f470904d0-15 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/de501127da94246b2d3aa947637b49fbc17d5e47-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/de702cd20caeb08a843e0c09b0ce87a74e300415-20 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/de8abda1b9bd5628ca99c8f97237fa885a857bb5-19 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/def6a9e986daf0b268ef29ef7e821a9f6840ef2c-8 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/df0768cf0c709a1ff1a93cc0dad23979501c54ff-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/df5bd5044e9b74c648b5f5fcb4dbdf953175f9f9-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/dfad565009b0667ef2ee10ea9c1286ee5c3ce6b2-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/e.txt.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/e1556049ba9794a15ee21aa283876bf63e531a4f-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/e17af76e8c119233dbd2888ab519bd76d7aa7fe9-6 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/e22a5ac115e8bfd3468c9e6ad73ea11b8743798a-30 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/e346c715ac3187598d8c0453d9e741fae1232c99-11 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/e3acf6f2b5a1b97f5a82ebf7d1822077561583fe-26 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/e4a2a1469de980756c607cdc2584fc94bc109382-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/e544de8de59a005934dd4b7fd465c5bb0046482e-26 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/e68b04a675d8d4192565a808955764c77ae510e6-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/e7ea1bfd65ca7db84f0984474658bfc3b063c63a-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/e7f55f4c85203100c3cd819cdc87abb0e9e86374-32 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/ea212596f8a7aec4eb2e85fd2cdb5c2816b58495-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ea83e3b78398628e8a85e2e618fa956c0ffbd733-35 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/ea9af92f89e6889b523461ae7b2b9fecee5a7280-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/eb967d9cb0407c2328bbdbf98b5602274452d900-23 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ebc69b7ca13ae23b075c9b21ebc283278714e3aa-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ec8e760e79dc08a79af0d79c510cafb74e504472-18 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ec93fb54ce508e132c89b6637913f84c3c78bafd-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ec984b6fb8e41dbcd4299ecd1dd6fd0a77347122-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ecbd6bdea50b52d263b4e9cdb96c7ce078d2b780-25 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ecdd1df7d975c8cf8d015b2f1d0d7c6e00eb578b-15 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/eda1ee9cf85f3f71ec8a4eec7534ed2677b47775-15 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/edbc11de7dd074c367a69532db023cd810bb3978-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ee6afbf375619a2bd6fb0abe0e42e51ab3b0ab13-6 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/ee907d38c1394c4971b389a99a3be0913836212b-9 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/eebbefa1983c9e1aeb5217aabcac7ab24dfe166f-17 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/eee3d4a9a8b297f016c23f50a9792c30a621720e-21 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ef87432939473264357babc06257b0280ffd15ee-5 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/efd3db86b12d209db7f0b24281a2cccebff526cd-33 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/efdd522fe3abb88204f63b1fe7312f62b6ee593d-16 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f31dcf6e3044e050f2396b601ebe420e89749c07-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f35bdf2e8b4af93c6a73e564055aa4eacd9f0d0c-13 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/f3a2381d6f39defe22520aea46201e6ce6d37f80-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/f3e916907eab3412b5875e5eca05bf3eac8a8d5e-1 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f3f49f3016c41052be090544cf110c322bc7ef63-24 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f4003ca01b90a4ee1be5701a5dd7d5f04e00c8f8-28 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/f493376c3eda80cbe822ac456486734b72f891fc-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f55efbb04cd32f7828e951d067319db00627153f-28 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f5ecb47dfd92bb0564588beefd03ffcb0bbdae54-29 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f71b4776ecbbe47746fb53d7749751c5c5bbff05-22 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f724d4c839c012c7772618e28ef68d478cc00c74-21 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/f86152e5ce510dc674fa73d20b324e2d3c4d145b-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/f931bee2e7f1fefd8bb2fabf88f8f3d2b3ea78fa-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/f9bcd3660c355799a865fedd15cb27a18591f244-33 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/fac6c4165067ef2d87a23a2530a59eb560d470e0-23 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/fb56a1001599e07354ce3101af111554c6c9bb40-1 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/fb75f3059f8835a7e8781c899af756f22d1c06b4-7 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/fbfe35b0485040874ed564b94ba764bdd17e80fc-10 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/fcb1c8b1893ca85647581cadec481754d8f35c96-12 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/fcb33fb48e48acd9155fd7ed8e82e71c850ffd22-16 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/fcd47a15e10a21e1eb13aeac223becc89aac4c69-2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/fd4f0dc77a022a8140ffe5b2e1a5ff577e844878-27 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/fdb78af507e72288b059ff902ae5e76538d1e6ea-14 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/fe002e4c7731ecb4c09c09a4e1fa29c0c61874bc-7 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/fe78d4faf4ce717d84938010f92ca5e844f9980b-13 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ff3b7ea844eb197dc6bd59d9f8e4a4a5718a6771-18 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/ff47856b8fa7323572c8b4a6d8028dcb2663a37a-11 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/corpus/ffa97253e1ab365b84eebb9d257f9370b7796fbf-28 create mode 100755 vendor/github.com/pierrec/lz4/fuzz/corpus/pss-vect.txt.bz2 create mode 100644 vendor/github.com/pierrec/lz4/fuzz/lz4-fuzz.zip create mode 100755 vendor/github.com/pierrec/lz4/fuzz/lz4.go create mode 100644 vendor/github.com/pierrec/lz4/go.mod create mode 100644 vendor/github.com/pierrec/lz4/go.sum create mode 100644 vendor/github.com/pierrec/lz4/internal/xxh32/xxh32zero.go create mode 100644 vendor/github.com/pierrec/lz4/internal/xxh32/xxh32zero_test.go create mode 100644 vendor/github.com/pierrec/lz4/lz4.go create mode 100644 vendor/github.com/pierrec/lz4/lz4_go1.10.go create mode 100644 vendor/github.com/pierrec/lz4/lz4_notgo1.10.go create mode 100644 vendor/github.com/pierrec/lz4/lz4c/main.go create mode 100644 vendor/github.com/pierrec/lz4/reader.go create mode 100644 vendor/github.com/pierrec/lz4/reader_test.go create mode 100644 vendor/github.com/pierrec/lz4/testdata/Mark.Twain-Tom.Sawyer.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/Mark.Twain-Tom.Sawyer.txt.lz4 create mode 100644 vendor/github.com/pierrec/lz4/testdata/Mark.Twain-Tom.Sawyer_long.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/Mark.Twain-Tom.Sawyer_long.txt.lz4 create mode 100644 vendor/github.com/pierrec/lz4/testdata/README.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/e.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/e.txt.lz4 create mode 100644 vendor/github.com/pierrec/lz4/testdata/gettysburg.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/gettysburg.txt.lz4 create mode 100644 vendor/github.com/pierrec/lz4/testdata/pg1661.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/pg1661.txt.lz4 create mode 100644 vendor/github.com/pierrec/lz4/testdata/pi.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/pi.txt.lz4 create mode 100644 vendor/github.com/pierrec/lz4/testdata/random.data create mode 100644 vendor/github.com/pierrec/lz4/testdata/random.data.lz4 create mode 100644 vendor/github.com/pierrec/lz4/testdata/repeat.txt create mode 100644 vendor/github.com/pierrec/lz4/testdata/repeat.txt.lz4 create mode 100644 vendor/github.com/pierrec/lz4/writer.go create mode 100644 vendor/github.com/pierrec/lz4/writer_test.go create mode 100644 vendor/github.com/xi2/xz/AUTHORS create mode 100644 vendor/github.com/xi2/xz/LICENSE create mode 100644 vendor/github.com/xi2/xz/README.md create mode 100644 vendor/github.com/xi2/xz/dec_bcj.go create mode 100644 vendor/github.com/xi2/xz/dec_delta.go create mode 100644 vendor/github.com/xi2/xz/dec_lzma2.go create mode 100644 vendor/github.com/xi2/xz/dec_stream.go create mode 100644 vendor/github.com/xi2/xz/dec_util.go create mode 100644 vendor/github.com/xi2/xz/dec_xz.go create mode 100644 vendor/github.com/xi2/xz/doc.go create mode 100644 vendor/github.com/xi2/xz/example_test.go create mode 100644 vendor/github.com/xi2/xz/reader.go create mode 100644 vendor/github.com/xi2/xz/reader_test.go create mode 100644 vendor/github.com/xi2/xz/testdata/other/good-1-x86-lzma2-offset-2048.xz create mode 100644 vendor/github.com/xi2/xz/testdata/other/good-2-lzma2-corrupt.xz create mode 100644 vendor/github.com/xi2/xz/testdata/other/random-1mb.xz create mode 100644 vendor/github.com/xi2/xz/testdata/other/words.xz create mode 100644 vendor/github.com/xi2/xz/testdata/other/zeros-100mb.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/README create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0-backward_size.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0-empty-truncated.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0-footer_magic.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0-header_magic.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0-nonempty_index.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0cat-alone.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0cat-header_magic.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0catpad-empty.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-0pad-empty.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-block_header-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-block_header-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-block_header-3.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-block_header-4.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-block_header-5.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-block_header-6.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-check-crc32.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-check-crc64.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-check-sha256.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-3.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-4.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-5.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-6.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-7.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-lzma2-8.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-stream_flags-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-stream_flags-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-stream_flags-3.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-vli-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-1-vli-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-2-compressed_data_padding.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-2-index-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-2-index-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-2-index-3.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-2-index-4.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/bad-2-index-5.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-0-empty.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-0cat-empty.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-0catpad-empty.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-0pad-empty.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-3delta-lzma2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-block_header-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-block_header-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-block_header-3.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-check-crc32.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-check-crc64.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-check-none.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-check-sha256.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-delta-lzma2.tiff.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-lzma2-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-lzma2-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-lzma2-3.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-lzma2-4.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-lzma2-5.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-sparc-lzma2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-1-x86-lzma2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/good-2-lzma2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/unsupported-block_header.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/unsupported-check.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/unsupported-filter_flags-1.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/unsupported-filter_flags-2.xz create mode 100644 vendor/github.com/xi2/xz/testdata/xz-utils/unsupported-filter_flags-3.xz diff --git a/Gopkg.lock b/Gopkg.lock index c31470b1..fd673109 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -338,6 +338,14 @@ revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" version = "v1.2.0" +[[projects]] + branch = "master" + digest = "1:2a5888946cdbc8aa360fd43301f9fc7869d663f60d5eedae7d4e6e5e4f06f2bf" + name = "github.com/golang/snappy" + packages = ["."] + pruneopts = "" + revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" + [[projects]] digest = "1:e097a364f4e8d8d91b9b9eeafb992d3796a41fde3eb548c1a87eb9d9f60725cf" name = "github.com/googleapis/gax-go" @@ -411,12 +419,13 @@ version = "v0.0.3" [[projects]] - digest = "1:e6cee0e684c4abef5358249d6f6673a154bea173ac4c3ad8014d1f891212a928" + branch = "pr-folder-permissions" + digest = "1:d67c8444ec1427985aa4acdd09b759f3392425758b17a4efc842a1b12583dcde" name = "github.com/mholt/archiver" packages = ["."] pruneopts = "" - revision = "cdc68dd1f170b8dfc1a0d2231b5bb0967ed67006" - version = "v2.0" + revision = "7660ee8119610a6091b8e21d66c800c725344f78" + source = "https://github.com/heycait/archiver" [[projects]] branch = "master" @@ -501,6 +510,17 @@ revision = "d60099175f88c47cd379c4738d158884749ed235" version = "v1.0.1" +[[projects]] + digest = "1:b1df71d0b2287062b90c6b4c8d3c934440aa0d2eb201d03f22be0f045860b4aa" + name = "github.com/pierrec/lz4" + packages = [ + ".", + "internal/xxh32", + ] + pruneopts = "" + revision = "635575b42742856941dbc767b44905bb9ba083f6" + version = "v2.0.7" + [[projects]] branch = "master" digest = "1:969f3e82d5f3b6b7c570665ed667d52f20d992f314a841628e1940cd4f0701bd" @@ -543,6 +563,14 @@ pruneopts = "" revision = "fa338ed9e9ecbb0e9c2e6c7a0160d9fc9b0efbd9" +[[projects]] + branch = "master" + digest = "1:5d5ea0c53c32b0465b910eb1d98b045c2f14c416880c54dd5356a1c6b4569041" + name = "github.com/xi2/xz" + packages = ["."] + pruneopts = "" + revision = "48954b6210f8d154cb5f8484d3a3e1f83489309e" + [[projects]] digest = "1:8778190ba18941ba540ea3a065bfe3e6c4126ab16aa2f8a240076ef51af9ab75" name = "go.opencensus.io" diff --git a/Gopkg.toml b/Gopkg.toml index fc679693..76512d15 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -39,7 +39,8 @@ [[constraint]] name = "github.com/mholt/archiver" - version = "2.0.0" + source = "https://github.com/heycait/archiver" + branch = "pr-folder-permissions" [[override]] name="github.com/cloudfoundry/bosh-cli" diff --git a/tile/zipper.go b/tile/zipper.go index 597ac7f7..ca5582c7 100644 --- a/tile/zipper.go +++ b/tile/zipper.go @@ -42,5 +42,5 @@ func (z Zipper) Zip(zipDir, outputFile string) error { } func (z Zipper) Unzip(zipFile, outputDir string) error { - return archiver.Zip.Open(zipFile, outputDir) + return archiver.DefaultZip.Unarchive(zipFile, outputDir) } diff --git a/vendor/github.com/golang/snappy/.gitignore b/vendor/github.com/golang/snappy/.gitignore new file mode 100644 index 00000000..042091d9 --- /dev/null +++ b/vendor/github.com/golang/snappy/.gitignore @@ -0,0 +1,16 @@ +cmd/snappytool/snappytool +testdata/bench + +# These explicitly listed benchmark data files are for an obsolete version of +# snappy_test.go. +testdata/alice29.txt +testdata/asyoulik.txt +testdata/fireworks.jpeg +testdata/geo.protodata +testdata/html +testdata/html_x_4 +testdata/kppkn.gtb +testdata/lcet10.txt +testdata/paper-100k.pdf +testdata/plrabn12.txt +testdata/urls.10K diff --git a/vendor/github.com/golang/snappy/AUTHORS b/vendor/github.com/golang/snappy/AUTHORS new file mode 100644 index 00000000..bcfa1952 --- /dev/null +++ b/vendor/github.com/golang/snappy/AUTHORS @@ -0,0 +1,15 @@ +# This is the official list of Snappy-Go authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# Please keep the list sorted. + +Damian Gryski +Google Inc. +Jan Mercl <0xjnml@gmail.com> +Rodolfo Carvalho +Sebastien Binet diff --git a/vendor/github.com/golang/snappy/CONTRIBUTORS b/vendor/github.com/golang/snappy/CONTRIBUTORS new file mode 100644 index 00000000..931ae316 --- /dev/null +++ b/vendor/github.com/golang/snappy/CONTRIBUTORS @@ -0,0 +1,37 @@ +# This is the official list of people who can contribute +# (and typically have contributed) code to the Snappy-Go repository. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# The submission process automatically checks to make sure +# that people submitting code are listed in this file (by email address). +# +# Names should be added to this file only after verifying that +# the individual or the individual's organization has agreed to +# the appropriate Contributor License Agreement, found here: +# +# http://code.google.com/legal/individual-cla-v1.0.html +# http://code.google.com/legal/corporate-cla-v1.0.html +# +# The agreement for individuals can be filled out on the web. +# +# When adding J Random Contributor's name to this file, +# either J's name or J's organization's name should be +# added to the AUTHORS file, depending on whether the +# individual or corporate CLA was used. + +# Names should be added to this file like so: +# Name + +# Please keep the list sorted. + +Damian Gryski +Jan Mercl <0xjnml@gmail.com> +Kai Backman +Marc-Antoine Ruel +Nigel Tao +Rob Pike +Rodolfo Carvalho +Russ Cox +Sebastien Binet diff --git a/vendor/github.com/golang/snappy/LICENSE b/vendor/github.com/golang/snappy/LICENSE new file mode 100644 index 00000000..6050c10f --- /dev/null +++ b/vendor/github.com/golang/snappy/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/golang/snappy/README b/vendor/github.com/golang/snappy/README new file mode 100644 index 00000000..cea12879 --- /dev/null +++ b/vendor/github.com/golang/snappy/README @@ -0,0 +1,107 @@ +The Snappy compression format in the Go programming language. + +To download and install from source: +$ go get github.com/golang/snappy + +Unless otherwise noted, the Snappy-Go source files are distributed +under the BSD-style license found in the LICENSE file. + + + +Benchmarks. + +The golang/snappy benchmarks include compressing (Z) and decompressing (U) ten +or so files, the same set used by the C++ Snappy code (github.com/google/snappy +and note the "google", not "golang"). On an "Intel(R) Core(TM) i7-3770 CPU @ +3.40GHz", Go's GOARCH=amd64 numbers as of 2016-05-29: + +"go test -test.bench=." + +_UFlat0-8 2.19GB/s ± 0% html +_UFlat1-8 1.41GB/s ± 0% urls +_UFlat2-8 23.5GB/s ± 2% jpg +_UFlat3-8 1.91GB/s ± 0% jpg_200 +_UFlat4-8 14.0GB/s ± 1% pdf +_UFlat5-8 1.97GB/s ± 0% html4 +_UFlat6-8 814MB/s ± 0% txt1 +_UFlat7-8 785MB/s ± 0% txt2 +_UFlat8-8 857MB/s ± 0% txt3 +_UFlat9-8 719MB/s ± 1% txt4 +_UFlat10-8 2.84GB/s ± 0% pb +_UFlat11-8 1.05GB/s ± 0% gaviota + +_ZFlat0-8 1.04GB/s ± 0% html +_ZFlat1-8 534MB/s ± 0% urls +_ZFlat2-8 15.7GB/s ± 1% jpg +_ZFlat3-8 740MB/s ± 3% jpg_200 +_ZFlat4-8 9.20GB/s ± 1% pdf +_ZFlat5-8 991MB/s ± 0% html4 +_ZFlat6-8 379MB/s ± 0% txt1 +_ZFlat7-8 352MB/s ± 0% txt2 +_ZFlat8-8 396MB/s ± 1% txt3 +_ZFlat9-8 327MB/s ± 1% txt4 +_ZFlat10-8 1.33GB/s ± 1% pb +_ZFlat11-8 605MB/s ± 1% gaviota + + + +"go test -test.bench=. -tags=noasm" + +_UFlat0-8 621MB/s ± 2% html +_UFlat1-8 494MB/s ± 1% urls +_UFlat2-8 23.2GB/s ± 1% jpg +_UFlat3-8 1.12GB/s ± 1% jpg_200 +_UFlat4-8 4.35GB/s ± 1% pdf +_UFlat5-8 609MB/s ± 0% html4 +_UFlat6-8 296MB/s ± 0% txt1 +_UFlat7-8 288MB/s ± 0% txt2 +_UFlat8-8 309MB/s ± 1% txt3 +_UFlat9-8 280MB/s ± 1% txt4 +_UFlat10-8 753MB/s ± 0% pb +_UFlat11-8 400MB/s ± 0% gaviota + +_ZFlat0-8 409MB/s ± 1% html +_ZFlat1-8 250MB/s ± 1% urls +_ZFlat2-8 12.3GB/s ± 1% jpg +_ZFlat3-8 132MB/s ± 0% jpg_200 +_ZFlat4-8 2.92GB/s ± 0% pdf +_ZFlat5-8 405MB/s ± 1% html4 +_ZFlat6-8 179MB/s ± 1% txt1 +_ZFlat7-8 170MB/s ± 1% txt2 +_ZFlat8-8 189MB/s ± 1% txt3 +_ZFlat9-8 164MB/s ± 1% txt4 +_ZFlat10-8 479MB/s ± 1% pb +_ZFlat11-8 270MB/s ± 1% gaviota + + + +For comparison (Go's encoded output is byte-for-byte identical to C++'s), here +are the numbers from C++ Snappy's + +make CXXFLAGS="-O2 -DNDEBUG -g" clean snappy_unittest.log && cat snappy_unittest.log + +BM_UFlat/0 2.4GB/s html +BM_UFlat/1 1.4GB/s urls +BM_UFlat/2 21.8GB/s jpg +BM_UFlat/3 1.5GB/s jpg_200 +BM_UFlat/4 13.3GB/s pdf +BM_UFlat/5 2.1GB/s html4 +BM_UFlat/6 1.0GB/s txt1 +BM_UFlat/7 959.4MB/s txt2 +BM_UFlat/8 1.0GB/s txt3 +BM_UFlat/9 864.5MB/s txt4 +BM_UFlat/10 2.9GB/s pb +BM_UFlat/11 1.2GB/s gaviota + +BM_ZFlat/0 944.3MB/s html (22.31 %) +BM_ZFlat/1 501.6MB/s urls (47.78 %) +BM_ZFlat/2 14.3GB/s jpg (99.95 %) +BM_ZFlat/3 538.3MB/s jpg_200 (73.00 %) +BM_ZFlat/4 8.3GB/s pdf (83.30 %) +BM_ZFlat/5 903.5MB/s html4 (22.52 %) +BM_ZFlat/6 336.0MB/s txt1 (57.88 %) +BM_ZFlat/7 312.3MB/s txt2 (61.91 %) +BM_ZFlat/8 353.1MB/s txt3 (54.99 %) +BM_ZFlat/9 289.9MB/s txt4 (66.26 %) +BM_ZFlat/10 1.2GB/s pb (19.68 %) +BM_ZFlat/11 527.4MB/s gaviota (37.72 %) diff --git a/vendor/github.com/golang/snappy/cmd/snappytool/main.go b/vendor/github.com/golang/snappy/cmd/snappytool/main.go new file mode 100644 index 00000000..b0f44c3f --- /dev/null +++ b/vendor/github.com/golang/snappy/cmd/snappytool/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "errors" + "flag" + "io/ioutil" + "os" + + "github.com/golang/snappy" +) + +var ( + decode = flag.Bool("d", false, "decode") + encode = flag.Bool("e", false, "encode") +) + +func run() error { + flag.Parse() + if *decode == *encode { + return errors.New("exactly one of -d or -e must be given") + } + + in, err := ioutil.ReadAll(os.Stdin) + if err != nil { + return err + } + + out := []byte(nil) + if *decode { + out, err = snappy.Decode(nil, in) + if err != nil { + return err + } + } else { + out = snappy.Encode(nil, in) + } + _, err = os.Stdout.Write(out) + return err +} + +func main() { + if err := run(); err != nil { + os.Stderr.WriteString(err.Error() + "\n") + os.Exit(1) + } +} diff --git a/vendor/github.com/golang/snappy/decode.go b/vendor/github.com/golang/snappy/decode.go new file mode 100644 index 00000000..72efb035 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode.go @@ -0,0 +1,237 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package snappy + +import ( + "encoding/binary" + "errors" + "io" +) + +var ( + // ErrCorrupt reports that the input is invalid. + ErrCorrupt = errors.New("snappy: corrupt input") + // ErrTooLarge reports that the uncompressed length is too large. + ErrTooLarge = errors.New("snappy: decoded block is too large") + // ErrUnsupported reports that the input isn't supported. + ErrUnsupported = errors.New("snappy: unsupported input") + + errUnsupportedLiteralLength = errors.New("snappy: unsupported literal length") +) + +// DecodedLen returns the length of the decoded block. +func DecodedLen(src []byte) (int, error) { + v, _, err := decodedLen(src) + return v, err +} + +// decodedLen returns the length of the decoded block and the number of bytes +// that the length header occupied. +func decodedLen(src []byte) (blockLen, headerLen int, err error) { + v, n := binary.Uvarint(src) + if n <= 0 || v > 0xffffffff { + return 0, 0, ErrCorrupt + } + + const wordSize = 32 << (^uint(0) >> 32 & 1) + if wordSize == 32 && v > 0x7fffffff { + return 0, 0, ErrTooLarge + } + return int(v), n, nil +} + +const ( + decodeErrCodeCorrupt = 1 + decodeErrCodeUnsupportedLiteralLength = 2 +) + +// Decode returns the decoded form of src. The returned slice may be a sub- +// slice of dst if dst was large enough to hold the entire decoded block. +// Otherwise, a newly allocated slice will be returned. +// +// The dst and src must not overlap. It is valid to pass a nil dst. +func Decode(dst, src []byte) ([]byte, error) { + dLen, s, err := decodedLen(src) + if err != nil { + return nil, err + } + if dLen <= len(dst) { + dst = dst[:dLen] + } else { + dst = make([]byte, dLen) + } + switch decode(dst, src[s:]) { + case 0: + return dst, nil + case decodeErrCodeUnsupportedLiteralLength: + return nil, errUnsupportedLiteralLength + } + return nil, ErrCorrupt +} + +// NewReader returns a new Reader that decompresses from r, using the framing +// format described at +// https://github.com/google/snappy/blob/master/framing_format.txt +func NewReader(r io.Reader) *Reader { + return &Reader{ + r: r, + decoded: make([]byte, maxBlockSize), + buf: make([]byte, maxEncodedLenOfMaxBlockSize+checksumSize), + } +} + +// Reader is an io.Reader that can read Snappy-compressed bytes. +type Reader struct { + r io.Reader + err error + decoded []byte + buf []byte + // decoded[i:j] contains decoded bytes that have not yet been passed on. + i, j int + readHeader bool +} + +// Reset discards any buffered data, resets all state, and switches the Snappy +// reader to read from r. This permits reusing a Reader rather than allocating +// a new one. +func (r *Reader) Reset(reader io.Reader) { + r.r = reader + r.err = nil + r.i = 0 + r.j = 0 + r.readHeader = false +} + +func (r *Reader) readFull(p []byte, allowEOF bool) (ok bool) { + if _, r.err = io.ReadFull(r.r, p); r.err != nil { + if r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) { + r.err = ErrCorrupt + } + return false + } + return true +} + +// Read satisfies the io.Reader interface. +func (r *Reader) Read(p []byte) (int, error) { + if r.err != nil { + return 0, r.err + } + for { + if r.i < r.j { + n := copy(p, r.decoded[r.i:r.j]) + r.i += n + return n, nil + } + if !r.readFull(r.buf[:4], true) { + return 0, r.err + } + chunkType := r.buf[0] + if !r.readHeader { + if chunkType != chunkTypeStreamIdentifier { + r.err = ErrCorrupt + return 0, r.err + } + r.readHeader = true + } + chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16 + if chunkLen > len(r.buf) { + r.err = ErrUnsupported + return 0, r.err + } + + // The chunk types are specified at + // https://github.com/google/snappy/blob/master/framing_format.txt + switch chunkType { + case chunkTypeCompressedData: + // Section 4.2. Compressed data (chunk type 0x00). + if chunkLen < checksumSize { + r.err = ErrCorrupt + return 0, r.err + } + buf := r.buf[:chunkLen] + if !r.readFull(buf, false) { + return 0, r.err + } + checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 + buf = buf[checksumSize:] + + n, err := DecodedLen(buf) + if err != nil { + r.err = err + return 0, r.err + } + if n > len(r.decoded) { + r.err = ErrCorrupt + return 0, r.err + } + if _, err := Decode(r.decoded, buf); err != nil { + r.err = err + return 0, r.err + } + if crc(r.decoded[:n]) != checksum { + r.err = ErrCorrupt + return 0, r.err + } + r.i, r.j = 0, n + continue + + case chunkTypeUncompressedData: + // Section 4.3. Uncompressed data (chunk type 0x01). + if chunkLen < checksumSize { + r.err = ErrCorrupt + return 0, r.err + } + buf := r.buf[:checksumSize] + if !r.readFull(buf, false) { + return 0, r.err + } + checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 + // Read directly into r.decoded instead of via r.buf. + n := chunkLen - checksumSize + if n > len(r.decoded) { + r.err = ErrCorrupt + return 0, r.err + } + if !r.readFull(r.decoded[:n], false) { + return 0, r.err + } + if crc(r.decoded[:n]) != checksum { + r.err = ErrCorrupt + return 0, r.err + } + r.i, r.j = 0, n + continue + + case chunkTypeStreamIdentifier: + // Section 4.1. Stream identifier (chunk type 0xff). + if chunkLen != len(magicBody) { + r.err = ErrCorrupt + return 0, r.err + } + if !r.readFull(r.buf[:len(magicBody)], false) { + return 0, r.err + } + for i := 0; i < len(magicBody); i++ { + if r.buf[i] != magicBody[i] { + r.err = ErrCorrupt + return 0, r.err + } + } + continue + } + + if chunkType <= 0x7f { + // Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f). + r.err = ErrUnsupported + return 0, r.err + } + // Section 4.4 Padding (chunk type 0xfe). + // Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd). + if !r.readFull(r.buf[:chunkLen], false) { + return 0, r.err + } + } +} diff --git a/vendor/github.com/golang/snappy/decode_amd64.go b/vendor/github.com/golang/snappy/decode_amd64.go new file mode 100644 index 00000000..fcd192b8 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_amd64.go @@ -0,0 +1,14 @@ +// Copyright 2016 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +package snappy + +// decode has the same semantics as in decode_other.go. +// +//go:noescape +func decode(dst, src []byte) int diff --git a/vendor/github.com/golang/snappy/decode_amd64.s b/vendor/github.com/golang/snappy/decode_amd64.s new file mode 100644 index 00000000..e6179f65 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_amd64.s @@ -0,0 +1,490 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +#include "textflag.h" + +// The asm code generally follows the pure Go code in decode_other.go, except +// where marked with a "!!!". + +// func decode(dst, src []byte) int +// +// All local variables fit into registers. The non-zero stack size is only to +// spill registers and push args when issuing a CALL. The register allocation: +// - AX scratch +// - BX scratch +// - CX length or x +// - DX offset +// - SI &src[s] +// - DI &dst[d] +// + R8 dst_base +// + R9 dst_len +// + R10 dst_base + dst_len +// + R11 src_base +// + R12 src_len +// + R13 src_base + src_len +// - R14 used by doCopy +// - R15 used by doCopy +// +// The registers R8-R13 (marked with a "+") are set at the start of the +// function, and after a CALL returns, and are not otherwise modified. +// +// The d variable is implicitly DI - R8, and len(dst)-d is R10 - DI. +// The s variable is implicitly SI - R11, and len(src)-s is R13 - SI. +TEXT ·decode(SB), NOSPLIT, $48-56 + // Initialize SI, DI and R8-R13. + MOVQ dst_base+0(FP), R8 + MOVQ dst_len+8(FP), R9 + MOVQ R8, DI + MOVQ R8, R10 + ADDQ R9, R10 + MOVQ src_base+24(FP), R11 + MOVQ src_len+32(FP), R12 + MOVQ R11, SI + MOVQ R11, R13 + ADDQ R12, R13 + +loop: + // for s < len(src) + CMPQ SI, R13 + JEQ end + + // CX = uint32(src[s]) + // + // switch src[s] & 0x03 + MOVBLZX (SI), CX + MOVL CX, BX + ANDL $3, BX + CMPL BX, $1 + JAE tagCopy + + // ---------------------------------------- + // The code below handles literal tags. + + // case tagLiteral: + // x := uint32(src[s] >> 2) + // switch + SHRL $2, CX + CMPL CX, $60 + JAE tagLit60Plus + + // case x < 60: + // s++ + INCQ SI + +doLit: + // This is the end of the inner "switch", when we have a literal tag. + // + // We assume that CX == x and x fits in a uint32, where x is the variable + // used in the pure Go decode_other.go code. + + // length = int(x) + 1 + // + // Unlike the pure Go code, we don't need to check if length <= 0 because + // CX can hold 64 bits, so the increment cannot overflow. + INCQ CX + + // Prepare to check if copying length bytes will run past the end of dst or + // src. + // + // AX = len(dst) - d + // BX = len(src) - s + MOVQ R10, AX + SUBQ DI, AX + MOVQ R13, BX + SUBQ SI, BX + + // !!! Try a faster technique for short (16 or fewer bytes) copies. + // + // if length > 16 || len(dst)-d < 16 || len(src)-s < 16 { + // goto callMemmove // Fall back on calling runtime·memmove. + // } + // + // The C++ snappy code calls this TryFastAppend. It also checks len(src)-s + // against 21 instead of 16, because it cannot assume that all of its input + // is contiguous in memory and so it needs to leave enough source bytes to + // read the next tag without refilling buffers, but Go's Decode assumes + // contiguousness (the src argument is a []byte). + CMPQ CX, $16 + JGT callMemmove + CMPQ AX, $16 + JLT callMemmove + CMPQ BX, $16 + JLT callMemmove + + // !!! Implement the copy from src to dst as a 16-byte load and store. + // (Decode's documentation says that dst and src must not overlap.) + // + // This always copies 16 bytes, instead of only length bytes, but that's + // OK. If the input is a valid Snappy encoding then subsequent iterations + // will fix up the overrun. Otherwise, Decode returns a nil []byte (and a + // non-nil error), so the overrun will be ignored. + // + // Note that on amd64, it is legal and cheap to issue unaligned 8-byte or + // 16-byte loads and stores. This technique probably wouldn't be as + // effective on architectures that are fussier about alignment. + MOVOU 0(SI), X0 + MOVOU X0, 0(DI) + + // d += length + // s += length + ADDQ CX, DI + ADDQ CX, SI + JMP loop + +callMemmove: + // if length > len(dst)-d || length > len(src)-s { etc } + CMPQ CX, AX + JGT errCorrupt + CMPQ CX, BX + JGT errCorrupt + + // copy(dst[d:], src[s:s+length]) + // + // This means calling runtime·memmove(&dst[d], &src[s], length), so we push + // DI, SI and CX as arguments. Coincidentally, we also need to spill those + // three registers to the stack, to save local variables across the CALL. + MOVQ DI, 0(SP) + MOVQ SI, 8(SP) + MOVQ CX, 16(SP) + MOVQ DI, 24(SP) + MOVQ SI, 32(SP) + MOVQ CX, 40(SP) + CALL runtime·memmove(SB) + + // Restore local variables: unspill registers from the stack and + // re-calculate R8-R13. + MOVQ 24(SP), DI + MOVQ 32(SP), SI + MOVQ 40(SP), CX + MOVQ dst_base+0(FP), R8 + MOVQ dst_len+8(FP), R9 + MOVQ R8, R10 + ADDQ R9, R10 + MOVQ src_base+24(FP), R11 + MOVQ src_len+32(FP), R12 + MOVQ R11, R13 + ADDQ R12, R13 + + // d += length + // s += length + ADDQ CX, DI + ADDQ CX, SI + JMP loop + +tagLit60Plus: + // !!! This fragment does the + // + // s += x - 58; if uint(s) > uint(len(src)) { etc } + // + // checks. In the asm version, we code it once instead of once per switch case. + ADDQ CX, SI + SUBQ $58, SI + MOVQ SI, BX + SUBQ R11, BX + CMPQ BX, R12 + JA errCorrupt + + // case x == 60: + CMPL CX, $61 + JEQ tagLit61 + JA tagLit62Plus + + // x = uint32(src[s-1]) + MOVBLZX -1(SI), CX + JMP doLit + +tagLit61: + // case x == 61: + // x = uint32(src[s-2]) | uint32(src[s-1])<<8 + MOVWLZX -2(SI), CX + JMP doLit + +tagLit62Plus: + CMPL CX, $62 + JA tagLit63 + + // case x == 62: + // x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 + MOVWLZX -3(SI), CX + MOVBLZX -1(SI), BX + SHLL $16, BX + ORL BX, CX + JMP doLit + +tagLit63: + // case x == 63: + // x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 + MOVL -4(SI), CX + JMP doLit + +// The code above handles literal tags. +// ---------------------------------------- +// The code below handles copy tags. + +tagCopy4: + // case tagCopy4: + // s += 5 + ADDQ $5, SI + + // if uint(s) > uint(len(src)) { etc } + MOVQ SI, BX + SUBQ R11, BX + CMPQ BX, R12 + JA errCorrupt + + // length = 1 + int(src[s-5])>>2 + SHRQ $2, CX + INCQ CX + + // offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24) + MOVLQZX -4(SI), DX + JMP doCopy + +tagCopy2: + // case tagCopy2: + // s += 3 + ADDQ $3, SI + + // if uint(s) > uint(len(src)) { etc } + MOVQ SI, BX + SUBQ R11, BX + CMPQ BX, R12 + JA errCorrupt + + // length = 1 + int(src[s-3])>>2 + SHRQ $2, CX + INCQ CX + + // offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8) + MOVWQZX -2(SI), DX + JMP doCopy + +tagCopy: + // We have a copy tag. We assume that: + // - BX == src[s] & 0x03 + // - CX == src[s] + CMPQ BX, $2 + JEQ tagCopy2 + JA tagCopy4 + + // case tagCopy1: + // s += 2 + ADDQ $2, SI + + // if uint(s) > uint(len(src)) { etc } + MOVQ SI, BX + SUBQ R11, BX + CMPQ BX, R12 + JA errCorrupt + + // offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])) + MOVQ CX, DX + ANDQ $0xe0, DX + SHLQ $3, DX + MOVBQZX -1(SI), BX + ORQ BX, DX + + // length = 4 + int(src[s-2])>>2&0x7 + SHRQ $2, CX + ANDQ $7, CX + ADDQ $4, CX + +doCopy: + // This is the end of the outer "switch", when we have a copy tag. + // + // We assume that: + // - CX == length && CX > 0 + // - DX == offset + + // if offset <= 0 { etc } + CMPQ DX, $0 + JLE errCorrupt + + // if d < offset { etc } + MOVQ DI, BX + SUBQ R8, BX + CMPQ BX, DX + JLT errCorrupt + + // if length > len(dst)-d { etc } + MOVQ R10, BX + SUBQ DI, BX + CMPQ CX, BX + JGT errCorrupt + + // forwardCopy(dst[d:d+length], dst[d-offset:]); d += length + // + // Set: + // - R14 = len(dst)-d + // - R15 = &dst[d-offset] + MOVQ R10, R14 + SUBQ DI, R14 + MOVQ DI, R15 + SUBQ DX, R15 + + // !!! Try a faster technique for short (16 or fewer bytes) forward copies. + // + // First, try using two 8-byte load/stores, similar to the doLit technique + // above. Even if dst[d:d+length] and dst[d-offset:] can overlap, this is + // still OK if offset >= 8. Note that this has to be two 8-byte load/stores + // and not one 16-byte load/store, and the first store has to be before the + // second load, due to the overlap if offset is in the range [8, 16). + // + // if length > 16 || offset < 8 || len(dst)-d < 16 { + // goto slowForwardCopy + // } + // copy 16 bytes + // d += length + CMPQ CX, $16 + JGT slowForwardCopy + CMPQ DX, $8 + JLT slowForwardCopy + CMPQ R14, $16 + JLT slowForwardCopy + MOVQ 0(R15), AX + MOVQ AX, 0(DI) + MOVQ 8(R15), BX + MOVQ BX, 8(DI) + ADDQ CX, DI + JMP loop + +slowForwardCopy: + // !!! If the forward copy is longer than 16 bytes, or if offset < 8, we + // can still try 8-byte load stores, provided we can overrun up to 10 extra + // bytes. As above, the overrun will be fixed up by subsequent iterations + // of the outermost loop. + // + // The C++ snappy code calls this technique IncrementalCopyFastPath. Its + // commentary says: + // + // ---- + // + // The main part of this loop is a simple copy of eight bytes at a time + // until we've copied (at least) the requested amount of bytes. However, + // if d and d-offset are less than eight bytes apart (indicating a + // repeating pattern of length < 8), we first need to expand the pattern in + // order to get the correct results. For instance, if the buffer looks like + // this, with the eight-byte and patterns marked as + // intervals: + // + // abxxxxxxxxxxxx + // [------] d-offset + // [------] d + // + // a single eight-byte copy from to will repeat the pattern + // once, after which we can move two bytes without moving : + // + // ababxxxxxxxxxx + // [------] d-offset + // [------] d + // + // and repeat the exercise until the two no longer overlap. + // + // This allows us to do very well in the special case of one single byte + // repeated many times, without taking a big hit for more general cases. + // + // The worst case of extra writing past the end of the match occurs when + // offset == 1 and length == 1; the last copy will read from byte positions + // [0..7] and write to [4..11], whereas it was only supposed to write to + // position 1. Thus, ten excess bytes. + // + // ---- + // + // That "10 byte overrun" worst case is confirmed by Go's + // TestSlowForwardCopyOverrun, which also tests the fixUpSlowForwardCopy + // and finishSlowForwardCopy algorithm. + // + // if length > len(dst)-d-10 { + // goto verySlowForwardCopy + // } + SUBQ $10, R14 + CMPQ CX, R14 + JGT verySlowForwardCopy + +makeOffsetAtLeast8: + // !!! As above, expand the pattern so that offset >= 8 and we can use + // 8-byte load/stores. + // + // for offset < 8 { + // copy 8 bytes from dst[d-offset:] to dst[d:] + // length -= offset + // d += offset + // offset += offset + // // The two previous lines together means that d-offset, and therefore + // // R15, is unchanged. + // } + CMPQ DX, $8 + JGE fixUpSlowForwardCopy + MOVQ (R15), BX + MOVQ BX, (DI) + SUBQ DX, CX + ADDQ DX, DI + ADDQ DX, DX + JMP makeOffsetAtLeast8 + +fixUpSlowForwardCopy: + // !!! Add length (which might be negative now) to d (implied by DI being + // &dst[d]) so that d ends up at the right place when we jump back to the + // top of the loop. Before we do that, though, we save DI to AX so that, if + // length is positive, copying the remaining length bytes will write to the + // right place. + MOVQ DI, AX + ADDQ CX, DI + +finishSlowForwardCopy: + // !!! Repeat 8-byte load/stores until length <= 0. Ending with a negative + // length means that we overrun, but as above, that will be fixed up by + // subsequent iterations of the outermost loop. + CMPQ CX, $0 + JLE loop + MOVQ (R15), BX + MOVQ BX, (AX) + ADDQ $8, R15 + ADDQ $8, AX + SUBQ $8, CX + JMP finishSlowForwardCopy + +verySlowForwardCopy: + // verySlowForwardCopy is a simple implementation of forward copy. In C + // parlance, this is a do/while loop instead of a while loop, since we know + // that length > 0. In Go syntax: + // + // for { + // dst[d] = dst[d - offset] + // d++ + // length-- + // if length == 0 { + // break + // } + // } + MOVB (R15), BX + MOVB BX, (DI) + INCQ R15 + INCQ DI + DECQ CX + JNZ verySlowForwardCopy + JMP loop + +// The code above handles copy tags. +// ---------------------------------------- + +end: + // This is the end of the "for s < len(src)". + // + // if d != len(dst) { etc } + CMPQ DI, R10 + JNE errCorrupt + + // return 0 + MOVQ $0, ret+48(FP) + RET + +errCorrupt: + // return decodeErrCodeCorrupt + MOVQ $1, ret+48(FP) + RET diff --git a/vendor/github.com/golang/snappy/decode_other.go b/vendor/github.com/golang/snappy/decode_other.go new file mode 100644 index 00000000..8c9f2049 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_other.go @@ -0,0 +1,101 @@ +// Copyright 2016 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine !gc noasm + +package snappy + +// decode writes the decoding of src to dst. It assumes that the varint-encoded +// length of the decompressed bytes has already been read, and that len(dst) +// equals that length. +// +// It returns 0 on success or a decodeErrCodeXxx error code on failure. +func decode(dst, src []byte) int { + var d, s, offset, length int + for s < len(src) { + switch src[s] & 0x03 { + case tagLiteral: + x := uint32(src[s] >> 2) + switch { + case x < 60: + s++ + case x == 60: + s += 2 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-1]) + case x == 61: + s += 3 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-2]) | uint32(src[s-1])<<8 + case x == 62: + s += 4 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 + case x == 63: + s += 5 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 + } + length = int(x) + 1 + if length <= 0 { + return decodeErrCodeUnsupportedLiteralLength + } + if length > len(dst)-d || length > len(src)-s { + return decodeErrCodeCorrupt + } + copy(dst[d:], src[s:s+length]) + d += length + s += length + continue + + case tagCopy1: + s += 2 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + length = 4 + int(src[s-2])>>2&0x7 + offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])) + + case tagCopy2: + s += 3 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + length = 1 + int(src[s-3])>>2 + offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8) + + case tagCopy4: + s += 5 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + length = 1 + int(src[s-5])>>2 + offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24) + } + + if offset <= 0 || d < offset || length > len(dst)-d { + return decodeErrCodeCorrupt + } + // Copy from an earlier sub-slice of dst to a later sub-slice. Unlike + // the built-in copy function, this byte-by-byte copy always runs + // forwards, even if the slices overlap. Conceptually, this is: + // + // d += forwardCopy(dst[d:d+length], dst[d-offset:]) + for end := d + length; d != end; d++ { + dst[d] = dst[d-offset] + } + } + if d != len(dst) { + return decodeErrCodeCorrupt + } + return 0 +} diff --git a/vendor/github.com/golang/snappy/encode.go b/vendor/github.com/golang/snappy/encode.go new file mode 100644 index 00000000..8d393e90 --- /dev/null +++ b/vendor/github.com/golang/snappy/encode.go @@ -0,0 +1,285 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package snappy + +import ( + "encoding/binary" + "errors" + "io" +) + +// Encode returns the encoded form of src. The returned slice may be a sub- +// slice of dst if dst was large enough to hold the entire encoded block. +// Otherwise, a newly allocated slice will be returned. +// +// The dst and src must not overlap. It is valid to pass a nil dst. +func Encode(dst, src []byte) []byte { + if n := MaxEncodedLen(len(src)); n < 0 { + panic(ErrTooLarge) + } else if len(dst) < n { + dst = make([]byte, n) + } + + // The block starts with the varint-encoded length of the decompressed bytes. + d := binary.PutUvarint(dst, uint64(len(src))) + + for len(src) > 0 { + p := src + src = nil + if len(p) > maxBlockSize { + p, src = p[:maxBlockSize], p[maxBlockSize:] + } + if len(p) < minNonLiteralBlockSize { + d += emitLiteral(dst[d:], p) + } else { + d += encodeBlock(dst[d:], p) + } + } + return dst[:d] +} + +// inputMargin is the minimum number of extra input bytes to keep, inside +// encodeBlock's inner loop. On some architectures, this margin lets us +// implement a fast path for emitLiteral, where the copy of short (<= 16 byte) +// literals can be implemented as a single load to and store from a 16-byte +// register. That literal's actual length can be as short as 1 byte, so this +// can copy up to 15 bytes too much, but that's OK as subsequent iterations of +// the encoding loop will fix up the copy overrun, and this inputMargin ensures +// that we don't overrun the dst and src buffers. +const inputMargin = 16 - 1 + +// minNonLiteralBlockSize is the minimum size of the input to encodeBlock that +// could be encoded with a copy tag. This is the minimum with respect to the +// algorithm used by encodeBlock, not a minimum enforced by the file format. +// +// The encoded output must start with at least a 1 byte literal, as there are +// no previous bytes to copy. A minimal (1 byte) copy after that, generated +// from an emitCopy call in encodeBlock's main loop, would require at least +// another inputMargin bytes, for the reason above: we want any emitLiteral +// calls inside encodeBlock's main loop to use the fast path if possible, which +// requires being able to overrun by inputMargin bytes. Thus, +// minNonLiteralBlockSize equals 1 + 1 + inputMargin. +// +// The C++ code doesn't use this exact threshold, but it could, as discussed at +// https://groups.google.com/d/topic/snappy-compression/oGbhsdIJSJ8/discussion +// The difference between Go (2+inputMargin) and C++ (inputMargin) is purely an +// optimization. It should not affect the encoded form. This is tested by +// TestSameEncodingAsCppShortCopies. +const minNonLiteralBlockSize = 1 + 1 + inputMargin + +// MaxEncodedLen returns the maximum length of a snappy block, given its +// uncompressed length. +// +// It will return a negative value if srcLen is too large to encode. +func MaxEncodedLen(srcLen int) int { + n := uint64(srcLen) + if n > 0xffffffff { + return -1 + } + // Compressed data can be defined as: + // compressed := item* literal* + // item := literal* copy + // + // The trailing literal sequence has a space blowup of at most 62/60 + // since a literal of length 60 needs one tag byte + one extra byte + // for length information. + // + // Item blowup is trickier to measure. Suppose the "copy" op copies + // 4 bytes of data. Because of a special check in the encoding code, + // we produce a 4-byte copy only if the offset is < 65536. Therefore + // the copy op takes 3 bytes to encode, and this type of item leads + // to at most the 62/60 blowup for representing literals. + // + // Suppose the "copy" op copies 5 bytes of data. If the offset is big + // enough, it will take 5 bytes to encode the copy op. Therefore the + // worst case here is a one-byte literal followed by a five-byte copy. + // That is, 6 bytes of input turn into 7 bytes of "compressed" data. + // + // This last factor dominates the blowup, so the final estimate is: + n = 32 + n + n/6 + if n > 0xffffffff { + return -1 + } + return int(n) +} + +var errClosed = errors.New("snappy: Writer is closed") + +// NewWriter returns a new Writer that compresses to w. +// +// The Writer returned does not buffer writes. There is no need to Flush or +// Close such a Writer. +// +// Deprecated: the Writer returned is not suitable for many small writes, only +// for few large writes. Use NewBufferedWriter instead, which is efficient +// regardless of the frequency and shape of the writes, and remember to Close +// that Writer when done. +func NewWriter(w io.Writer) *Writer { + return &Writer{ + w: w, + obuf: make([]byte, obufLen), + } +} + +// NewBufferedWriter returns a new Writer that compresses to w, using the +// framing format described at +// https://github.com/google/snappy/blob/master/framing_format.txt +// +// The Writer returned buffers writes. Users must call Close to guarantee all +// data has been forwarded to the underlying io.Writer. They may also call +// Flush zero or more times before calling Close. +func NewBufferedWriter(w io.Writer) *Writer { + return &Writer{ + w: w, + ibuf: make([]byte, 0, maxBlockSize), + obuf: make([]byte, obufLen), + } +} + +// Writer is an io.Writer that can write Snappy-compressed bytes. +type Writer struct { + w io.Writer + err error + + // ibuf is a buffer for the incoming (uncompressed) bytes. + // + // Its use is optional. For backwards compatibility, Writers created by the + // NewWriter function have ibuf == nil, do not buffer incoming bytes, and + // therefore do not need to be Flush'ed or Close'd. + ibuf []byte + + // obuf is a buffer for the outgoing (compressed) bytes. + obuf []byte + + // wroteStreamHeader is whether we have written the stream header. + wroteStreamHeader bool +} + +// Reset discards the writer's state and switches the Snappy writer to write to +// w. This permits reusing a Writer rather than allocating a new one. +func (w *Writer) Reset(writer io.Writer) { + w.w = writer + w.err = nil + if w.ibuf != nil { + w.ibuf = w.ibuf[:0] + } + w.wroteStreamHeader = false +} + +// Write satisfies the io.Writer interface. +func (w *Writer) Write(p []byte) (nRet int, errRet error) { + if w.ibuf == nil { + // Do not buffer incoming bytes. This does not perform or compress well + // if the caller of Writer.Write writes many small slices. This + // behavior is therefore deprecated, but still supported for backwards + // compatibility with code that doesn't explicitly Flush or Close. + return w.write(p) + } + + // The remainder of this method is based on bufio.Writer.Write from the + // standard library. + + for len(p) > (cap(w.ibuf)-len(w.ibuf)) && w.err == nil { + var n int + if len(w.ibuf) == 0 { + // Large write, empty buffer. + // Write directly from p to avoid copy. + n, _ = w.write(p) + } else { + n = copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) + w.ibuf = w.ibuf[:len(w.ibuf)+n] + w.Flush() + } + nRet += n + p = p[n:] + } + if w.err != nil { + return nRet, w.err + } + n := copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) + w.ibuf = w.ibuf[:len(w.ibuf)+n] + nRet += n + return nRet, nil +} + +func (w *Writer) write(p []byte) (nRet int, errRet error) { + if w.err != nil { + return 0, w.err + } + for len(p) > 0 { + obufStart := len(magicChunk) + if !w.wroteStreamHeader { + w.wroteStreamHeader = true + copy(w.obuf, magicChunk) + obufStart = 0 + } + + var uncompressed []byte + if len(p) > maxBlockSize { + uncompressed, p = p[:maxBlockSize], p[maxBlockSize:] + } else { + uncompressed, p = p, nil + } + checksum := crc(uncompressed) + + // Compress the buffer, discarding the result if the improvement + // isn't at least 12.5%. + compressed := Encode(w.obuf[obufHeaderLen:], uncompressed) + chunkType := uint8(chunkTypeCompressedData) + chunkLen := 4 + len(compressed) + obufEnd := obufHeaderLen + len(compressed) + if len(compressed) >= len(uncompressed)-len(uncompressed)/8 { + chunkType = chunkTypeUncompressedData + chunkLen = 4 + len(uncompressed) + obufEnd = obufHeaderLen + } + + // Fill in the per-chunk header that comes before the body. + w.obuf[len(magicChunk)+0] = chunkType + w.obuf[len(magicChunk)+1] = uint8(chunkLen >> 0) + w.obuf[len(magicChunk)+2] = uint8(chunkLen >> 8) + w.obuf[len(magicChunk)+3] = uint8(chunkLen >> 16) + w.obuf[len(magicChunk)+4] = uint8(checksum >> 0) + w.obuf[len(magicChunk)+5] = uint8(checksum >> 8) + w.obuf[len(magicChunk)+6] = uint8(checksum >> 16) + w.obuf[len(magicChunk)+7] = uint8(checksum >> 24) + + if _, err := w.w.Write(w.obuf[obufStart:obufEnd]); err != nil { + w.err = err + return nRet, err + } + if chunkType == chunkTypeUncompressedData { + if _, err := w.w.Write(uncompressed); err != nil { + w.err = err + return nRet, err + } + } + nRet += len(uncompressed) + } + return nRet, nil +} + +// Flush flushes the Writer to its underlying io.Writer. +func (w *Writer) Flush() error { + if w.err != nil { + return w.err + } + if len(w.ibuf) == 0 { + return nil + } + w.write(w.ibuf) + w.ibuf = w.ibuf[:0] + return w.err +} + +// Close calls Flush and then closes the Writer. +func (w *Writer) Close() error { + w.Flush() + ret := w.err + if w.err == nil { + w.err = errClosed + } + return ret +} diff --git a/vendor/github.com/golang/snappy/encode_amd64.go b/vendor/github.com/golang/snappy/encode_amd64.go new file mode 100644 index 00000000..150d91bc --- /dev/null +++ b/vendor/github.com/golang/snappy/encode_amd64.go @@ -0,0 +1,29 @@ +// Copyright 2016 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +package snappy + +// emitLiteral has the same semantics as in encode_other.go. +// +//go:noescape +func emitLiteral(dst, lit []byte) int + +// emitCopy has the same semantics as in encode_other.go. +// +//go:noescape +func emitCopy(dst []byte, offset, length int) int + +// extendMatch has the same semantics as in encode_other.go. +// +//go:noescape +func extendMatch(src []byte, i, j int) int + +// encodeBlock has the same semantics as in encode_other.go. +// +//go:noescape +func encodeBlock(dst, src []byte) (d int) diff --git a/vendor/github.com/golang/snappy/encode_amd64.s b/vendor/github.com/golang/snappy/encode_amd64.s new file mode 100644 index 00000000..adfd979f --- /dev/null +++ b/vendor/github.com/golang/snappy/encode_amd64.s @@ -0,0 +1,730 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine +// +build gc +// +build !noasm + +#include "textflag.h" + +// The XXX lines assemble on Go 1.4, 1.5 and 1.7, but not 1.6, due to a +// Go toolchain regression. See https://github.com/golang/go/issues/15426 and +// https://github.com/golang/snappy/issues/29 +// +// As a workaround, the package was built with a known good assembler, and +// those instructions were disassembled by "objdump -d" to yield the +// 4e 0f b7 7c 5c 78 movzwq 0x78(%rsp,%r11,2),%r15 +// style comments, in AT&T asm syntax. Note that rsp here is a physical +// register, not Go/asm's SP pseudo-register (see https://golang.org/doc/asm). +// The instructions were then encoded as "BYTE $0x.." sequences, which assemble +// fine on Go 1.6. + +// The asm code generally follows the pure Go code in encode_other.go, except +// where marked with a "!!!". + +// ---------------------------------------------------------------------------- + +// func emitLiteral(dst, lit []byte) int +// +// All local variables fit into registers. The register allocation: +// - AX len(lit) +// - BX n +// - DX return value +// - DI &dst[i] +// - R10 &lit[0] +// +// The 24 bytes of stack space is to call runtime·memmove. +// +// The unusual register allocation of local variables, such as R10 for the +// source pointer, matches the allocation used at the call site in encodeBlock, +// which makes it easier to manually inline this function. +TEXT ·emitLiteral(SB), NOSPLIT, $24-56 + MOVQ dst_base+0(FP), DI + MOVQ lit_base+24(FP), R10 + MOVQ lit_len+32(FP), AX + MOVQ AX, DX + MOVL AX, BX + SUBL $1, BX + + CMPL BX, $60 + JLT oneByte + CMPL BX, $256 + JLT twoBytes + +threeBytes: + MOVB $0xf4, 0(DI) + MOVW BX, 1(DI) + ADDQ $3, DI + ADDQ $3, DX + JMP memmove + +twoBytes: + MOVB $0xf0, 0(DI) + MOVB BX, 1(DI) + ADDQ $2, DI + ADDQ $2, DX + JMP memmove + +oneByte: + SHLB $2, BX + MOVB BX, 0(DI) + ADDQ $1, DI + ADDQ $1, DX + +memmove: + MOVQ DX, ret+48(FP) + + // copy(dst[i:], lit) + // + // This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push + // DI, R10 and AX as arguments. + MOVQ DI, 0(SP) + MOVQ R10, 8(SP) + MOVQ AX, 16(SP) + CALL runtime·memmove(SB) + RET + +// ---------------------------------------------------------------------------- + +// func emitCopy(dst []byte, offset, length int) int +// +// All local variables fit into registers. The register allocation: +// - AX length +// - SI &dst[0] +// - DI &dst[i] +// - R11 offset +// +// The unusual register allocation of local variables, such as R11 for the +// offset, matches the allocation used at the call site in encodeBlock, which +// makes it easier to manually inline this function. +TEXT ·emitCopy(SB), NOSPLIT, $0-48 + MOVQ dst_base+0(FP), DI + MOVQ DI, SI + MOVQ offset+24(FP), R11 + MOVQ length+32(FP), AX + +loop0: + // for length >= 68 { etc } + CMPL AX, $68 + JLT step1 + + // Emit a length 64 copy, encoded as 3 bytes. + MOVB $0xfe, 0(DI) + MOVW R11, 1(DI) + ADDQ $3, DI + SUBL $64, AX + JMP loop0 + +step1: + // if length > 64 { etc } + CMPL AX, $64 + JLE step2 + + // Emit a length 60 copy, encoded as 3 bytes. + MOVB $0xee, 0(DI) + MOVW R11, 1(DI) + ADDQ $3, DI + SUBL $60, AX + +step2: + // if length >= 12 || offset >= 2048 { goto step3 } + CMPL AX, $12 + JGE step3 + CMPL R11, $2048 + JGE step3 + + // Emit the remaining copy, encoded as 2 bytes. + MOVB R11, 1(DI) + SHRL $8, R11 + SHLB $5, R11 + SUBB $4, AX + SHLB $2, AX + ORB AX, R11 + ORB $1, R11 + MOVB R11, 0(DI) + ADDQ $2, DI + + // Return the number of bytes written. + SUBQ SI, DI + MOVQ DI, ret+40(FP) + RET + +step3: + // Emit the remaining copy, encoded as 3 bytes. + SUBL $1, AX + SHLB $2, AX + ORB $2, AX + MOVB AX, 0(DI) + MOVW R11, 1(DI) + ADDQ $3, DI + + // Return the number of bytes written. + SUBQ SI, DI + MOVQ DI, ret+40(FP) + RET + +// ---------------------------------------------------------------------------- + +// func extendMatch(src []byte, i, j int) int +// +// All local variables fit into registers. The register allocation: +// - DX &src[0] +// - SI &src[j] +// - R13 &src[len(src) - 8] +// - R14 &src[len(src)] +// - R15 &src[i] +// +// The unusual register allocation of local variables, such as R15 for a source +// pointer, matches the allocation used at the call site in encodeBlock, which +// makes it easier to manually inline this function. +TEXT ·extendMatch(SB), NOSPLIT, $0-48 + MOVQ src_base+0(FP), DX + MOVQ src_len+8(FP), R14 + MOVQ i+24(FP), R15 + MOVQ j+32(FP), SI + ADDQ DX, R14 + ADDQ DX, R15 + ADDQ DX, SI + MOVQ R14, R13 + SUBQ $8, R13 + +cmp8: + // As long as we are 8 or more bytes before the end of src, we can load and + // compare 8 bytes at a time. If those 8 bytes are equal, repeat. + CMPQ SI, R13 + JA cmp1 + MOVQ (R15), AX + MOVQ (SI), BX + CMPQ AX, BX + JNE bsf + ADDQ $8, R15 + ADDQ $8, SI + JMP cmp8 + +bsf: + // If those 8 bytes were not equal, XOR the two 8 byte values, and return + // the index of the first byte that differs. The BSF instruction finds the + // least significant 1 bit, the amd64 architecture is little-endian, and + // the shift by 3 converts a bit index to a byte index. + XORQ AX, BX + BSFQ BX, BX + SHRQ $3, BX + ADDQ BX, SI + + // Convert from &src[ret] to ret. + SUBQ DX, SI + MOVQ SI, ret+40(FP) + RET + +cmp1: + // In src's tail, compare 1 byte at a time. + CMPQ SI, R14 + JAE extendMatchEnd + MOVB (R15), AX + MOVB (SI), BX + CMPB AX, BX + JNE extendMatchEnd + ADDQ $1, R15 + ADDQ $1, SI + JMP cmp1 + +extendMatchEnd: + // Convert from &src[ret] to ret. + SUBQ DX, SI + MOVQ SI, ret+40(FP) + RET + +// ---------------------------------------------------------------------------- + +// func encodeBlock(dst, src []byte) (d int) +// +// All local variables fit into registers, other than "var table". The register +// allocation: +// - AX . . +// - BX . . +// - CX 56 shift (note that amd64 shifts by non-immediates must use CX). +// - DX 64 &src[0], tableSize +// - SI 72 &src[s] +// - DI 80 &dst[d] +// - R9 88 sLimit +// - R10 . &src[nextEmit] +// - R11 96 prevHash, currHash, nextHash, offset +// - R12 104 &src[base], skip +// - R13 . &src[nextS], &src[len(src) - 8] +// - R14 . len(src), bytesBetweenHashLookups, &src[len(src)], x +// - R15 112 candidate +// +// The second column (56, 64, etc) is the stack offset to spill the registers +// when calling other functions. We could pack this slightly tighter, but it's +// simpler to have a dedicated spill map independent of the function called. +// +// "var table [maxTableSize]uint16" takes up 32768 bytes of stack space. An +// extra 56 bytes, to call other functions, and an extra 64 bytes, to spill +// local variables (registers) during calls gives 32768 + 56 + 64 = 32888. +TEXT ·encodeBlock(SB), 0, $32888-56 + MOVQ dst_base+0(FP), DI + MOVQ src_base+24(FP), SI + MOVQ src_len+32(FP), R14 + + // shift, tableSize := uint32(32-8), 1<<8 + MOVQ $24, CX + MOVQ $256, DX + +calcShift: + // for ; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 { + // shift-- + // } + CMPQ DX, $16384 + JGE varTable + CMPQ DX, R14 + JGE varTable + SUBQ $1, CX + SHLQ $1, DX + JMP calcShift + +varTable: + // var table [maxTableSize]uint16 + // + // In the asm code, unlike the Go code, we can zero-initialize only the + // first tableSize elements. Each uint16 element is 2 bytes and each MOVOU + // writes 16 bytes, so we can do only tableSize/8 writes instead of the + // 2048 writes that would zero-initialize all of table's 32768 bytes. + SHRQ $3, DX + LEAQ table-32768(SP), BX + PXOR X0, X0 + +memclr: + MOVOU X0, 0(BX) + ADDQ $16, BX + SUBQ $1, DX + JNZ memclr + + // !!! DX = &src[0] + MOVQ SI, DX + + // sLimit := len(src) - inputMargin + MOVQ R14, R9 + SUBQ $15, R9 + + // !!! Pre-emptively spill CX, DX and R9 to the stack. Their values don't + // change for the rest of the function. + MOVQ CX, 56(SP) + MOVQ DX, 64(SP) + MOVQ R9, 88(SP) + + // nextEmit := 0 + MOVQ DX, R10 + + // s := 1 + ADDQ $1, SI + + // nextHash := hash(load32(src, s), shift) + MOVL 0(SI), R11 + IMULL $0x1e35a7bd, R11 + SHRL CX, R11 + +outer: + // for { etc } + + // skip := 32 + MOVQ $32, R12 + + // nextS := s + MOVQ SI, R13 + + // candidate := 0 + MOVQ $0, R15 + +inner0: + // for { etc } + + // s := nextS + MOVQ R13, SI + + // bytesBetweenHashLookups := skip >> 5 + MOVQ R12, R14 + SHRQ $5, R14 + + // nextS = s + bytesBetweenHashLookups + ADDQ R14, R13 + + // skip += bytesBetweenHashLookups + ADDQ R14, R12 + + // if nextS > sLimit { goto emitRemainder } + MOVQ R13, AX + SUBQ DX, AX + CMPQ AX, R9 + JA emitRemainder + + // candidate = int(table[nextHash]) + // XXX: MOVWQZX table-32768(SP)(R11*2), R15 + // XXX: 4e 0f b7 7c 5c 78 movzwq 0x78(%rsp,%r11,2),%r15 + BYTE $0x4e + BYTE $0x0f + BYTE $0xb7 + BYTE $0x7c + BYTE $0x5c + BYTE $0x78 + + // table[nextHash] = uint16(s) + MOVQ SI, AX + SUBQ DX, AX + + // XXX: MOVW AX, table-32768(SP)(R11*2) + // XXX: 66 42 89 44 5c 78 mov %ax,0x78(%rsp,%r11,2) + BYTE $0x66 + BYTE $0x42 + BYTE $0x89 + BYTE $0x44 + BYTE $0x5c + BYTE $0x78 + + // nextHash = hash(load32(src, nextS), shift) + MOVL 0(R13), R11 + IMULL $0x1e35a7bd, R11 + SHRL CX, R11 + + // if load32(src, s) != load32(src, candidate) { continue } break + MOVL 0(SI), AX + MOVL (DX)(R15*1), BX + CMPL AX, BX + JNE inner0 + +fourByteMatch: + // As per the encode_other.go code: + // + // A 4-byte match has been found. We'll later see etc. + + // !!! Jump to a fast path for short (<= 16 byte) literals. See the comment + // on inputMargin in encode.go. + MOVQ SI, AX + SUBQ R10, AX + CMPQ AX, $16 + JLE emitLiteralFastPath + + // ---------------------------------------- + // Begin inline of the emitLiteral call. + // + // d += emitLiteral(dst[d:], src[nextEmit:s]) + + MOVL AX, BX + SUBL $1, BX + + CMPL BX, $60 + JLT inlineEmitLiteralOneByte + CMPL BX, $256 + JLT inlineEmitLiteralTwoBytes + +inlineEmitLiteralThreeBytes: + MOVB $0xf4, 0(DI) + MOVW BX, 1(DI) + ADDQ $3, DI + JMP inlineEmitLiteralMemmove + +inlineEmitLiteralTwoBytes: + MOVB $0xf0, 0(DI) + MOVB BX, 1(DI) + ADDQ $2, DI + JMP inlineEmitLiteralMemmove + +inlineEmitLiteralOneByte: + SHLB $2, BX + MOVB BX, 0(DI) + ADDQ $1, DI + +inlineEmitLiteralMemmove: + // Spill local variables (registers) onto the stack; call; unspill. + // + // copy(dst[i:], lit) + // + // This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push + // DI, R10 and AX as arguments. + MOVQ DI, 0(SP) + MOVQ R10, 8(SP) + MOVQ AX, 16(SP) + ADDQ AX, DI // Finish the "d +=" part of "d += emitLiteral(etc)". + MOVQ SI, 72(SP) + MOVQ DI, 80(SP) + MOVQ R15, 112(SP) + CALL runtime·memmove(SB) + MOVQ 56(SP), CX + MOVQ 64(SP), DX + MOVQ 72(SP), SI + MOVQ 80(SP), DI + MOVQ 88(SP), R9 + MOVQ 112(SP), R15 + JMP inner1 + +inlineEmitLiteralEnd: + // End inline of the emitLiteral call. + // ---------------------------------------- + +emitLiteralFastPath: + // !!! Emit the 1-byte encoding "uint8(len(lit)-1)<<2". + MOVB AX, BX + SUBB $1, BX + SHLB $2, BX + MOVB BX, (DI) + ADDQ $1, DI + + // !!! Implement the copy from lit to dst as a 16-byte load and store. + // (Encode's documentation says that dst and src must not overlap.) + // + // This always copies 16 bytes, instead of only len(lit) bytes, but that's + // OK. Subsequent iterations will fix up the overrun. + // + // Note that on amd64, it is legal and cheap to issue unaligned 8-byte or + // 16-byte loads and stores. This technique probably wouldn't be as + // effective on architectures that are fussier about alignment. + MOVOU 0(R10), X0 + MOVOU X0, 0(DI) + ADDQ AX, DI + +inner1: + // for { etc } + + // base := s + MOVQ SI, R12 + + // !!! offset := base - candidate + MOVQ R12, R11 + SUBQ R15, R11 + SUBQ DX, R11 + + // ---------------------------------------- + // Begin inline of the extendMatch call. + // + // s = extendMatch(src, candidate+4, s+4) + + // !!! R14 = &src[len(src)] + MOVQ src_len+32(FP), R14 + ADDQ DX, R14 + + // !!! R13 = &src[len(src) - 8] + MOVQ R14, R13 + SUBQ $8, R13 + + // !!! R15 = &src[candidate + 4] + ADDQ $4, R15 + ADDQ DX, R15 + + // !!! s += 4 + ADDQ $4, SI + +inlineExtendMatchCmp8: + // As long as we are 8 or more bytes before the end of src, we can load and + // compare 8 bytes at a time. If those 8 bytes are equal, repeat. + CMPQ SI, R13 + JA inlineExtendMatchCmp1 + MOVQ (R15), AX + MOVQ (SI), BX + CMPQ AX, BX + JNE inlineExtendMatchBSF + ADDQ $8, R15 + ADDQ $8, SI + JMP inlineExtendMatchCmp8 + +inlineExtendMatchBSF: + // If those 8 bytes were not equal, XOR the two 8 byte values, and return + // the index of the first byte that differs. The BSF instruction finds the + // least significant 1 bit, the amd64 architecture is little-endian, and + // the shift by 3 converts a bit index to a byte index. + XORQ AX, BX + BSFQ BX, BX + SHRQ $3, BX + ADDQ BX, SI + JMP inlineExtendMatchEnd + +inlineExtendMatchCmp1: + // In src's tail, compare 1 byte at a time. + CMPQ SI, R14 + JAE inlineExtendMatchEnd + MOVB (R15), AX + MOVB (SI), BX + CMPB AX, BX + JNE inlineExtendMatchEnd + ADDQ $1, R15 + ADDQ $1, SI + JMP inlineExtendMatchCmp1 + +inlineExtendMatchEnd: + // End inline of the extendMatch call. + // ---------------------------------------- + + // ---------------------------------------- + // Begin inline of the emitCopy call. + // + // d += emitCopy(dst[d:], base-candidate, s-base) + + // !!! length := s - base + MOVQ SI, AX + SUBQ R12, AX + +inlineEmitCopyLoop0: + // for length >= 68 { etc } + CMPL AX, $68 + JLT inlineEmitCopyStep1 + + // Emit a length 64 copy, encoded as 3 bytes. + MOVB $0xfe, 0(DI) + MOVW R11, 1(DI) + ADDQ $3, DI + SUBL $64, AX + JMP inlineEmitCopyLoop0 + +inlineEmitCopyStep1: + // if length > 64 { etc } + CMPL AX, $64 + JLE inlineEmitCopyStep2 + + // Emit a length 60 copy, encoded as 3 bytes. + MOVB $0xee, 0(DI) + MOVW R11, 1(DI) + ADDQ $3, DI + SUBL $60, AX + +inlineEmitCopyStep2: + // if length >= 12 || offset >= 2048 { goto inlineEmitCopyStep3 } + CMPL AX, $12 + JGE inlineEmitCopyStep3 + CMPL R11, $2048 + JGE inlineEmitCopyStep3 + + // Emit the remaining copy, encoded as 2 bytes. + MOVB R11, 1(DI) + SHRL $8, R11 + SHLB $5, R11 + SUBB $4, AX + SHLB $2, AX + ORB AX, R11 + ORB $1, R11 + MOVB R11, 0(DI) + ADDQ $2, DI + JMP inlineEmitCopyEnd + +inlineEmitCopyStep3: + // Emit the remaining copy, encoded as 3 bytes. + SUBL $1, AX + SHLB $2, AX + ORB $2, AX + MOVB AX, 0(DI) + MOVW R11, 1(DI) + ADDQ $3, DI + +inlineEmitCopyEnd: + // End inline of the emitCopy call. + // ---------------------------------------- + + // nextEmit = s + MOVQ SI, R10 + + // if s >= sLimit { goto emitRemainder } + MOVQ SI, AX + SUBQ DX, AX + CMPQ AX, R9 + JAE emitRemainder + + // As per the encode_other.go code: + // + // We could immediately etc. + + // x := load64(src, s-1) + MOVQ -1(SI), R14 + + // prevHash := hash(uint32(x>>0), shift) + MOVL R14, R11 + IMULL $0x1e35a7bd, R11 + SHRL CX, R11 + + // table[prevHash] = uint16(s-1) + MOVQ SI, AX + SUBQ DX, AX + SUBQ $1, AX + + // XXX: MOVW AX, table-32768(SP)(R11*2) + // XXX: 66 42 89 44 5c 78 mov %ax,0x78(%rsp,%r11,2) + BYTE $0x66 + BYTE $0x42 + BYTE $0x89 + BYTE $0x44 + BYTE $0x5c + BYTE $0x78 + + // currHash := hash(uint32(x>>8), shift) + SHRQ $8, R14 + MOVL R14, R11 + IMULL $0x1e35a7bd, R11 + SHRL CX, R11 + + // candidate = int(table[currHash]) + // XXX: MOVWQZX table-32768(SP)(R11*2), R15 + // XXX: 4e 0f b7 7c 5c 78 movzwq 0x78(%rsp,%r11,2),%r15 + BYTE $0x4e + BYTE $0x0f + BYTE $0xb7 + BYTE $0x7c + BYTE $0x5c + BYTE $0x78 + + // table[currHash] = uint16(s) + ADDQ $1, AX + + // XXX: MOVW AX, table-32768(SP)(R11*2) + // XXX: 66 42 89 44 5c 78 mov %ax,0x78(%rsp,%r11,2) + BYTE $0x66 + BYTE $0x42 + BYTE $0x89 + BYTE $0x44 + BYTE $0x5c + BYTE $0x78 + + // if uint32(x>>8) == load32(src, candidate) { continue } + MOVL (DX)(R15*1), BX + CMPL R14, BX + JEQ inner1 + + // nextHash = hash(uint32(x>>16), shift) + SHRQ $8, R14 + MOVL R14, R11 + IMULL $0x1e35a7bd, R11 + SHRL CX, R11 + + // s++ + ADDQ $1, SI + + // break out of the inner1 for loop, i.e. continue the outer loop. + JMP outer + +emitRemainder: + // if nextEmit < len(src) { etc } + MOVQ src_len+32(FP), AX + ADDQ DX, AX + CMPQ R10, AX + JEQ encodeBlockEnd + + // d += emitLiteral(dst[d:], src[nextEmit:]) + // + // Push args. + MOVQ DI, 0(SP) + MOVQ $0, 8(SP) // Unnecessary, as the callee ignores it, but conservative. + MOVQ $0, 16(SP) // Unnecessary, as the callee ignores it, but conservative. + MOVQ R10, 24(SP) + SUBQ R10, AX + MOVQ AX, 32(SP) + MOVQ AX, 40(SP) // Unnecessary, as the callee ignores it, but conservative. + + // Spill local variables (registers) onto the stack; call; unspill. + MOVQ DI, 80(SP) + CALL ·emitLiteral(SB) + MOVQ 80(SP), DI + + // Finish the "d +=" part of "d += emitLiteral(etc)". + ADDQ 48(SP), DI + +encodeBlockEnd: + MOVQ dst_base+0(FP), AX + SUBQ AX, DI + MOVQ DI, d+48(FP) + RET diff --git a/vendor/github.com/golang/snappy/encode_other.go b/vendor/github.com/golang/snappy/encode_other.go new file mode 100644 index 00000000..dbcae905 --- /dev/null +++ b/vendor/github.com/golang/snappy/encode_other.go @@ -0,0 +1,238 @@ +// Copyright 2016 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine !gc noasm + +package snappy + +func load32(b []byte, i int) uint32 { + b = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line. + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 +} + +func load64(b []byte, i int) uint64 { + b = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line. + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +// emitLiteral writes a literal chunk and returns the number of bytes written. +// +// It assumes that: +// dst is long enough to hold the encoded bytes +// 1 <= len(lit) && len(lit) <= 65536 +func emitLiteral(dst, lit []byte) int { + i, n := 0, uint(len(lit)-1) + switch { + case n < 60: + dst[0] = uint8(n)<<2 | tagLiteral + i = 1 + case n < 1<<8: + dst[0] = 60<<2 | tagLiteral + dst[1] = uint8(n) + i = 2 + default: + dst[0] = 61<<2 | tagLiteral + dst[1] = uint8(n) + dst[2] = uint8(n >> 8) + i = 3 + } + return i + copy(dst[i:], lit) +} + +// emitCopy writes a copy chunk and returns the number of bytes written. +// +// It assumes that: +// dst is long enough to hold the encoded bytes +// 1 <= offset && offset <= 65535 +// 4 <= length && length <= 65535 +func emitCopy(dst []byte, offset, length int) int { + i := 0 + // The maximum length for a single tagCopy1 or tagCopy2 op is 64 bytes. The + // threshold for this loop is a little higher (at 68 = 64 + 4), and the + // length emitted down below is is a little lower (at 60 = 64 - 4), because + // it's shorter to encode a length 67 copy as a length 60 tagCopy2 followed + // by a length 7 tagCopy1 (which encodes as 3+2 bytes) than to encode it as + // a length 64 tagCopy2 followed by a length 3 tagCopy2 (which encodes as + // 3+3 bytes). The magic 4 in the 64±4 is because the minimum length for a + // tagCopy1 op is 4 bytes, which is why a length 3 copy has to be an + // encodes-as-3-bytes tagCopy2 instead of an encodes-as-2-bytes tagCopy1. + for length >= 68 { + // Emit a length 64 copy, encoded as 3 bytes. + dst[i+0] = 63<<2 | tagCopy2 + dst[i+1] = uint8(offset) + dst[i+2] = uint8(offset >> 8) + i += 3 + length -= 64 + } + if length > 64 { + // Emit a length 60 copy, encoded as 3 bytes. + dst[i+0] = 59<<2 | tagCopy2 + dst[i+1] = uint8(offset) + dst[i+2] = uint8(offset >> 8) + i += 3 + length -= 60 + } + if length >= 12 || offset >= 2048 { + // Emit the remaining copy, encoded as 3 bytes. + dst[i+0] = uint8(length-1)<<2 | tagCopy2 + dst[i+1] = uint8(offset) + dst[i+2] = uint8(offset >> 8) + return i + 3 + } + // Emit the remaining copy, encoded as 2 bytes. + dst[i+0] = uint8(offset>>8)<<5 | uint8(length-4)<<2 | tagCopy1 + dst[i+1] = uint8(offset) + return i + 2 +} + +// extendMatch returns the largest k such that k <= len(src) and that +// src[i:i+k-j] and src[j:k] have the same contents. +// +// It assumes that: +// 0 <= i && i < j && j <= len(src) +func extendMatch(src []byte, i, j int) int { + for ; j < len(src) && src[i] == src[j]; i, j = i+1, j+1 { + } + return j +} + +func hash(u, shift uint32) uint32 { + return (u * 0x1e35a7bd) >> shift +} + +// encodeBlock encodes a non-empty src to a guaranteed-large-enough dst. It +// assumes that the varint-encoded length of the decompressed bytes has already +// been written. +// +// It also assumes that: +// len(dst) >= MaxEncodedLen(len(src)) && +// minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize +func encodeBlock(dst, src []byte) (d int) { + // Initialize the hash table. Its size ranges from 1<<8 to 1<<14 inclusive. + // The table element type is uint16, as s < sLimit and sLimit < len(src) + // and len(src) <= maxBlockSize and maxBlockSize == 65536. + const ( + maxTableSize = 1 << 14 + // tableMask is redundant, but helps the compiler eliminate bounds + // checks. + tableMask = maxTableSize - 1 + ) + shift := uint32(32 - 8) + for tableSize := 1 << 8; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 { + shift-- + } + // In Go, all array elements are zero-initialized, so there is no advantage + // to a smaller tableSize per se. However, it matches the C++ algorithm, + // and in the asm versions of this code, we can get away with zeroing only + // the first tableSize elements. + var table [maxTableSize]uint16 + + // sLimit is when to stop looking for offset/length copies. The inputMargin + // lets us use a fast path for emitLiteral in the main loop, while we are + // looking for copies. + sLimit := len(src) - inputMargin + + // nextEmit is where in src the next emitLiteral should start from. + nextEmit := 0 + + // The encoded form must start with a literal, as there are no previous + // bytes to copy, so we start looking for hash matches at s == 1. + s := 1 + nextHash := hash(load32(src, s), shift) + + for { + // Copied from the C++ snappy implementation: + // + // Heuristic match skipping: If 32 bytes are scanned with no matches + // found, start looking only at every other byte. If 32 more bytes are + // scanned (or skipped), look at every third byte, etc.. When a match + // is found, immediately go back to looking at every byte. This is a + // small loss (~5% performance, ~0.1% density) for compressible data + // due to more bookkeeping, but for non-compressible data (such as + // JPEG) it's a huge win since the compressor quickly "realizes" the + // data is incompressible and doesn't bother looking for matches + // everywhere. + // + // The "skip" variable keeps track of how many bytes there are since + // the last match; dividing it by 32 (ie. right-shifting by five) gives + // the number of bytes to move ahead for each iteration. + skip := 32 + + nextS := s + candidate := 0 + for { + s = nextS + bytesBetweenHashLookups := skip >> 5 + nextS = s + bytesBetweenHashLookups + skip += bytesBetweenHashLookups + if nextS > sLimit { + goto emitRemainder + } + candidate = int(table[nextHash&tableMask]) + table[nextHash&tableMask] = uint16(s) + nextHash = hash(load32(src, nextS), shift) + if load32(src, s) == load32(src, candidate) { + break + } + } + + // A 4-byte match has been found. We'll later see if more than 4 bytes + // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit + // them as literal bytes. + d += emitLiteral(dst[d:], src[nextEmit:s]) + + // Call emitCopy, and then see if another emitCopy could be our next + // move. Repeat until we find no match for the input immediately after + // what was consumed by the last emitCopy call. + // + // If we exit this loop normally then we need to call emitLiteral next, + // though we don't yet know how big the literal will be. We handle that + // by proceeding to the next iteration of the main loop. We also can + // exit this loop via goto if we get close to exhausting the input. + for { + // Invariant: we have a 4-byte match at s, and no need to emit any + // literal bytes prior to s. + base := s + + // Extend the 4-byte match as long as possible. + // + // This is an inlined version of: + // s = extendMatch(src, candidate+4, s+4) + s += 4 + for i := candidate + 4; s < len(src) && src[i] == src[s]; i, s = i+1, s+1 { + } + + d += emitCopy(dst[d:], base-candidate, s-base) + nextEmit = s + if s >= sLimit { + goto emitRemainder + } + + // We could immediately start working at s now, but to improve + // compression we first update the hash table at s-1 and at s. If + // another emitCopy is not our next move, also calculate nextHash + // at s+1. At least on GOARCH=amd64, these three hash calculations + // are faster as one load64 call (with some shifts) instead of + // three load32 calls. + x := load64(src, s-1) + prevHash := hash(uint32(x>>0), shift) + table[prevHash&tableMask] = uint16(s - 1) + currHash := hash(uint32(x>>8), shift) + candidate = int(table[currHash&tableMask]) + table[currHash&tableMask] = uint16(s) + if uint32(x>>8) != load32(src, candidate) { + nextHash = hash(uint32(x>>16), shift) + s++ + break + } + } + } + +emitRemainder: + if nextEmit < len(src) { + d += emitLiteral(dst[d:], src[nextEmit:]) + } + return d +} diff --git a/vendor/github.com/golang/snappy/golden_test.go b/vendor/github.com/golang/snappy/golden_test.go new file mode 100644 index 00000000..e4496f92 --- /dev/null +++ b/vendor/github.com/golang/snappy/golden_test.go @@ -0,0 +1,1965 @@ +// Copyright 2016 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package snappy + +// extendMatchGoldenTestCases is the i and j arguments, and the returned value, +// for every extendMatch call issued when encoding the +// testdata/Mark.Twain-Tom.Sawyer.txt file. It is used to benchmark the +// extendMatch implementation. +// +// It was generated manually by adding some print statements to the (pure Go) +// extendMatch implementation: +// +// func extendMatch(src []byte, i, j int) int { +// i0, j0 := i, j +// for ; j < len(src) && src[i] == src[j]; i, j = i+1, j+1 { +// } +// println("{", i0, ",", j0, ",", j, "},") +// return j +// } +// +// and running "go test -test.run=EncodeGoldenInput -tags=noasm". +var extendMatchGoldenTestCases = []struct { + i, j, want int +}{ + {11, 61, 62}, + {80, 81, 82}, + {86, 87, 101}, + {85, 133, 149}, + {152, 153, 162}, + {133, 168, 193}, + {168, 207, 225}, + {81, 255, 275}, + {278, 279, 283}, + {306, 417, 417}, + {373, 428, 430}, + {389, 444, 447}, + {474, 510, 512}, + {465, 533, 533}, + {47, 547, 547}, + {307, 551, 554}, + {420, 582, 587}, + {309, 604, 604}, + {604, 625, 625}, + {538, 629, 629}, + {328, 640, 640}, + {573, 645, 645}, + {319, 657, 657}, + {30, 664, 664}, + {45, 679, 680}, + {621, 684, 684}, + {376, 700, 700}, + {33, 707, 708}, + {601, 733, 733}, + {334, 744, 745}, + {625, 758, 759}, + {382, 763, 763}, + {550, 769, 771}, + {533, 789, 789}, + {804, 813, 813}, + {342, 841, 842}, + {742, 847, 847}, + {74, 852, 852}, + {810, 864, 864}, + {758, 868, 869}, + {714, 883, 883}, + {582, 889, 891}, + {61, 934, 935}, + {894, 942, 942}, + {939, 949, 949}, + {785, 956, 957}, + {886, 978, 978}, + {792, 998, 998}, + {998, 1005, 1005}, + {572, 1032, 1032}, + {698, 1051, 1053}, + {599, 1067, 1069}, + {1056, 1079, 1079}, + {942, 1089, 1090}, + {831, 1094, 1096}, + {1088, 1100, 1103}, + {732, 1113, 1114}, + {1037, 1118, 1118}, + {872, 1128, 1130}, + {1079, 1140, 1142}, + {332, 1162, 1162}, + {207, 1168, 1186}, + {1189, 1190, 1225}, + {105, 1229, 1230}, + {79, 1256, 1257}, + {1190, 1261, 1283}, + {255, 1306, 1306}, + {1319, 1339, 1358}, + {364, 1370, 1370}, + {955, 1378, 1380}, + {122, 1403, 1403}, + {1325, 1407, 1419}, + {664, 1423, 1424}, + {941, 1461, 1463}, + {867, 1477, 1478}, + {757, 1488, 1489}, + {1140, 1499, 1499}, + {31, 1506, 1506}, + {1487, 1510, 1512}, + {1089, 1520, 1521}, + {1467, 1525, 1529}, + {1394, 1537, 1537}, + {1499, 1541, 1541}, + {367, 1558, 1558}, + {1475, 1564, 1564}, + {1525, 1568, 1571}, + {1541, 1582, 1583}, + {864, 1587, 1588}, + {704, 1597, 1597}, + {336, 1602, 1602}, + {1383, 1613, 1613}, + {1498, 1617, 1618}, + {1051, 1623, 1625}, + {401, 1643, 1645}, + {1072, 1654, 1655}, + {1067, 1667, 1669}, + {699, 1673, 1674}, + {1587, 1683, 1684}, + {920, 1696, 1696}, + {1505, 1710, 1710}, + {1550, 1723, 1723}, + {996, 1727, 1727}, + {833, 1733, 1734}, + {1638, 1739, 1740}, + {1654, 1744, 1744}, + {753, 1761, 1761}, + {1548, 1773, 1773}, + {1568, 1777, 1780}, + {1683, 1793, 1794}, + {948, 1801, 1801}, + {1666, 1805, 1808}, + {1502, 1814, 1814}, + {1696, 1822, 1822}, + {502, 1836, 1837}, + {917, 1843, 1843}, + {1733, 1854, 1855}, + {970, 1859, 1859}, + {310, 1863, 1863}, + {657, 1872, 1872}, + {1005, 1876, 1876}, + {1662, 1880, 1880}, + {904, 1892, 1892}, + {1427, 1910, 1910}, + {1772, 1929, 1930}, + {1822, 1937, 1940}, + {1858, 1949, 1950}, + {1602, 1956, 1956}, + {1150, 1962, 1962}, + {1504, 1966, 1967}, + {51, 1971, 1971}, + {1605, 1979, 1979}, + {1458, 1983, 1988}, + {1536, 2001, 2006}, + {1373, 2014, 2018}, + {1494, 2025, 2025}, + {1667, 2029, 2031}, + {1592, 2035, 2035}, + {330, 2045, 2045}, + {1376, 2053, 2053}, + {1991, 2058, 2059}, + {1635, 2065, 2065}, + {1992, 2073, 2074}, + {2014, 2080, 2081}, + {1546, 2085, 2087}, + {59, 2099, 2099}, + {1996, 2106, 2106}, + {1836, 2110, 2110}, + {2068, 2114, 2114}, + {1338, 2122, 2122}, + {1562, 2128, 2130}, + {1934, 2134, 2134}, + {2114, 2141, 2142}, + {977, 2149, 2150}, + {956, 2154, 2155}, + {1407, 2162, 2162}, + {1773, 2166, 2166}, + {883, 2171, 2171}, + {623, 2175, 2178}, + {1520, 2191, 2192}, + {1162, 2200, 2200}, + {912, 2204, 2204}, + {733, 2208, 2208}, + {1777, 2212, 2215}, + {1532, 2219, 2219}, + {718, 2223, 2225}, + {2069, 2229, 2229}, + {2207, 2245, 2246}, + {1139, 2264, 2264}, + {677, 2274, 2274}, + {2099, 2279, 2279}, + {1863, 2283, 2283}, + {1966, 2305, 2306}, + {2279, 2313, 2313}, + {1628, 2319, 2319}, + {755, 2329, 2329}, + {1461, 2334, 2334}, + {2117, 2340, 2340}, + {2313, 2349, 2349}, + {1859, 2353, 2353}, + {1048, 2362, 2362}, + {895, 2366, 2366}, + {2278, 2373, 2373}, + {1884, 2377, 2377}, + {1402, 2387, 2392}, + {700, 2398, 2398}, + {1971, 2402, 2402}, + {2009, 2419, 2419}, + {1441, 2426, 2428}, + {2208, 2432, 2432}, + {2038, 2436, 2436}, + {932, 2443, 2443}, + {1759, 2447, 2448}, + {744, 2452, 2452}, + {1875, 2458, 2458}, + {2405, 2468, 2468}, + {1596, 2472, 2473}, + {1953, 2480, 2482}, + {736, 2487, 2487}, + {1913, 2493, 2493}, + {774, 2497, 2497}, + {1484, 2506, 2508}, + {2432, 2512, 2512}, + {752, 2519, 2519}, + {2497, 2523, 2523}, + {2409, 2528, 2529}, + {2122, 2533, 2533}, + {2396, 2537, 2538}, + {2410, 2547, 2548}, + {1093, 2555, 2560}, + {551, 2564, 2565}, + {2268, 2569, 2569}, + {1362, 2580, 2580}, + {1916, 2584, 2585}, + {994, 2589, 2590}, + {1979, 2596, 2596}, + {1041, 2602, 2602}, + {2104, 2614, 2616}, + {2609, 2621, 2628}, + {2329, 2638, 2638}, + {2211, 2657, 2658}, + {2638, 2662, 2667}, + {2578, 2676, 2679}, + {2153, 2685, 2686}, + {2608, 2696, 2697}, + {598, 2712, 2712}, + {2620, 2719, 2720}, + {1888, 2724, 2728}, + {2709, 2732, 2732}, + {1365, 2739, 2739}, + {784, 2747, 2748}, + {424, 2753, 2753}, + {2204, 2759, 2759}, + {812, 2768, 2769}, + {2455, 2773, 2773}, + {1722, 2781, 2781}, + {1917, 2792, 2792}, + {2705, 2799, 2799}, + {2685, 2806, 2807}, + {2742, 2811, 2811}, + {1370, 2818, 2818}, + {2641, 2830, 2830}, + {2512, 2837, 2837}, + {2457, 2841, 2841}, + {2756, 2845, 2845}, + {2719, 2855, 2855}, + {1423, 2859, 2859}, + {2849, 2863, 2865}, + {1474, 2871, 2871}, + {1161, 2875, 2876}, + {2282, 2880, 2881}, + {2746, 2888, 2888}, + {1783, 2893, 2893}, + {2401, 2899, 2900}, + {2632, 2920, 2923}, + {2422, 2928, 2930}, + {2715, 2939, 2939}, + {2162, 2943, 2943}, + {2859, 2947, 2947}, + {1910, 2951, 2951}, + {1431, 2955, 2956}, + {1439, 2964, 2964}, + {2501, 2968, 2969}, + {2029, 2973, 2976}, + {689, 2983, 2984}, + {1658, 2988, 2988}, + {1031, 2996, 2996}, + {2149, 3001, 3002}, + {25, 3009, 3013}, + {2964, 3023, 3023}, + {953, 3027, 3028}, + {2359, 3036, 3036}, + {3023, 3049, 3049}, + {2880, 3055, 3056}, + {2973, 3076, 3077}, + {2874, 3090, 3090}, + {2871, 3094, 3094}, + {2532, 3100, 3100}, + {2938, 3107, 3108}, + {350, 3115, 3115}, + {2196, 3119, 3121}, + {1133, 3127, 3129}, + {1797, 3134, 3150}, + {3032, 3158, 3158}, + {3016, 3172, 3172}, + {2533, 3179, 3179}, + {3055, 3187, 3188}, + {1384, 3192, 3193}, + {2799, 3199, 3199}, + {2126, 3203, 3207}, + {2334, 3215, 3215}, + {2105, 3220, 3221}, + {3199, 3229, 3229}, + {2891, 3233, 3233}, + {855, 3240, 3240}, + {1852, 3253, 3256}, + {2140, 3263, 3263}, + {1682, 3268, 3270}, + {3243, 3274, 3274}, + {924, 3279, 3279}, + {2212, 3283, 3283}, + {2596, 3287, 3287}, + {2999, 3291, 3291}, + {2353, 3295, 3295}, + {2480, 3302, 3304}, + {1959, 3308, 3311}, + {3000, 3318, 3318}, + {845, 3330, 3330}, + {2283, 3334, 3334}, + {2519, 3342, 3342}, + {3325, 3346, 3348}, + {2397, 3353, 3354}, + {2763, 3358, 3358}, + {3198, 3363, 3364}, + {3211, 3368, 3372}, + {2950, 3376, 3377}, + {3245, 3388, 3391}, + {2264, 3398, 3398}, + {795, 3403, 3403}, + {3287, 3407, 3407}, + {3358, 3411, 3411}, + {3317, 3415, 3415}, + {3232, 3431, 3431}, + {2128, 3435, 3437}, + {3236, 3441, 3441}, + {3398, 3445, 3446}, + {2814, 3450, 3450}, + {3394, 3466, 3466}, + {2425, 3470, 3470}, + {3330, 3476, 3476}, + {1612, 3480, 3480}, + {1004, 3485, 3486}, + {2732, 3490, 3490}, + {1117, 3494, 3495}, + {629, 3501, 3501}, + {3087, 3514, 3514}, + {684, 3518, 3518}, + {3489, 3522, 3524}, + {1760, 3529, 3529}, + {617, 3537, 3537}, + {3431, 3541, 3541}, + {997, 3547, 3547}, + {882, 3552, 3553}, + {2419, 3558, 3558}, + {610, 3562, 3563}, + {1903, 3567, 3569}, + {3005, 3575, 3575}, + {3076, 3585, 3586}, + {3541, 3590, 3590}, + {3490, 3594, 3594}, + {1899, 3599, 3599}, + {3545, 3606, 3606}, + {3290, 3614, 3615}, + {2056, 3619, 3620}, + {3556, 3625, 3625}, + {3294, 3632, 3633}, + {637, 3643, 3644}, + {3609, 3648, 3650}, + {3175, 3658, 3658}, + {3498, 3665, 3665}, + {1597, 3669, 3669}, + {1983, 3673, 3673}, + {3215, 3682, 3682}, + {3544, 3689, 3689}, + {3694, 3698, 3698}, + {3228, 3715, 3716}, + {2594, 3720, 3722}, + {3573, 3726, 3726}, + {2479, 3732, 3735}, + {3191, 3741, 3742}, + {1113, 3746, 3747}, + {2844, 3751, 3751}, + {3445, 3756, 3757}, + {3755, 3766, 3766}, + {3421, 3775, 3780}, + {3593, 3784, 3786}, + {3263, 3796, 3796}, + {3469, 3806, 3806}, + {2602, 3815, 3815}, + {723, 3819, 3821}, + {1608, 3826, 3826}, + {3334, 3830, 3830}, + {2198, 3835, 3835}, + {2635, 3840, 3840}, + {3702, 3852, 3853}, + {3406, 3858, 3859}, + {3681, 3867, 3870}, + {3407, 3880, 3880}, + {340, 3889, 3889}, + {3772, 3893, 3893}, + {593, 3897, 3897}, + {2563, 3914, 3916}, + {2981, 3929, 3929}, + {1835, 3933, 3934}, + {3906, 3951, 3951}, + {1459, 3958, 3958}, + {3889, 3974, 3974}, + {2188, 3982, 3982}, + {3220, 3986, 3987}, + {3585, 3991, 3993}, + {3712, 3997, 4001}, + {2805, 4007, 4007}, + {1879, 4012, 4013}, + {3618, 4018, 4018}, + {1145, 4031, 4032}, + {3901, 4037, 4037}, + {2772, 4046, 4047}, + {2802, 4053, 4054}, + {3299, 4058, 4058}, + {3725, 4066, 4066}, + {2271, 4070, 4070}, + {385, 4075, 4076}, + {3624, 4089, 4090}, + {3745, 4096, 4098}, + {1563, 4102, 4102}, + {4045, 4106, 4111}, + {3696, 4115, 4119}, + {3376, 4125, 4126}, + {1880, 4130, 4130}, + {2048, 4140, 4141}, + {2724, 4149, 4149}, + {1767, 4156, 4156}, + {2601, 4164, 4164}, + {2757, 4168, 4168}, + {3974, 4172, 4172}, + {3914, 4178, 4178}, + {516, 4185, 4185}, + {1032, 4189, 4190}, + {3462, 4197, 4198}, + {3805, 4202, 4203}, + {3910, 4207, 4212}, + {3075, 4221, 4221}, + {3756, 4225, 4226}, + {1872, 4236, 4237}, + {3844, 4241, 4241}, + {3991, 4245, 4249}, + {2203, 4258, 4258}, + {3903, 4267, 4268}, + {705, 4272, 4272}, + {1896, 4276, 4276}, + {1955, 4285, 4288}, + {3746, 4302, 4303}, + {2672, 4311, 4311}, + {3969, 4317, 4317}, + {3883, 4322, 4322}, + {1920, 4339, 4340}, + {3527, 4344, 4346}, + {1160, 4358, 4358}, + {3648, 4364, 4366}, + {2711, 4387, 4387}, + {3619, 4391, 4392}, + {1944, 4396, 4396}, + {4369, 4400, 4400}, + {2736, 4404, 4407}, + {2546, 4411, 4412}, + {4390, 4422, 4422}, + {3610, 4426, 4427}, + {4058, 4431, 4431}, + {4374, 4435, 4435}, + {3463, 4445, 4446}, + {1813, 4452, 4452}, + {3669, 4456, 4456}, + {3830, 4460, 4460}, + {421, 4464, 4465}, + {1719, 4471, 4471}, + {3880, 4475, 4475}, + {1834, 4485, 4487}, + {3590, 4491, 4491}, + {442, 4496, 4497}, + {4435, 4501, 4501}, + {3814, 4509, 4509}, + {987, 4513, 4513}, + {4494, 4518, 4521}, + {3218, 4526, 4529}, + {4221, 4537, 4537}, + {2778, 4543, 4545}, + {4422, 4552, 4552}, + {4031, 4558, 4559}, + {4178, 4563, 4563}, + {3726, 4567, 4574}, + {4027, 4578, 4578}, + {4339, 4585, 4587}, + {3796, 4592, 4595}, + {543, 4600, 4613}, + {2855, 4620, 4621}, + {2795, 4627, 4627}, + {3440, 4631, 4632}, + {4279, 4636, 4639}, + {4245, 4643, 4645}, + {4516, 4649, 4650}, + {3133, 4654, 4654}, + {4042, 4658, 4659}, + {3422, 4663, 4663}, + {4046, 4667, 4668}, + {4267, 4672, 4672}, + {4004, 4676, 4677}, + {2490, 4682, 4682}, + {2451, 4697, 4697}, + {3027, 4705, 4705}, + {4028, 4717, 4717}, + {4460, 4721, 4721}, + {2471, 4725, 4727}, + {3090, 4735, 4735}, + {3192, 4739, 4740}, + {3835, 4760, 4760}, + {4540, 4764, 4764}, + {4007, 4772, 4774}, + {619, 4784, 4784}, + {3561, 4789, 4791}, + {3367, 4805, 4805}, + {4490, 4810, 4811}, + {2402, 4815, 4815}, + {3352, 4819, 4822}, + {2773, 4828, 4828}, + {4552, 4832, 4832}, + {2522, 4840, 4841}, + {316, 4847, 4852}, + {4715, 4858, 4858}, + {2959, 4862, 4862}, + {4858, 4868, 4869}, + {2134, 4873, 4873}, + {578, 4878, 4878}, + {4189, 4889, 4890}, + {2229, 4894, 4894}, + {4501, 4898, 4898}, + {2297, 4903, 4903}, + {2933, 4909, 4909}, + {3008, 4913, 4913}, + {3153, 4917, 4917}, + {4819, 4921, 4921}, + {4921, 4932, 4933}, + {4920, 4944, 4945}, + {4814, 4954, 4955}, + {576, 4966, 4966}, + {1854, 4970, 4971}, + {1374, 4975, 4976}, + {3307, 4980, 4980}, + {974, 4984, 4988}, + {4721, 4992, 4992}, + {4898, 4996, 4996}, + {4475, 5006, 5006}, + {3819, 5012, 5012}, + {1948, 5019, 5021}, + {4954, 5027, 5029}, + {3740, 5038, 5040}, + {4763, 5044, 5045}, + {1936, 5051, 5051}, + {4844, 5055, 5060}, + {4215, 5069, 5072}, + {1146, 5076, 5076}, + {3845, 5082, 5082}, + {4865, 5090, 5090}, + {4624, 5094, 5094}, + {4815, 5098, 5098}, + {5006, 5105, 5105}, + {4980, 5109, 5109}, + {4795, 5113, 5115}, + {5043, 5119, 5121}, + {4782, 5129, 5129}, + {3826, 5139, 5139}, + {3876, 5156, 5156}, + {3111, 5167, 5171}, + {1470, 5177, 5177}, + {4431, 5181, 5181}, + {546, 5189, 5189}, + {4225, 5193, 5193}, + {1672, 5199, 5201}, + {4207, 5205, 5209}, + {4220, 5216, 5217}, + {4658, 5224, 5225}, + {3295, 5235, 5235}, + {2436, 5239, 5239}, + {2349, 5246, 5246}, + {2175, 5250, 5250}, + {5180, 5257, 5258}, + {3161, 5263, 5263}, + {5105, 5272, 5272}, + {3552, 5282, 5282}, + {4944, 5299, 5300}, + {4130, 5312, 5313}, + {902, 5323, 5323}, + {913, 5327, 5327}, + {2987, 5333, 5334}, + {5150, 5344, 5344}, + {5249, 5348, 5348}, + {1965, 5358, 5359}, + {5330, 5364, 5364}, + {2012, 5373, 5377}, + {712, 5384, 5386}, + {5235, 5390, 5390}, + {5044, 5398, 5399}, + {564, 5406, 5406}, + {39, 5410, 5410}, + {4642, 5422, 5425}, + {4421, 5437, 5438}, + {2347, 5449, 5449}, + {5333, 5453, 5454}, + {4136, 5458, 5459}, + {3793, 5468, 5468}, + {2243, 5480, 5480}, + {4889, 5492, 5493}, + {4295, 5504, 5504}, + {2785, 5511, 5511}, + {2377, 5518, 5518}, + {3662, 5525, 5525}, + {5097, 5529, 5530}, + {4781, 5537, 5538}, + {4697, 5547, 5548}, + {436, 5552, 5553}, + {5542, 5558, 5558}, + {3692, 5562, 5562}, + {2696, 5568, 5569}, + {4620, 5578, 5578}, + {2898, 5590, 5590}, + {5557, 5596, 5618}, + {2797, 5623, 5625}, + {2792, 5629, 5629}, + {5243, 5633, 5633}, + {5348, 5637, 5637}, + {5547, 5643, 5643}, + {4296, 5654, 5655}, + {5568, 5662, 5662}, + {3001, 5670, 5671}, + {3794, 5679, 5679}, + {4006, 5685, 5686}, + {4969, 5690, 5692}, + {687, 5704, 5704}, + {4563, 5708, 5708}, + {1723, 5738, 5738}, + {649, 5742, 5742}, + {5163, 5748, 5755}, + {3907, 5759, 5759}, + {3074, 5764, 5764}, + {5326, 5771, 5771}, + {2951, 5776, 5776}, + {5181, 5780, 5780}, + {2614, 5785, 5788}, + {4709, 5794, 5794}, + {2784, 5799, 5799}, + {5518, 5803, 5803}, + {4155, 5812, 5815}, + {921, 5819, 5819}, + {5224, 5823, 5824}, + {2853, 5830, 5836}, + {5776, 5840, 5840}, + {2955, 5844, 5845}, + {5745, 5853, 5853}, + {3291, 5857, 5857}, + {2988, 5861, 5861}, + {2647, 5865, 5865}, + {5398, 5869, 5870}, + {1085, 5874, 5875}, + {4906, 5881, 5881}, + {802, 5886, 5886}, + {5119, 5890, 5893}, + {5802, 5899, 5900}, + {3415, 5904, 5904}, + {5629, 5908, 5908}, + {3714, 5912, 5914}, + {5558, 5921, 5921}, + {2710, 5927, 5928}, + {1094, 5932, 5934}, + {2653, 5940, 5941}, + {4735, 5954, 5954}, + {5861, 5958, 5958}, + {1040, 5971, 5971}, + {5514, 5977, 5977}, + {5048, 5981, 5982}, + {5953, 5992, 5993}, + {3751, 5997, 5997}, + {4991, 6001, 6002}, + {5885, 6006, 6007}, + {5529, 6011, 6012}, + {4974, 6019, 6020}, + {5857, 6024, 6024}, + {3483, 6032, 6032}, + {3594, 6036, 6036}, + {1997, 6040, 6040}, + {5997, 6044, 6047}, + {5197, 6051, 6051}, + {1764, 6055, 6055}, + {6050, 6059, 6059}, + {5239, 6063, 6063}, + {5049, 6067, 6067}, + {5957, 6073, 6074}, + {1022, 6078, 6078}, + {3414, 6083, 6084}, + {3809, 6090, 6090}, + {4562, 6095, 6096}, + {5878, 6104, 6104}, + {594, 6108, 6109}, + {3353, 6115, 6116}, + {4992, 6120, 6121}, + {2424, 6125, 6125}, + {4484, 6130, 6130}, + {3900, 6134, 6135}, + {5793, 6139, 6141}, + {3562, 6145, 6145}, + {1438, 6152, 6153}, + {6058, 6157, 6158}, + {4411, 6162, 6163}, + {4590, 6167, 6171}, + {4748, 6175, 6175}, + {5517, 6183, 6184}, + {6095, 6191, 6192}, + {1471, 6203, 6203}, + {2643, 6209, 6210}, + {450, 6220, 6220}, + {5266, 6226, 6226}, + {2576, 6233, 6233}, + {2607, 6239, 6240}, + {5164, 6244, 6251}, + {6054, 6255, 6255}, + {1789, 6260, 6261}, + {5250, 6265, 6265}, + {6062, 6273, 6278}, + {5990, 6282, 6282}, + {3283, 6286, 6286}, + {5436, 6290, 6290}, + {6059, 6294, 6294}, + {5668, 6298, 6300}, + {3072, 6324, 6329}, + {3132, 6338, 6339}, + {3246, 6343, 6344}, + {28, 6348, 6349}, + {1503, 6353, 6355}, + {6067, 6359, 6359}, + {3384, 6364, 6364}, + {545, 6375, 6376}, + {5803, 6380, 6380}, + {5522, 6384, 6385}, + {5908, 6389, 6389}, + {2796, 6393, 6396}, + {4831, 6403, 6404}, + {6388, 6412, 6412}, + {6005, 6417, 6420}, + {4450, 6430, 6430}, + {4050, 6435, 6435}, + {5372, 6441, 6441}, + {4378, 6447, 6447}, + {6199, 6452, 6452}, + {3026, 6456, 6456}, + {2642, 6460, 6462}, + {6392, 6470, 6470}, + {6459, 6474, 6474}, + {2829, 6487, 6488}, + {2942, 6499, 6504}, + {5069, 6508, 6511}, + {5341, 6515, 6516}, + {5853, 6521, 6525}, + {6104, 6531, 6531}, + {5759, 6535, 6538}, + {4672, 6542, 6543}, + {2443, 6550, 6550}, + {5109, 6554, 6554}, + {6494, 6558, 6560}, + {6006, 6570, 6572}, + {6424, 6576, 6580}, + {4693, 6591, 6592}, + {6439, 6596, 6597}, + {3179, 6601, 6601}, + {5299, 6606, 6607}, + {4148, 6612, 6613}, + {3774, 6617, 6617}, + {3537, 6623, 6624}, + {4975, 6628, 6629}, + {3848, 6636, 6636}, + {856, 6640, 6640}, + {5724, 6645, 6645}, + {6632, 6651, 6651}, + {4630, 6656, 6658}, + {1440, 6662, 6662}, + {4281, 6666, 6667}, + {4302, 6671, 6672}, + {2589, 6676, 6677}, + {5647, 6681, 6687}, + {6082, 6691, 6693}, + {6144, 6698, 6698}, + {6103, 6709, 6710}, + {3710, 6714, 6714}, + {4253, 6718, 6721}, + {2467, 6730, 6730}, + {4778, 6734, 6734}, + {6528, 6738, 6738}, + {4358, 6747, 6747}, + {5889, 6753, 6753}, + {5193, 6757, 6757}, + {5797, 6761, 6761}, + {3858, 6765, 6766}, + {5951, 6776, 6776}, + {6487, 6781, 6782}, + {3282, 6786, 6787}, + {4667, 6797, 6799}, + {1927, 6803, 6806}, + {6583, 6810, 6810}, + {4937, 6814, 6814}, + {6099, 6824, 6824}, + {4415, 6835, 6836}, + {6332, 6840, 6841}, + {5160, 6850, 6850}, + {4764, 6854, 6854}, + {6814, 6858, 6859}, + {3018, 6864, 6864}, + {6293, 6868, 6869}, + {6359, 6877, 6877}, + {3047, 6884, 6886}, + {5262, 6890, 6891}, + {5471, 6900, 6900}, + {3268, 6910, 6912}, + {1047, 6916, 6916}, + {5904, 6923, 6923}, + {5798, 6933, 6938}, + {4149, 6942, 6942}, + {1821, 6946, 6946}, + {3599, 6952, 6952}, + {6470, 6957, 6957}, + {5562, 6961, 6961}, + {6268, 6965, 6967}, + {6389, 6971, 6971}, + {6596, 6975, 6976}, + {6553, 6980, 6981}, + {6576, 6985, 6989}, + {1375, 6993, 6993}, + {652, 6998, 6998}, + {4876, 7002, 7003}, + {5768, 7011, 7013}, + {3973, 7017, 7017}, + {6802, 7025, 7025}, + {6955, 7034, 7036}, + {6974, 7040, 7040}, + {5944, 7044, 7044}, + {6992, 7048, 7054}, + {6872, 7059, 7059}, + {2943, 7063, 7063}, + {6923, 7067, 7067}, + {5094, 7071, 7071}, + {4873, 7075, 7075}, + {5819, 7079, 7079}, + {5945, 7085, 7085}, + {1540, 7090, 7091}, + {2090, 7095, 7095}, + {5024, 7104, 7105}, + {6900, 7109, 7109}, + {6024, 7113, 7114}, + {6000, 7118, 7120}, + {2187, 7124, 7125}, + {6760, 7129, 7130}, + {5898, 7134, 7136}, + {7032, 7144, 7144}, + {4271, 7148, 7148}, + {3706, 7152, 7152}, + {6970, 7156, 7157}, + {7088, 7161, 7163}, + {2718, 7168, 7169}, + {5674, 7175, 7175}, + {4631, 7182, 7182}, + {7070, 7188, 7189}, + {6220, 7196, 7196}, + {3458, 7201, 7202}, + {2041, 7211, 7212}, + {1454, 7216, 7216}, + {5199, 7225, 7227}, + {3529, 7234, 7234}, + {6890, 7238, 7238}, + {3815, 7242, 7243}, + {5490, 7250, 7253}, + {6554, 7257, 7263}, + {5890, 7267, 7269}, + {6877, 7273, 7273}, + {4877, 7277, 7277}, + {2502, 7285, 7285}, + {1483, 7289, 7295}, + {7210, 7304, 7308}, + {6845, 7313, 7316}, + {7219, 7320, 7320}, + {7001, 7325, 7329}, + {6853, 7333, 7334}, + {6120, 7338, 7338}, + {6606, 7342, 7343}, + {7020, 7348, 7350}, + {3509, 7354, 7354}, + {7133, 7359, 7363}, + {3434, 7371, 7374}, + {2787, 7384, 7384}, + {7044, 7388, 7388}, + {6960, 7394, 7395}, + {6676, 7399, 7400}, + {7161, 7404, 7404}, + {7285, 7417, 7418}, + {4558, 7425, 7426}, + {4828, 7430, 7430}, + {6063, 7436, 7436}, + {3597, 7442, 7442}, + {914, 7446, 7446}, + {7320, 7452, 7454}, + {7267, 7458, 7460}, + {5076, 7464, 7464}, + {7430, 7468, 7469}, + {6273, 7473, 7474}, + {7440, 7478, 7487}, + {7348, 7491, 7494}, + {1021, 7510, 7510}, + {7473, 7515, 7515}, + {2823, 7519, 7519}, + {6264, 7527, 7527}, + {7302, 7531, 7531}, + {7089, 7535, 7535}, + {7342, 7540, 7541}, + {3688, 7547, 7551}, + {3054, 7558, 7560}, + {4177, 7566, 7567}, + {6691, 7574, 7575}, + {7156, 7585, 7586}, + {7147, 7590, 7592}, + {7407, 7598, 7598}, + {7403, 7602, 7603}, + {6868, 7607, 7607}, + {6636, 7611, 7611}, + {4805, 7617, 7617}, + {5779, 7623, 7623}, + {7063, 7627, 7627}, + {5079, 7632, 7632}, + {7377, 7637, 7637}, + {7337, 7641, 7642}, + {6738, 7655, 7655}, + {7338, 7659, 7659}, + {6541, 7669, 7671}, + {595, 7675, 7675}, + {7658, 7679, 7680}, + {7647, 7685, 7686}, + {2477, 7690, 7690}, + {5823, 7694, 7694}, + {4156, 7699, 7699}, + {5931, 7703, 7706}, + {6854, 7712, 7712}, + {4931, 7718, 7718}, + {6979, 7722, 7722}, + {5085, 7727, 7727}, + {6965, 7732, 7732}, + {7201, 7736, 7737}, + {3639, 7741, 7743}, + {7534, 7749, 7749}, + {4292, 7753, 7753}, + {3427, 7759, 7763}, + {7273, 7767, 7767}, + {940, 7778, 7778}, + {4838, 7782, 7785}, + {4216, 7790, 7792}, + {922, 7800, 7801}, + {7256, 7810, 7811}, + {7789, 7815, 7819}, + {7225, 7823, 7825}, + {7531, 7829, 7829}, + {6997, 7833, 7833}, + {7757, 7837, 7838}, + {4129, 7842, 7842}, + {7333, 7848, 7849}, + {6776, 7855, 7855}, + {7527, 7859, 7859}, + {4370, 7863, 7863}, + {4512, 7868, 7868}, + {5679, 7880, 7880}, + {3162, 7884, 7885}, + {3933, 7892, 7894}, + {7804, 7899, 7902}, + {6363, 7906, 7907}, + {7848, 7911, 7912}, + {5584, 7917, 7921}, + {874, 7926, 7926}, + {3342, 7930, 7930}, + {4507, 7935, 7937}, + {3672, 7943, 7944}, + {7911, 7948, 7949}, + {6402, 7956, 7956}, + {7940, 7960, 7960}, + {7113, 7964, 7964}, + {1073, 7968, 7968}, + {7740, 7974, 7974}, + {7601, 7978, 7982}, + {6797, 7987, 7988}, + {3528, 7994, 7995}, + {5483, 7999, 7999}, + {5717, 8011, 8011}, + {5480, 8017, 8017}, + {7770, 8023, 8030}, + {2452, 8034, 8034}, + {5282, 8047, 8047}, + {7967, 8051, 8051}, + {1128, 8058, 8066}, + {6348, 8070, 8070}, + {8055, 8077, 8077}, + {7925, 8081, 8086}, + {6810, 8090, 8090}, + {5051, 8101, 8101}, + {4696, 8109, 8110}, + {5129, 8119, 8119}, + {4449, 8123, 8123}, + {7222, 8127, 8127}, + {4649, 8131, 8134}, + {7994, 8138, 8138}, + {5954, 8148, 8148}, + {475, 8152, 8153}, + {7906, 8157, 8157}, + {7458, 8164, 8166}, + {7632, 8171, 8173}, + {3874, 8177, 8183}, + {4391, 8187, 8187}, + {561, 8191, 8191}, + {2417, 8195, 8195}, + {2357, 8204, 8204}, + {2269, 8216, 8218}, + {3968, 8222, 8222}, + {2200, 8226, 8227}, + {3453, 8247, 8247}, + {2439, 8251, 8252}, + {7175, 8257, 8257}, + {976, 8262, 8264}, + {4953, 8273, 8273}, + {4219, 8278, 8278}, + {6, 8285, 8291}, + {5703, 8295, 8296}, + {5272, 8300, 8300}, + {8037, 8304, 8304}, + {8186, 8314, 8314}, + {8304, 8318, 8318}, + {8051, 8326, 8326}, + {8318, 8330, 8330}, + {2671, 8334, 8335}, + {2662, 8339, 8339}, + {8081, 8349, 8350}, + {3328, 8356, 8356}, + {2879, 8360, 8362}, + {8050, 8370, 8371}, + {8330, 8375, 8376}, + {8375, 8386, 8386}, + {4961, 8390, 8390}, + {1017, 8403, 8405}, + {3533, 8416, 8416}, + {4555, 8422, 8422}, + {6445, 8426, 8426}, + {8169, 8432, 8432}, + {990, 8436, 8436}, + {4102, 8440, 8440}, + {7398, 8444, 8446}, + {3480, 8450, 8450}, + {6324, 8462, 8462}, + {7948, 8466, 8467}, + {5950, 8471, 8471}, + {5189, 8476, 8476}, + {4026, 8490, 8490}, + {8374, 8494, 8495}, + {4682, 8501, 8501}, + {7387, 8506, 8506}, + {8164, 8510, 8515}, + {4079, 8524, 8524}, + {8360, 8529, 8531}, + {7446, 8540, 8543}, + {7971, 8547, 8548}, + {4311, 8552, 8552}, + {5204, 8556, 8557}, + {7968, 8562, 8562}, + {7847, 8571, 8573}, + {8547, 8577, 8577}, + {5320, 8581, 8581}, + {8556, 8585, 8586}, + {8504, 8590, 8590}, + {7669, 8602, 8604}, + {5874, 8608, 8609}, + {5828, 8613, 8613}, + {7998, 8617, 8617}, + {8519, 8625, 8625}, + {7250, 8637, 8637}, + {426, 8641, 8641}, + {8436, 8645, 8645}, + {5986, 8649, 8656}, + {8157, 8660, 8660}, + {7182, 8665, 8665}, + {8421, 8675, 8675}, + {8509, 8681, 8681}, + {5137, 8688, 8689}, + {8625, 8694, 8695}, + {5228, 8701, 8702}, + {6661, 8714, 8714}, + {1010, 8719, 8719}, + {6648, 8723, 8723}, + {3500, 8728, 8728}, + {2442, 8735, 8735}, + {8494, 8740, 8741}, + {8171, 8753, 8755}, + {7242, 8763, 8764}, + {4739, 8768, 8769}, + {7079, 8773, 8773}, + {8386, 8777, 8777}, + {8624, 8781, 8787}, + {661, 8791, 8794}, + {8631, 8801, 8801}, + {7753, 8805, 8805}, + {4783, 8809, 8810}, + {1673, 8814, 8815}, + {6623, 8819, 8819}, + {4404, 8823, 8823}, + {8089, 8827, 8828}, + {8773, 8832, 8832}, + {5394, 8836, 8836}, + {6231, 8841, 8843}, + {1015, 8852, 8853}, + {6873, 8857, 8857}, + {6289, 8865, 8865}, + {8577, 8869, 8869}, + {8114, 8873, 8875}, + {8534, 8883, 8883}, + {3007, 8887, 8888}, + {8827, 8892, 8893}, + {4788, 8897, 8900}, + {5698, 8906, 8907}, + {7690, 8911, 8911}, + {6643, 8919, 8919}, + {7206, 8923, 8924}, + {7866, 8929, 8931}, + {8880, 8942, 8942}, + {8630, 8951, 8952}, + {6027, 8958, 8958}, + {7749, 8966, 8967}, + {4932, 8972, 8973}, + {8892, 8980, 8981}, + {634, 9003, 9003}, + {8109, 9007, 9008}, + {8777, 9012, 9012}, + {3981, 9016, 9017}, + {5723, 9025, 9025}, + {7662, 9034, 9038}, + {8955, 9042, 9042}, + {8070, 9060, 9062}, + {8910, 9066, 9066}, + {5363, 9070, 9071}, + {7699, 9075, 9076}, + {8991, 9081, 9081}, + {6850, 9085, 9085}, + {5811, 9092, 9094}, + {9079, 9098, 9102}, + {6456, 9106, 9106}, + {2259, 9111, 9111}, + {4752, 9116, 9116}, + {9060, 9120, 9123}, + {8090, 9127, 9127}, + {5305, 9131, 9132}, + {8623, 9137, 9137}, + {7417, 9141, 9141}, + {6564, 9148, 9149}, + {9126, 9157, 9158}, + {4285, 9169, 9170}, + {8698, 9174, 9174}, + {8869, 9178, 9178}, + {2572, 9182, 9183}, + {6482, 9188, 9190}, + {9181, 9201, 9201}, + {2968, 9208, 9209}, + {2506, 9213, 9215}, + {9127, 9219, 9219}, + {7910, 9225, 9227}, + {5422, 9235, 9239}, + {8813, 9244, 9246}, + {9178, 9250, 9250}, + {8748, 9255, 9255}, + {7354, 9265, 9265}, + {7767, 9269, 9269}, + {7710, 9281, 9283}, + {8826, 9288, 9290}, + {861, 9295, 9295}, + {4482, 9301, 9301}, + {9264, 9305, 9306}, + {8805, 9310, 9310}, + {4995, 9314, 9314}, + {6730, 9318, 9318}, + {7457, 9328, 9328}, + {2547, 9335, 9336}, + {6298, 9340, 9343}, + {9305, 9353, 9354}, + {9269, 9358, 9358}, + {6338, 9370, 9370}, + {7289, 9376, 9379}, + {5780, 9383, 9383}, + {7607, 9387, 9387}, + {2065, 9392, 9392}, + {7238, 9396, 9396}, + {8856, 9400, 9400}, + {8069, 9412, 9413}, + {611, 9420, 9420}, + {7071, 9424, 9424}, + {3089, 9430, 9431}, + {7117, 9435, 9438}, + {1976, 9445, 9445}, + {6640, 9449, 9449}, + {5488, 9453, 9453}, + {8739, 9457, 9459}, + {5958, 9466, 9466}, + {7985, 9470, 9470}, + {8735, 9475, 9475}, + {5009, 9479, 9479}, + {8073, 9483, 9484}, + {2328, 9490, 9491}, + {9250, 9495, 9495}, + {4043, 9502, 9502}, + {7712, 9506, 9506}, + {9012, 9510, 9510}, + {9028, 9514, 9515}, + {2190, 9521, 9524}, + {9029, 9528, 9528}, + {9519, 9532, 9532}, + {9495, 9536, 9536}, + {8527, 9540, 9540}, + {2137, 9550, 9550}, + {8419, 9557, 9557}, + {9383, 9561, 9562}, + {8970, 9575, 9578}, + {8911, 9582, 9582}, + {7828, 9595, 9596}, + {6180, 9600, 9600}, + {8738, 9604, 9607}, + {7540, 9611, 9612}, + {9599, 9616, 9618}, + {9187, 9623, 9623}, + {9294, 9628, 9629}, + {4536, 9639, 9639}, + {3867, 9643, 9643}, + {6305, 9648, 9648}, + {1617, 9654, 9657}, + {5762, 9666, 9666}, + {8314, 9670, 9670}, + {9666, 9674, 9675}, + {9506, 9679, 9679}, + {9669, 9685, 9686}, + {9683, 9690, 9690}, + {8763, 9697, 9698}, + {7468, 9702, 9702}, + {460, 9707, 9707}, + {3115, 9712, 9712}, + {9424, 9716, 9717}, + {7359, 9721, 9724}, + {7547, 9728, 9729}, + {7151, 9733, 9738}, + {7627, 9742, 9742}, + {2822, 9747, 9747}, + {8247, 9751, 9753}, + {9550, 9758, 9758}, + {7585, 9762, 9763}, + {1002, 9767, 9767}, + {7168, 9772, 9773}, + {6941, 9777, 9780}, + {9728, 9784, 9786}, + {9770, 9792, 9796}, + {6411, 9801, 9802}, + {3689, 9806, 9808}, + {9575, 9814, 9816}, + {7025, 9820, 9821}, + {2776, 9826, 9826}, + {9806, 9830, 9830}, + {9820, 9834, 9835}, + {9800, 9839, 9847}, + {9834, 9851, 9852}, + {9829, 9856, 9862}, + {1400, 9866, 9866}, + {3197, 9870, 9871}, + {9851, 9875, 9876}, + {9742, 9883, 9884}, + {3362, 9888, 9889}, + {9883, 9893, 9893}, + {5711, 9899, 9910}, + {7806, 9915, 9915}, + {9120, 9919, 9919}, + {9715, 9925, 9934}, + {2580, 9938, 9938}, + {4907, 9942, 9944}, + {6239, 9953, 9954}, + {6961, 9963, 9963}, + {5295, 9967, 9968}, + {1915, 9972, 9973}, + {3426, 9983, 9985}, + {9875, 9994, 9995}, + {6942, 9999, 9999}, + {6621, 10005, 10005}, + {7589, 10010, 10012}, + {9286, 10020, 10020}, + {838, 10024, 10024}, + {9980, 10028, 10031}, + {9994, 10035, 10041}, + {2702, 10048, 10051}, + {2621, 10059, 10059}, + {10054, 10065, 10065}, + {8612, 10073, 10074}, + {7033, 10078, 10078}, + {916, 10082, 10082}, + {10035, 10086, 10087}, + {8613, 10097, 10097}, + {9919, 10107, 10108}, + {6133, 10114, 10115}, + {10059, 10119, 10119}, + {10065, 10126, 10127}, + {7732, 10131, 10131}, + {7155, 10135, 10136}, + {6728, 10140, 10140}, + {6162, 10144, 10145}, + {4724, 10150, 10150}, + {1665, 10154, 10154}, + {10126, 10163, 10163}, + {9783, 10168, 10168}, + {1715, 10172, 10173}, + {7152, 10177, 10182}, + {8760, 10187, 10187}, + {7829, 10191, 10191}, + {9679, 10196, 10196}, + {9369, 10201, 10201}, + {2928, 10206, 10208}, + {6951, 10214, 10217}, + {5633, 10221, 10221}, + {7199, 10225, 10225}, + {10118, 10230, 10231}, + {9999, 10235, 10236}, + {10045, 10240, 10249}, + {5565, 10256, 10256}, + {9866, 10261, 10261}, + {10163, 10268, 10268}, + {9869, 10272, 10272}, + {9789, 10276, 10283}, + {10235, 10287, 10288}, + {10214, 10298, 10299}, + {6971, 10303, 10303}, + {3346, 10307, 10307}, + {10185, 10311, 10312}, + {9993, 10318, 10320}, + {2779, 10332, 10334}, + {1726, 10338, 10338}, + {741, 10354, 10360}, + {10230, 10372, 10373}, + {10260, 10384, 10385}, + {10131, 10389, 10398}, + {6946, 10406, 10409}, + {10158, 10413, 10420}, + {10123, 10424, 10424}, + {6157, 10428, 10429}, + {4518, 10434, 10434}, + {9893, 10438, 10438}, + {9865, 10442, 10446}, + {7558, 10454, 10454}, + {10434, 10460, 10460}, + {10064, 10466, 10468}, + {2703, 10472, 10474}, + {9751, 10478, 10479}, + {6714, 10485, 10485}, + {8020, 10490, 10490}, + {10303, 10494, 10494}, + {3521, 10499, 10500}, + {9281, 10513, 10515}, + {6028, 10519, 10523}, + {9387, 10527, 10527}, + {7614, 10531, 10531}, + {3611, 10536, 10536}, + {9162, 10540, 10540}, + {10081, 10546, 10547}, + {10034, 10560, 10562}, + {6726, 10567, 10571}, + {8237, 10575, 10575}, + {10438, 10579, 10583}, + {10140, 10587, 10587}, + {5784, 10592, 10592}, + {9819, 10597, 10600}, + {10567, 10604, 10608}, + {9335, 10613, 10613}, + {8300, 10617, 10617}, + {10575, 10621, 10621}, + {9678, 10625, 10626}, + {9962, 10632, 10633}, + {10535, 10637, 10638}, + {8199, 10642, 10642}, + {10372, 10647, 10648}, + {10637, 10656, 10657}, + {10579, 10667, 10668}, + {10465, 10677, 10680}, + {6702, 10684, 10685}, + {10073, 10691, 10692}, + {4505, 10696, 10697}, + {9042, 10701, 10701}, + {6460, 10705, 10706}, + {10010, 10714, 10716}, + {10656, 10720, 10722}, + {7282, 10727, 10729}, + {2327, 10733, 10733}, + {2491, 10740, 10741}, + {10704, 10748, 10750}, + {6465, 10754, 10754}, + {10647, 10758, 10759}, + {10424, 10763, 10763}, + {10748, 10776, 10776}, + {10546, 10780, 10781}, + {10758, 10785, 10786}, + {10287, 10790, 10797}, + {10785, 10801, 10807}, + {10240, 10811, 10826}, + {9509, 10830, 10830}, + {2579, 10836, 10838}, + {9801, 10843, 10845}, + {7555, 10849, 10850}, + {10776, 10860, 10865}, + {8023, 10869, 10869}, + {10046, 10876, 10884}, + {10253, 10888, 10892}, + {9941, 10897, 10897}, + {7898, 10901, 10905}, + {6725, 10909, 10913}, + {10757, 10921, 10923}, + {10160, 10931, 10931}, + {10916, 10935, 10942}, + {10261, 10946, 10946}, + {10318, 10952, 10954}, + {5911, 10959, 10961}, + {10801, 10965, 10966}, + {10946, 10970, 10977}, + {10592, 10982, 10984}, + {9913, 10988, 10990}, + {8510, 10994, 10996}, + {9419, 11000, 11001}, + {6765, 11006, 11007}, + {10725, 11011, 11011}, + {5537, 11017, 11019}, + {9208, 11024, 11025}, + {5850, 11030, 11030}, + {9610, 11034, 11036}, + {8846, 11041, 11047}, + {9697, 11051, 11051}, + {1622, 11055, 11058}, + {2370, 11062, 11062}, + {8393, 11067, 11067}, + {9756, 11071, 11071}, + {10172, 11076, 11076}, + {27, 11081, 11081}, + {7357, 11087, 11092}, + {8151, 11104, 11106}, + {6115, 11110, 11110}, + {10667, 11114, 11115}, + {11099, 11121, 11123}, + {10705, 11127, 11127}, + {8938, 11131, 11131}, + {11114, 11135, 11136}, + {1390, 11140, 11141}, + {10964, 11146, 11148}, + {11140, 11152, 11155}, + {9813, 11159, 11166}, + {624, 11171, 11172}, + {3118, 11177, 11179}, + {11029, 11184, 11186}, + {10186, 11190, 11190}, + {10306, 11196, 11196}, + {8665, 11201, 11201}, + {7382, 11205, 11205}, + {1100, 11210, 11210}, + {2337, 11216, 11217}, + {1609, 11221, 11223}, + {5763, 11228, 11229}, + {5220, 11233, 11233}, + {11061, 11241, 11241}, + {10617, 11246, 11246}, + {11190, 11250, 11251}, + {10144, 11255, 11256}, + {11232, 11260, 11260}, + {857, 11264, 11265}, + {10994, 11269, 11271}, + {3879, 11280, 11281}, + {11184, 11287, 11289}, + {9611, 11293, 11295}, + {11250, 11299, 11299}, + {4495, 11304, 11304}, + {7574, 11308, 11309}, + {9814, 11315, 11317}, + {1713, 11321, 11324}, + {1905, 11328, 11328}, + {8745, 11335, 11340}, + {8883, 11351, 11351}, + {8119, 11358, 11358}, + {1842, 11363, 11364}, + {11237, 11368, 11368}, + {8814, 11373, 11374}, + {5684, 11378, 11378}, + {11011, 11382, 11382}, + {6520, 11389, 11389}, + {11183, 11393, 11396}, + {1790, 11404, 11404}, + {9536, 11408, 11408}, + {11298, 11418, 11419}, + {3929, 11425, 11425}, + {5588, 11429, 11429}, + {8476, 11436, 11436}, + {4096, 11440, 11442}, + {11084, 11446, 11454}, + {10603, 11458, 11463}, + {7332, 11472, 11474}, + {7611, 11483, 11486}, + {4836, 11490, 11491}, + {10024, 11495, 11495}, + {4917, 11501, 11506}, + {6486, 11510, 11512}, + {11269, 11516, 11518}, + {3603, 11522, 11525}, + {11126, 11535, 11535}, + {11418, 11539, 11541}, + {11408, 11545, 11545}, + {9021, 11549, 11552}, + {6745, 11557, 11557}, + {5118, 11561, 11564}, + {7590, 11568, 11569}, + {4426, 11573, 11578}, + {9790, 11582, 11583}, + {6447, 11587, 11587}, + {10229, 11591, 11594}, + {10457, 11598, 11598}, + {10168, 11604, 11604}, + {10543, 11608, 11608}, + {7404, 11612, 11612}, + {11127, 11616, 11616}, + {3337, 11620, 11620}, + {11501, 11624, 11628}, + {4543, 11633, 11635}, + {8449, 11642, 11642}, + {4943, 11646, 11648}, + {10526, 11652, 11654}, + {11620, 11659, 11659}, + {8927, 11664, 11669}, + {532, 11673, 11673}, + {10513, 11677, 11679}, + {10428, 11683, 11683}, + {10999, 11689, 11690}, + {9469, 11695, 11695}, + {3606, 11699, 11699}, + {9560, 11708, 11709}, + {1564, 11714, 11714}, + {10527, 11718, 11718}, + {3071, 11723, 11726}, + {11590, 11731, 11732}, + {6605, 11737, 11737}, + {11624, 11741, 11745}, + {7822, 11749, 11752}, + {5269, 11757, 11758}, + {1339, 11767, 11767}, + {1363, 11771, 11773}, + {3704, 11777, 11777}, + {10952, 11781, 11783}, + {6764, 11793, 11795}, + {8675, 11800, 11800}, + {9963, 11804, 11804}, + {11573, 11808, 11809}, + {9548, 11813, 11813}, + {11591, 11817, 11818}, + {11446, 11822, 11822}, + {9224, 11828, 11828}, + {3158, 11836, 11836}, + {10830, 11840, 11840}, + {7234, 11846, 11846}, + {11299, 11850, 11850}, + {11544, 11854, 11855}, + {11498, 11859, 11859}, + {10993, 11865, 11868}, + {9720, 11872, 11878}, + {10489, 11882, 11890}, + {11712, 11898, 11904}, + {11516, 11908, 11910}, + {11568, 11914, 11915}, + {10177, 11919, 11924}, + {11363, 11928, 11929}, + {10494, 11933, 11933}, + {9870, 11937, 11938}, + {9427, 11942, 11942}, + {11481, 11949, 11949}, + {6030, 11955, 11957}, + {11718, 11961, 11961}, + {10531, 11965, 11983}, + {5126, 11987, 11987}, + {7515, 11991, 11991}, + {10646, 11996, 11997}, + {2947, 12001, 12001}, + {9582, 12009, 12010}, + {6202, 12017, 12018}, + {11714, 12022, 12022}, + {9235, 12033, 12037}, + {9721, 12041, 12044}, + {11932, 12051, 12052}, + {12040, 12056, 12056}, + {12051, 12060, 12060}, + {11601, 12066, 12066}, + {8426, 12070, 12070}, + {4053, 12077, 12077}, + {4262, 12081, 12081}, + {9761, 12086, 12088}, + {11582, 12092, 12093}, + {10965, 12097, 12098}, + {11803, 12103, 12104}, + {11933, 12108, 12109}, + {10688, 12117, 12117}, + {12107, 12125, 12126}, + {6774, 12130, 12132}, + {6286, 12137, 12137}, + {9543, 12141, 12141}, + {12097, 12145, 12146}, + {10790, 12150, 12150}, + {10125, 12154, 12156}, + {12125, 12164, 12164}, + {12064, 12168, 12172}, + {10811, 12178, 12188}, + {12092, 12192, 12193}, + {10058, 12197, 12198}, + {11611, 12211, 12212}, + {3459, 12216, 12216}, + {10291, 12225, 12228}, + {12191, 12232, 12234}, + {12145, 12238, 12238}, + {12001, 12242, 12250}, + {3840, 12255, 12255}, + {12216, 12259, 12259}, + {674, 12272, 12272}, + {12141, 12276, 12276}, + {10766, 12280, 12280}, + {11545, 12284, 12284}, + {6496, 12290, 12290}, + {11381, 12294, 12295}, + {603, 12302, 12303}, + {12276, 12308, 12308}, + {11850, 12313, 12314}, + {565, 12319, 12319}, + {9351, 12324, 12324}, + {11822, 12328, 12328}, + {2691, 12333, 12334}, + {11840, 12338, 12338}, + {11070, 12343, 12343}, + {9510, 12347, 12347}, + {11024, 12352, 12353}, + {7173, 12359, 12359}, + {517, 12363, 12363}, + {6311, 12367, 12368}, + {11367, 12372, 12373}, + {12008, 12377, 12377}, + {11372, 12382, 12384}, + {11358, 12391, 12392}, + {11382, 12396, 12396}, + {6882, 12400, 12401}, + {11246, 12405, 12405}, + {8359, 12409, 12412}, + {10154, 12418, 12418}, + {12016, 12425, 12426}, + {8972, 12434, 12435}, + {10478, 12439, 12440}, + {12395, 12449, 12449}, + {11612, 12454, 12454}, + {12347, 12458, 12458}, + {10700, 12466, 12467}, + {3637, 12471, 12476}, + {1042, 12480, 12481}, + {6747, 12488, 12488}, + {12396, 12492, 12493}, + {9420, 12497, 12497}, + {11285, 12501, 12510}, + {4470, 12515, 12515}, + {9374, 12519, 12519}, + {11293, 12528, 12528}, + {2058, 12534, 12535}, + {6521, 12539, 12539}, + {12492, 12543, 12543}, + {3043, 12547, 12547}, + {2982, 12551, 12553}, + {11030, 12557, 12563}, + {7636, 12568, 12568}, + {9639, 12572, 12572}, + {12543, 12576, 12576}, + {5989, 12580, 12583}, + {11051, 12587, 12587}, + {1061, 12592, 12594}, + {12313, 12599, 12601}, + {11846, 12605, 12605}, + {12576, 12609, 12609}, + {11040, 12618, 12625}, + {12479, 12629, 12629}, + {6903, 12633, 12633}, + {12322, 12639, 12639}, + {12253, 12643, 12645}, + {5594, 12651, 12651}, + {12522, 12655, 12655}, + {11703, 12659, 12659}, + {1377, 12665, 12665}, + {8022, 12669, 12669}, + {12280, 12674, 12674}, + {9023, 12680, 12681}, + {12328, 12685, 12685}, + {3085, 12689, 12693}, + {4700, 12698, 12698}, + {10224, 12702, 12702}, + {8781, 12706, 12706}, + {1651, 12710, 12710}, + {12458, 12714, 12714}, + {12005, 12718, 12721}, + {11908, 12725, 12726}, + {8202, 12733, 12733}, + {11708, 12739, 12740}, + {12599, 12744, 12745}, + {12284, 12749, 12749}, + {5285, 12756, 12756}, + {12055, 12775, 12777}, + {6919, 12782, 12782}, + {12242, 12786, 12786}, + {12009, 12790, 12790}, + {9628, 12794, 12796}, + {11354, 12801, 12802}, + {10225, 12806, 12807}, + {579, 12813, 12813}, + {8935, 12817, 12822}, + {8753, 12827, 12829}, + {11006, 12835, 12835}, + {858, 12841, 12845}, + {476, 12849, 12849}, + {7667, 12854, 12854}, + {12760, 12860, 12871}, + {11677, 12875, 12877}, + {12714, 12881, 12881}, + {12731, 12885, 12890}, + {7108, 12894, 12896}, + {1165, 12900, 12900}, + {4021, 12906, 12906}, + {10829, 12910, 12911}, + {12331, 12915, 12915}, + {8887, 12919, 12921}, + {11639, 12925, 12925}, + {7964, 12929, 12929}, + {12528, 12937, 12937}, + {8148, 12941, 12941}, + {12770, 12948, 12950}, + {12609, 12954, 12954}, + {12685, 12958, 12958}, + {2803, 12962, 12962}, + {9561, 12966, 12966}, + {6671, 12972, 12973}, + {12056, 12977, 12977}, + {6380, 12981, 12981}, + {12048, 12985, 12985}, + {11961, 12989, 12993}, + {3368, 12997, 12999}, + {6634, 13004, 13004}, + {6775, 13009, 13010}, + {12136, 13014, 13019}, + {10341, 13023, 13023}, + {13002, 13027, 13027}, + {10587, 13031, 13031}, + {10307, 13035, 13035}, + {12736, 13039, 13039}, + {12744, 13043, 13044}, + {6175, 13048, 13048}, + {9702, 13053, 13054}, + {662, 13059, 13061}, + {12718, 13065, 13068}, + {12893, 13072, 13075}, + {8299, 13086, 13091}, + {12604, 13095, 13096}, + {12848, 13100, 13101}, + {12749, 13105, 13105}, + {12526, 13109, 13114}, + {9173, 13122, 13122}, + {12769, 13128, 13128}, + {13038, 13132, 13132}, + {12725, 13136, 13137}, + {12639, 13146, 13146}, + {9711, 13150, 13151}, + {12137, 13155, 13155}, + {13039, 13159, 13159}, + {4681, 13163, 13164}, + {12954, 13168, 13168}, + {13158, 13175, 13176}, + {13105, 13180, 13180}, + {10754, 13184, 13184}, + {13167, 13188, 13188}, + {12658, 13192, 13192}, + {4294, 13199, 13200}, + {11682, 13204, 13205}, + {11695, 13209, 13209}, + {11076, 13214, 13214}, + {12232, 13218, 13218}, + {9399, 13223, 13224}, + {12880, 13228, 13229}, + {13048, 13234, 13234}, + {9701, 13238, 13239}, + {13209, 13243, 13243}, + {3658, 13248, 13248}, + {3698, 13252, 13254}, + {12237, 13260, 13260}, + {8872, 13266, 13266}, + {12957, 13272, 13273}, + {1393, 13281, 13281}, + {2013, 13285, 13288}, + {4244, 13296, 13299}, + {9428, 13303, 13303}, + {12702, 13307, 13307}, + {13078, 13311, 13311}, + {6071, 13315, 13315}, + {3061, 13319, 13319}, + {2051, 13324, 13324}, + {11560, 13328, 13331}, + {6584, 13336, 13336}, + {8482, 13340, 13340}, + {5331, 13344, 13344}, + {4171, 13348, 13348}, + {8501, 13352, 13352}, + {9219, 13356, 13356}, + {9473, 13360, 13363}, + {12881, 13367, 13367}, + {13065, 13371, 13375}, + {2979, 13379, 13384}, + {1518, 13388, 13388}, + {11177, 13392, 13392}, + {9457, 13398, 13398}, + {12293, 13407, 13410}, + {3697, 13414, 13417}, + {10338, 13425, 13425}, + {13367, 13429, 13429}, + {11074, 13433, 13437}, + {4201, 13441, 13443}, + {1812, 13447, 13448}, + {13360, 13452, 13456}, + {13188, 13463, 13463}, + {9732, 13470, 13470}, + {11332, 13477, 13477}, + {9918, 13487, 13487}, + {6337, 13497, 13497}, + {13429, 13501, 13501}, + {11413, 13505, 13505}, + {4685, 13512, 13513}, + {13136, 13517, 13519}, + {7416, 13528, 13530}, + {12929, 13534, 13534}, + {11110, 13539, 13539}, + {11521, 13543, 13543}, + {12825, 13553, 13553}, + {13447, 13557, 13558}, + {12299, 13562, 13563}, + {9003, 13570, 13570}, + {12500, 13577, 13577}, + {13501, 13581, 13581}, + {9392, 13586, 13586}, + {12454, 13590, 13590}, + {6189, 13595, 13595}, + {13053, 13599, 13599}, + {11881, 13604, 13604}, + {13159, 13608, 13608}, + {4894, 13612, 13612}, + {13221, 13621, 13621}, + {8950, 13625, 13625}, + {13533, 13629, 13629}, + {9633, 13633, 13633}, + {7892, 13637, 13639}, + {13581, 13643, 13643}, + {13616, 13647, 13649}, + {12794, 13653, 13654}, + {8919, 13659, 13659}, + {9674, 13663, 13663}, + {13577, 13668, 13668}, + {12966, 13672, 13672}, + {12659, 13676, 13683}, + {6124, 13688, 13688}, + {9225, 13693, 13695}, + {11833, 13702, 13702}, + {12904, 13709, 13717}, + {13647, 13721, 13722}, + {11687, 13726, 13727}, + {12434, 13731, 13732}, + {12689, 13736, 13742}, + {13168, 13746, 13746}, + {6151, 13751, 13752}, + {11821, 13756, 13757}, + {6467, 13764, 13764}, + {5730, 13769, 13769}, + {5136, 13780, 13780}, + {724, 13784, 13785}, + {13517, 13789, 13791}, + {640, 13795, 13796}, + {7721, 13800, 13802}, + {11121, 13806, 13807}, + {5791, 13811, 13815}, + {12894, 13819, 13819}, + {11100, 13824, 13824}, + {7011, 13830, 13830}, + {7129, 13834, 13837}, + {13833, 13841, 13841}, + {11276, 13847, 13847}, + {13621, 13853, 13853}, + {13589, 13862, 13863}, + {12989, 13867, 13867}, + {12789, 13871, 13871}, + {1239, 13875, 13875}, + {4675, 13879, 13881}, + {4686, 13885, 13885}, + {707, 13889, 13889}, + {5449, 13897, 13898}, + {13867, 13902, 13903}, + {10613, 13908, 13908}, + {13789, 13912, 13914}, + {4451, 13918, 13919}, + {9200, 13924, 13924}, + {2011, 13930, 13930}, + {11433, 13934, 13936}, + {4695, 13942, 13943}, + {9435, 13948, 13951}, + {13688, 13955, 13957}, + {11694, 13961, 13962}, + {5712, 13966, 13966}, + {5991, 13970, 13972}, + {13477, 13976, 13976}, + {10213, 13987, 13987}, + {11839, 13991, 13993}, + {12272, 13997, 13997}, + {6206, 14001, 14001}, + {13179, 14006, 14007}, + {2939, 14011, 14011}, + {12972, 14016, 14017}, + {13918, 14021, 14022}, + {7436, 14026, 14027}, + {7678, 14032, 14034}, + {13586, 14040, 14040}, + {13347, 14044, 14044}, + {13109, 14048, 14051}, + {9244, 14055, 14057}, + {13315, 14061, 14061}, + {13276, 14067, 14067}, + {11435, 14073, 14074}, + {13853, 14078, 14078}, + {13452, 14082, 14082}, + {14044, 14087, 14087}, + {4440, 14091, 14095}, + {4479, 14100, 14103}, + {9395, 14107, 14109}, + {6834, 14119, 14119}, + {10458, 14123, 14124}, + {1429, 14129, 14129}, + {8443, 14135, 14135}, + {10365, 14140, 14140}, + {5267, 14145, 14145}, + {11834, 14151, 14153}, +} diff --git a/vendor/github.com/golang/snappy/misc/main.cpp b/vendor/github.com/golang/snappy/misc/main.cpp new file mode 100644 index 00000000..24a3d9a9 --- /dev/null +++ b/vendor/github.com/golang/snappy/misc/main.cpp @@ -0,0 +1,79 @@ +/* +This is a C version of the cmd/snappytool Go program. + +To build the snappytool binary: +g++ main.cpp /usr/lib/libsnappy.a -o snappytool +or, if you have built the C++ snappy library from source: +g++ main.cpp /path/to/your/snappy/.libs/libsnappy.a -o snappytool +after running "make" from your snappy checkout directory. +*/ + +#include +#include +#include +#include + +#include "snappy.h" + +#define N 1000000 + +char dst[N]; +char src[N]; + +int main(int argc, char** argv) { + // Parse args. + if (argc != 2) { + fprintf(stderr, "exactly one of -d or -e must be given\n"); + return 1; + } + bool decode = strcmp(argv[1], "-d") == 0; + bool encode = strcmp(argv[1], "-e") == 0; + if (decode == encode) { + fprintf(stderr, "exactly one of -d or -e must be given\n"); + return 1; + } + + // Read all of stdin into src[:s]. + size_t s = 0; + while (1) { + if (s == N) { + fprintf(stderr, "input too large\n"); + return 1; + } + ssize_t n = read(0, src+s, N-s); + if (n == 0) { + break; + } + if (n < 0) { + fprintf(stderr, "read error: %s\n", strerror(errno)); + // TODO: handle EAGAIN, EINTR? + return 1; + } + s += n; + } + + // Encode or decode src[:s] to dst[:d], and write to stdout. + size_t d = 0; + if (encode) { + if (N < snappy::MaxCompressedLength(s)) { + fprintf(stderr, "input too large after encoding\n"); + return 1; + } + snappy::RawCompress(src, s, dst, &d); + } else { + if (!snappy::GetUncompressedLength(src, s, &d)) { + fprintf(stderr, "could not get uncompressed length\n"); + return 1; + } + if (N < d) { + fprintf(stderr, "input too large after decoding\n"); + return 1; + } + if (!snappy::RawUncompress(src, s, dst)) { + fprintf(stderr, "input was not valid Snappy-compressed data\n"); + return 1; + } + } + write(1, dst, d); + return 0; +} diff --git a/vendor/github.com/golang/snappy/snappy.go b/vendor/github.com/golang/snappy/snappy.go new file mode 100644 index 00000000..ece692ea --- /dev/null +++ b/vendor/github.com/golang/snappy/snappy.go @@ -0,0 +1,98 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package snappy implements the Snappy compression format. It aims for very +// high speeds and reasonable compression. +// +// There are actually two Snappy formats: block and stream. They are related, +// but different: trying to decompress block-compressed data as a Snappy stream +// will fail, and vice versa. The block format is the Decode and Encode +// functions and the stream format is the Reader and Writer types. +// +// The block format, the more common case, is used when the complete size (the +// number of bytes) of the original data is known upfront, at the time +// compression starts. The stream format, also known as the framing format, is +// for when that isn't always true. +// +// The canonical, C++ implementation is at https://github.com/google/snappy and +// it only implements the block format. +package snappy // import "github.com/golang/snappy" + +import ( + "hash/crc32" +) + +/* +Each encoded block begins with the varint-encoded length of the decoded data, +followed by a sequence of chunks. Chunks begin and end on byte boundaries. The +first byte of each chunk is broken into its 2 least and 6 most significant bits +called l and m: l ranges in [0, 4) and m ranges in [0, 64). l is the chunk tag. +Zero means a literal tag. All other values mean a copy tag. + +For literal tags: + - If m < 60, the next 1 + m bytes are literal bytes. + - Otherwise, let n be the little-endian unsigned integer denoted by the next + m - 59 bytes. The next 1 + n bytes after that are literal bytes. + +For copy tags, length bytes are copied from offset bytes ago, in the style of +Lempel-Ziv compression algorithms. In particular: + - For l == 1, the offset ranges in [0, 1<<11) and the length in [4, 12). + The length is 4 + the low 3 bits of m. The high 3 bits of m form bits 8-10 + of the offset. The next byte is bits 0-7 of the offset. + - For l == 2, the offset ranges in [0, 1<<16) and the length in [1, 65). + The length is 1 + m. The offset is the little-endian unsigned integer + denoted by the next 2 bytes. + - For l == 3, this tag is a legacy format that is no longer issued by most + encoders. Nonetheless, the offset ranges in [0, 1<<32) and the length in + [1, 65). The length is 1 + m. The offset is the little-endian unsigned + integer denoted by the next 4 bytes. +*/ +const ( + tagLiteral = 0x00 + tagCopy1 = 0x01 + tagCopy2 = 0x02 + tagCopy4 = 0x03 +) + +const ( + checksumSize = 4 + chunkHeaderSize = 4 + magicChunk = "\xff\x06\x00\x00" + magicBody + magicBody = "sNaPpY" + + // maxBlockSize is the maximum size of the input to encodeBlock. It is not + // part of the wire format per se, but some parts of the encoder assume + // that an offset fits into a uint16. + // + // Also, for the framing format (Writer type instead of Encode function), + // https://github.com/google/snappy/blob/master/framing_format.txt says + // that "the uncompressed data in a chunk must be no longer than 65536 + // bytes". + maxBlockSize = 65536 + + // maxEncodedLenOfMaxBlockSize equals MaxEncodedLen(maxBlockSize), but is + // hard coded to be a const instead of a variable, so that obufLen can also + // be a const. Their equivalence is confirmed by + // TestMaxEncodedLenOfMaxBlockSize. + maxEncodedLenOfMaxBlockSize = 76490 + + obufHeaderLen = len(magicChunk) + checksumSize + chunkHeaderSize + obufLen = obufHeaderLen + maxEncodedLenOfMaxBlockSize +) + +const ( + chunkTypeCompressedData = 0x00 + chunkTypeUncompressedData = 0x01 + chunkTypePadding = 0xfe + chunkTypeStreamIdentifier = 0xff +) + +var crcTable = crc32.MakeTable(crc32.Castagnoli) + +// crc implements the checksum specified in section 3 of +// https://github.com/google/snappy/blob/master/framing_format.txt +func crc(b []byte) uint32 { + c := crc32.Update(0, crcTable, b) + return uint32(c>>15|c<<17) + 0xa282ead8 +} diff --git a/vendor/github.com/golang/snappy/snappy_test.go b/vendor/github.com/golang/snappy/snappy_test.go new file mode 100644 index 00000000..2712710d --- /dev/null +++ b/vendor/github.com/golang/snappy/snappy_test.go @@ -0,0 +1,1353 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package snappy + +import ( + "bytes" + "encoding/binary" + "flag" + "fmt" + "io" + "io/ioutil" + "math/rand" + "net/http" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" + "testing" +) + +var ( + download = flag.Bool("download", false, "If true, download any missing files before running benchmarks") + testdataDir = flag.String("testdataDir", "testdata", "Directory containing the test data") + benchdataDir = flag.String("benchdataDir", "testdata/bench", "Directory containing the benchmark data") +) + +// goEncoderShouldMatchCppEncoder is whether to test that the algorithm used by +// Go's encoder matches byte-for-byte what the C++ snappy encoder produces, on +// this GOARCH. There is more than one valid encoding of any given input, and +// there is more than one good algorithm along the frontier of trading off +// throughput for output size. Nonetheless, we presume that the C++ encoder's +// algorithm is a good one and has been tested on a wide range of inputs, so +// matching that exactly should mean that the Go encoder's algorithm is also +// good, without needing to gather our own corpus of test data. +// +// The exact algorithm used by the C++ code is potentially endian dependent, as +// it puns a byte pointer to a uint32 pointer to load, hash and compare 4 bytes +// at a time. The Go implementation is endian agnostic, in that its output is +// the same (as little-endian C++ code), regardless of the CPU's endianness. +// +// Thus, when comparing Go's output to C++ output generated beforehand, such as +// the "testdata/pi.txt.rawsnappy" file generated by C++ code on a little- +// endian system, we can run that test regardless of the runtime.GOARCH value. +// +// When comparing Go's output to dynamically generated C++ output, i.e. the +// result of fork/exec'ing a C++ program, we can run that test only on +// little-endian systems, because the C++ output might be different on +// big-endian systems. The runtime package doesn't export endianness per se, +// but we can restrict this match-C++ test to common little-endian systems. +const goEncoderShouldMatchCppEncoder = runtime.GOARCH == "386" || runtime.GOARCH == "amd64" || runtime.GOARCH == "arm" + +func TestMaxEncodedLenOfMaxBlockSize(t *testing.T) { + got := maxEncodedLenOfMaxBlockSize + want := MaxEncodedLen(maxBlockSize) + if got != want { + t.Fatalf("got %d, want %d", got, want) + } +} + +func cmp(a, b []byte) error { + if bytes.Equal(a, b) { + return nil + } + if len(a) != len(b) { + return fmt.Errorf("got %d bytes, want %d", len(a), len(b)) + } + for i := range a { + if a[i] != b[i] { + return fmt.Errorf("byte #%d: got 0x%02x, want 0x%02x", i, a[i], b[i]) + } + } + return nil +} + +func roundtrip(b, ebuf, dbuf []byte) error { + d, err := Decode(dbuf, Encode(ebuf, b)) + if err != nil { + return fmt.Errorf("decoding error: %v", err) + } + if err := cmp(d, b); err != nil { + return fmt.Errorf("roundtrip mismatch: %v", err) + } + return nil +} + +func TestEmpty(t *testing.T) { + if err := roundtrip(nil, nil, nil); err != nil { + t.Fatal(err) + } +} + +func TestSmallCopy(t *testing.T) { + for _, ebuf := range [][]byte{nil, make([]byte, 20), make([]byte, 64)} { + for _, dbuf := range [][]byte{nil, make([]byte, 20), make([]byte, 64)} { + for i := 0; i < 32; i++ { + s := "aaaa" + strings.Repeat("b", i) + "aaaabbbb" + if err := roundtrip([]byte(s), ebuf, dbuf); err != nil { + t.Errorf("len(ebuf)=%d, len(dbuf)=%d, i=%d: %v", len(ebuf), len(dbuf), i, err) + } + } + } + } +} + +func TestSmallRand(t *testing.T) { + rng := rand.New(rand.NewSource(1)) + for n := 1; n < 20000; n += 23 { + b := make([]byte, n) + for i := range b { + b[i] = uint8(rng.Intn(256)) + } + if err := roundtrip(b, nil, nil); err != nil { + t.Fatal(err) + } + } +} + +func TestSmallRegular(t *testing.T) { + for n := 1; n < 20000; n += 23 { + b := make([]byte, n) + for i := range b { + b[i] = uint8(i%10 + 'a') + } + if err := roundtrip(b, nil, nil); err != nil { + t.Fatal(err) + } + } +} + +func TestInvalidVarint(t *testing.T) { + testCases := []struct { + desc string + input string + }{{ + "invalid varint, final byte has continuation bit set", + "\xff", + }, { + "invalid varint, value overflows uint64", + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", + }, { + // https://github.com/google/snappy/blob/master/format_description.txt + // says that "the stream starts with the uncompressed length [as a + // varint] (up to a maximum of 2^32 - 1)". + "valid varint (as uint64), but value overflows uint32", + "\x80\x80\x80\x80\x10", + }} + + for _, tc := range testCases { + input := []byte(tc.input) + if _, err := DecodedLen(input); err != ErrCorrupt { + t.Errorf("%s: DecodedLen: got %v, want ErrCorrupt", tc.desc, err) + } + if _, err := Decode(nil, input); err != ErrCorrupt { + t.Errorf("%s: Decode: got %v, want ErrCorrupt", tc.desc, err) + } + } +} + +func TestDecode(t *testing.T) { + lit40Bytes := make([]byte, 40) + for i := range lit40Bytes { + lit40Bytes[i] = byte(i) + } + lit40 := string(lit40Bytes) + + testCases := []struct { + desc string + input string + want string + wantErr error + }{{ + `decodedLen=0; valid input`, + "\x00", + "", + nil, + }, { + `decodedLen=3; tagLiteral, 0-byte length; length=3; valid input`, + "\x03" + "\x08\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=2; tagLiteral, 0-byte length; length=3; not enough dst bytes`, + "\x02" + "\x08\xff\xff\xff", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 0-byte length; length=3; not enough src bytes`, + "\x03" + "\x08\xff\xff", + "", + ErrCorrupt, + }, { + `decodedLen=40; tagLiteral, 0-byte length; length=40; valid input`, + "\x28" + "\x9c" + lit40, + lit40, + nil, + }, { + `decodedLen=1; tagLiteral, 1-byte length; not enough length bytes`, + "\x01" + "\xf0", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 1-byte length; length=3; valid input`, + "\x03" + "\xf0\x02\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=1; tagLiteral, 2-byte length; not enough length bytes`, + "\x01" + "\xf4\x00", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 2-byte length; length=3; valid input`, + "\x03" + "\xf4\x02\x00\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=1; tagLiteral, 3-byte length; not enough length bytes`, + "\x01" + "\xf8\x00\x00", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 3-byte length; length=3; valid input`, + "\x03" + "\xf8\x02\x00\x00\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=1; tagLiteral, 4-byte length; not enough length bytes`, + "\x01" + "\xfc\x00\x00\x00", + "", + ErrCorrupt, + }, { + `decodedLen=1; tagLiteral, 4-byte length; length=3; not enough dst bytes`, + "\x01" + "\xfc\x02\x00\x00\x00\xff\xff\xff", + "", + ErrCorrupt, + }, { + `decodedLen=4; tagLiteral, 4-byte length; length=3; not enough src bytes`, + "\x04" + "\xfc\x02\x00\x00\x00\xff", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 4-byte length; length=3; valid input`, + "\x03" + "\xfc\x02\x00\x00\x00\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=4; tagCopy1, 1 extra length|offset byte; not enough extra bytes`, + "\x04" + "\x01", + "", + ErrCorrupt, + }, { + `decodedLen=4; tagCopy2, 2 extra length|offset bytes; not enough extra bytes`, + "\x04" + "\x02\x00", + "", + ErrCorrupt, + }, { + `decodedLen=4; tagCopy4, 4 extra length|offset bytes; not enough extra bytes`, + "\x04" + "\x03\x00\x00\x00", + "", + ErrCorrupt, + }, { + `decodedLen=4; tagLiteral (4 bytes "abcd"); valid input`, + "\x04" + "\x0cabcd", + "abcd", + nil, + }, { + `decodedLen=13; tagLiteral (4 bytes "abcd"); tagCopy1; length=9 offset=4; valid input`, + "\x0d" + "\x0cabcd" + "\x15\x04", + "abcdabcdabcda", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=4; valid input`, + "\x08" + "\x0cabcd" + "\x01\x04", + "abcdabcd", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=2; valid input`, + "\x08" + "\x0cabcd" + "\x01\x02", + "abcdcdcd", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=1; valid input`, + "\x08" + "\x0cabcd" + "\x01\x01", + "abcddddd", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=0; zero offset`, + "\x08" + "\x0cabcd" + "\x01\x00", + "", + ErrCorrupt, + }, { + `decodedLen=9; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=4; inconsistent dLen`, + "\x09" + "\x0cabcd" + "\x01\x04", + "", + ErrCorrupt, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=5; offset too large`, + "\x08" + "\x0cabcd" + "\x01\x05", + "", + ErrCorrupt, + }, { + `decodedLen=7; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=4; length too large`, + "\x07" + "\x0cabcd" + "\x01\x04", + "", + ErrCorrupt, + }, { + `decodedLen=6; tagLiteral (4 bytes "abcd"); tagCopy2; length=2 offset=3; valid input`, + "\x06" + "\x0cabcd" + "\x06\x03\x00", + "abcdbc", + nil, + }, { + `decodedLen=6; tagLiteral (4 bytes "abcd"); tagCopy4; length=2 offset=3; valid input`, + "\x06" + "\x0cabcd" + "\x07\x03\x00\x00\x00", + "abcdbc", + nil, + }} + + const ( + // notPresentXxx defines a range of byte values [0xa0, 0xc5) that are + // not present in either the input or the output. It is written to dBuf + // to check that Decode does not write bytes past the end of + // dBuf[:dLen]. + // + // The magic number 37 was chosen because it is prime. A more 'natural' + // number like 32 might lead to a false negative if, for example, a + // byte was incorrectly copied 4*8 bytes later. + notPresentBase = 0xa0 + notPresentLen = 37 + ) + + var dBuf [100]byte +loop: + for i, tc := range testCases { + input := []byte(tc.input) + for _, x := range input { + if notPresentBase <= x && x < notPresentBase+notPresentLen { + t.Errorf("#%d (%s): input shouldn't contain %#02x\ninput: % x", i, tc.desc, x, input) + continue loop + } + } + + dLen, n := binary.Uvarint(input) + if n <= 0 { + t.Errorf("#%d (%s): invalid varint-encoded dLen", i, tc.desc) + continue + } + if dLen > uint64(len(dBuf)) { + t.Errorf("#%d (%s): dLen %d is too large", i, tc.desc, dLen) + continue + } + + for j := range dBuf { + dBuf[j] = byte(notPresentBase + j%notPresentLen) + } + g, gotErr := Decode(dBuf[:], input) + if got := string(g); got != tc.want || gotErr != tc.wantErr { + t.Errorf("#%d (%s):\ngot %q, %v\nwant %q, %v", + i, tc.desc, got, gotErr, tc.want, tc.wantErr) + continue + } + for j, x := range dBuf { + if uint64(j) < dLen { + continue + } + if w := byte(notPresentBase + j%notPresentLen); x != w { + t.Errorf("#%d (%s): Decode overrun: dBuf[%d] was modified: got %#02x, want %#02x\ndBuf: % x", + i, tc.desc, j, x, w, dBuf) + continue loop + } + } + } +} + +func TestDecodeCopy4(t *testing.T) { + dots := strings.Repeat(".", 65536) + + input := strings.Join([]string{ + "\x89\x80\x04", // decodedLen = 65545. + "\x0cpqrs", // 4-byte literal "pqrs". + "\xf4\xff\xff" + dots, // 65536-byte literal dots. + "\x13\x04\x00\x01\x00", // tagCopy4; length=5 offset=65540. + }, "") + + gotBytes, err := Decode(nil, []byte(input)) + if err != nil { + t.Fatal(err) + } + got := string(gotBytes) + want := "pqrs" + dots + "pqrs." + if len(got) != len(want) { + t.Fatalf("got %d bytes, want %d", len(got), len(want)) + } + if got != want { + for i := 0; i < len(got); i++ { + if g, w := got[i], want[i]; g != w { + t.Fatalf("byte #%d: got %#02x, want %#02x", i, g, w) + } + } + } +} + +// TestDecodeLengthOffset tests decoding an encoding of the form literal + +// copy-length-offset + literal. For example: "abcdefghijkl" + "efghij" + "AB". +func TestDecodeLengthOffset(t *testing.T) { + const ( + prefix = "abcdefghijklmnopqr" + suffix = "ABCDEFGHIJKLMNOPQR" + + // notPresentXxx defines a range of byte values [0xa0, 0xc5) that are + // not present in either the input or the output. It is written to + // gotBuf to check that Decode does not write bytes past the end of + // gotBuf[:totalLen]. + // + // The magic number 37 was chosen because it is prime. A more 'natural' + // number like 32 might lead to a false negative if, for example, a + // byte was incorrectly copied 4*8 bytes later. + notPresentBase = 0xa0 + notPresentLen = 37 + ) + var gotBuf, wantBuf, inputBuf [128]byte + for length := 1; length <= 18; length++ { + for offset := 1; offset <= 18; offset++ { + loop: + for suffixLen := 0; suffixLen <= 18; suffixLen++ { + totalLen := len(prefix) + length + suffixLen + + inputLen := binary.PutUvarint(inputBuf[:], uint64(totalLen)) + inputBuf[inputLen] = tagLiteral + 4*byte(len(prefix)-1) + inputLen++ + inputLen += copy(inputBuf[inputLen:], prefix) + inputBuf[inputLen+0] = tagCopy2 + 4*byte(length-1) + inputBuf[inputLen+1] = byte(offset) + inputBuf[inputLen+2] = 0x00 + inputLen += 3 + if suffixLen > 0 { + inputBuf[inputLen] = tagLiteral + 4*byte(suffixLen-1) + inputLen++ + inputLen += copy(inputBuf[inputLen:], suffix[:suffixLen]) + } + input := inputBuf[:inputLen] + + for i := range gotBuf { + gotBuf[i] = byte(notPresentBase + i%notPresentLen) + } + got, err := Decode(gotBuf[:], input) + if err != nil { + t.Errorf("length=%d, offset=%d; suffixLen=%d: %v", length, offset, suffixLen, err) + continue + } + + wantLen := 0 + wantLen += copy(wantBuf[wantLen:], prefix) + for i := 0; i < length; i++ { + wantBuf[wantLen] = wantBuf[wantLen-offset] + wantLen++ + } + wantLen += copy(wantBuf[wantLen:], suffix[:suffixLen]) + want := wantBuf[:wantLen] + + for _, x := range input { + if notPresentBase <= x && x < notPresentBase+notPresentLen { + t.Errorf("length=%d, offset=%d; suffixLen=%d: input shouldn't contain %#02x\ninput: % x", + length, offset, suffixLen, x, input) + continue loop + } + } + for i, x := range gotBuf { + if i < totalLen { + continue + } + if w := byte(notPresentBase + i%notPresentLen); x != w { + t.Errorf("length=%d, offset=%d; suffixLen=%d; totalLen=%d: "+ + "Decode overrun: gotBuf[%d] was modified: got %#02x, want %#02x\ngotBuf: % x", + length, offset, suffixLen, totalLen, i, x, w, gotBuf) + continue loop + } + } + for _, x := range want { + if notPresentBase <= x && x < notPresentBase+notPresentLen { + t.Errorf("length=%d, offset=%d; suffixLen=%d: want shouldn't contain %#02x\nwant: % x", + length, offset, suffixLen, x, want) + continue loop + } + } + + if !bytes.Equal(got, want) { + t.Errorf("length=%d, offset=%d; suffixLen=%d:\ninput % x\ngot % x\nwant % x", + length, offset, suffixLen, input, got, want) + continue + } + } + } + } +} + +const ( + goldenText = "Mark.Twain-Tom.Sawyer.txt" + goldenCompressed = goldenText + ".rawsnappy" +) + +func TestDecodeGoldenInput(t *testing.T) { + tDir := filepath.FromSlash(*testdataDir) + src, err := ioutil.ReadFile(filepath.Join(tDir, goldenCompressed)) + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + got, err := Decode(nil, src) + if err != nil { + t.Fatalf("Decode: %v", err) + } + want, err := ioutil.ReadFile(filepath.Join(tDir, goldenText)) + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + if err := cmp(got, want); err != nil { + t.Fatal(err) + } +} + +func TestEncodeGoldenInput(t *testing.T) { + tDir := filepath.FromSlash(*testdataDir) + src, err := ioutil.ReadFile(filepath.Join(tDir, goldenText)) + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + got := Encode(nil, src) + want, err := ioutil.ReadFile(filepath.Join(tDir, goldenCompressed)) + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + if err := cmp(got, want); err != nil { + t.Fatal(err) + } +} + +func TestExtendMatchGoldenInput(t *testing.T) { + tDir := filepath.FromSlash(*testdataDir) + src, err := ioutil.ReadFile(filepath.Join(tDir, goldenText)) + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + for i, tc := range extendMatchGoldenTestCases { + got := extendMatch(src, tc.i, tc.j) + if got != tc.want { + t.Errorf("test #%d: i, j = %5d, %5d: got %5d (= j + %6d), want %5d (= j + %6d)", + i, tc.i, tc.j, got, got-tc.j, tc.want, tc.want-tc.j) + } + } +} + +func TestExtendMatch(t *testing.T) { + // ref is a simple, reference implementation of extendMatch. + ref := func(src []byte, i, j int) int { + for ; j < len(src) && src[i] == src[j]; i, j = i+1, j+1 { + } + return j + } + + nums := []int{0, 1, 2, 7, 8, 9, 29, 30, 31, 32, 33, 34, 38, 39, 40} + for yIndex := 40; yIndex > 30; yIndex-- { + xxx := bytes.Repeat([]byte("x"), 40) + if yIndex < len(xxx) { + xxx[yIndex] = 'y' + } + for _, i := range nums { + for _, j := range nums { + if i >= j { + continue + } + got := extendMatch(xxx, i, j) + want := ref(xxx, i, j) + if got != want { + t.Errorf("yIndex=%d, i=%d, j=%d: got %d, want %d", yIndex, i, j, got, want) + } + } + } + } +} + +const snappytoolCmdName = "cmd/snappytool/snappytool" + +func skipTestSameEncodingAsCpp() (msg string) { + if !goEncoderShouldMatchCppEncoder { + return fmt.Sprintf("skipping testing that the encoding is byte-for-byte identical to C++: GOARCH=%s", runtime.GOARCH) + } + if _, err := os.Stat(snappytoolCmdName); err != nil { + return fmt.Sprintf("could not find snappytool: %v", err) + } + return "" +} + +func runTestSameEncodingAsCpp(src []byte) error { + got := Encode(nil, src) + + cmd := exec.Command(snappytoolCmdName, "-e") + cmd.Stdin = bytes.NewReader(src) + want, err := cmd.Output() + if err != nil { + return fmt.Errorf("could not run snappytool: %v", err) + } + return cmp(got, want) +} + +func TestSameEncodingAsCppShortCopies(t *testing.T) { + if msg := skipTestSameEncodingAsCpp(); msg != "" { + t.Skip(msg) + } + src := bytes.Repeat([]byte{'a'}, 20) + for i := 0; i <= len(src); i++ { + if err := runTestSameEncodingAsCpp(src[:i]); err != nil { + t.Errorf("i=%d: %v", i, err) + } + } +} + +func TestSameEncodingAsCppLongFiles(t *testing.T) { + if msg := skipTestSameEncodingAsCpp(); msg != "" { + t.Skip(msg) + } + bDir := filepath.FromSlash(*benchdataDir) + failed := false + for i, tf := range testFiles { + if err := downloadBenchmarkFiles(t, tf.filename); err != nil { + t.Fatalf("failed to download testdata: %s", err) + } + data := readFile(t, filepath.Join(bDir, tf.filename)) + if n := tf.sizeLimit; 0 < n && n < len(data) { + data = data[:n] + } + if err := runTestSameEncodingAsCpp(data); err != nil { + t.Errorf("i=%d: %v", i, err) + failed = true + } + } + if failed { + t.Errorf("was the snappytool program built against the C++ snappy library version " + + "d53de187 or later, commited on 2016-04-05? See " + + "https://github.com/google/snappy/commit/d53de18799418e113e44444252a39b12a0e4e0cc") + } +} + +// TestSlowForwardCopyOverrun tests the "expand the pattern" algorithm +// described in decode_amd64.s and its claim of a 10 byte overrun worst case. +func TestSlowForwardCopyOverrun(t *testing.T) { + const base = 100 + + for length := 1; length < 18; length++ { + for offset := 1; offset < 18; offset++ { + highWaterMark := base + d := base + l := length + o := offset + + // makeOffsetAtLeast8 + for o < 8 { + if end := d + 8; highWaterMark < end { + highWaterMark = end + } + l -= o + d += o + o += o + } + + // fixUpSlowForwardCopy + a := d + d += l + + // finishSlowForwardCopy + for l > 0 { + if end := a + 8; highWaterMark < end { + highWaterMark = end + } + a += 8 + l -= 8 + } + + dWant := base + length + overrun := highWaterMark - dWant + if d != dWant || overrun < 0 || 10 < overrun { + t.Errorf("length=%d, offset=%d: d and overrun: got (%d, %d), want (%d, something in [0, 10])", + length, offset, d, overrun, dWant) + } + } + } +} + +// TestEncodeNoiseThenRepeats encodes input for which the first half is very +// incompressible and the second half is very compressible. The encoded form's +// length should be closer to 50% of the original length than 100%. +func TestEncodeNoiseThenRepeats(t *testing.T) { + for _, origLen := range []int{256 * 1024, 2048 * 1024} { + src := make([]byte, origLen) + rng := rand.New(rand.NewSource(1)) + firstHalf, secondHalf := src[:origLen/2], src[origLen/2:] + for i := range firstHalf { + firstHalf[i] = uint8(rng.Intn(256)) + } + for i := range secondHalf { + secondHalf[i] = uint8(i >> 8) + } + dst := Encode(nil, src) + if got, want := len(dst), origLen*3/4; got >= want { + t.Errorf("origLen=%d: got %d encoded bytes, want less than %d", origLen, got, want) + } + } +} + +func TestFramingFormat(t *testing.T) { + // src is comprised of alternating 1e5-sized sequences of random + // (incompressible) bytes and repeated (compressible) bytes. 1e5 was chosen + // because it is larger than maxBlockSize (64k). + src := make([]byte, 1e6) + rng := rand.New(rand.NewSource(1)) + for i := 0; i < 10; i++ { + if i%2 == 0 { + for j := 0; j < 1e5; j++ { + src[1e5*i+j] = uint8(rng.Intn(256)) + } + } else { + for j := 0; j < 1e5; j++ { + src[1e5*i+j] = uint8(i) + } + } + } + + buf := new(bytes.Buffer) + if _, err := NewWriter(buf).Write(src); err != nil { + t.Fatalf("Write: encoding: %v", err) + } + dst, err := ioutil.ReadAll(NewReader(buf)) + if err != nil { + t.Fatalf("ReadAll: decoding: %v", err) + } + if err := cmp(dst, src); err != nil { + t.Fatal(err) + } +} + +func TestWriterGoldenOutput(t *testing.T) { + buf := new(bytes.Buffer) + w := NewBufferedWriter(buf) + defer w.Close() + w.Write([]byte("abcd")) // Not compressible. + w.Flush() + w.Write(bytes.Repeat([]byte{'A'}, 150)) // Compressible. + w.Flush() + // The next chunk is also compressible, but a naive, greedy encoding of the + // overall length 67 copy as a length 64 copy (the longest expressible as a + // tagCopy1 or tagCopy2) plus a length 3 remainder would be two 3-byte + // tagCopy2 tags (6 bytes), since the minimum length for a tagCopy1 is 4 + // bytes. Instead, we could do it shorter, in 5 bytes: a 3-byte tagCopy2 + // (of length 60) and a 2-byte tagCopy1 (of length 7). + w.Write(bytes.Repeat([]byte{'B'}, 68)) + w.Write([]byte("efC")) // Not compressible. + w.Write(bytes.Repeat([]byte{'C'}, 20)) // Compressible. + w.Write(bytes.Repeat([]byte{'B'}, 20)) // Compressible. + w.Write([]byte("g")) // Not compressible. + w.Flush() + + got := buf.String() + want := strings.Join([]string{ + magicChunk, + "\x01\x08\x00\x00", // Uncompressed chunk, 8 bytes long (including 4 byte checksum). + "\x68\x10\xe6\xb6", // Checksum. + "\x61\x62\x63\x64", // Uncompressed payload: "abcd". + "\x00\x11\x00\x00", // Compressed chunk, 17 bytes long (including 4 byte checksum). + "\x5f\xeb\xf2\x10", // Checksum. + "\x96\x01", // Compressed payload: Uncompressed length (varint encoded): 150. + "\x00\x41", // Compressed payload: tagLiteral, length=1, "A". + "\xfe\x01\x00", // Compressed payload: tagCopy2, length=64, offset=1. + "\xfe\x01\x00", // Compressed payload: tagCopy2, length=64, offset=1. + "\x52\x01\x00", // Compressed payload: tagCopy2, length=21, offset=1. + "\x00\x18\x00\x00", // Compressed chunk, 24 bytes long (including 4 byte checksum). + "\x30\x85\x69\xeb", // Checksum. + "\x70", // Compressed payload: Uncompressed length (varint encoded): 112. + "\x00\x42", // Compressed payload: tagLiteral, length=1, "B". + "\xee\x01\x00", // Compressed payload: tagCopy2, length=60, offset=1. + "\x0d\x01", // Compressed payload: tagCopy1, length=7, offset=1. + "\x08\x65\x66\x43", // Compressed payload: tagLiteral, length=3, "efC". + "\x4e\x01\x00", // Compressed payload: tagCopy2, length=20, offset=1. + "\x4e\x5a\x00", // Compressed payload: tagCopy2, length=20, offset=90. + "\x00\x67", // Compressed payload: tagLiteral, length=1, "g". + }, "") + if got != want { + t.Fatalf("\ngot: % x\nwant: % x", got, want) + } +} + +func TestEmitLiteral(t *testing.T) { + testCases := []struct { + length int + want string + }{ + {1, "\x00"}, + {2, "\x04"}, + {59, "\xe8"}, + {60, "\xec"}, + {61, "\xf0\x3c"}, + {62, "\xf0\x3d"}, + {254, "\xf0\xfd"}, + {255, "\xf0\xfe"}, + {256, "\xf0\xff"}, + {257, "\xf4\x00\x01"}, + {65534, "\xf4\xfd\xff"}, + {65535, "\xf4\xfe\xff"}, + {65536, "\xf4\xff\xff"}, + } + + dst := make([]byte, 70000) + nines := bytes.Repeat([]byte{0x99}, 65536) + for _, tc := range testCases { + lit := nines[:tc.length] + n := emitLiteral(dst, lit) + if !bytes.HasSuffix(dst[:n], lit) { + t.Errorf("length=%d: did not end with that many literal bytes", tc.length) + continue + } + got := string(dst[:n-tc.length]) + if got != tc.want { + t.Errorf("length=%d:\ngot % x\nwant % x", tc.length, got, tc.want) + continue + } + } +} + +func TestEmitCopy(t *testing.T) { + testCases := []struct { + offset int + length int + want string + }{ + {8, 04, "\x01\x08"}, + {8, 11, "\x1d\x08"}, + {8, 12, "\x2e\x08\x00"}, + {8, 13, "\x32\x08\x00"}, + {8, 59, "\xea\x08\x00"}, + {8, 60, "\xee\x08\x00"}, + {8, 61, "\xf2\x08\x00"}, + {8, 62, "\xf6\x08\x00"}, + {8, 63, "\xfa\x08\x00"}, + {8, 64, "\xfe\x08\x00"}, + {8, 65, "\xee\x08\x00\x05\x08"}, + {8, 66, "\xee\x08\x00\x09\x08"}, + {8, 67, "\xee\x08\x00\x0d\x08"}, + {8, 68, "\xfe\x08\x00\x01\x08"}, + {8, 69, "\xfe\x08\x00\x05\x08"}, + {8, 80, "\xfe\x08\x00\x3e\x08\x00"}, + + {256, 04, "\x21\x00"}, + {256, 11, "\x3d\x00"}, + {256, 12, "\x2e\x00\x01"}, + {256, 13, "\x32\x00\x01"}, + {256, 59, "\xea\x00\x01"}, + {256, 60, "\xee\x00\x01"}, + {256, 61, "\xf2\x00\x01"}, + {256, 62, "\xf6\x00\x01"}, + {256, 63, "\xfa\x00\x01"}, + {256, 64, "\xfe\x00\x01"}, + {256, 65, "\xee\x00\x01\x25\x00"}, + {256, 66, "\xee\x00\x01\x29\x00"}, + {256, 67, "\xee\x00\x01\x2d\x00"}, + {256, 68, "\xfe\x00\x01\x21\x00"}, + {256, 69, "\xfe\x00\x01\x25\x00"}, + {256, 80, "\xfe\x00\x01\x3e\x00\x01"}, + + {2048, 04, "\x0e\x00\x08"}, + {2048, 11, "\x2a\x00\x08"}, + {2048, 12, "\x2e\x00\x08"}, + {2048, 13, "\x32\x00\x08"}, + {2048, 59, "\xea\x00\x08"}, + {2048, 60, "\xee\x00\x08"}, + {2048, 61, "\xf2\x00\x08"}, + {2048, 62, "\xf6\x00\x08"}, + {2048, 63, "\xfa\x00\x08"}, + {2048, 64, "\xfe\x00\x08"}, + {2048, 65, "\xee\x00\x08\x12\x00\x08"}, + {2048, 66, "\xee\x00\x08\x16\x00\x08"}, + {2048, 67, "\xee\x00\x08\x1a\x00\x08"}, + {2048, 68, "\xfe\x00\x08\x0e\x00\x08"}, + {2048, 69, "\xfe\x00\x08\x12\x00\x08"}, + {2048, 80, "\xfe\x00\x08\x3e\x00\x08"}, + } + + dst := make([]byte, 1024) + for _, tc := range testCases { + n := emitCopy(dst, tc.offset, tc.length) + got := string(dst[:n]) + if got != tc.want { + t.Errorf("offset=%d, length=%d:\ngot % x\nwant % x", tc.offset, tc.length, got, tc.want) + } + } +} + +func TestNewBufferedWriter(t *testing.T) { + // Test all 32 possible sub-sequences of these 5 input slices. + // + // Their lengths sum to 400,000, which is over 6 times the Writer ibuf + // capacity: 6 * maxBlockSize is 393,216. + inputs := [][]byte{ + bytes.Repeat([]byte{'a'}, 40000), + bytes.Repeat([]byte{'b'}, 150000), + bytes.Repeat([]byte{'c'}, 60000), + bytes.Repeat([]byte{'d'}, 120000), + bytes.Repeat([]byte{'e'}, 30000), + } +loop: + for i := 0; i < 1< 0; { + i := copy(x, src) + x = x[i:] + } + return dst +} + +func benchWords(b *testing.B, n int, decode bool) { + // Note: the file is OS-language dependent so the resulting values are not + // directly comparable for non-US-English OS installations. + data := expand(readFile(b, "/usr/share/dict/words"), n) + if decode { + benchDecode(b, data) + } else { + benchEncode(b, data) + } +} + +func BenchmarkWordsDecode1e1(b *testing.B) { benchWords(b, 1e1, true) } +func BenchmarkWordsDecode1e2(b *testing.B) { benchWords(b, 1e2, true) } +func BenchmarkWordsDecode1e3(b *testing.B) { benchWords(b, 1e3, true) } +func BenchmarkWordsDecode1e4(b *testing.B) { benchWords(b, 1e4, true) } +func BenchmarkWordsDecode1e5(b *testing.B) { benchWords(b, 1e5, true) } +func BenchmarkWordsDecode1e6(b *testing.B) { benchWords(b, 1e6, true) } +func BenchmarkWordsEncode1e1(b *testing.B) { benchWords(b, 1e1, false) } +func BenchmarkWordsEncode1e2(b *testing.B) { benchWords(b, 1e2, false) } +func BenchmarkWordsEncode1e3(b *testing.B) { benchWords(b, 1e3, false) } +func BenchmarkWordsEncode1e4(b *testing.B) { benchWords(b, 1e4, false) } +func BenchmarkWordsEncode1e5(b *testing.B) { benchWords(b, 1e5, false) } +func BenchmarkWordsEncode1e6(b *testing.B) { benchWords(b, 1e6, false) } + +func BenchmarkRandomEncode(b *testing.B) { + rng := rand.New(rand.NewSource(1)) + data := make([]byte, 1<<20) + for i := range data { + data[i] = uint8(rng.Intn(256)) + } + benchEncode(b, data) +} + +// testFiles' values are copied directly from +// https://raw.githubusercontent.com/google/snappy/master/snappy_unittest.cc +// The label field is unused in snappy-go. +var testFiles = []struct { + label string + filename string + sizeLimit int +}{ + {"html", "html", 0}, + {"urls", "urls.10K", 0}, + {"jpg", "fireworks.jpeg", 0}, + {"jpg_200", "fireworks.jpeg", 200}, + {"pdf", "paper-100k.pdf", 0}, + {"html4", "html_x_4", 0}, + {"txt1", "alice29.txt", 0}, + {"txt2", "asyoulik.txt", 0}, + {"txt3", "lcet10.txt", 0}, + {"txt4", "plrabn12.txt", 0}, + {"pb", "geo.protodata", 0}, + {"gaviota", "kppkn.gtb", 0}, +} + +const ( + // The benchmark data files are at this canonical URL. + benchURL = "https://raw.githubusercontent.com/google/snappy/master/testdata/" +) + +func downloadBenchmarkFiles(b testing.TB, basename string) (errRet error) { + bDir := filepath.FromSlash(*benchdataDir) + filename := filepath.Join(bDir, basename) + if stat, err := os.Stat(filename); err == nil && stat.Size() != 0 { + return nil + } + + if !*download { + b.Skipf("test data not found; skipping %s without the -download flag", testOrBenchmark(b)) + } + // Download the official snappy C++ implementation reference test data + // files for benchmarking. + if err := os.MkdirAll(bDir, 0777); err != nil && !os.IsExist(err) { + return fmt.Errorf("failed to create %s: %s", bDir, err) + } + + f, err := os.Create(filename) + if err != nil { + return fmt.Errorf("failed to create %s: %s", filename, err) + } + defer f.Close() + defer func() { + if errRet != nil { + os.Remove(filename) + } + }() + url := benchURL + basename + resp, err := http.Get(url) + if err != nil { + return fmt.Errorf("failed to download %s: %s", url, err) + } + defer resp.Body.Close() + if s := resp.StatusCode; s != http.StatusOK { + return fmt.Errorf("downloading %s: HTTP status code %d (%s)", url, s, http.StatusText(s)) + } + _, err = io.Copy(f, resp.Body) + if err != nil { + return fmt.Errorf("failed to download %s to %s: %s", url, filename, err) + } + return nil +} + +func benchFile(b *testing.B, i int, decode bool) { + if err := downloadBenchmarkFiles(b, testFiles[i].filename); err != nil { + b.Fatalf("failed to download testdata: %s", err) + } + bDir := filepath.FromSlash(*benchdataDir) + data := readFile(b, filepath.Join(bDir, testFiles[i].filename)) + if n := testFiles[i].sizeLimit; 0 < n && n < len(data) { + data = data[:n] + } + if decode { + benchDecode(b, data) + } else { + benchEncode(b, data) + } +} + +// Naming convention is kept similar to what snappy's C++ implementation uses. +func Benchmark_UFlat0(b *testing.B) { benchFile(b, 0, true) } +func Benchmark_UFlat1(b *testing.B) { benchFile(b, 1, true) } +func Benchmark_UFlat2(b *testing.B) { benchFile(b, 2, true) } +func Benchmark_UFlat3(b *testing.B) { benchFile(b, 3, true) } +func Benchmark_UFlat4(b *testing.B) { benchFile(b, 4, true) } +func Benchmark_UFlat5(b *testing.B) { benchFile(b, 5, true) } +func Benchmark_UFlat6(b *testing.B) { benchFile(b, 6, true) } +func Benchmark_UFlat7(b *testing.B) { benchFile(b, 7, true) } +func Benchmark_UFlat8(b *testing.B) { benchFile(b, 8, true) } +func Benchmark_UFlat9(b *testing.B) { benchFile(b, 9, true) } +func Benchmark_UFlat10(b *testing.B) { benchFile(b, 10, true) } +func Benchmark_UFlat11(b *testing.B) { benchFile(b, 11, true) } +func Benchmark_ZFlat0(b *testing.B) { benchFile(b, 0, false) } +func Benchmark_ZFlat1(b *testing.B) { benchFile(b, 1, false) } +func Benchmark_ZFlat2(b *testing.B) { benchFile(b, 2, false) } +func Benchmark_ZFlat3(b *testing.B) { benchFile(b, 3, false) } +func Benchmark_ZFlat4(b *testing.B) { benchFile(b, 4, false) } +func Benchmark_ZFlat5(b *testing.B) { benchFile(b, 5, false) } +func Benchmark_ZFlat6(b *testing.B) { benchFile(b, 6, false) } +func Benchmark_ZFlat7(b *testing.B) { benchFile(b, 7, false) } +func Benchmark_ZFlat8(b *testing.B) { benchFile(b, 8, false) } +func Benchmark_ZFlat9(b *testing.B) { benchFile(b, 9, false) } +func Benchmark_ZFlat10(b *testing.B) { benchFile(b, 10, false) } +func Benchmark_ZFlat11(b *testing.B) { benchFile(b, 11, false) } + +func BenchmarkExtendMatch(b *testing.B) { + tDir := filepath.FromSlash(*testdataDir) + src, err := ioutil.ReadFile(filepath.Join(tDir, goldenText)) + if err != nil { + b.Fatalf("ReadFile: %v", err) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + for _, tc := range extendMatchGoldenTestCases { + extendMatch(src, tc.i, tc.j) + } + } +} diff --git a/vendor/github.com/golang/snappy/testdata/Mark.Twain-Tom.Sawyer.txt b/vendor/github.com/golang/snappy/testdata/Mark.Twain-Tom.Sawyer.txt new file mode 100644 index 00000000..86a18750 --- /dev/null +++ b/vendor/github.com/golang/snappy/testdata/Mark.Twain-Tom.Sawyer.txt @@ -0,0 +1,396 @@ +Produced by David Widger. The previous edition was updated by Jose +Menendez. + + + + + + THE ADVENTURES OF TOM SAWYER + BY + MARK TWAIN + (Samuel Langhorne Clemens) + + + + + P R E F A C E + +MOST of the adventures recorded in this book really occurred; one or +two were experiences of my own, the rest those of boys who were +schoolmates of mine. Huck Finn is drawn from life; Tom Sawyer also, but +not from an individual--he is a combination of the characteristics of +three boys whom I knew, and therefore belongs to the composite order of +architecture. + +The odd superstitions touched upon were all prevalent among children +and slaves in the West at the period of this story--that is to say, +thirty or forty years ago. + +Although my book is intended mainly for the entertainment of boys and +girls, I hope it will not be shunned by men and women on that account, +for part of my plan has been to try to pleasantly remind adults of what +they once were themselves, and of how they felt and thought and talked, +and what queer enterprises they sometimes engaged in. + + THE AUTHOR. + +HARTFORD, 1876. + + + + T O M S A W Y E R + + + +CHAPTER I + +"TOM!" + +No answer. + +"TOM!" + +No answer. + +"What's gone with that boy, I wonder? You TOM!" + +No answer. + +The old lady pulled her spectacles down and looked over them about the +room; then she put them up and looked out under them. She seldom or +never looked THROUGH them for so small a thing as a boy; they were her +state pair, the pride of her heart, and were built for "style," not +service--she could have seen through a pair of stove-lids just as well. +She looked perplexed for a moment, and then said, not fiercely, but +still loud enough for the furniture to hear: + +"Well, I lay if I get hold of you I'll--" + +She did not finish, for by this time she was bending down and punching +under the bed with the broom, and so she needed breath to punctuate the +punches with. She resurrected nothing but the cat. + +"I never did see the beat of that boy!" + +She went to the open door and stood in it and looked out among the +tomato vines and "jimpson" weeds that constituted the garden. No Tom. +So she lifted up her voice at an angle calculated for distance and +shouted: + +"Y-o-u-u TOM!" + +There was a slight noise behind her and she turned just in time to +seize a small boy by the slack of his roundabout and arrest his flight. + +"There! I might 'a' thought of that closet. What you been doing in +there?" + +"Nothing." + +"Nothing! Look at your hands. And look at your mouth. What IS that +truck?" + +"I don't know, aunt." + +"Well, I know. It's jam--that's what it is. Forty times I've said if +you didn't let that jam alone I'd skin you. Hand me that switch." + +The switch hovered in the air--the peril was desperate-- + +"My! Look behind you, aunt!" + +The old lady whirled round, and snatched her skirts out of danger. The +lad fled on the instant, scrambled up the high board-fence, and +disappeared over it. + +His aunt Polly stood surprised a moment, and then broke into a gentle +laugh. + +"Hang the boy, can't I never learn anything? Ain't he played me tricks +enough like that for me to be looking out for him by this time? But old +fools is the biggest fools there is. Can't learn an old dog new tricks, +as the saying is. But my goodness, he never plays them alike, two days, +and how is a body to know what's coming? He 'pears to know just how +long he can torment me before I get my dander up, and he knows if he +can make out to put me off for a minute or make me laugh, it's all down +again and I can't hit him a lick. I ain't doing my duty by that boy, +and that's the Lord's truth, goodness knows. Spare the rod and spile +the child, as the Good Book says. I'm a laying up sin and suffering for +us both, I know. He's full of the Old Scratch, but laws-a-me! he's my +own dead sister's boy, poor thing, and I ain't got the heart to lash +him, somehow. Every time I let him off, my conscience does hurt me so, +and every time I hit him my old heart most breaks. Well-a-well, man +that is born of woman is of few days and full of trouble, as the +Scripture says, and I reckon it's so. He'll play hookey this evening, * +and [* Southwestern for "afternoon"] I'll just be obleeged to make him +work, to-morrow, to punish him. It's mighty hard to make him work +Saturdays, when all the boys is having holiday, but he hates work more +than he hates anything else, and I've GOT to do some of my duty by him, +or I'll be the ruination of the child." + +Tom did play hookey, and he had a very good time. He got back home +barely in season to help Jim, the small colored boy, saw next-day's +wood and split the kindlings before supper--at least he was there in +time to tell his adventures to Jim while Jim did three-fourths of the +work. Tom's younger brother (or rather half-brother) Sid was already +through with his part of the work (picking up chips), for he was a +quiet boy, and had no adventurous, troublesome ways. + +While Tom was eating his supper, and stealing sugar as opportunity +offered, Aunt Polly asked him questions that were full of guile, and +very deep--for she wanted to trap him into damaging revealments. Like +many other simple-hearted souls, it was her pet vanity to believe she +was endowed with a talent for dark and mysterious diplomacy, and she +loved to contemplate her most transparent devices as marvels of low +cunning. Said she: + +"Tom, it was middling warm in school, warn't it?" + +"Yes'm." + +"Powerful warm, warn't it?" + +"Yes'm." + +"Didn't you want to go in a-swimming, Tom?" + +A bit of a scare shot through Tom--a touch of uncomfortable suspicion. +He searched Aunt Polly's face, but it told him nothing. So he said: + +"No'm--well, not very much." + +The old lady reached out her hand and felt Tom's shirt, and said: + +"But you ain't too warm now, though." And it flattered her to reflect +that she had discovered that the shirt was dry without anybody knowing +that that was what she had in her mind. But in spite of her, Tom knew +where the wind lay, now. So he forestalled what might be the next move: + +"Some of us pumped on our heads--mine's damp yet. See?" + +Aunt Polly was vexed to think she had overlooked that bit of +circumstantial evidence, and missed a trick. Then she had a new +inspiration: + +"Tom, you didn't have to undo your shirt collar where I sewed it, to +pump on your head, did you? Unbutton your jacket!" + +The trouble vanished out of Tom's face. He opened his jacket. His +shirt collar was securely sewed. + +"Bother! Well, go 'long with you. I'd made sure you'd played hookey +and been a-swimming. But I forgive ye, Tom. I reckon you're a kind of a +singed cat, as the saying is--better'n you look. THIS time." + +She was half sorry her sagacity had miscarried, and half glad that Tom +had stumbled into obedient conduct for once. + +But Sidney said: + +"Well, now, if I didn't think you sewed his collar with white thread, +but it's black." + +"Why, I did sew it with white! Tom!" + +But Tom did not wait for the rest. As he went out at the door he said: + +"Siddy, I'll lick you for that." + +In a safe place Tom examined two large needles which were thrust into +the lapels of his jacket, and had thread bound about them--one needle +carried white thread and the other black. He said: + +"She'd never noticed if it hadn't been for Sid. Confound it! sometimes +she sews it with white, and sometimes she sews it with black. I wish to +geeminy she'd stick to one or t'other--I can't keep the run of 'em. But +I bet you I'll lam Sid for that. I'll learn him!" + +He was not the Model Boy of the village. He knew the model boy very +well though--and loathed him. + +Within two minutes, or even less, he had forgotten all his troubles. +Not because his troubles were one whit less heavy and bitter to him +than a man's are to a man, but because a new and powerful interest bore +them down and drove them out of his mind for the time--just as men's +misfortunes are forgotten in the excitement of new enterprises. This +new interest was a valued novelty in whistling, which he had just +acquired from a negro, and he was suffering to practise it undisturbed. +It consisted in a peculiar bird-like turn, a sort of liquid warble, +produced by touching the tongue to the roof of the mouth at short +intervals in the midst of the music--the reader probably remembers how +to do it, if he has ever been a boy. Diligence and attention soon gave +him the knack of it, and he strode down the street with his mouth full +of harmony and his soul full of gratitude. He felt much as an +astronomer feels who has discovered a new planet--no doubt, as far as +strong, deep, unalloyed pleasure is concerned, the advantage was with +the boy, not the astronomer. + +The summer evenings were long. It was not dark, yet. Presently Tom +checked his whistle. A stranger was before him--a boy a shade larger +than himself. A new-comer of any age or either sex was an impressive +curiosity in the poor little shabby village of St. Petersburg. This boy +was well dressed, too--well dressed on a week-day. This was simply +astounding. His cap was a dainty thing, his close-buttoned blue cloth +roundabout was new and natty, and so were his pantaloons. He had shoes +on--and it was only Friday. He even wore a necktie, a bright bit of +ribbon. He had a citified air about him that ate into Tom's vitals. The +more Tom stared at the splendid marvel, the higher he turned up his +nose at his finery and the shabbier and shabbier his own outfit seemed +to him to grow. Neither boy spoke. If one moved, the other moved--but +only sidewise, in a circle; they kept face to face and eye to eye all +the time. Finally Tom said: + +"I can lick you!" + +"I'd like to see you try it." + +"Well, I can do it." + +"No you can't, either." + +"Yes I can." + +"No you can't." + +"I can." + +"You can't." + +"Can!" + +"Can't!" + +An uncomfortable pause. Then Tom said: + +"What's your name?" + +"'Tisn't any of your business, maybe." + +"Well I 'low I'll MAKE it my business." + +"Well why don't you?" + +"If you say much, I will." + +"Much--much--MUCH. There now." + +"Oh, you think you're mighty smart, DON'T you? I could lick you with +one hand tied behind me, if I wanted to." + +"Well why don't you DO it? You SAY you can do it." + +"Well I WILL, if you fool with me." + +"Oh yes--I've seen whole families in the same fix." + +"Smarty! You think you're SOME, now, DON'T you? Oh, what a hat!" + +"You can lump that hat if you don't like it. I dare you to knock it +off--and anybody that'll take a dare will suck eggs." + +"You're a liar!" + +"You're another." + +"You're a fighting liar and dasn't take it up." + +"Aw--take a walk!" + +"Say--if you give me much more of your sass I'll take and bounce a +rock off'n your head." + +"Oh, of COURSE you will." + +"Well I WILL." + +"Well why don't you DO it then? What do you keep SAYING you will for? +Why don't you DO it? It's because you're afraid." + +"I AIN'T afraid." + +"You are." + +"I ain't." + +"You are." + +Another pause, and more eying and sidling around each other. Presently +they were shoulder to shoulder. Tom said: + +"Get away from here!" + +"Go away yourself!" + +"I won't." + +"I won't either." + +So they stood, each with a foot placed at an angle as a brace, and +both shoving with might and main, and glowering at each other with +hate. But neither could get an advantage. After struggling till both +were hot and flushed, each relaxed his strain with watchful caution, +and Tom said: + +"You're a coward and a pup. I'll tell my big brother on you, and he +can thrash you with his little finger, and I'll make him do it, too." + +"What do I care for your big brother? I've got a brother that's bigger +than he is--and what's more, he can throw him over that fence, too." +[Both brothers were imaginary.] + +"That's a lie." + +"YOUR saying so don't make it so." + +Tom drew a line in the dust with his big toe, and said: + +"I dare you to step over that, and I'll lick you till you can't stand +up. Anybody that'll take a dare will steal sheep." + +The new boy stepped over promptly, and said: + +"Now you said you'd do it, now let's see you do it." + +"Don't you crowd me now; you better look out." + +"Well, you SAID you'd do it--why don't you do it?" + +"By jingo! for two cents I WILL do it." + +The new boy took two broad coppers out of his pocket and held them out +with derision. Tom struck them to the ground. In an instant both boys +were rolling and tumbling in the dirt, gripped together like cats; and +for the space of a minute they tugged and tore at each other's hair and +clothes, punched and scratched each other's nose, and covered +themselves with dust and glory. Presently the confusion took form, and +through the fog of battle Tom appeared, seated astride the new boy, and +pounding him with his fists. "Holler 'nuff!" said he. + +The boy only struggled to free himself. He was crying--mainly from rage. + +"Holler 'nuff!"--and the pounding went on. + +At last the stranger got out a smothered "'Nuff!" and Tom let him up +and said: + +"Now that'll learn you. Better look out who you're fooling with next +time." + +The new boy went off brushing the dust from his clothes, sobbing, +snuffling, and occasionally looking back and shaking his head and +threatening what he would do to Tom the "next time he caught him out." +To which Tom responded with jeers, and started off in high feather, and +as soon as his back was turned the new boy snatched up a stone, threw +it and hit him between the shoulders and then turned tail and ran like +an antelope. Tom chased the traitor home, and thus found out where he +lived. He then held a position at the gate for some time, daring the +enemy to come outside, but the enemy only made faces at him through the +window and declined. At last the enemy's mother appeared, and called +Tom a bad, vicious, vulgar child, and ordered him away. So he went +away; but he said he "'lowed" to "lay" for that boy. + +He got home pretty late that night, and when he climbed cautiously in +at the window, he uncovered an ambuscade, in the person of his aunt; +and when she saw the state his clothes were in her resolution to turn +his Saturday holiday into captivity at hard labor became adamantine in +its firmness. diff --git a/vendor/github.com/golang/snappy/testdata/Mark.Twain-Tom.Sawyer.txt.rawsnappy b/vendor/github.com/golang/snappy/testdata/Mark.Twain-Tom.Sawyer.txt.rawsnappy new file mode 100644 index 0000000000000000000000000000000000000000..9c56d985888e48a9967e187523f0e3326330aeca GIT binary patch literal 9871 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 + +## What version of the package or command are you using? + + + +## What are you trying to do? + + + +## What steps did you take? + + + +## What did you expect to happen, and what actually happened instead? + + + +## How do you think this should be fixed? + + + +## Please link to any related issues, pull requests, and/or discussion + + + +## Bonus: What do you use archiver for, and do you find it useful? + diff --git a/vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/generic-feature-request.md b/vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/generic-feature-request.md new file mode 100644 index 00000000..5615247a --- /dev/null +++ b/vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/generic-feature-request.md @@ -0,0 +1,28 @@ +--- +name: Generic feature request +about: Suggest an idea for this project +title: '' +labels: feature request +assignees: '' + +--- + + + +## What would you like to have changed? + + + +## Why is this feature a useful, necessary, and/or important addition to this project? + + + +## What alternatives are there, or what are you doing in the meantime to work around the lack of this feature? + + + +## Please link to any relevant issues, pull requests, or other discussions. + diff --git a/vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/new-format-request.md b/vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/new-format-request.md new file mode 100644 index 00000000..b08d07a1 --- /dev/null +++ b/vendor/github.com/mholt/archiver/.github/ISSUE_TEMPLATE/new-format-request.md @@ -0,0 +1,32 @@ +--- +name: New format request +about: Request a new archival or compression format +title: '' +labels: '' +assignees: '' + +--- + + + +## Introduce the format you are requesting. + + + +## What do YOU use this format for? + + + +## What is the format's conventional file extension(s)? + + + +## Please link to the format's formal or official specification(s). + + + +## Which Go libraries could be used to implement this format? + diff --git a/vendor/github.com/mholt/archiver/.travis.yml b/vendor/github.com/mholt/archiver/.travis.yml index 9d5f79a7..7a8f349a 100644 --- a/vendor/github.com/mholt/archiver/.travis.yml +++ b/vendor/github.com/mholt/archiver/.travis.yml @@ -1,14 +1,14 @@ language: go go: - - 1.7.1 + - 1.x env: - CGO_ENABLED=0 install: - go get -t ./... - - go get github.com/golang/lint/golint + - go get golang.org/x/lint/golint - go get github.com/gordonklaus/ineffassign script: diff --git a/vendor/github.com/mholt/archiver/README.md b/vendor/github.com/mholt/archiver/README.md index 47eeb543..85e6db99 100644 --- a/vendor/github.com/mholt/archiver/README.md +++ b/vendor/github.com/mholt/archiver/README.md @@ -1,26 +1,58 @@ archiver [![archiver GoDoc](https://img.shields.io/badge/reference-godoc-blue.svg?style=flat-square)](https://godoc.org/github.com/mholt/archiver) [![Linux Build Status](https://img.shields.io/travis/mholt/archiver.svg?style=flat-square&label=linux+build)](https://travis-ci.org/mholt/archiver) [![Windows Build Status](https://img.shields.io/appveyor/ci/mholt/archiver.svg?style=flat-square&label=windows+build)](https://ci.appveyor.com/project/mholt/archiver) ======== -Package archiver makes it trivially easy to make and extract common archive formats such as .zip, and .tar.gz. Simply name the input and output file(s). +Introducing **Archiver 3.1** - a cross-platform, multi-format archive utility and Go library. A powerful and flexible library meets an elegant CLI in this generic replacement for several of platform-specific, format-specific archive utilities. + +## Features + +Package archiver makes it trivially easy to make and extract common archive formats such as zip and tarball (and its compressed variants). Simply name the input and output file(s). The `arc` command runs the same on all platforms and has no external dependencies (not even libc). It is powered by the Go standard library and several third-party, pure-Go libraries. Files are put into the root of the archive; directories are recursively added, preserving structure. -The `archiver` command runs the same cross-platform and has no external dependencies (not even libc); powered by the Go standard library, [dsnet/compress](https://github.com/dsnet/compress), [nwaples/rardecode](https://github.com/nwaples/rardecode), and [ulikunitz/xz](https://github.com/ulikunitz/xz). Enjoy! +- Make whole archives from a list of files +- Open whole archives to a folder +- Extract specific files/folders from archives +- Stream files in and out of archives without needing actual files on disk +- Traverse archive contents without loading them +- Compress files +- Decompress files +- Streaming compression and decompression +- Several archive and compression formats supported + +### Format-dependent features + +- Optionally create a top-level folder to avoid littering a directory or archive root with files +- Toggle overwrite existing files +- Adjust compression level +- Zip: store (not compress) already-compressed files +- Make all necessary directories +- Open password-protected RAR archives +- Optionally continue with other files after an error -Supported formats/extensions: +### Supported archive formats - .zip - .tar -- .tar.gz & .tgz -- .tar.bz2 & .tbz2 -- .tar.xz & .txz +- .tar.gz or .tgz +- .tar.bz2 or .tbz2 +- .tar.xz or .txz +- .tar.lz4 or .tlz4 +- .tar.sz or .tsz - .rar (open only) +### Supported compression formats + +- bzip2 +- gzip +- lz4 +- snappy (sz) +- xz + ## Install ```bash -go get github.com/mholt/archiver/cmd/archiver +go get -u github.com/mholt/archiver/cmd/arc ``` Or download binaries from the [releases](https://github.com/mholt/archiver/releases) page. @@ -28,54 +60,196 @@ Or download binaries from the [releases](https://github.com/mholt/archiver/relea ## Command Use -Make a new archive: +### Make new archive ```bash -$ archiver make [archive name] [input files...] +# Syntax: arc archive [archive name] [input files...] + +$ arc archive test.tar.gz file1.txt images/file2.jpg folder/subfolder ``` (At least one input file is required.) -To extract an archive: +### Extract entire archive ```bash -$ archiver open [archive name] [destination] +# Syntax: arc unarchive [archive name] [destination] + +$ arc unarchive test.tar.gz ``` (The destination path is optional; default is current directory.) -The archive name must end with a supported file extension—this is how it knows what kind of archive to make. Run `archiver -h` for more help. +The archive name must end with a supported file extension—this is how it knows what kind of archive to make. Run `arc help` for more help. + +### List archive contents + +```bash +# Syntax: arc ls [archive name] + +$ arc ls caddy_dist.tar.gz +drwxr-xr-x matt staff 0 2018-09-19 15:47:18 -0600 MDT dist/ +-rw-r--r-- matt staff 6148 2017-08-07 18:34:22 -0600 MDT dist/.DS_Store +-rw-r--r-- matt staff 22481 2018-09-19 15:47:18 -0600 MDT dist/CHANGES.txt +-rw-r--r-- matt staff 17189 2018-09-19 15:47:18 -0600 MDT dist/EULA.txt +-rw-r--r-- matt staff 25261 2016-03-07 16:32:00 -0700 MST dist/LICENSES.txt +-rw-r--r-- matt staff 1017 2018-09-19 15:47:18 -0600 MDT dist/README.txt +-rw-r--r-- matt staff 288 2016-03-21 11:52:38 -0600 MDT dist/gitcookie.sh.enc +... +``` + +### Extract a specific file or folder from an archive +```bash +# Syntax: arc extract [archive name] [path in archive] [destination on disk] + +$ arc extract test.tar.gz foo/hello.txt extracted/hello.txt +``` + +### Compress a single file + +```bash +# Syntax: arc compress [input file] [output file] + +$ arc compress test.txt compressed_test.txt.gz +$ arc compress test.txt gz +``` + +For convenience, the output file (second argument) may simply be a compression format (without leading dot), in which case the output filename will be the same as the input filename but with the format extension appended, and the input file will be deleted if successful. + +### Decompress a single file + +```bash +# Syntax: arc decompress [input file] [output file] + +$ arc decompress test.txt.gz original_test.txt +$ arc decompress test.txt.gz +``` + +For convenience, the output file (second argument) may be omitted. In that case, the output filename will have the same name as the input filename, but with the compression extension stripped from the end; and the input file will be deleted if successful. + +### Flags + +Flags are specified before the subcommand. Use `arc help` or `arc -h` to get usage help and a description of flags with their default values. ## Library Use +The archiver package allows you to easily create and open archives, walk their contents, extract specific files, compress and decompress files, and even stream archives in and out using pure io.Reader and io.Writer interfaces, without ever needing to touch the disk. + ```go import "github.com/mholt/archiver" ``` -Create a .zip file: +[See the package's GoDoc](https://godoc.org/github.com/mholt/archiver) for full API documentation. + +For example, creating or unpacking an archive file: + +```go +err := archiver.Archive([]string{"testdata", "other/file.txt"}, "test.zip") +// ... +err = archiver.Unarchive("test.tar.gz", "test") +``` + +The archive format is determined by file extension. (There are [several functions in this package](https://godoc.org/github.com/mholt/archiver) which perform a task by inferring the format from file extension or file header, including `Archive()`, `Unarchive()`, `CompressFile()`, and `DecompressFile()`.) + +To configure the archiver used or perform, create an instance of the format's type: + +```go +z := archiver.Zip{ + CompressionLevel: flate.DefaultCompression, + MkdirAll: true, + SelectiveCompression: true, + ContinueOnError: false, + OverwriteExisting: false, + ImplicitTopLevelFolder: false, +} + +err := z.Archive([]string{"testdata", "other/file.txt"}, "/Users/matt/Desktop/test.zip") +``` + +Inspecting an archive: ```go -err := archiver.Zip.Make("output.zip", []string{"file.txt", "folder"}) +err = z.Walk("/Users/matt/Desktop/test.zip", func(f archiver.File) error { + zfh, ok := f.Header.(zip.FileHeader) + if ok { + fmt.Println("Filename:", zfh.Name) + } + return nil +}) ``` -Extract a .zip file: +Streaming files into an archive that is being written to the HTTP response: ```go -err := archiver.Zip.Open("input.zip", "output_folder") +err = z.Create(responseWriter) +if err != nil { + return err +} +defer z.Close() + +for _, fname := range filenames { + info, err := os.Stat(fname) + if err != nil { + return err + } + + // get file's name for the inside of the archive + internalName, err := archiver.NameInArchive(info, fname, fname) + if err != nil { + return err + } + + // open the file + file, err := os.Open(f) + if err != nil { + return err + } + + // write it to the archive + err = z.Write(archiver.File{ + FileInfo: archiver.FileInfo{ + FileInfo: info, + CustomName: internalName, + }, + ReadCloser: file, + }) + file.Close() + if err != nil { + return err + } +} ``` -Working with other file formats is exactly the same, but with [their own Archiver implementations](https://godoc.org/github.com/mholt/archiver#Archiver). +The `archiver.File` type allows you to use actual files with archives, or to mimic files when you only have streams. + +There's a lot more that can be done, too. [See the GoDoc](https://godoc.org/github.com/mholt/archiver) for full API documentation. + +**Security note: This package does NOT attempt to mitigate zip-slip attacks.** It is [extremely difficult](https://github.com/rubyzip/rubyzip/pull/376) [to do properly](https://github.com/mholt/archiver/pull/65#issuecomment-395988244) and [seemingly impossible to mitigate effectively across platforms](https://github.com/golang/go/issues/20126). [Attempted fixes have broken processing of legitimate files in production](https://github.com/mholt/archiver/pull/70#issuecomment-423267320), rendering the program unusable. Our recommendation instead is to inspect the contents of an untrusted archive before extracting it (this package provides `Walkers`) and decide if you want to proceed with extraction. + + +## Project Values + +This project has a few principle-based goals that guide its development: + +- **Do our thing really well.** Our thing is creating, opening, inspecting, compressing, and streaming archive files. It is not meant to be a replacement for specific archive format tools like tar, zip, etc. that have lots of features and customizability. (Some customizability is OK, but not to the extent that it becomes overly complicated or error-prone.) + +- **Have good tests.** Changes should be covered by tests. + +- **Limit dependencies.** Keep the package lightweight. +- **Pure Go.** This means no cgo or other external/system dependencies. This package should be able to stand on its own and cross-compile easily to any platform -- and that includes its library dependencies. +- **Idiomatic Go.** Keep interfaces small, variable names semantic, vet shows no errors, the linter is generally quiet, etc. -## FAQ +- **Be elegant.** This package should be elegant to use and its code should be elegant when reading and testing. If it doesn't feel good, fix it up. -#### Can I list a file in one folder to go into a different folder in the archive? +- **Well-documented.** Use comments prudently; explain why non-obvious code is necessary (and use tests to enforce it). Keep the docs updated, and have examples where helpful. -No. This works just like your OS would make an archive in the file explorer: organize your input files to mirror the structure you want in the archive. +- **Keep it efficient.** This often means keep it simple. Fast code is valuable. +- **Consensus.** Contributions should ideally be approved by multiple reviewers before being merged. Generally, avoid merging multi-chunk changes that do not go through at least one or two iterations/reviews. Except for trivial changes, PRs are seldom ready to merge right away. -#### Can it add files to an existing archive? +- **Have fun contributing.** Coding is awesome! -Nope. This is a simple tool; it just makes new archives or extracts existing ones. +We welcome contributions and appreciate your efforts! However, please open issues to discuss any changes before spending the time preparing a pull request. This will save time, reduce frustration, and help coordinate the work. Thank you! diff --git a/vendor/github.com/mholt/archiver/appveyor.yml b/vendor/github.com/mholt/archiver/appveyor.yml index f8f804f9..0c1afd63 100644 --- a/vendor/github.com/mholt/archiver/appveyor.yml +++ b/vendor/github.com/mholt/archiver/appveyor.yml @@ -1,6 +1,8 @@ -version: "{build}" +# set git config to clone with symlinks enabled on windows +init: + - git config --global core.symlinks true -os: Windows Server 2012 R2 +version: "{build}" clone_folder: c:\gopath\src\github.com\mholt\archiver @@ -8,19 +10,20 @@ environment: GOPATH: c:\gopath CGO_ENABLED: 0 +stack: go 1.11 + install: - - rmdir c:\go /s /q - - appveyor DownloadFile https://storage.googleapis.com/golang/go1.7.1.windows-amd64.zip - - 7z x go1.7.1.windows-amd64.zip -y -oC:\ > NUL - - go version - - go env - - go get -t ./... - - go get github.com/golang/lint/golint + - go get ./... + - go get golang.org/x/lint/golint - go get github.com/gordonklaus/ineffassign - set PATH=%GOPATH%\bin;%PATH% build: off +before_test: + - go version + - go env + test_script: - go vet ./... - go test ./... diff --git a/vendor/github.com/mholt/archiver/archiver.go b/vendor/github.com/mholt/archiver/archiver.go index 2561e0f6..63a807ed 100644 --- a/vendor/github.com/mholt/archiver/archiver.go +++ b/vendor/github.com/mholt/archiver/archiver.go @@ -1,34 +1,284 @@ +// Package archiver facilitates convenient, cross-platform, high-level archival +// and compression operations for a variety of formats and compression algorithms. +// +// This package and its dependencies are written in pure Go (not cgo) and +// have no external dependencies, so they should run on all major platforms. +// (It also comes with a command for CLI use in the cmd/arc folder.) +// +// Each supported format or algorithm has a unique type definition that +// implements the interfaces corresponding to the tasks they perform. For +// example, the Tar type implements Reader, Writer, Archiver, Unarchiver, +// Walker, and several other interfaces. +// +// The most common functions are implemented at the package level for +// convenience: Archive, Unarchive, Walk, Extract, CompressFile, and +// DecompressFile. With these, the format type is chosen implicitly, +// and a sane default configuration is used. +// +// To customize a format's configuration, create an instance of its struct +// with its fields set to the desired values. You can also use and customize +// the handy Default* (replace the wildcard with the format's type name) +// for a quick, one-off instance of the format's type. +// +// To obtain a new instance of a format's struct with the default config, use +// the provided New*() functions. This is not required, however. An empty +// struct of any type, for example &Zip{} is perfectly valid, so you may +// create the structs manually, too. The examples on this page show how +// either may be done. +// +// See the examples in this package for an idea of how to wield this package +// for common tasks. Most of the examples which are specific to a certain +// format type, for example Zip, can be applied to other types that implement +// the same interfaces. For example, using Zip is very similar to using Tar +// or TarGz (etc), and using Gz is very similar to using Sz or Xz (etc). +// +// When creating archives or compressing files using a specific instance of +// the format's type, the name of the output file MUST match that of the +// format, to prevent confusion later on. If you absolutely need a different +// file extension, you may rename the file afterward. +// +// Values in this package are NOT safe for concurrent use. There is no +// performance benefit of reusing them, and since they may contain important +// state (especially while walking, reading, or writing), it is NOT +// recommended to reuse values from this package or change their configuration +// after they are in use. package archiver import ( "fmt" "io" - "log" "os" + "path" "path/filepath" "runtime" + "strings" ) -// Archiver represent a archive format +// Archiver is a type that can create an archive file +// from a list of source file names. type Archiver interface { - // Match checks supported files - Match(filename string) bool - // Make makes an archive. - Make(destination string, sources []string) error - // Open extracts an archive. - Open(source, destination string) error + ExtensionChecker + + // Archive adds all the files or folders in sources + // to an archive to be created at destination. Files + // are added to the root of the archive, and directories + // are walked and recursively added, preserving folder + // structure. + Archive(sources []string, destination string) error +} + +// ExtensionChecker validates file extensions +type ExtensionChecker interface { + CheckExt(name string) error +} + +// Unarchiver is a type that can extract archive files +// into a folder. +type Unarchiver interface { + Unarchive(source, destination string) error +} + +// Writer can write discrete byte streams of files to +// an output stream. +type Writer interface { + Create(out io.Writer) error + Write(f File) error + Close() error } -// SupportedFormats contains all supported archive formats -var SupportedFormats = map[string]Archiver{} +// Reader can read discrete byte streams of files from +// an input stream. +type Reader interface { + Open(in io.Reader, size int64) error + Read() (File, error) + Close() error +} + +// Extractor can extract a specific file from a source +// archive to a specific destination folder on disk. +type Extractor interface { + Extract(source, target, destination string) error +} + +// File provides methods for accessing information about +// or contents of a file within an archive. +type File struct { + os.FileInfo + + // The original header info; depends on + // type of archive -- could be nil, too. + Header interface{} + + // Allow the file contents to be read (and closed) + io.ReadCloser +} -// RegisterFormat adds a supported archive format -func RegisterFormat(name string, format Archiver) { - if _, ok := SupportedFormats[name]; ok { - log.Printf("Format %s already exists, skip!\n", name) - return +// FileInfo is an os.FileInfo but optionally with +// a custom name, useful if dealing with files that +// are not actual files on disk, or which have a +// different name in an archive than on disk. +type FileInfo struct { + os.FileInfo + CustomName string +} + +// Name returns fi.CustomName if not empty; +// otherwise it returns fi.FileInfo.Name(). +func (fi FileInfo) Name() string { + if fi.CustomName != "" { + return fi.CustomName } - SupportedFormats[name] = format + return fi.FileInfo.Name() +} + +// ReadFakeCloser is an io.Reader that has +// a no-op close method to satisfy the +// io.ReadCloser interface. +type ReadFakeCloser struct { + io.Reader +} + +// Close implements io.Closer. +func (rfc ReadFakeCloser) Close() error { return nil } + +// Walker can walk an archive file and return information +// about each item in the archive. +type Walker interface { + Walk(archive string, walkFn WalkFunc) error +} + +// WalkFunc is called at each item visited by Walk. +// If an error is returned, the walk may continue +// if the Walker is configured to continue on error. +// The sole exception is the error value ErrStopWalk, +// which stops the walk without an actual error. +type WalkFunc func(f File) error + +// ErrStopWalk signals Walk to break without error. +var ErrStopWalk = fmt.Errorf("walk stopped") + +// ErrFormatNotRecognized is an error that will be +// returned if the file is not a valid archive format. +var ErrFormatNotRecognized = fmt.Errorf("format not recognized") + +// Compressor compresses to out what it reads from in. +// It also ensures a compatible or matching file extension. +type Compressor interface { + ExtensionChecker + Compress(in io.Reader, out io.Writer) error +} + +// Decompressor decompresses to out what it reads from in. +type Decompressor interface { + Decompress(in io.Reader, out io.Writer) error +} + +// Matcher is a type that can return whether the given +// file appears to match the implementation's format. +// Implementations should return the file's read position +// to where it was when the method was called. +type Matcher interface { + Match(io.ReadSeeker) (bool, error) +} + +// Archive creates an archive of the source files to a new file at destination. +// The archive format is chosen implicitly by file extension. +func Archive(sources []string, destination string) error { + aIface, err := ByExtension(destination) + if err != nil { + return err + } + a, ok := aIface.(Archiver) + if !ok { + return fmt.Errorf("format specified by destination filename is not an archive format: %s (%T)", destination, aIface) + } + return a.Archive(sources, destination) +} + +// Unarchive unarchives the given archive file into the destination folder. +// The archive format is selected implicitly. +func Unarchive(source, destination string) error { + uaIface, err := ByExtension(source) + if err != nil { + return err + } + u, ok := uaIface.(Unarchiver) + if !ok { + return fmt.Errorf("format specified by source filename is not an archive format: %s (%T)", source, uaIface) + } + return u.Unarchive(source, destination) +} + +// Walk calls walkFn for each file within the given archive file. +// The archive format is chosen implicitly. +func Walk(archive string, walkFn WalkFunc) error { + wIface, err := ByExtension(archive) + if err != nil { + return err + } + w, ok := wIface.(Walker) + if !ok { + return fmt.Errorf("format specified by archive filename is not a walker format: %s (%T)", archive, wIface) + } + return w.Walk(archive, walkFn) +} + +// Extract extracts a single file from the given source archive. If the target +// is a directory, the entire folder will be extracted into destination. The +// archive format is chosen implicitly. +func Extract(source, target, destination string) error { + eIface, err := ByExtension(source) + if err != nil { + return err + } + e, ok := eIface.(Extractor) + if !ok { + return fmt.Errorf("format specified by source filename is not an extractor format: %s (%T)", source, eIface) + } + return e.Extract(source, target, destination) +} + +// CompressFile is a convenience function to simply compress a file. +// The compression algorithm is selected implicitly based on the +// destination's extension. +func CompressFile(source, destination string) error { + cIface, err := ByExtension(destination) + if err != nil { + return err + } + c, ok := cIface.(Compressor) + if !ok { + return fmt.Errorf("format specified by destination filename is not a recognized compression algorithm: %s", destination) + } + return FileCompressor{Compressor: c}.CompressFile(source, destination) +} + +// DecompressFile is a convenience function to simply compress a file. +// The compression algorithm is selected implicitly based on the +// source's extension. +func DecompressFile(source, destination string) error { + cIface, err := ByExtension(source) + if err != nil { + return err + } + c, ok := cIface.(Decompressor) + if !ok { + return fmt.Errorf("format specified by source filename is not a recognized compression algorithm: %s", source) + } + return FileCompressor{Decompressor: c}.DecompressFile(source, destination) +} + +func fileExists(name string) bool { + _, err := os.Stat(name) + return !os.IsNotExist(err) +} + +func mkdir(dirPath string, dirMode os.FileMode) error { + err := os.MkdirAll(dirPath, dirMode) + if err != nil { + return fmt.Errorf("%s: making directory: %v", dirPath, err) + } + return nil } func writeNewFile(fpath string, in io.Reader, fm os.FileMode) error { @@ -60,19 +310,195 @@ func writeNewSymbolicLink(fpath string, target string) error { if err != nil { return fmt.Errorf("%s: making directory for file: %v", fpath, err) } - err = os.Symlink(target, fpath) if err != nil { return fmt.Errorf("%s: making symbolic link for: %v", fpath, err) } - return nil } -func mkdir(dirPath string) error { - err := os.MkdirAll(dirPath, 0755) +func writeNewHardLink(fpath string, target string) error { + err := os.MkdirAll(filepath.Dir(fpath), 0755) if err != nil { - return fmt.Errorf("%s: making directory: %v", dirPath, err) + return fmt.Errorf("%s: making directory for file: %v", fpath, err) + } + err = os.Link(target, fpath) + if err != nil { + return fmt.Errorf("%s: making hard link for: %v", fpath, err) } return nil } + +func isSymlink(fi os.FileInfo) bool { + return fi.Mode()&os.ModeSymlink != 0 +} + +// within returns true if sub is within or equal to parent. +func within(parent, sub string) bool { + rel, err := filepath.Rel(parent, sub) + if err != nil { + return false + } + return !strings.Contains(rel, "..") +} + +// multipleTopLevels returns true if the paths do not +// share a common top-level folder. +func multipleTopLevels(paths []string) bool { + if len(paths) < 2 { + return false + } + var lastTop string + for _, p := range paths { + p = strings.TrimPrefix(strings.Replace(p, `\`, "/", -1), "/") + for { + next := path.Dir(p) + if next == "." { + break + } + p = next + } + if lastTop == "" { + lastTop = p + } + if p != lastTop { + return true + } + } + return false +} + +// folderNameFromFileName returns a name for a folder +// that is suitable based on the filename, which will +// be stripped of its extensions. +func folderNameFromFileName(filename string) string { + base := filepath.Base(filename) + firstDot := strings.Index(base, ".") + if firstDot > -1 { + return base[:firstDot] + } + return base +} + +// makeNameInArchive returns the filename for the file given by fpath to be used within +// the archive. sourceInfo is the FileInfo obtained by calling os.Stat on source, and baseDir +// is an optional base directory that becomes the root of the archive. fpath should be the +// unaltered file path of the file given to a filepath.WalkFunc. +func makeNameInArchive(sourceInfo os.FileInfo, source, baseDir, fpath string) (string, error) { + name := filepath.Base(fpath) // start with the file or dir name + if sourceInfo.IsDir() { + // preserve internal directory structure; that's the path components + // between the source directory's leaf and this file's leaf + dir, err := filepath.Rel(filepath.Dir(source), filepath.Dir(fpath)) + if err != nil { + return "", err + } + // prepend the internal directory structure to the leaf name, + // and convert path separators to forward slashes as per spec + name = path.Join(filepath.ToSlash(dir), name) + } + return path.Join(baseDir, name), nil // prepend the base directory +} + +// NameInArchive returns a name for the file at fpath suitable for +// the inside of an archive. The source and its associated sourceInfo +// is the path where walking a directory started, and if no directory +// was walked, source may == fpath. The returned name is essentially +// the components of the path between source and fpath, preserving +// the internal directory structure. +func NameInArchive(sourceInfo os.FileInfo, source, fpath string) (string, error) { + return makeNameInArchive(sourceInfo, source, "", fpath) +} + +// ByExtension returns an archiver and unarchiver, or compressor +// and decompressor, based on the extension of the filename. +func ByExtension(filename string) (interface{}, error) { + var ec interface{} + for _, c := range extCheckers { + if err := c.CheckExt(filename); err == nil { + ec = c + break + } + } + switch ec.(type) { + case *Rar: + return NewRar(), nil + case *Tar: + return NewTar(), nil + case *TarBz2: + return NewTarBz2(), nil + case *TarGz: + return NewTarGz(), nil + case *TarLz4: + return NewTarLz4(), nil + case *TarSz: + return NewTarSz(), nil + case *TarXz: + return NewTarXz(), nil + case *Zip: + return NewZip(), nil + case *Gz: + return NewGz(), nil + case *Bz2: + return NewBz2(), nil + case *Lz4: + return NewBz2(), nil + case *Snappy: + return NewSnappy(), nil + case *Xz: + return NewXz(), nil + } + return nil, fmt.Errorf("format unrecognized by filename: %s", filename) +} + +// ByHeader returns the unarchiver value that matches the input's +// file header. It does not affect the current read position. +// If the file's header is not a recognized archive format, then +// ErrFormatNotRecognized will be returned. +func ByHeader(input io.ReadSeeker) (Unarchiver, error) { + var matcher Matcher + for _, m := range matchers { + ok, err := m.Match(input) + if err != nil { + return nil, fmt.Errorf("matching on format %s: %v", m, err) + } + if ok { + matcher = m + break + } + } + switch matcher.(type) { + case *Zip: + return NewZip(), nil + case *Tar: + return NewTar(), nil + case *Rar: + return NewRar(), nil + } + return nil, ErrFormatNotRecognized +} + +// extCheckers is a list of the format implementations +// that can check extensions. Only to be used for +// checking extensions - not any archival operations. +var extCheckers = []ExtensionChecker{ + &TarBz2{}, + &TarGz{}, + &TarLz4{}, + &TarSz{}, + &TarXz{}, + &Rar{}, + &Tar{}, + &Zip{}, + &Gz{}, + &Bz2{}, + &Lz4{}, + &Snappy{}, + &Xz{}, +} + +var matchers = []Matcher{ + &Rar{}, + &Tar{}, + &Zip{}, +} diff --git a/vendor/github.com/mholt/archiver/archiver_test.go b/vendor/github.com/mholt/archiver/archiver_test.go index 7bce05e4..b4bd3a7a 100644 --- a/vendor/github.com/mholt/archiver/archiver_test.go +++ b/vendor/github.com/mholt/archiver/archiver_test.go @@ -2,60 +2,346 @@ package archiver import ( "bytes" + "fmt" + "io" "io/ioutil" "os" "path/filepath" "testing" + "time" ) -func TestArchiver(t *testing.T) { - for name, ar := range SupportedFormats { - name, ar := name, ar - t.Run(name, func(t *testing.T) { - t.Parallel() - // skip RAR for now - if _, ok := ar.(rarFormat); ok { - t.Skip("not supported") - } - symmetricTest(t, name, ar) - }) +func TestWithin(t *testing.T) { + for i, tc := range []struct { + path1, path2 string + expect bool + }{ + { + path1: "/foo", + path2: "/foo/bar", + expect: true, + }, + { + path1: "/foo", + path2: "/foobar/asdf", + expect: false, + }, + { + path1: "/foobar/", + path2: "/foobar/asdf", + expect: true, + }, + { + path1: "/foobar/asdf", + path2: "/foobar", + expect: false, + }, + { + path1: "/foobar/asdf", + path2: "/foobar/", + expect: false, + }, + { + path1: "/", + path2: "/asdf", + expect: true, + }, + { + path1: "/asdf", + path2: "/asdf", + expect: true, + }, + { + path1: "/", + path2: "/", + expect: true, + }, + { + path1: "/foo/bar/daa", + path2: "/foo", + expect: false, + }, + { + path1: "/foo/", + path2: "/foo/bar/daa", + expect: true, + }, + } { + actual := within(tc.path1, tc.path2) + if actual != tc.expect { + t.Errorf("Test %d: [%s %s] Expected %t but got %t", i, tc.path1, tc.path2, tc.expect, actual) + } + } +} + +func TestMultipleTopLevels(t *testing.T) { + for i, tc := range []struct { + set []string + expect bool + }{ + { + set: []string{}, + expect: false, + }, + { + set: []string{"/foo"}, + expect: false, + }, + { + set: []string{"/foo", "/foo/bar"}, + expect: false, + }, + { + set: []string{"/foo", "/bar"}, + expect: true, + }, + { + set: []string{"/foo", "/foobar"}, + expect: true, + }, + { + set: []string{"foo", "foo/bar"}, + expect: false, + }, + { + set: []string{"foo", "/foo/bar"}, + expect: false, + }, + { + set: []string{"../foo", "foo/bar"}, + expect: true, + }, + { + set: []string{`C:\foo\bar`, `C:\foo\bar\zee`}, + expect: false, + }, + { + set: []string{`C:\`, `C:\foo\bar`}, + expect: false, + }, + { + set: []string{`D:\foo`, `E:\foo`}, + expect: true, + }, + { + set: []string{`D:\foo`, `D:\foo\bar`, `C:\foo`}, + expect: true, + }, + { + set: []string{"/foo", "/", "/bar"}, + expect: true, + }, + } { + actual := multipleTopLevels(tc.set) + if actual != tc.expect { + t.Errorf("Test %d: %v: Expected %t but got %t", i, tc.set, tc.expect, actual) + } + } +} + +func TestMakeNameInArchive(t *testing.T) { + for i, tc := range []struct { + sourceInfo fakeFileInfo + source string // a file path explicitly listed by the user to include in the archive + baseDir string // the base or root directory or path within the archive which contains all other files + fpath string // the file path being walked; if source is a directory, this will be a child path + expect string + }{ + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "foo.txt", + baseDir: "", + fpath: "foo.txt", + expect: "foo.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "foo.txt", + baseDir: "base", + fpath: "foo.txt", + expect: "base/foo.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "foo/bar.txt", + baseDir: "", + fpath: "foo/bar.txt", + expect: "bar.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "foo/bar.txt", + baseDir: "base", + fpath: "foo/bar.txt", + expect: "base/bar.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: true}, + source: "foo/bar", + baseDir: "base", + fpath: "foo/bar", + expect: "base/bar", + }, + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "/absolute/path.txt", + baseDir: "", + fpath: "/absolute/path.txt", + expect: "path.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "/absolute/sub/path.txt", + baseDir: "", + fpath: "/absolute/sub/path.txt", + expect: "path.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "/absolute/sub/path.txt", + baseDir: "base", + fpath: "/absolute/sub/path.txt", + expect: "base/path.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: false}, + source: "sub/path.txt", + baseDir: "base/subbase", + fpath: "sub/path.txt", + expect: "base/subbase/path.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: true}, + source: "sub/dir", + baseDir: "base/subbase", + fpath: "sub/dir/path.txt", + expect: "base/subbase/dir/path.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: true}, + source: "sub/dir", + baseDir: "base/subbase", + fpath: "sub/dir/sub2/sub3/path.txt", + expect: "base/subbase/dir/sub2/sub3/path.txt", + }, + { + sourceInfo: fakeFileInfo{isDir: true}, + source: `/absolute/dir`, + baseDir: "base", + fpath: `/absolute/dir/sub1/sub2/file.txt`, + expect: "base/dir/sub1/sub2/file.txt", + }, + } { + actual, err := makeNameInArchive(tc.sourceInfo, tc.source, tc.baseDir, tc.fpath) + if err != nil { + t.Errorf("Test %d: Got error: %v", i, err) + } + if actual != tc.expect { + t.Errorf("Test %d: Expected '%s' but got '%s'", i, tc.expect, actual) + } } } -// symmetricTest performs a symmetric test by using ar.Make to make an archive -// from the test corpus, then using ar.Open to open the archive and comparing -// the contents to ensure they are equal. -func symmetricTest(t *testing.T, name string, ar Archiver) { - tmp, err := ioutil.TempDir("", "archiver") +func TestArchiveUnarchive(t *testing.T) { + for _, af := range archiveFormats { + au, ok := af.(archiverUnarchiver) + if !ok { + t.Errorf("%s (%T): not an Archiver and Unarchiver", af, af) + continue + } + testArchiveUnarchive(t, au) + } +} + +func TestArchiveUnarchiveWithFolderPermissions(t *testing.T) { + dir := "testdata/proverbs/extra" + currentPerms, err := os.Stat(dir) + if err != nil { + t.Fatalf("%v", err) + } + err = os.Chmod(dir, 0700) + if err != nil { + t.Fatalf("%v", err) + } + + defer func() { + err := os.Chmod(dir, currentPerms.Mode()) + if err != nil { + t.Fatalf("%v", err) + } + }() + + TestArchiveUnarchive(t) +} + +func testArchiveUnarchive(t *testing.T, au archiverUnarchiver) { + auStr := fmt.Sprintf("%s", au) + + tmp, err := ioutil.TempDir("", "archiver_test") if err != nil { - t.Fatal(err) + t.Fatalf("[%s] %v", auStr, err) } defer os.RemoveAll(tmp) // Test creating archive - outfile := filepath.Join(tmp, "test-"+name) - err = ar.Make(outfile, []string{"testdata"}) + outfile := filepath.Join(tmp, "archiver_test."+auStr) + err = au.Archive([]string{"testdata"}, outfile) if err != nil { - t.Fatalf("making archive: didn't expect an error, but got: %v", err) + t.Fatalf("[%s] making archive: didn't expect an error, but got: %v", auStr, err) } - var expectedFileCount int - filepath.Walk("testdata", func(fpath string, info os.FileInfo, err error) error { - expectedFileCount++ - return nil - }) + // Test format matching (TODO: Make this its own test, out of band with the archive/unarchive tests) + //testMatching(t, au, outfile) // TODO: Disabled until we can finish implementing this for compressed tar formats // Test extracting archive - dest := filepath.Join(tmp, "extraction_test") + dest := filepath.Join(tmp, "extraction_test_"+auStr) os.Mkdir(dest, 0755) - err = ar.Open(outfile, dest) + err = au.Unarchive(outfile, dest) if err != nil { - t.Fatalf("extracting archive [%s -> %s]: didn't expect an error, but got: %v", outfile, dest, err) + t.Fatalf("[%s] extracting archive [%s -> %s]: didn't expect an error, but got: %v", auStr, outfile, dest, err) } + // Check that what was extracted is what was compressed + symmetricTest(t, auStr, dest) +} + +// testMatching tests that au can match the format of archiveFile. +func testMatching(t *testing.T, au archiverUnarchiver, archiveFile string) { + m, ok := au.(Matcher) + if !ok { + t.Logf("[NOTICE] %T (%s) is not a Matcher", au, au) + return + } + + file, err := os.Open(archiveFile) + if err != nil { + t.Fatalf("[%s] opening file for matching: %v", au, err) + } + defer file.Close() + + tmpBuf := make([]byte, 2048) + io.ReadFull(file, tmpBuf) + + matched, err := m.Match(file) + if err != nil { + t.Fatalf("%s (%T): testing matching: got error, expected none: %v", m, m, err) + } + if !matched { + t.Fatalf("%s (%T): format should have matched, but didn't", m, m) + } +} + +// symmetricTest compares the contents of a destination directory to the contents +// of the test corpus and tests that they are equal. +func symmetricTest(t *testing.T, formatName, dest string) { + var expectedFileCount int + filepath.Walk("testdata", func(fpath string, info os.FileInfo, err error) error { + expectedFileCount++ + return nil + }) + // If outputs equals inputs, we're good; traverse output files // and compare file names, file contents, and file count. - var actualFileCount int filepath.Walk(dest, func(fpath string, info os.FileInfo, err error) error { if fpath == dest { @@ -65,111 +351,97 @@ func symmetricTest(t *testing.T, name string, ar Archiver) { origPath, err := filepath.Rel(dest, fpath) if err != nil { - t.Fatalf("%s: Error inducing original file path: %v", fpath, err) + t.Fatalf("[%s] %s: Error inducing original file path: %v", formatName, fpath, err) + } + + expectedFileInfo, err := os.Lstat(origPath) + if err != nil { + t.Fatalf("[%s] %s: Error obtaining original file info: %v", formatName, fpath, err) + } + actualFileInfo, err := os.Lstat(fpath) + if err != nil { + t.Fatalf("[%s] %s: Error obtaining actual file info: %v", formatName, fpath, err) + } + + if actualFileInfo.Mode() != expectedFileInfo.Mode() { + t.Fatalf("[%s] %s: File mode differed between on disk and compressed", formatName, + expectedFileInfo.Mode().String()+" : "+actualFileInfo.Mode().String()) } if info.IsDir() { // stat dir instead of read file - _, err := os.Stat(origPath) + _, err = os.Stat(origPath) if err != nil { - t.Fatalf("%s: Couldn't stat original directory (%s): %v", + t.Fatalf("[%s] %s: Couldn't stat original directory (%s): %v", formatName, fpath, origPath, err) } return nil } - expectedFileInfo, err := os.Stat(origPath) - if err != nil { - t.Fatalf("%s: Error obtaining original file info: %v", fpath, err) + if (actualFileInfo.Mode() & os.ModeSymlink) != 0 { + expectedLinkTarget, err := os.Readlink(origPath) + if err != nil { + t.Fatalf("[%s] %s: Couldn't read original symlink target: %v", formatName, origPath, err) + } + actualLinkTarget, err := os.Readlink(fpath) + if err != nil { + t.Fatalf("[%s] %s: Couldn't read actual symlink target: %v", formatName, fpath, err) + } + if expectedLinkTarget != actualLinkTarget { + t.Fatalf("[%s] %s: Symlink targets differed between on disk and compressed", formatName, origPath) + } + return nil } + expected, err := ioutil.ReadFile(origPath) if err != nil { - t.Fatalf("%s: Couldn't open original file (%s) from disk: %v", + t.Fatalf("[%s] %s: Couldn't open original file (%s) from disk: %v", formatName, fpath, origPath, err) } - - actualFileInfo, err := os.Stat(fpath) - if err != nil { - t.Fatalf("%s: Error obtaining actual file info: %v", fpath, err) - } actual, err := ioutil.ReadFile(fpath) if err != nil { - t.Fatalf("%s: Couldn't open new file from disk: %v", fpath, err) + t.Fatalf("[%s] %s: Couldn't open new file from disk: %v", formatName, fpath, err) } - if actualFileInfo.Mode() != expectedFileInfo.Mode() { - t.Fatalf("%s: File mode differed between on disk and compressed", - expectedFileInfo.Mode().String()+" : "+actualFileInfo.Mode().String()) - } if !bytes.Equal(expected, actual) { - t.Fatalf("%s: File contents differed between on disk and compressed", origPath) + t.Fatalf("[%s] %s: File contents differed between on disk and compressed", formatName, origPath) } return nil }) if got, want := actualFileCount, expectedFileCount; got != want { - t.Fatalf("Expected %d resulting files, got %d", want, got) + t.Fatalf("[%s] Expected %d resulting files, got %d", formatName, want, got) } } -func BenchmarkMake(b *testing.B) { - tmp, err := ioutil.TempDir("", "archiver") - if err != nil { - b.Fatal(err) - } - defer os.RemoveAll(tmp) - - for name, ar := range SupportedFormats { - name, ar := name, ar - b.Run(name, func(b *testing.B) { - // skip RAR for now - if _, ok := ar.(rarFormat); ok { - b.Skip("not supported") - } - outfile := filepath.Join(tmp, "benchMake-"+name) - for i := 0; i < b.N; i++ { - err = ar.Make(outfile, []string{"testdata"}) - if err != nil { - b.Fatalf("making archive: didn't expect an error, but got: %v", err) - } - } - }) - } +var archiveFormats = []interface{}{ + DefaultZip, + DefaultTar, + DefaultTarBz2, + DefaultTarGz, + DefaultTarLz4, + DefaultTarSz, + DefaultTarXz, } -func BenchmarkOpen(b *testing.B) { - tmp, err := ioutil.TempDir("", "archiver") - if err != nil { - b.Fatal(err) - } - defer os.RemoveAll(tmp) +type archiverUnarchiver interface { + Archiver + Unarchiver +} - for name, ar := range SupportedFormats { - name, ar := name, ar - b.Run(name, func(b *testing.B) { - // skip RAR for now - if _, ok := ar.(rarFormat); ok { - b.Skip("not supported") - } - // prepare a archive - outfile := filepath.Join(tmp, "benchMake-"+name) - err = ar.Make(outfile, []string{"testdata"}) - if err != nil { - b.Fatalf("open archive: didn't expect an error, but got: %v", err) - } - // prepare extraction destination - dest := filepath.Join(tmp, "extraction_test") - os.Mkdir(dest, 0755) - - // let's go - b.ResetTimer() - for i := 0; i < b.N; i++ { - err = ar.Open(outfile, dest) - if err != nil { - b.Fatalf("open archive: didn't expect an error, but got: %v", err) - } - } - }) - } +type fakeFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time + isDir bool + sys interface{} } + +func (ffi fakeFileInfo) Name() string { return ffi.name } +func (ffi fakeFileInfo) Size() int64 { return ffi.size } +func (ffi fakeFileInfo) Mode() os.FileMode { return ffi.mode } +func (ffi fakeFileInfo) ModTime() time.Time { return ffi.modTime } +func (ffi fakeFileInfo) IsDir() bool { return ffi.isDir } +func (ffi fakeFileInfo) Sys() interface{} { return ffi.sys } diff --git a/vendor/github.com/mholt/archiver/build.bash b/vendor/github.com/mholt/archiver/build.bash index b1bef114..225ffc2d 100755 --- a/vendor/github.com/mholt/archiver/build.bash +++ b/vendor/github.com/mholt/archiver/build.bash @@ -5,17 +5,9 @@ set -ex export CGO_ENABLED=0 -cd cmd/archiver -GOOS=linux GOARCH=386 go build -o ../../builds/archiver_linux_386 -GOOS=linux GOARCH=amd64 go build -o ../../builds/archiver_linux_amd64 -GOOS=linux GOARCH=arm go build -o ../../builds/archiver_linux_arm7 -GOOS=linux GOARCH=arm64 go build -o ../../builds/archiver_linux_arm64 -GOOS=darwin GOARCH=amd64 go build -o ../../builds/archiver_mac_amd64 -GOOS=windows GOARCH=386 go build -o ../../builds/archiver_windows_386.exe -GOOS=windows GOARCH=amd64 go build -o ../../builds/archiver_windows_amd64.exe -GOOS=freebsd GOARCH=386 go build -o ../../builds/archiver_freebsd_386 -GOOS=freebsd GOARCH=amd64 go build -o ../../builds/archiver_freebsd_amd64 -GOOS=freebsd GOARCH=arm go build -o ../../builds/archiver_freebsd_arm7 -GOOS=openbsd GOARCH=386 go build -o ../../builds/archiver_openbsd_386 -GOOS=openbsd GOARCH=amd64 go build -o ../../builds/archiver_openbsd_amd64 -cd ../.. \ No newline at end of file +cd cmd/arc +GOOS=linux GOARCH=amd64 go build -o ../../builds/arc_linux_amd64 +GOOS=linux GOARCH=arm go build -o ../../builds/arc_linux_arm7 +GOOS=darwin GOARCH=amd64 go build -o ../../builds/arc_mac_amd64 +GOOS=windows GOARCH=amd64 go build -o ../../builds/arc_windows_amd64.exe +cd ../.. diff --git a/vendor/github.com/mholt/archiver/bz2.go b/vendor/github.com/mholt/archiver/bz2.go new file mode 100644 index 00000000..2eb4ac2b --- /dev/null +++ b/vendor/github.com/mholt/archiver/bz2.go @@ -0,0 +1,64 @@ +package archiver + +import ( + "fmt" + "io" + "path/filepath" + + "github.com/dsnet/compress/bzip2" +) + +// Bz2 facilitates bzip2 compression. +type Bz2 struct { + CompressionLevel int +} + +// Compress reads in, compresses it, and writes it to out. +func (bz *Bz2) Compress(in io.Reader, out io.Writer) error { + w, err := bzip2.NewWriter(out, &bzip2.WriterConfig{ + Level: bz.CompressionLevel, + }) + if err != nil { + return err + } + defer w.Close() + _, err = io.Copy(w, in) + return err +} + +// Decompress reads in, decompresses it, and writes it to out. +func (bz *Bz2) Decompress(in io.Reader, out io.Writer) error { + r, err := bzip2.NewReader(in, nil) + if err != nil { + return err + } + defer r.Close() + _, err = io.Copy(out, r) + return err +} + +// CheckExt ensures the file extension matches the format. +func (bz *Bz2) CheckExt(filename string) error { + if filepath.Ext(filename) != ".bz2" { + return fmt.Errorf("filename must have a .bz2 extension") + } + return nil +} + +func (bz *Bz2) String() string { return "bz2" } + +// NewBz2 returns a new, default instance ready to be customized and used. +func NewBz2() *Bz2 { + return &Bz2{ + CompressionLevel: bzip2.DefaultCompression, + } +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Compressor(new(Bz2)) + _ = Decompressor(new(Bz2)) +) + +// DefaultBz2 is a default instance that is conveniently ready to use. +var DefaultBz2 = NewBz2() diff --git a/vendor/github.com/mholt/archiver/cmd/arc/main.go b/vendor/github.com/mholt/archiver/cmd/arc/main.go new file mode 100644 index 00000000..00f44270 --- /dev/null +++ b/vendor/github.com/mholt/archiver/cmd/arc/main.go @@ -0,0 +1,329 @@ +package main + +import ( + "archive/tar" + "archive/zip" + "bytes" + "compress/flate" + "flag" + "fmt" + "os" + "strings" + + "github.com/mholt/archiver" + "github.com/nwaples/rardecode" +) + +var ( + compressionLevel int + overwriteExisting bool + mkdirAll bool + selectiveCompression bool + implicitTopLevelFolder bool + continueOnError bool +) + +func init() { + flag.IntVar(&compressionLevel, "level", flate.DefaultCompression, "Compression level") + flag.BoolVar(&overwriteExisting, "overwrite", false, "Overwrite existing files") + flag.BoolVar(&mkdirAll, "mkdirs", false, "Make all necessary directories") + flag.BoolVar(&selectiveCompression, "smart", true, "Only compress files which are not already compressed (zip only)") + flag.BoolVar(&implicitTopLevelFolder, "folder-safe", true, "If an archive does not have a single top-level folder, create one implicitly") + flag.BoolVar(&continueOnError, "allow-errors", true, "Log errors and continue processing") +} + +func main() { + if len(os.Args) >= 2 && + (os.Args[1] == "-h" || os.Args[1] == "--help" || os.Args[1] == "help") { + fmt.Println(usageString()) + os.Exit(0) + } + if len(os.Args) < 3 { + fatal(usageString()) + } + flag.Parse() + + subcommand := flag.Arg(0) + + // get the format we're working with + iface, err := getFormat(subcommand) + if err != nil { + fatal(err) + } + + // run the desired command + switch subcommand { + case "archive": + a, ok := iface.(archiver.Archiver) + if !ok { + fatalf("the archive command does not support the %s format", iface) + } + err = a.Archive(flag.Args()[2:], flag.Arg(1)) + + case "unarchive": + u, ok := iface.(archiver.Unarchiver) + if !ok { + fatalf("the unarchive command does not support the %s format", iface) + } + err = u.Unarchive(flag.Arg(1), flag.Arg(2)) + + case "extract": + e, ok := iface.(archiver.Extractor) + if !ok { + fatalf("the extract command does not support the %s format", iface) + } + err = e.Extract(flag.Arg(1), flag.Arg(2), flag.Arg(3)) + + case "ls": + w, ok := iface.(archiver.Walker) + if !ok { + fatalf("the ls command does not support the %s format", iface) + } + + var count int + err = w.Walk(flag.Arg(1), func(f archiver.File) error { + count++ + switch h := f.Header.(type) { + case zip.FileHeader: + fmt.Printf("%s\t%d\t%d\t%s\t%s\n", + f.Mode(), + h.Method, + f.Size(), + f.ModTime(), + h.Name, + ) + case *tar.Header: + fmt.Printf("%s\t%s\t%s\t%d\t%s\t%s\n", + f.Mode(), + h.Uname, + h.Gname, + f.Size(), + f.ModTime(), + h.Name, + ) + + case *rardecode.FileHeader: + fmt.Printf("%s\t%d\t%d\t%s\t%s\n", + f.Mode(), + int(h.HostOS), + f.Size(), + f.ModTime(), + h.Name, + ) + + default: + fmt.Printf("%s\t%d\t%s\t?/%s\n", + f.Mode(), + f.Size(), + f.ModTime(), + f.Name(), // we don't know full path from this + ) + } + return nil + }) + + fmt.Printf("total %d\n", count) + + case "compress": + c, ok := iface.(archiver.Compressor) + if !ok { + fatalf("the compress command does not support the %s format", iface) + } + fc := archiver.FileCompressor{Compressor: c} + + in := flag.Arg(1) + out := flag.Arg(2) + + var deleteWhenDone bool + if cs, ok := c.(fmt.Stringer); ok && out == cs.String() { + out = in + "." + out + deleteWhenDone = true + } + + err = fc.CompressFile(in, out) + if err == nil && deleteWhenDone { + err = os.Remove(in) + } + + case "decompress": + c, ok := iface.(archiver.Decompressor) + if !ok { + fatalf("the compress command does not support the %s format", iface) + } + fc := archiver.FileCompressor{Decompressor: c} + + in := flag.Arg(1) + out := flag.Arg(2) + + var deleteWhenDone bool + if cs, ok := c.(fmt.Stringer); ok && out == "" { + out = strings.TrimSuffix(in, "."+cs.String()) + deleteWhenDone = true + } + + err = fc.DecompressFile(in, out) + if err == nil && deleteWhenDone { + err = os.Remove(in) + } + + default: + fatalf("unrecognized command: %s", flag.Arg(0)) + } + if err != nil { + fatal(err) + } +} + +func getFormat(subcommand string) (interface{}, error) { + // prepare the filename, with which we will find a suitable format + formatPos := 1 + if subcommand == "compress" { + formatPos = 2 + } + filename := flag.Arg(formatPos) + if subcommand == "compress" && !strings.Contains(filename, ".") { + filename = "." + filename // leading dot needed for extension matching + } + + // get the format by filename extension + f, err := archiver.ByExtension(filename) + if err != nil { + return nil, err + } + + // prepare a single Tar, in case it's needed + mytar := &archiver.Tar{ + OverwriteExisting: overwriteExisting, + MkdirAll: mkdirAll, + ImplicitTopLevelFolder: implicitTopLevelFolder, + ContinueOnError: continueOnError, + } + + // fully configure the new value + switch v := f.(type) { + case *archiver.Rar: + v.OverwriteExisting = overwriteExisting + v.MkdirAll = mkdirAll + v.ImplicitTopLevelFolder = implicitTopLevelFolder + v.ContinueOnError = continueOnError + v.Password = os.Getenv("ARCHIVE_PASSWORD") + case *archiver.Tar: + v = mytar + case *archiver.TarBz2: + v.Tar = mytar + v.CompressionLevel = compressionLevel + case *archiver.TarGz: + v.Tar = mytar + v.CompressionLevel = compressionLevel + case *archiver.TarLz4: + v.Tar = mytar + v.CompressionLevel = compressionLevel + case *archiver.TarSz: + v.Tar = mytar + case *archiver.TarXz: + v.Tar = mytar + case *archiver.Zip: + v.CompressionLevel = compressionLevel + v.OverwriteExisting = overwriteExisting + v.MkdirAll = mkdirAll + v.SelectiveCompression = selectiveCompression + v.ImplicitTopLevelFolder = implicitTopLevelFolder + v.ContinueOnError = continueOnError + case *archiver.Gz: + v.CompressionLevel = compressionLevel + case *archiver.Bz2: + v.CompressionLevel = compressionLevel + case *archiver.Lz4: + v.CompressionLevel = compressionLevel + case *archiver.Snappy: + // nothing to customize + case *archiver.Xz: + // nothing to customize + default: + return nil, fmt.Errorf("format does not support customization: %s", f) + } + + return f, nil +} + +func fatal(v ...interface{}) { + fmt.Fprintln(os.Stderr, v...) + os.Exit(1) +} + +func fatalf(s string, v ...interface{}) { + fmt.Fprintf(os.Stderr, s+"\n", v...) + os.Exit(1) +} + +func usageString() string { + buf := new(bytes.Buffer) + buf.WriteString(usage) + flag.CommandLine.SetOutput(buf) + flag.CommandLine.PrintDefaults() + return buf.String() +} + +const usage = `Usage: arc {archive|unarchive|extract|ls|compress|decompress|help} [arguments...] + archive + Create a new archive file. List the files/folders + to include in the archive; at least one required. + unarchive + Extract an archive file. Provide the archive to + open and the destination folder to extract into. + extract + Extract a single file or folder (recursively) from + an archive. First argument is the source archive, + second is the file to extract (exact path within the + archive is required), and third is destination. + ls + List the contents of the archive. + compress + Compresses a file, destination optional. + decompress + Decompresses a file, destination optional. + help + Display this help text. Also -h or --help. + + SPECIFYING THE ARCHIVE FORMAT + The format of the archive is determined by its + file extension. Supported extensions: + .zip + .tar + .tar.gz + .tgz + .tar.bz2 + .tbz2 + .tar.xz + .txz + .tar.lz4 + .tlz4 + .tar.sz + .tsz + .rar (open only) + .bz2 + .gz + .lz4 + .sz + .xz + + (DE)COMPRESSING SINGLE FILES + Some formats are compression-only, and can be used + with the compress and decompress commands on a + single file; they do not bundle multiple files. + + To replace a file when compressing, specify the + source file name for the first argument, and the + compression format (without leading dot) for the + second argument. To replace a file when decompressing, + specify only the source file and no destination. + + PASSWORD-PROTECTED RAR FILES + Export the ARCHIVE_PASSWORD environment variable + to be able to open password-protected rar archives. + + GLOBAL FLAG REFERENCE + The following global flags may be used before the + sub-command (some flags are format-specific): + +` diff --git a/vendor/github.com/mholt/archiver/cmd/archiver/main.go b/vendor/github.com/mholt/archiver/cmd/archiver/main.go deleted file mode 100644 index 8831aa85..00000000 --- a/vendor/github.com/mholt/archiver/cmd/archiver/main.go +++ /dev/null @@ -1,84 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/mholt/archiver" -) - -func main() { - if len(os.Args) < 3 { - fatal(usage) - } - - cmd, filename := os.Args[1], os.Args[2] - - for _, ff := range archiver.SupportedFormats { - if !ff.Match(filename) { - continue - } - var err error - switch cmd { - case "make": - if len(os.Args) < 4 { - fatal(usage) - } - err = ff.Make(filename, os.Args[3:]) - case "open": - dest := "" - if len(os.Args) == 4 { - dest = os.Args[3] - } else if len(os.Args) > 4 { - fatal(usage) - } - err = ff.Open(filename, dest) - default: - fatal(usage) - } - if err != nil { - fatal(err) - } - return - } - - fatalf("%s: Unsupported file extension", filename) -} - -func fatal(v ...interface{}) { - fmt.Fprintln(os.Stderr, v...) - os.Exit(1) -} - -func fatalf(s string, v ...interface{}) { - fmt.Fprintf(os.Stderr, s+"\n", v...) - os.Exit(1) -} - -const usage = `Usage: archiver {make|open} [files...] - make - Create a new archive file. List the files/folders - to include in the archive; at least one required. - open - Extract an archive file. Give only the archive to - open and the destination folder to extract into. - - Specifying archive format: - The format of the archive is determined by its - file extension. Supported extensions: - .zip - .tar - .tar.gz - .tgz - .tar.bz2 - .tbz2 - .tar.xz - .txz - .rar (open only) - - Existing files: - When creating an archive file that already exists, - archiver will overwrite the existing file. When - extracting files, archiver will NOT overwrite files - that already exist in the destination path; this - is treated as an error and extraction will abort.` diff --git a/vendor/github.com/mholt/archiver/doc_test.go b/vendor/github.com/mholt/archiver/doc_test.go new file mode 100644 index 00000000..aadcc2d2 --- /dev/null +++ b/vendor/github.com/mholt/archiver/doc_test.go @@ -0,0 +1,260 @@ +package archiver + +import ( + "fmt" + "io" + "log" + "net/http" + "os" + "strconv" +) + +// The simplest use of this package: create an archive file +// from a list of filenames. This is the recommended way to +// do so using a default configuration, as it guarantees +// the file format matches the file extension, because the +// format to write is determined by the given extension. +func ExampleArchive() { + // any files in this list are added + // to the top level of the archive; + // directories are recursively added + files := []string{ + "index.html", + "photo.jpg", + "blog", // directory + "/home/website/copyright.txt", + } + + // archive format is determined by file extension + err := Archive(files, "blog_site.zip") + if err != nil { + log.Fatal(err) + } +} + +// The simplest use of this package: extract all of an archive's +// contents to a folder on disk using the default configuration. +// The archive format is determined automatically. +func ExampleUnarchive() { + err := Unarchive("blog_site.zip", "extracted/mysite") + if err != nil { + log.Fatal(err) + } +} + +// In this example, the DefaultZip is being customized so that +// all calls to its methods will use that configuration. +func ExampleZip_default() { + DefaultZip.OverwriteExisting = true + DefaultZip.ImplicitTopLevelFolder = true + // any subsequent use of DefaultZip uses + // this modified configuration +} + +// Here we create our own instance of the Zip format. No need +// to use the constructor function (NewZip) or the default +// instance (DefaultZip) if we do not want to. Instantiating +// the type like this allows us to easily be very explicit +// about our configuration. +func ExampleZip_custom() { + z := &Zip{ + CompressionLevel: 3, + OverwriteExisting: false, + MkdirAll: true, + SelectiveCompression: true, + ImplicitTopLevelFolder: true, + ContinueOnError: false, + } + // z is now ready to use for whatever (this is a dumb example) + fmt.Println(z.CheckExt("test.zip")) +} + +// Much like the package-level Archive function, this creates an +// archive using the configuration of the Zip instance it is called +// on. The output filename must match the format's recognized file +// extension(s). +func ExampleZip_Archive() { + err := DefaultZip.Archive([]string{"..."}, "example.zip") + if err != nil { + log.Fatal(err) + } +} + +// It's easy to list the items in an archive. This example +// prints the name and size of each file in the archive. Like +// other top-level functions in this package, the format is +// inferred automatically for you. +func ExampleWalk() { + err := Walk("example.tar.gz", func(f File) error { + fmt.Println(f.Name(), f.Size()) + // you could also read the contents; f is an io.Reader! + return nil + }) + if err != nil { + log.Fatal(err) + } +} + +// This example extracts target.txt from inside example.rar +// and puts it into a folder on disk called output/dir. +func ExampleExtract() { + err := Extract("example.rar", "target.txt", "output/dir") + if err != nil { + log.Fatal(err) + } +} + +// This example demonstrates how to read an +// archive in a streaming fashion. The idea +// is that you can stream the bytes of an +// archive from a stream, regardless of +// whether it is an actual file on disk. +// This means that you can read a huge +// archive file-by-file rather than having +// to store it all on disk first. In this +// example, we read a hypothetical archive +// from a (fake) HTTP request body and +// print its file names and sizes. The +// files can be read, of course, but they +// do not have to be. +func ExampleZip_streamingRead() { + // for the sake of the example compiling, pretend we have an HTTP request + req := new(http.Request) + contentLen, err := strconv.Atoi(req.Header.Get("Content-Length")) + if err != nil { + log.Fatal(err) + } + + // the Zip format requires knowing the length of the stream, + // but other formats don't generally require it, so it + // could be left as 0 when using those + err = DefaultZip.Open(req.Body, int64(contentLen)) + if err != nil { + log.Fatal(err) + } + defer DefaultZip.Close() + + // Note that DefaultZip now contains some state that + // is critical to reading the stream until it is closed, + // so do not reuse it until then. + + // iterate each file in the archive until EOF + for { + f, err := DefaultZip.Read() + if err == io.EOF { + break + } + if err != nil { + log.Fatal(err) + } + + // f is an io.ReadCloser, so you can read its contents + // if you wish; or you can access its header info through + // f.Header or the embedded os.FileInfo + fmt.Println("File name:", f.Name(), "File size:", f.Size()) + + // be sure to close f before moving on!! + err = f.Close() + if err != nil { + log.Fatal(err) + } + } +} + +// This example demonstrates how to write an +// archive in a streaming fashion. The idea +// is that you can stream the bytes of a new +// archive that is created on-the-fly from +// generic streams. Those streams could be +// actual files on disk, or they could be over +// a network, or standard output, or any other +// io.Reader/io.Writer. This example only adds +// one file to the archive and writes the +// resulting archive to standard output, but you +// could add as many files as needed with a loop. +func ExampleZip_streamingWrite() { + err := DefaultZip.Create(os.Stdout) + if err != nil { + log.Fatal(err) + } + defer DefaultZip.Close() + + // Note that DefaultZip now contains state + // critical to a successful write until it + // is closed, so don't reuse it for anything + // else until then. + + // At this point, you can open an actual file + // to add to the archive, or the "file" could + // come from any io.ReadCloser stream. If you + // only have an io.Reader, you can use + // ReadFakeCloser to make it into an + // io.ReadCloser. + + // The next part is a little tricky if you + // don't have an actual file because you will + // need an os.FileInfo. Fortunately, that's an + // interface! So go ahead and implement it in + // whatever way makes the most sense to you. + // You'll also need to give the file a name + // for within the archive. In this example, + // we'll open a real file. + + file, err := os.Open("foo.txt") + if err != nil { + log.Fatal(err) + } + defer file.Close() + fileInfo, err := file.Stat() + if err != nil { + log.Fatal(err) + } + + err = DefaultZip.Write(File{ + FileInfo: FileInfo{ + FileInfo: fileInfo, + CustomName: "name/in/archive.txt", + }, + ReadCloser: file, // does not have to be an actual file + }) + if err != nil { + log.Fatal(err) + } +} + +// This example compresses a standard tar file into a tar.gz file. +// Compression formats are selected by file extension. +func ExampleCompressFile() { + err := CompressFile("example.tar", "example.tar.gz") + if err != nil { + log.Fatal(err) + } +} + +// This example changes the default configuration for +// the Gz compression format. +func ExampleCompressFile_custom() { + DefaultGz.CompressionLevel = 5 + // any calls to DefaultGz now use the modified configuration +} + +// This example creates a new Gz instance and +// uses it to compress a stream, writing to +// another stream. This is sometimes preferable +// over modifying the DefaultGz. +func ExampleGz_Compress_custom() { + gz := &Gz{CompressionLevel: 5} + err := gz.Compress(os.Stdin, os.Stdout) + if err != nil { + log.Fatal(err) + } +} + +// This example decompresses a gzipped tarball and writes +// it to an adjacent file. +func ExampleDecompressFile() { + err := DecompressFile("example.tar.gz", "example.tar") + if err != nil { + log.Fatal(err) + } +} diff --git a/vendor/github.com/mholt/archiver/filecompressor.go b/vendor/github.com/mholt/archiver/filecompressor.go new file mode 100644 index 00000000..ab1fd3b8 --- /dev/null +++ b/vendor/github.com/mholt/archiver/filecompressor.go @@ -0,0 +1,67 @@ +package archiver + +import ( + "fmt" + "os" +) + +// FileCompressor can compress and decompress single files. +type FileCompressor struct { + Compressor + Decompressor + + // Whether to overwrite existing files when creating files. + OverwriteExisting bool +} + +// CompressFile reads the source file and compresses it to destination. +// The destination must have a matching extension. +func (fc FileCompressor) CompressFile(source, destination string) error { + if err := fc.CheckExt(destination); err != nil { + return err + } + if fc.Compressor == nil { + return fmt.Errorf("no compressor specified") + } + if !fc.OverwriteExisting && fileExists(destination) { + return fmt.Errorf("file exists: %s", destination) + } + + in, err := os.Open(source) + if err != nil { + return err + } + defer in.Close() + + out, err := os.Create(destination) + if err != nil { + return err + } + defer out.Close() + + return fc.Compress(in, out) +} + +// DecompressFile reads the source file and decompresses it to destination. +func (fc FileCompressor) DecompressFile(source, destination string) error { + if fc.Decompressor == nil { + return fmt.Errorf("no decompressor specified") + } + if !fc.OverwriteExisting && fileExists(destination) { + return fmt.Errorf("file exists: %s", destination) + } + + in, err := os.Open(source) + if err != nil { + return err + } + defer in.Close() + + out, err := os.Create(destination) + if err != nil { + return err + } + defer out.Close() + + return fc.Decompress(in, out) +} diff --git a/vendor/github.com/mholt/archiver/filecompressor_test.go b/vendor/github.com/mholt/archiver/filecompressor_test.go new file mode 100644 index 00000000..44b27d7d --- /dev/null +++ b/vendor/github.com/mholt/archiver/filecompressor_test.go @@ -0,0 +1,122 @@ +package archiver + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +func TestCheckExtension(t *testing.T) { + testdir, err := ioutil.TempDir("", "archiver_checkext_test_") + if err != nil { + t.Fatalf("Making temporary directory: %v", err) + } + defer os.RemoveAll(testdir) + testfile, err := ioutil.TempFile(testdir, "compressor_test_input_*.txt") + if err != nil { + t.Fatalf("Making temporary file: %v", err) + } + defer os.Remove(testfile.Name()) + defer testfile.Close() + + for i, tc := range []struct { + checker ExtensionChecker + ext string // including leading dot + shouldErr bool + }{ + {checker: NewBz2(), ext: ".bz2", shouldErr: false}, + {checker: NewBz2(), ext: ".gz", shouldErr: true}, + + {checker: NewGz(), ext: ".gz", shouldErr: false}, + {checker: NewGz(), ext: ".sz", shouldErr: true}, + + {checker: NewLz4(), ext: ".lz4", shouldErr: false}, + {checker: NewLz4(), ext: ".xz", shouldErr: true}, + + {checker: NewSnappy(), ext: ".sz", shouldErr: false}, + {checker: NewSnappy(), ext: ".lz4", shouldErr: true}, + + {checker: NewXz(), ext: ".xz", shouldErr: false}, + {checker: NewXz(), ext: ".bz2", shouldErr: true}, + + {checker: NewZip(), ext: ".zip", shouldErr: false}, + {checker: NewZip(), ext: ".zip.gz", shouldErr: true}, + {checker: NewZip(), ext: ".tgz", shouldErr: true}, + {checker: NewZip(), ext: ".gz", shouldErr: true}, + + {checker: NewTar(), ext: ".tar", shouldErr: false}, + {checker: NewTar(), ext: ".zip", shouldErr: true}, + {checker: NewTar(), ext: ".tar.gz", shouldErr: true}, + {checker: NewTar(), ext: ".tgz", shouldErr: true}, + + {checker: NewTarBz2(), ext: ".tar.bz2", shouldErr: false}, + {checker: NewTarBz2(), ext: ".tbz2", shouldErr: false}, + {checker: NewTarBz2(), ext: ".zip", shouldErr: true}, + {checker: NewTarBz2(), ext: ".tar", shouldErr: true}, + {checker: NewTarBz2(), ext: ".bz2", shouldErr: true}, + + {checker: NewTarGz(), ext: ".tar.gz", shouldErr: false}, + {checker: NewTarGz(), ext: ".tgz", shouldErr: false}, + {checker: NewTarGz(), ext: ".zip", shouldErr: true}, + {checker: NewTarGz(), ext: ".tar", shouldErr: true}, + {checker: NewTarGz(), ext: ".gz", shouldErr: true}, + + {checker: NewTarLz4(), ext: ".tar.lz4", shouldErr: false}, + {checker: NewTarLz4(), ext: ".tlz4", shouldErr: false}, + {checker: NewTarLz4(), ext: ".zip", shouldErr: true}, + {checker: NewTarLz4(), ext: ".tar", shouldErr: true}, + {checker: NewTarLz4(), ext: ".lz4", shouldErr: true}, + + {checker: NewTarSz(), ext: ".tar.sz", shouldErr: false}, + {checker: NewTarSz(), ext: ".tsz", shouldErr: false}, + {checker: NewTarSz(), ext: ".zip", shouldErr: true}, + {checker: NewTarSz(), ext: ".tar", shouldErr: true}, + {checker: NewTarSz(), ext: ".sz", shouldErr: true}, + + {checker: NewTarXz(), ext: ".tar.xz", shouldErr: false}, + {checker: NewTarXz(), ext: ".txz", shouldErr: false}, + {checker: NewTarXz(), ext: ".zip", shouldErr: true}, + {checker: NewTarXz(), ext: ".tar", shouldErr: true}, + {checker: NewTarXz(), ext: ".xz", shouldErr: true}, + } { + err := tc.checker.CheckExt("test" + tc.ext) + if tc.shouldErr && err == nil { + t.Errorf("Test %d [%s - %s]: Expected an error when checking extension, but got none", + i, tc.checker, tc.ext) + } + if !tc.shouldErr && err != nil { + t.Errorf("Test %d [%s - %s]: Did not expect an error when checking extension, but got: %v", + i, tc.checker, tc.ext, err) + } + + // also ensure that methods which create files check the extension, + // to avoid confusion where the extension indicates one format but + // actual format is another + if a, ok := tc.checker.(Archiver); ok { + filename := fmt.Sprintf("test%d_archive%s", i, tc.ext) + err := a.Archive(nil, filepath.Join(testdir, filename)) + if tc.shouldErr && err == nil { + t.Errorf("Test %d [%s - %s]: Archive(): Expected an error with filename '%s' but got none", + i, tc.checker, tc.ext, filename) + } + if !tc.shouldErr && err != nil { + t.Errorf("Test %d [%s - %s]: Archive(): Did not expect an error with filename '%s', but got: %v", + i, tc.checker, tc.ext, filename, err) + } + } + if c, ok := tc.checker.(FileCompressor); ok { + filename := fmt.Sprintf("test%d_compress%s", i, tc.ext) + err := c.CompressFile(testfile.Name(), filepath.Join(testdir, filename)) + if tc.shouldErr && err == nil { + t.Errorf("Test %d [%s - %s]: Compress(): Expected an error with filename '%s' but got none", + i, tc.checker, tc.ext, filename) + } + if !tc.shouldErr && err != nil { + t.Errorf("Test %d [%s - %s]: Compress(): Did not expect an error with filename '%s', but got: %v", + i, tc.checker, tc.ext, filename, err) + } + } + } +} diff --git a/vendor/github.com/mholt/archiver/gz.go b/vendor/github.com/mholt/archiver/gz.go new file mode 100644 index 00000000..73671745 --- /dev/null +++ b/vendor/github.com/mholt/archiver/gz.go @@ -0,0 +1,61 @@ +package archiver + +import ( + "compress/gzip" + "fmt" + "io" + "path/filepath" +) + +// Gz facilitates gzip compression. +type Gz struct { + CompressionLevel int +} + +// Compress reads in, compresses it, and writes it to out. +func (gz *Gz) Compress(in io.Reader, out io.Writer) error { + w, err := gzip.NewWriterLevel(out, gz.CompressionLevel) + if err != nil { + return err + } + defer w.Close() + _, err = io.Copy(w, in) + return err +} + +// Decompress reads in, decompresses it, and writes it to out. +func (gz *Gz) Decompress(in io.Reader, out io.Writer) error { + r, err := gzip.NewReader(in) + if err != nil { + return err + } + defer r.Close() + _, err = io.Copy(out, r) + return err +} + +// CheckExt ensures the file extension matches the format. +func (gz *Gz) CheckExt(filename string) error { + if filepath.Ext(filename) != ".gz" { + return fmt.Errorf("filename must have a .gz extension") + } + return nil +} + +func (gz *Gz) String() string { return "gz" } + +// NewGz returns a new, default instance ready to be customized and used. +func NewGz() *Gz { + return &Gz{ + CompressionLevel: gzip.DefaultCompression, + } +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Compressor(new(Gz)) + _ = Decompressor(new(Gz)) +) + +// DefaultGz is a default instance that is conveniently ready to use. +var DefaultGz = NewGz() diff --git a/vendor/github.com/mholt/archiver/lz4.go b/vendor/github.com/mholt/archiver/lz4.go new file mode 100644 index 00000000..daff631d --- /dev/null +++ b/vendor/github.com/mholt/archiver/lz4.go @@ -0,0 +1,56 @@ +package archiver + +import ( + "fmt" + "io" + "path/filepath" + + "github.com/pierrec/lz4" +) + +// Lz4 facilitates LZ4 compression. +type Lz4 struct { + CompressionLevel int +} + +// Compress reads in, compresses it, and writes it to out. +func (lz *Lz4) Compress(in io.Reader, out io.Writer) error { + w := lz4.NewWriter(out) + w.Header.CompressionLevel = lz.CompressionLevel + defer w.Close() + _, err := io.Copy(w, in) + return err +} + +// Decompress reads in, decompresses it, and writes it to out. +func (lz *Lz4) Decompress(in io.Reader, out io.Writer) error { + r := lz4.NewReader(in) + _, err := io.Copy(out, r) + return err +} + +// CheckExt ensures the file extension matches the format. +func (lz *Lz4) CheckExt(filename string) error { + if filepath.Ext(filename) != ".lz4" { + return fmt.Errorf("filename must have a .lz4 extension") + } + return nil +} + +func (lz *Lz4) String() string { return "lz4" } + +// NewLz4 returns a new, default instance ready to be customized and used. +func NewLz4() *Lz4 { + return &Lz4{ + CompressionLevel: 9, // https://github.com/lz4/lz4/blob/1b819bfd633ae285df2dfe1b0589e1ec064f2873/lib/lz4hc.h#L48 + } +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Compressor(new(Lz4)) + _ = Decompressor(new(Lz4)) +) + +// DefaultLz4 is a default instance that is conveniently ready to use. +var DefaultLz4 = NewLz4() diff --git a/vendor/github.com/mholt/archiver/rar.go b/vendor/github.com/mholt/archiver/rar.go index a15a202b..ff8b915d 100644 --- a/vendor/github.com/mholt/archiver/rar.go +++ b/vendor/github.com/mholt/archiver/rar.go @@ -1,78 +1,390 @@ package archiver import ( + "bytes" "fmt" "io" + "log" "os" + "path" "path/filepath" "strings" + "time" "github.com/nwaples/rardecode" ) -// Rar is for RAR archive format -var Rar rarFormat +// Rar provides facilities for reading RAR archives. +// See https://www.rarlab.com/technote.htm. +type Rar struct { + // Whether to overwrite existing files; if false, + // an error is returned if the file exists. + OverwriteExisting bool -func init() { - RegisterFormat("Rar", Rar) -} + // Whether to make all the directories necessary + // to create a rar archive in the desired path. + MkdirAll bool + + // A single top-level folder can be implicitly + // created by the Unarchive method if the files + // to be extracted from the archive do not all + // have a common root. This roughly mimics the + // behavior of archival tools integrated into OS + // file browsers which create a subfolder to + // avoid unexpectedly littering the destination + // folder with potentially many files, causing a + // problematic cleanup/organization situation. + // This feature is available for both creation + // and extraction of archives, but may be slightly + // inefficient with lots and lots of files, + // especially on extraction. + ImplicitTopLevelFolder bool -type rarFormat struct{} + // If true, errors encountered during reading + // or writing a single file will be logged and + // the operation will continue on remaining files. + ContinueOnError bool -func (rarFormat) Match(filename string) bool { - // TODO: read file header to identify the format - return strings.HasSuffix(strings.ToLower(filename), ".rar") + // The password to open archives (optional). + Password string + + rr *rardecode.Reader // underlying stream reader + rc *rardecode.ReadCloser // supports multi-volume archives (files only) } -// Make makes a .rar archive, but this is not implemented because -// RAR is a proprietary format. It is here only for symmetry with -// the other archive formats in this package. -func (rarFormat) Make(rarPath string, filePaths []string) error { - return fmt.Errorf("make %s: RAR not implemented (proprietary format)", rarPath) +// CheckExt ensures the file extension matches the format. +func (*Rar) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".rar") { + return fmt.Errorf("filename must have a .rar extension") + } + return nil } -// Open extracts the RAR file at source and puts the contents -// into destination. -func (rarFormat) Open(source, destination string) error { - f, err := os.Open(source) - if err != nil { - return fmt.Errorf("%s: failed to open archive: %v", source, err) +// Unarchive unpacks the .rar file at source to destination. +// Destination will be treated as a folder name. It supports +// multi-volume archives. +func (r *Rar) Unarchive(source, destination string) error { + if !fileExists(destination) && r.MkdirAll { + err := mkdir(destination, 0755) + if err != nil { + return fmt.Errorf("preparing destination: %v", err) + } } - defer f.Close() - rr, err := rardecode.NewReader(f, "") + // if the files in the archive do not all share a common + // root, then make sure we extract to a single subfolder + // rather than potentially littering the destination... + if r.ImplicitTopLevelFolder { + var err error + destination, err = r.addTopLevelFolder(source, destination) + if err != nil { + return fmt.Errorf("scanning source archive: %v", err) + } + } + + err := r.OpenFile(source) if err != nil { - return fmt.Errorf("%s: failed to create reader: %v", source, err) + return fmt.Errorf("opening rar archive for reading: %v", err) } + defer r.Close() for { - header, err := rr.Next() + err := r.unrarNext(destination) if err == io.EOF { break - } else if err != nil { - return err } - - if header.IsDir { - err = mkdir(filepath.Join(destination, header.Name)) - if err != nil { - return err + if err != nil { + if r.ContinueOnError { + log.Printf("[ERROR] Reading file in rar archive: %v", err) + continue } - continue + return fmt.Errorf("reading file in rar archive: %v", err) } + } - // if files come before their containing folders, then we must - // create their folders before writing the file - err = mkdir(filepath.Dir(filepath.Join(destination, header.Name))) + return nil +} + +// addTopLevelFolder scans the files contained inside +// the tarball named sourceArchive and returns a modified +// destination if all the files do not share the same +// top-level folder. +func (r *Rar) addTopLevelFolder(sourceArchive, destination string) (string, error) { + file, err := os.Open(sourceArchive) + if err != nil { + return "", fmt.Errorf("opening source archive: %v", err) + } + defer file.Close() + + rc, err := rardecode.NewReader(file, r.Password) + if err != nil { + return "", fmt.Errorf("creating archive reader: %v", err) + } + + var files []string + for { + hdr, err := rc.Next() + if err == io.EOF { + break + } if err != nil { - return err + return "", fmt.Errorf("scanning tarball's file listing: %v", err) } + files = append(files, hdr.Name) + } - err = writeNewFile(filepath.Join(destination, header.Name), rr, header.Mode()) + if multipleTopLevels(files) { + destination = filepath.Join(destination, folderNameFromFileName(sourceArchive)) + } + + return destination, nil +} + +func (r *Rar) unrarNext(to string) error { + f, err := r.Read() + if err != nil { + return err // don't wrap error; calling loop must break on io.EOF + } + header, ok := f.Header.(*rardecode.FileHeader) + if !ok { + return fmt.Errorf("expected header to be *rardecode.FileHeader but was %T", f.Header) + } + return r.unrarFile(f, filepath.Join(to, header.Name)) +} + +func (r *Rar) unrarFile(f File, to string) error { + // do not overwrite existing files, if configured + if !f.IsDir() && !r.OverwriteExisting && fileExists(to) { + return fmt.Errorf("file already exists: %s", to) + } + + hdr, ok := f.Header.(*rardecode.FileHeader) + if !ok { + return fmt.Errorf("expected header to be *rardecode.FileHeader but was %T", f.Header) + } + + // if files come before their containing folders, then we must + // create their folders before writing the file + err := mkdir(filepath.Dir(to), 0755) + if err != nil { + return fmt.Errorf("making parent directories: %v", err) + } + + return writeNewFile(to, r.rr, hdr.Mode()) +} + +// OpenFile opens filename for reading. This method supports +// multi-volume archives, whereas Open does not (but Open +// supports any stream, not just files). +func (r *Rar) OpenFile(filename string) error { + if r.rr != nil { + return fmt.Errorf("rar archive is already open for reading") + } + var err error + r.rc, err = rardecode.OpenReader(filename, r.Password) + if err != nil { + return err + } + r.rr = &r.rc.Reader + return nil +} + +// Open opens t for reading an archive from +// in. The size parameter is not used. +func (r *Rar) Open(in io.Reader, size int64) error { + if r.rr != nil { + return fmt.Errorf("rar archive is already open for reading") + } + var err error + r.rr, err = rardecode.NewReader(in, r.Password) + return err +} + +// Read reads the next file from t, which must have +// already been opened for reading. If there are no +// more files, the error is io.EOF. The File must +// be closed when finished reading from it. +func (r *Rar) Read() (File, error) { + if r.rr == nil { + return File{}, fmt.Errorf("rar archive is not open") + } + + hdr, err := r.rr.Next() + if err != nil { + return File{}, err // don't wrap error; preserve io.EOF + } + + file := File{ + FileInfo: rarFileInfo{hdr}, + Header: hdr, + ReadCloser: ReadFakeCloser{r.rr}, + } + + return file, nil +} + +// Close closes the rar archive(s) opened by Create and Open. +func (r *Rar) Close() error { + var err error + if r.rc != nil { + rc := r.rc + r.rc = nil + err = rc.Close() + } + if r.rr != nil { + r.rr = nil + } + return err +} + +// Walk calls walkFn for each visited item in archive. +func (r *Rar) Walk(archive string, walkFn WalkFunc) error { + file, err := os.Open(archive) + if err != nil { + return fmt.Errorf("opening archive file: %v", err) + } + defer file.Close() + + err = r.Open(file, 0) + if err != nil { + return fmt.Errorf("opening archive: %v", err) + } + defer r.Close() + + for { + f, err := r.Read() + if err == io.EOF { + break + } if err != nil { - return err + if r.ContinueOnError { + log.Printf("[ERROR] Opening next file: %v", err) + continue + } + return fmt.Errorf("opening next file: %v", err) + } + err = walkFn(f) + if err != nil { + if err == ErrStopWalk { + break + } + if r.ContinueOnError { + log.Printf("[ERROR] Walking %s: %v", f.Name(), err) + continue + } + return fmt.Errorf("walking %s: %v", f.Name(), err) } } return nil } + +// Extract extracts a single file from the rar archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (r *Rar) Extract(source, target, destination string) error { + // target refers to a path inside the archive, which should be clean also + target = path.Clean(target) + + // if the target ends up being a directory, then + // we will continue walking and extracting files + // until we are no longer within that directory + var targetDirPath string + + return r.Walk(source, func(f File) error { + th, ok := f.Header.(*rardecode.FileHeader) + if !ok { + return fmt.Errorf("expected header to be *rardecode.FileHeader but was %T", f.Header) + } + + // importantly, cleaning the path strips tailing slash, + // which must be appended to folders within the archive + name := path.Clean(th.Name) + if f.IsDir() && target == name { + targetDirPath = path.Dir(name) + } + + if within(target, th.Name) { + // either this is the exact file we want, or is + // in the directory we want to extract + + // build the filename we will extract to + end, err := filepath.Rel(targetDirPath, th.Name) + if err != nil { + return fmt.Errorf("relativizing paths: %v", err) + } + joined := filepath.Join(destination, end) + + err = r.unrarFile(f, joined) + if err != nil { + return fmt.Errorf("extracting file %s: %v", th.Name, err) + } + + // if our target was not a directory, stop walk + if targetDirPath == "" { + return ErrStopWalk + } + } else if targetDirPath != "" { + // finished walking the entire directory + return ErrStopWalk + } + + return nil + }) +} + +// Match returns true if the format of file matches this +// type's format. It should not affect reader position. +func (*Rar) Match(file io.ReadSeeker) (bool, error) { + currentPos, err := file.Seek(0, io.SeekCurrent) + if err != nil { + return false, err + } + _, err = file.Seek(0, 0) + if err != nil { + return false, err + } + defer file.Seek(currentPos, io.SeekStart) + + buf := make([]byte, 8) + if n, err := file.Read(buf); err != nil || n < 8 { + return false, nil + } + hasTarHeader := bytes.Equal(buf[:7], []byte("Rar!\x1a\x07\x00")) || // ver 1.5 + bytes.Equal(buf, []byte("Rar!\x1a\x07\x01\x00")) // ver 5.0 + return hasTarHeader, nil +} + +func (r *Rar) String() string { return "rar" } + +// NewRar returns a new, default instance ready to be customized and used. +func NewRar() *Rar { + return &Rar{ + MkdirAll: true, + } +} + +type rarFileInfo struct { + fh *rardecode.FileHeader +} + +func (rfi rarFileInfo) Name() string { return rfi.fh.Name } +func (rfi rarFileInfo) Size() int64 { return rfi.fh.UnPackedSize } +func (rfi rarFileInfo) Mode() os.FileMode { return rfi.fh.Mode() } +func (rfi rarFileInfo) ModTime() time.Time { return rfi.fh.ModificationTime } +func (rfi rarFileInfo) IsDir() bool { return rfi.fh.IsDir } +func (rfi rarFileInfo) Sys() interface{} { return nil } + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(Rar)) + _ = Unarchiver(new(Rar)) + _ = Walker(new(Rar)) + _ = Extractor(new(Rar)) + _ = Matcher(new(Rar)) + _ = ExtensionChecker(new(Rar)) + _ = os.FileInfo(rarFileInfo{}) +) + +// DefaultRar is a default instance that is conveniently ready to use. +var DefaultRar = NewRar() diff --git a/vendor/github.com/mholt/archiver/sz.go b/vendor/github.com/mholt/archiver/sz.go new file mode 100644 index 00000000..39c5865e --- /dev/null +++ b/vendor/github.com/mholt/archiver/sz.go @@ -0,0 +1,51 @@ +package archiver + +import ( + "fmt" + "io" + "path/filepath" + + "github.com/golang/snappy" +) + +// Snappy facilitates Snappy compression. +type Snappy struct{} + +// Compress reads in, compresses it, and writes it to out. +func (s *Snappy) Compress(in io.Reader, out io.Writer) error { + w := snappy.NewWriter(out) + defer w.Close() + _, err := io.Copy(w, in) + return err +} + +// Decompress reads in, decompresses it, and writes it to out. +func (s *Snappy) Decompress(in io.Reader, out io.Writer) error { + r := snappy.NewReader(in) + _, err := io.Copy(out, r) + return err +} + +// CheckExt ensures the file extension matches the format. +func (s *Snappy) CheckExt(filename string) error { + if filepath.Ext(filename) != ".sz" { + return fmt.Errorf("filename must have a .sz extension") + } + return nil +} + +func (s *Snappy) String() string { return "sz" } + +// NewSnappy returns a new, default instance ready to be customized and used. +func NewSnappy() *Snappy { + return new(Snappy) +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Compressor(new(Snappy)) + _ = Decompressor(new(Snappy)) +) + +// DefaultSnappy is a default instance that is conveniently ready to use. +var DefaultSnappy = NewSnappy() diff --git a/vendor/github.com/mholt/archiver/tar.go b/vendor/github.com/mholt/archiver/tar.go index c3231d42..a770a1e3 100644 --- a/vendor/github.com/mholt/archiver/tar.go +++ b/vendor/github.com/mholt/archiver/tar.go @@ -2,156 +2,615 @@ package archiver import ( "archive/tar" + "bytes" "fmt" "io" + "log" "os" + "path" "path/filepath" + "strconv" "strings" ) -// Tar is for Tar format -var Tar tarFormat +// Tar provides facilities for operating TAR archives. +// See http://www.gnu.org/software/tar/manual/html_node/Standard.html. +type Tar struct { + // Whether to overwrite existing files; if false, + // an error is returned if the file exists. + OverwriteExisting bool -func init() { - RegisterFormat("Tar", Tar) -} + // Whether to make all the directories necessary + // to create a tar archive in the desired path. + MkdirAll bool + + // A single top-level folder can be implicitly + // created by the Archive or Unarchive methods + // if the files to be added to the archive + // or the files to be extracted from the archive + // do not all have a common root. This roughly + // mimics the behavior of archival tools integrated + // into OS file browsers which create a subfolder + // to avoid unexpectedly littering the destination + // folder with potentially many files, causing a + // problematic cleanup/organization situation. + // This feature is available for both creation + // and extraction of archives, but may be slightly + // inefficient with lots and lots of files, + // especially on extraction. + ImplicitTopLevelFolder bool -type tarFormat struct{} + // If true, errors encountered during reading + // or writing a single file will be logged and + // the operation will continue on remaining files. + ContinueOnError bool -func (tarFormat) Match(filename string) bool { - // TODO: read file header to identify the format - return strings.HasSuffix(strings.ToLower(filename), ".tar") + tw *tar.Writer + tr *tar.Reader + + readerWrapFn func(io.Reader) (io.Reader, error) + writerWrapFn func(io.Writer) (io.Writer, error) + cleanupWrapFn func() +} + +// CheckExt ensures the file extension matches the format. +func (*Tar) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".tar") { + return fmt.Errorf("filename must have a .tar extension") + } + return nil } -// Make creates a .tar file at tarPath containing the -// contents of files listed in filePaths. File paths can -// be those of regular files or directories. Regular -// files are stored at the 'root' of the archive, and -// directories are recursively added. -func (tarFormat) Make(tarPath string, filePaths []string) error { - out, err := os.Create(tarPath) +// Archive creates a tarball file at destination containing +// the files listed in sources. The destination must end with +// ".tar". File paths can be those of regular files or +// directories; directories will be recursively added. +func (t *Tar) Archive(sources []string, destination string) error { + err := t.CheckExt(destination) + if t.writerWrapFn == nil && err != nil { + return fmt.Errorf("checking extension: %v", err) + } + if !t.OverwriteExisting && fileExists(destination) { + return fmt.Errorf("file already exists: %s", destination) + } + + // make the folder to contain the resulting archive + // if it does not already exist + destDir := filepath.Dir(destination) + if t.MkdirAll && !fileExists(destDir) { + err := mkdir(destDir, 0755) + if err != nil { + return fmt.Errorf("making folder for destination: %v", err) + } + } + + out, err := os.Create(destination) if err != nil { - return fmt.Errorf("error creating %s: %v", tarPath, err) + return fmt.Errorf("creating %s: %v", destination, err) } defer out.Close() - tarWriter := tar.NewWriter(out) - defer tarWriter.Close() + err = t.Create(out) + if err != nil { + return fmt.Errorf("creating tar: %v", err) + } + defer t.Close() - return tarball(filePaths, tarWriter, tarPath) -} + var topLevelFolder string + if t.ImplicitTopLevelFolder && multipleTopLevels(sources) { + topLevelFolder = folderNameFromFileName(destination) + } -// tarball writes all files listed in filePaths into tarWriter, which is -// writing into a file located at dest. -func tarball(filePaths []string, tarWriter *tar.Writer, dest string) error { - for _, fpath := range filePaths { - err := tarFile(tarWriter, fpath, dest) + for _, source := range sources { + err := t.writeWalk(source, topLevelFolder, destination) if err != nil { - return err + return fmt.Errorf("walking %s: %v", source, err) } } + return nil } -// tarFile writes the file at source into tarWriter. It does so -// recursively for directories. -func tarFile(tarWriter *tar.Writer, source, dest string) error { - sourceInfo, err := os.Stat(source) +// Unarchive unpacks the .tar file at source to destination. +// Destination will be treated as a folder name. +func (t *Tar) Unarchive(source, destination string) error { + if !fileExists(destination) && t.MkdirAll { + err := mkdir(destination, 0755) + if err != nil { + return fmt.Errorf("preparing destination: %v", err) + } + } + + // if the files in the archive do not all share a common + // root, then make sure we extract to a single subfolder + // rather than potentially littering the destination... + if t.ImplicitTopLevelFolder { + var err error + destination, err = t.addTopLevelFolder(source, destination) + if err != nil { + return fmt.Errorf("scanning source archive: %v", err) + } + } + + file, err := os.Open(source) if err != nil { - return fmt.Errorf("%s: stat: %v", source, err) + return fmt.Errorf("opening source archive: %v", err) } + defer file.Close() - var baseDir string - if sourceInfo.IsDir() { - baseDir = filepath.Base(source) + err = t.Open(file, 0) + if err != nil { + return fmt.Errorf("opening tar archive for reading: %v", err) } + defer t.Close() - return filepath.Walk(source, func(path string, info os.FileInfo, err error) error { + for { + err := t.untarNext(destination) + if err == io.EOF { + break + } if err != nil { - return fmt.Errorf("error walking to %s: %v", path, err) + if t.ContinueOnError { + log.Printf("[ERROR] Reading file in tar archive: %v", err) + continue + } + return fmt.Errorf("reading file in tar archive: %v", err) } + } + + return nil +} + +// addTopLevelFolder scans the files contained inside +// the tarball named sourceArchive and returns a modified +// destination if all the files do not share the same +// top-level folder. +func (t *Tar) addTopLevelFolder(sourceArchive, destination string) (string, error) { + file, err := os.Open(sourceArchive) + if err != nil { + return "", fmt.Errorf("opening source archive: %v", err) + } + defer file.Close() - header, err := tar.FileInfoHeader(info, path) + // if the reader is to be wrapped, ensure we do that now + // or we will not be able to read the archive successfully + reader := io.Reader(file) + if t.readerWrapFn != nil { + reader, err = t.readerWrapFn(reader) if err != nil { - return fmt.Errorf("%s: making header: %v", path, err) + return "", fmt.Errorf("wrapping reader: %v", err) } + } + if t.cleanupWrapFn != nil { + defer t.cleanupWrapFn() + } - if baseDir != "" { - header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source)) - } + tr := tar.NewReader(reader) - if header.Name == dest { - // our new tar file is inside the directory being archived; skip it - return nil + var files []string + for { + hdr, err := tr.Next() + if err == io.EOF { + break } - - if info.IsDir() { - header.Name += "/" + if err != nil { + return "", fmt.Errorf("scanning tarball's file listing: %v", err) } + files = append(files, hdr.Name) + } + + if multipleTopLevels(files) { + destination = filepath.Join(destination, folderNameFromFileName(sourceArchive)) + } + + return destination, nil +} + +func (t *Tar) untarNext(to string) error { + f, err := t.Read() + if err != nil { + return err // don't wrap error; calling loop must break on io.EOF + } + header, ok := f.Header.(*tar.Header) + if !ok { + return fmt.Errorf("expected header to be *tar.Header but was %T", f.Header) + } + return t.untarFile(f, filepath.Join(to, header.Name)) +} + +func (t *Tar) untarFile(f File, to string) error { + // do not overwrite existing files, if configured + if !f.IsDir() && !t.OverwriteExisting && fileExists(to) { + return fmt.Errorf("file already exists: %s", to) + } + + hdr, ok := f.Header.(*tar.Header) + if !ok { + return fmt.Errorf("expected header to be *tar.Header but was %T", f.Header) + } + + switch hdr.Typeflag { + case tar.TypeDir: + return mkdir(to, f.Mode()) + case tar.TypeReg, tar.TypeRegA, tar.TypeChar, tar.TypeBlock, tar.TypeFifo: + return writeNewFile(to, f, f.Mode()) + case tar.TypeSymlink: + return writeNewSymbolicLink(to, hdr.Linkname) + case tar.TypeLink: + return writeNewHardLink(to, filepath.Join(to, hdr.Linkname)) + case tar.TypeXGlobalHeader: + return nil // ignore the pax global header from git-generated tarballs + default: + return fmt.Errorf("%s: unknown type flag: %c", hdr.Name, hdr.Typeflag) + } +} + +func (t *Tar) writeWalk(source, topLevelFolder, destination string) error { + sourceInfo, err := os.Stat(source) + if err != nil { + return fmt.Errorf("%s: stat: %v", source, err) + } + destAbs, err := filepath.Abs(destination) + if err != nil { + return fmt.Errorf("%s: getting absolute path of destination %s: %v", source, destination, err) + } - err = tarWriter.WriteHeader(header) + return filepath.Walk(source, func(fpath string, info os.FileInfo, err error) error { + handleErr := func(err error) error { + if t.ContinueOnError { + log.Printf("[ERROR] Walking %s: %v", fpath, err) + return nil + } + return err + } if err != nil { - return fmt.Errorf("%s: writing header: %v", path, err) + return handleErr(fmt.Errorf("traversing %s: %v", fpath, err)) + } + if info == nil { + return handleErr(fmt.Errorf("no file info")) } - if info.IsDir() { + // make sure we do not copy our output file into itself + fpathAbs, err := filepath.Abs(fpath) + if err != nil { + return handleErr(fmt.Errorf("%s: getting absolute path: %v", fpath, err)) + } + if within(fpathAbs, destAbs) { return nil } - if header.Typeflag == tar.TypeReg { - file, err := os.Open(path) + // build the name to be used within the archive + nameInArchive, err := makeNameInArchive(sourceInfo, source, topLevelFolder, fpath) + if err != nil { + return handleErr(err) + } + + var file io.ReadCloser + if info.Mode().IsRegular() { + file, err = os.Open(fpath) if err != nil { - return fmt.Errorf("%s: open: %v", path, err) + return handleErr(fmt.Errorf("%s: opening: %v", fpath, err)) } defer file.Close() - - _, err = io.CopyN(tarWriter, file, info.Size()) - if err != nil && err != io.EOF { - return fmt.Errorf("%s: copying contents: %v", path, err) - } } + err = t.Write(File{ + FileInfo: FileInfo{ + FileInfo: info, + CustomName: nameInArchive, + }, + ReadCloser: file, + }) + if err != nil { + return handleErr(fmt.Errorf("%s: writing: %s", fpath, err)) + } + return nil }) } -// Open untars source and puts the contents into destination. -func (tarFormat) Open(source, destination string) error { - f, err := os.Open(source) +// Create opens t for writing a tar archive to out. +func (t *Tar) Create(out io.Writer) error { + if t.tw != nil { + return fmt.Errorf("tar archive is already created for writing") + } + + // wrapping writers allows us to output + // compressed tarballs, for example + if t.writerWrapFn != nil { + var err error + out, err = t.writerWrapFn(out) + if err != nil { + return fmt.Errorf("wrapping writer: %v", err) + } + } + + t.tw = tar.NewWriter(out) + return nil +} + +// Write writes f to t, which must have been opened for writing first. +func (t *Tar) Write(f File) error { + if t.tw == nil { + return fmt.Errorf("tar archive was not created for writing first") + } + if f.FileInfo == nil { + return fmt.Errorf("no file info") + } + if f.FileInfo.Name() == "" { + return fmt.Errorf("missing file name") + } + + var linkTarget string + if isSymlink(f) { + var err error + linkTarget, err = os.Readlink(f.Name()) + if err != nil { + return fmt.Errorf("%s: readlink: %v", f.Name(), err) + } + } + + hdr, err := tar.FileInfoHeader(f, filepath.ToSlash(linkTarget)) + if err != nil { + return fmt.Errorf("%s: making header: %v", f.Name(), err) + } + + err = t.tw.WriteHeader(hdr) + if err != nil { + return fmt.Errorf("%s: writing header: %v", hdr.Name, err) + } + + if f.IsDir() { + return nil // directories have no contents + } + + if hdr.Typeflag == tar.TypeReg { + if f.ReadCloser == nil { + return fmt.Errorf("%s: no way to read file contents", f.Name()) + } + _, err := io.Copy(t.tw, f) + if err != nil { + return fmt.Errorf("%s: copying contents: %v", f.Name(), err) + } + } + + return nil +} + +// Open opens t for reading an archive from +// in. The size parameter is not used. +func (t *Tar) Open(in io.Reader, size int64) error { + if t.tr != nil { + return fmt.Errorf("tar archive is already open for reading") + } + // wrapping readers allows us to open compressed tarballs + if t.readerWrapFn != nil { + var err error + in, err = t.readerWrapFn(in) + if err != nil { + return fmt.Errorf("wrapping file reader: %v", err) + } + } + t.tr = tar.NewReader(in) + return nil +} + +// Read reads the next file from t, which must have +// already been opened for reading. If there are no +// more files, the error is io.EOF. The File must +// be closed when finished reading from it. +func (t *Tar) Read() (File, error) { + if t.tr == nil { + return File{}, fmt.Errorf("tar archive is not open") + } + + hdr, err := t.tr.Next() if err != nil { - return fmt.Errorf("%s: failed to open archive: %v", source, err) + return File{}, err // don't wrap error; preserve io.EOF + } + + file := File{ + FileInfo: hdr.FileInfo(), + Header: hdr, + ReadCloser: ReadFakeCloser{t.tr}, } - defer f.Close() - return untar(tar.NewReader(f), destination) + return file, nil } -// untar un-tarballs the contents of tr into destination. -func untar(tr *tar.Reader, destination string) error { +// Close closes the tar archive(s) opened by Create and Open. +func (t *Tar) Close() error { + var err error + if t.tr != nil { + t.tr = nil + } + if t.tw != nil { + tw := t.tw + t.tw = nil + err = tw.Close() + } + // make sure cleanup of "Reader/Writer wrapper" + // (say that ten times fast) happens AFTER the + // underlying stream is closed + if t.cleanupWrapFn != nil { + t.cleanupWrapFn() + } + return err +} + +// Walk calls walkFn for each visited item in archive. +func (t *Tar) Walk(archive string, walkFn WalkFunc) error { + file, err := os.Open(archive) + if err != nil { + return fmt.Errorf("opening archive file: %v", err) + } + defer file.Close() + + err = t.Open(file, 0) + if err != nil { + return fmt.Errorf("opening archive: %v", err) + } + defer t.Close() + for { - header, err := tr.Next() + f, err := t.Read() if err == io.EOF { break - } else if err != nil { - return err } - - if err := untarFile(tr, header, destination); err != nil { - return err + if err != nil { + if t.ContinueOnError { + log.Printf("[ERROR] Opening next file: %v", err) + continue + } + return fmt.Errorf("opening next file: %v", err) + } + err = walkFn(f) + if err != nil { + if err == ErrStopWalk { + break + } + if t.ContinueOnError { + log.Printf("[ERROR] Walking %s: %v", f.Name(), err) + continue + } + return fmt.Errorf("walking %s: %v", f.Name(), err) } } + return nil } -// untarFile untars a single file from tr with header header into destination. -func untarFile(tr *tar.Reader, header *tar.Header, destination string) error { - switch header.Typeflag { - case tar.TypeDir: - return mkdir(filepath.Join(destination, header.Name)) - case tar.TypeReg, tar.TypeRegA: - return writeNewFile(filepath.Join(destination, header.Name), tr, header.FileInfo().Mode()) - case tar.TypeSymlink: - return writeNewSymbolicLink(filepath.Join(destination, header.Name), header.Linkname) - default: - return fmt.Errorf("%s: unknown type flag: %c", header.Name, header.Typeflag) +// Extract extracts a single file from the tar archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (t *Tar) Extract(source, target, destination string) error { + // target refers to a path inside the archive, which should be clean also + target = path.Clean(target) + + // if the target ends up being a directory, then + // we will continue walking and extracting files + // until we are no longer within that directory + var targetDirPath string + + return t.Walk(source, func(f File) error { + th, ok := f.Header.(*tar.Header) + if !ok { + return fmt.Errorf("expected header to be *tar.Header but was %T", f.Header) + } + + // importantly, cleaning the path strips tailing slash, + // which must be appended to folders within the archive + name := path.Clean(th.Name) + if f.IsDir() && target == name { + targetDirPath = path.Dir(name) + } + + if within(target, th.Name) { + // either this is the exact file we want, or is + // in the directory we want to extract + + // build the filename we will extract to + end, err := filepath.Rel(targetDirPath, th.Name) + if err != nil { + return fmt.Errorf("relativizing paths: %v", err) + } + joined := filepath.Join(destination, end) + + err = t.untarFile(f, joined) + if err != nil { + return fmt.Errorf("extracting file %s: %v", th.Name, err) + } + + // if our target was not a directory, stop walk + if targetDirPath == "" { + return ErrStopWalk + } + } else if targetDirPath != "" { + // finished walking the entire directory + return ErrStopWalk + } + + return nil + }) +} + +// Match returns true if the format of file matches this +// type's format. It should not affect reader position. +func (*Tar) Match(file io.ReadSeeker) (bool, error) { + currentPos, err := file.Seek(0, io.SeekCurrent) + if err != nil { + return false, err } + _, err = file.Seek(0, 0) + if err != nil { + return false, err + } + defer file.Seek(currentPos, io.SeekStart) + + buf := make([]byte, tarBlockSize) + if _, err = io.ReadFull(file, buf); err != nil { + return false, nil + } + return hasTarHeader(buf), nil } + +// hasTarHeader checks passed bytes has a valid tar header or not. buf must +// contain at least 512 bytes and if not, it always returns false. +func hasTarHeader(buf []byte) bool { + if len(buf) < tarBlockSize { + return false + } + + b := buf[148:156] + b = bytes.Trim(b, " \x00") // clean up all spaces and null bytes + if len(b) == 0 { + return false // unknown format + } + hdrSum, err := strconv.ParseUint(string(b), 8, 64) + if err != nil { + return false + } + + // According to the go official archive/tar, Sun tar uses signed byte + // values so this calcs both signed and unsigned + var usum uint64 + var sum int64 + for i, c := range buf { + if 148 <= i && i < 156 { + c = ' ' // checksum field itself is counted as branks + } + usum += uint64(uint8(c)) + sum += int64(int8(c)) + } + + if hdrSum != usum && int64(hdrSum) != sum { + return false // invalid checksum + } + + return true +} + +func (t *Tar) String() string { return "tar" } + +// NewTar returns a new, default instance ready to be customized and used. +func NewTar() *Tar { + return &Tar{ + MkdirAll: true, + } +} + +const tarBlockSize = 512 + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(Tar)) + _ = Writer(new(Tar)) + _ = Archiver(new(Tar)) + _ = Unarchiver(new(Tar)) + _ = Walker(new(Tar)) + _ = Extractor(new(Tar)) + _ = Matcher(new(Tar)) + _ = ExtensionChecker(new(Rar)) +) + +// DefaultTar is a default instance that is conveniently ready to use. +var DefaultTar = NewTar() diff --git a/vendor/github.com/mholt/archiver/tarbz2.go b/vendor/github.com/mholt/archiver/tarbz2.go index 83e7fa58..e5870a7d 100644 --- a/vendor/github.com/mholt/archiver/tarbz2.go +++ b/vendor/github.com/mholt/archiver/tarbz2.go @@ -1,66 +1,126 @@ package archiver import ( - "archive/tar" "fmt" - "os" + "io" "strings" "github.com/dsnet/compress/bzip2" ) -// TarBz2 is for TarBz2 format -var TarBz2 tarBz2Format +// TarBz2 facilitates bzip2 compression +// (https://github.com/dsnet/compress/blob/master/doc/bzip2-format.pdf) +// of tarball archives. +type TarBz2 struct { + *Tar -func init() { - RegisterFormat("TarBz2", TarBz2) + CompressionLevel int } -type tarBz2Format struct{} - -func (tarBz2Format) Match(filename string) bool { - // TODO: read file header to identify the format - return strings.HasSuffix(strings.ToLower(filename), ".tar.bz2") || - strings.HasSuffix(strings.ToLower(filename), ".tbz2") +// CheckExt ensures the file extension matches the format. +func (*TarBz2) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".tar.bz2") && + !strings.HasSuffix(filename, ".tbz2") { + return fmt.Errorf("filename must have a .tar.bz2 or .tbz2 extension") + } + return nil } -// Make creates a .tar.bz2 file at tarbz2Path containing -// the contents of files listed in filePaths. File paths -// can be those of regular files or directories. Regular -// files are stored at the 'root' of the archive, and -// directories are recursively added. -func (tarBz2Format) Make(tarbz2Path string, filePaths []string) error { - out, err := os.Create(tarbz2Path) +// Archive creates a compressed tar file at destination +// containing the files listed in sources. The destination +// must end with ".tar.bz2" or ".tbz2". File paths can be +// those of regular files or directories; directories will +// be recursively added. +func (tbz2 *TarBz2) Archive(sources []string, destination string) error { + err := tbz2.CheckExt(destination) if err != nil { - return fmt.Errorf("error creating %s: %v", tarbz2Path, err) + return fmt.Errorf("output %s", err.Error()) } - defer out.Close() + tbz2.wrapWriter() + return tbz2.Tar.Archive(sources, destination) +} - bz2Writer, err := bzip2.NewWriter(out, nil) - if err != nil { - return fmt.Errorf("error compressing %s: %v", tarbz2Path, err) - } - defer bz2Writer.Close() +// Unarchive unpacks the compressed tarball at +// source to destination. Destination will be +// treated as a folder name. +func (tbz2 *TarBz2) Unarchive(source, destination string) error { + tbz2.wrapReader() + return tbz2.Tar.Unarchive(source, destination) +} - tarWriter := tar.NewWriter(bz2Writer) - defer tarWriter.Close() +// Walk calls walkFn for each visited item in archive. +func (tbz2 *TarBz2) Walk(archive string, walkFn WalkFunc) error { + tbz2.wrapReader() + return tbz2.Tar.Walk(archive, walkFn) +} - return tarball(filePaths, tarWriter, tarbz2Path) +// Create opens tbz2 for writing a compressed +// tar archive to out. +func (tbz2 *TarBz2) Create(out io.Writer) error { + tbz2.wrapWriter() + return tbz2.Tar.Create(out) } -// Open untars source and decompresses the contents into destination. -func (tarBz2Format) Open(source, destination string) error { - f, err := os.Open(source) - if err != nil { - return fmt.Errorf("%s: failed to open archive: %v", source, err) +// Open opens t for reading a compressed archive from +// in. The size parameter is not used. +func (tbz2 *TarBz2) Open(in io.Reader, size int64) error { + tbz2.wrapReader() + return tbz2.Tar.Open(in, size) +} + +// Extract extracts a single file from the tar archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (tbz2 *TarBz2) Extract(source, target, destination string) error { + tbz2.wrapReader() + return tbz2.Tar.Extract(source, target, destination) +} + +func (tbz2 *TarBz2) wrapWriter() { + var bz2w *bzip2.Writer + tbz2.Tar.writerWrapFn = func(w io.Writer) (io.Writer, error) { + var err error + bz2w, err = bzip2.NewWriter(w, &bzip2.WriterConfig{ + Level: tbz2.CompressionLevel, + }) + return bz2w, err + } + tbz2.Tar.cleanupWrapFn = func() { + bz2w.Close() } - defer f.Close() +} - bz2r, err := bzip2.NewReader(f, nil) - if err != nil { - return fmt.Errorf("error decompressing %s: %v", source, err) +func (tbz2 *TarBz2) wrapReader() { + var bz2r *bzip2.Reader + tbz2.Tar.readerWrapFn = func(r io.Reader) (io.Reader, error) { + var err error + bz2r, err = bzip2.NewReader(r, nil) + return bz2r, err + } + tbz2.Tar.cleanupWrapFn = func() { + bz2r.Close() } - defer bz2r.Close() +} - return untar(tar.NewReader(bz2r), destination) +func (tbz2 *TarBz2) String() string { return "tar.bz2" } + +// NewTarBz2 returns a new, default instance ready to be customized and used. +func NewTarBz2() *TarBz2 { + return &TarBz2{ + CompressionLevel: bzip2.DefaultCompression, + Tar: NewTar(), + } } + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(TarBz2)) + _ = Writer(new(TarBz2)) + _ = Archiver(new(TarBz2)) + _ = Unarchiver(new(TarBz2)) + _ = Walker(new(TarBz2)) + _ = Extractor(new(TarBz2)) +) + +// DefaultTarBz2 is a convenient archiver ready to use. +var DefaultTarBz2 = NewTarBz2() diff --git a/vendor/github.com/mholt/archiver/targz.go b/vendor/github.com/mholt/archiver/targz.go index 895b099c..311c8262 100644 --- a/vendor/github.com/mholt/archiver/targz.go +++ b/vendor/github.com/mholt/archiver/targz.go @@ -1,60 +1,124 @@ package archiver import ( - "archive/tar" "compress/gzip" "fmt" - "os" + "io" "strings" ) -// TarGz is for TarGz format -var TarGz tarGzFormat +// TarGz facilitates gzip compression +// (RFC 1952) of tarball archives. +type TarGz struct { + *Tar -func init() { - RegisterFormat("TarGz", TarGz) + // The compression level to use, as described + // in the compress/gzip package. + CompressionLevel int } -type tarGzFormat struct{} - -func (tarGzFormat) Match(filename string) bool { - // TODO: read file header to identify the format - return strings.HasSuffix(strings.ToLower(filename), ".tar.gz") || - strings.HasSuffix(strings.ToLower(filename), ".tgz") +// CheckExt ensures the file extension matches the format. +func (*TarGz) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".tar.gz") && + !strings.HasSuffix(filename, ".tgz") { + return fmt.Errorf("filename must have a .tar.gz or .tgz extension") + } + return nil } -// Make creates a .tar.gz file at targzPath containing -// the contents of files listed in filePaths. It works -// the same way Tar does, but with gzip compression. -func (tarGzFormat) Make(targzPath string, filePaths []string) error { - out, err := os.Create(targzPath) +// Archive creates a compressed tar file at destination +// containing the files listed in sources. The destination +// must end with ".tar.gz" or ".tgz". File paths can be +// those of regular files or directories; directories will +// be recursively added. +func (tgz *TarGz) Archive(sources []string, destination string) error { + err := tgz.CheckExt(destination) if err != nil { - return fmt.Errorf("error creating %s: %v", targzPath, err) + return fmt.Errorf("output %s", err.Error()) } - defer out.Close() + tgz.wrapWriter() + return tgz.Tar.Archive(sources, destination) +} + +// Unarchive unpacks the compressed tarball at +// source to destination. Destination will be +// treated as a folder name. +func (tgz *TarGz) Unarchive(source, destination string) error { + tgz.wrapReader() + return tgz.Tar.Unarchive(source, destination) +} - gzWriter := gzip.NewWriter(out) - defer gzWriter.Close() +// Walk calls walkFn for each visited item in archive. +func (tgz *TarGz) Walk(archive string, walkFn WalkFunc) error { + tgz.wrapReader() + return tgz.Tar.Walk(archive, walkFn) +} - tarWriter := tar.NewWriter(gzWriter) - defer tarWriter.Close() +// Create opens txz for writing a compressed +// tar archive to out. +func (tgz *TarGz) Create(out io.Writer) error { + tgz.wrapWriter() + return tgz.Tar.Create(out) +} - return tarball(filePaths, tarWriter, targzPath) +// Open opens t for reading a compressed archive from +// in. The size parameter is not used. +func (tgz *TarGz) Open(in io.Reader, size int64) error { + tgz.wrapReader() + return tgz.Tar.Open(in, size) } -// Open untars source and decompresses the contents into destination. -func (tarGzFormat) Open(source, destination string) error { - f, err := os.Open(source) - if err != nil { - return fmt.Errorf("%s: failed to open archive: %v", source, err) +// Extract extracts a single file from the tar archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (tgz *TarGz) Extract(source, target, destination string) error { + tgz.wrapReader() + return tgz.Tar.Extract(source, target, destination) +} + +func (tgz *TarGz) wrapWriter() { + var gzw *gzip.Writer + tgz.Tar.writerWrapFn = func(w io.Writer) (io.Writer, error) { + var err error + gzw, err = gzip.NewWriterLevel(w, tgz.CompressionLevel) + return gzw, err } - defer f.Close() + tgz.Tar.cleanupWrapFn = func() { + gzw.Close() + } +} - gzr, err := gzip.NewReader(f) - if err != nil { - return fmt.Errorf("%s: create new gzip reader: %v", source, err) +func (tgz *TarGz) wrapReader() { + var gzr *gzip.Reader + tgz.Tar.readerWrapFn = func(r io.Reader) (io.Reader, error) { + var err error + gzr, err = gzip.NewReader(r) + return gzr, err } - defer gzr.Close() + tgz.Tar.cleanupWrapFn = func() { + gzr.Close() + } +} - return untar(tar.NewReader(gzr), destination) +func (tgz *TarGz) String() string { return "tar.gz" } + +// NewTarGz returns a new, default instance ready to be customized and used. +func NewTarGz() *TarGz { + return &TarGz{ + CompressionLevel: gzip.DefaultCompression, + Tar: NewTar(), + } } + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(TarGz)) + _ = Writer(new(TarGz)) + _ = Archiver(new(TarGz)) + _ = Unarchiver(new(TarGz)) + _ = Walker(new(TarGz)) + _ = Extractor(new(TarGz)) +) + +// DefaultTarGz is a convenient archiver ready to use. +var DefaultTarGz = NewTarGz() diff --git a/vendor/github.com/mholt/archiver/tarlz4.go b/vendor/github.com/mholt/archiver/tarlz4.go new file mode 100644 index 00000000..4a178f69 --- /dev/null +++ b/vendor/github.com/mholt/archiver/tarlz4.go @@ -0,0 +1,122 @@ +package archiver + +import ( + "fmt" + "io" + "strings" + + "github.com/pierrec/lz4" +) + +// TarLz4 facilitates lz4 compression +// (https://github.com/lz4/lz4/tree/master/doc) +// of tarball archives. +type TarLz4 struct { + *Tar + + // The compression level to use when writing. + // Minimum 0 (fast compression), maximum 12 + // (most space savings). + CompressionLevel int +} + +// CheckExt ensures the file extension matches the format. +func (*TarLz4) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".tar.lz4") && + !strings.HasSuffix(filename, ".tlz4") { + + return fmt.Errorf("filename must have a .tar.lz4 or .tlz4 extension") + } + return nil +} + +// Archive creates a compressed tar file at destination +// containing the files listed in sources. The destination +// must end with ".tar.lz4" or ".tlz4". File paths can be +// those of regular files or directories; directories will +// be recursively added. +func (tlz4 *TarLz4) Archive(sources []string, destination string) error { + err := tlz4.CheckExt(destination) + if err != nil { + return fmt.Errorf("output %s", err.Error()) + } + tlz4.wrapWriter() + return tlz4.Tar.Archive(sources, destination) +} + +// Unarchive unpacks the compressed tarball at +// source to destination. Destination will be +// treated as a folder name. +func (tlz4 *TarLz4) Unarchive(source, destination string) error { + tlz4.wrapReader() + return tlz4.Tar.Unarchive(source, destination) +} + +// Walk calls walkFn for each visited item in archive. +func (tlz4 *TarLz4) Walk(archive string, walkFn WalkFunc) error { + tlz4.wrapReader() + return tlz4.Tar.Walk(archive, walkFn) +} + +// Create opens tlz4 for writing a compressed +// tar archive to out. +func (tlz4 *TarLz4) Create(out io.Writer) error { + tlz4.wrapWriter() + return tlz4.Tar.Create(out) +} + +// Open opens t for reading a compressed archive from +// in. The size parameter is not used. +func (tlz4 *TarLz4) Open(in io.Reader, size int64) error { + tlz4.wrapReader() + return tlz4.Tar.Open(in, size) +} + +// Extract extracts a single file from the tar archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (tlz4 *TarLz4) Extract(source, target, destination string) error { + tlz4.wrapReader() + return tlz4.Tar.Extract(source, target, destination) +} + +func (tlz4 *TarLz4) wrapWriter() { + var lz4w *lz4.Writer + tlz4.Tar.writerWrapFn = func(w io.Writer) (io.Writer, error) { + lz4w = lz4.NewWriter(w) + lz4w.Header.CompressionLevel = tlz4.CompressionLevel + return lz4w, nil + } + tlz4.Tar.cleanupWrapFn = func() { + lz4w.Close() + } +} + +func (tlz4 *TarLz4) wrapReader() { + tlz4.Tar.readerWrapFn = func(r io.Reader) (io.Reader, error) { + return lz4.NewReader(r), nil + } +} + +func (tlz4 *TarLz4) String() string { return "tar.lz4" } + +// NewTarLz4 returns a new, default instance ready to be customized and used. +func NewTarLz4() *TarLz4 { + return &TarLz4{ + CompressionLevel: 9, // https://github.com/lz4/lz4/blob/1b819bfd633ae285df2dfe1b0589e1ec064f2873/lib/lz4hc.h#L48 + Tar: NewTar(), + } +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(TarLz4)) + _ = Writer(new(TarLz4)) + _ = Archiver(new(TarLz4)) + _ = Unarchiver(new(TarLz4)) + _ = Walker(new(TarLz4)) + _ = Extractor(new(TarLz4)) +) + +// DefaultTarLz4 is a convenient archiver ready to use. +var DefaultTarLz4 = NewTarLz4() diff --git a/vendor/github.com/mholt/archiver/tarsz.go b/vendor/github.com/mholt/archiver/tarsz.go new file mode 100644 index 00000000..0569e664 --- /dev/null +++ b/vendor/github.com/mholt/archiver/tarsz.go @@ -0,0 +1,114 @@ +package archiver + +import ( + "fmt" + "io" + "strings" + + "github.com/golang/snappy" +) + +// TarSz facilitates Snappy compression +// (https://github.com/google/snappy) +// of tarball archives. +type TarSz struct { + *Tar +} + +// CheckExt ensures the file extension matches the format. +func (*TarSz) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".tar.sz") && + !strings.HasSuffix(filename, ".tsz") { + return fmt.Errorf("filename must have a .tar.sz or .tsz extension") + } + return nil +} + +// Archive creates a compressed tar file at destination +// containing the files listed in sources. The destination +// must end with ".tar.sz" or ".tsz". File paths can be +// those of regular files or directories; directories will +// be recursively added. +func (tsz *TarSz) Archive(sources []string, destination string) error { + err := tsz.CheckExt(destination) + if err != nil { + return fmt.Errorf("output %s", err.Error()) + } + tsz.wrapWriter() + return tsz.Tar.Archive(sources, destination) +} + +// Unarchive unpacks the compressed tarball at +// source to destination. Destination will be +// treated as a folder name. +func (tsz *TarSz) Unarchive(source, destination string) error { + tsz.wrapReader() + return tsz.Tar.Unarchive(source, destination) +} + +// Walk calls walkFn for each visited item in archive. +func (tsz *TarSz) Walk(archive string, walkFn WalkFunc) error { + tsz.wrapReader() + return tsz.Tar.Walk(archive, walkFn) +} + +// Create opens tsz for writing a compressed +// tar archive to out. +func (tsz *TarSz) Create(out io.Writer) error { + tsz.wrapWriter() + return tsz.Tar.Create(out) +} + +// Open opens t for reading a compressed archive from +// in. The size parameter is not used. +func (tsz *TarSz) Open(in io.Reader, size int64) error { + tsz.wrapReader() + return tsz.Tar.Open(in, size) +} + +// Extract extracts a single file from the tar archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (tsz *TarSz) Extract(source, target, destination string) error { + tsz.wrapReader() + return tsz.Tar.Extract(source, target, destination) +} + +func (tsz *TarSz) wrapWriter() { + var sw *snappy.Writer + tsz.Tar.writerWrapFn = func(w io.Writer) (io.Writer, error) { + sw = snappy.NewWriter(w) + return sw, nil + } + tsz.Tar.cleanupWrapFn = func() { + sw.Close() + } +} + +func (tsz *TarSz) wrapReader() { + tsz.Tar.readerWrapFn = func(r io.Reader) (io.Reader, error) { + return snappy.NewReader(r), nil + } +} + +func (tsz *TarSz) String() string { return "tar.sz" } + +// NewTarSz returns a new, default instance ready to be customized and used. +func NewTarSz() *TarSz { + return &TarSz{ + Tar: NewTar(), + } +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(TarSz)) + _ = Writer(new(TarSz)) + _ = Archiver(new(TarSz)) + _ = Unarchiver(new(TarSz)) + _ = Walker(new(TarSz)) + _ = Extractor(new(TarSz)) +) + +// DefaultTarSz is a convenient archiver ready to use. +var DefaultTarSz = NewTarSz() diff --git a/vendor/github.com/mholt/archiver/tarxz.go b/vendor/github.com/mholt/archiver/tarxz.go index 9bffce73..5679a067 100644 --- a/vendor/github.com/mholt/archiver/tarxz.go +++ b/vendor/github.com/mholt/archiver/tarxz.go @@ -1,66 +1,119 @@ package archiver import ( - "archive/tar" "fmt" - "os" + "io" "strings" "github.com/ulikunitz/xz" + fastxz "github.com/xi2/xz" ) -// TarXZ is for TarXZ format -var TarXZ xzFormat - -func init() { - RegisterFormat("TarXZ", TarXZ) +// TarXz facilitates xz compression +// (https://tukaani.org/xz/format.html) +// of tarball archives. +type TarXz struct { + *Tar } -type xzFormat struct{} - -// Match returns whether filename matches this format. -func (xzFormat) Match(filename string) bool { - // TODO: read file header to identify the format - return strings.HasSuffix(strings.ToLower(filename), ".tar.xz") || - strings.HasSuffix(strings.ToLower(filename), ".txz") +// CheckExt ensures the file extension matches the format. +func (*TarXz) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".tar.xz") && + !strings.HasSuffix(filename, ".txz") { + return fmt.Errorf("filename must have a .tar.xz or .txz extension") + } + return nil } -// Make creates a .tar.xz file at xzPath containing -// the contents of files listed in filePaths. File -// paths can be those of regular files or directories. -// Regular files are stored at the 'root' of the -// archive, and directories are recursively added. -func (xzFormat) Make(xzPath string, filePaths []string) error { - out, err := os.Create(xzPath) +// Archive creates a compressed tar file at destination +// containing the files listed in sources. The destination +// must end with ".tar.xz" or ".txz". File paths can be +// those of regular files or directories; directories will +// be recursively added. +func (txz *TarXz) Archive(sources []string, destination string) error { + err := txz.CheckExt(destination) if err != nil { - return fmt.Errorf("error creating %s: %v", xzPath, err) + return fmt.Errorf("output %s", err.Error()) } - defer out.Close() + txz.wrapWriter() + return txz.Tar.Archive(sources, destination) +} - xzWriter, err := xz.NewWriter(out) - if err != nil { - return fmt.Errorf("error compressing %s: %v", xzPath, err) - } - defer xzWriter.Close() +// Unarchive unpacks the compressed tarball at +// source to destination. Destination will be +// treated as a folder name. +func (txz *TarXz) Unarchive(source, destination string) error { + txz.wrapReader() + return txz.Tar.Unarchive(source, destination) +} - tarWriter := tar.NewWriter(xzWriter) - defer tarWriter.Close() +// Walk calls walkFn for each visited item in archive. +func (txz *TarXz) Walk(archive string, walkFn WalkFunc) error { + txz.wrapReader() + return txz.Tar.Walk(archive, walkFn) +} - return tarball(filePaths, tarWriter, xzPath) +// Create opens txz for writing a compressed +// tar archive to out. +func (txz *TarXz) Create(out io.Writer) error { + txz.wrapWriter() + return txz.Tar.Create(out) } -// Open untars source and decompresses the contents into destination. -func (xzFormat) Open(source, destination string) error { - f, err := os.Open(source) - if err != nil { - return fmt.Errorf("%s: failed to open archive: %v", source, err) +// Open opens t for reading a compressed archive from +// in. The size parameter is not used. +func (txz *TarXz) Open(in io.Reader, size int64) error { + txz.wrapReader() + return txz.Tar.Open(in, size) +} + +// Extract extracts a single file from the tar archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (txz *TarXz) Extract(source, target, destination string) error { + txz.wrapReader() + return txz.Tar.Extract(source, target, destination) +} + +func (txz *TarXz) wrapWriter() { + var xzw *xz.Writer + txz.Tar.writerWrapFn = func(w io.Writer) (io.Writer, error) { + var err error + xzw, err = xz.NewWriter(w) + return xzw, err + } + txz.Tar.cleanupWrapFn = func() { + xzw.Close() } - defer f.Close() +} - xzReader, err := xz.NewReader(f) - if err != nil { - return fmt.Errorf("error decompressing %s: %v", source, err) +func (txz *TarXz) wrapReader() { + var xzr *fastxz.Reader + txz.Tar.readerWrapFn = func(r io.Reader) (io.Reader, error) { + var err error + xzr, err = fastxz.NewReader(r, 0) + return xzr, err } +} - return untar(tar.NewReader(xzReader), destination) +func (txz *TarXz) String() string { return "tar.xz" } + +// NewTarXz returns a new, default instance ready to be customized and used. +func NewTarXz() *TarXz { + return &TarXz{ + Tar: NewTar(), + } } + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(TarXz)) + _ = Writer(new(TarXz)) + _ = Archiver(new(TarXz)) + _ = Unarchiver(new(TarXz)) + _ = Walker(new(TarXz)) + _ = Extractor(new(TarXz)) +) + +// DefaultTarXz is a convenient archiver ready to use. +var DefaultTarXz = NewTarXz() diff --git a/vendor/github.com/mholt/archiver/testdata/exist b/vendor/github.com/mholt/archiver/testdata/exist new file mode 120000 index 00000000..b8f11965 --- /dev/null +++ b/vendor/github.com/mholt/archiver/testdata/exist @@ -0,0 +1 @@ +/target/does/not/exist \ No newline at end of file diff --git a/vendor/github.com/mholt/archiver/testdata/proverb3.txt b/vendor/github.com/mholt/archiver/testdata/proverb3.txt new file mode 120000 index 00000000..3b870115 --- /dev/null +++ b/vendor/github.com/mholt/archiver/testdata/proverb3.txt @@ -0,0 +1 @@ +proverbs/extra/proverb3.txt \ No newline at end of file diff --git a/vendor/github.com/mholt/archiver/xz.go b/vendor/github.com/mholt/archiver/xz.go new file mode 100644 index 00000000..c60d5eae --- /dev/null +++ b/vendor/github.com/mholt/archiver/xz.go @@ -0,0 +1,58 @@ +package archiver + +import ( + "fmt" + "io" + "path/filepath" + + "github.com/ulikunitz/xz" + fastxz "github.com/xi2/xz" +) + +// Xz facilitates XZ compression. +type Xz struct{} + +// Compress reads in, compresses it, and writes it to out. +func (x *Xz) Compress(in io.Reader, out io.Writer) error { + w, err := xz.NewWriter(out) + if err != nil { + return err + } + defer w.Close() + _, err = io.Copy(w, in) + return err +} + +// Decompress reads in, decompresses it, and writes it to out. +func (x *Xz) Decompress(in io.Reader, out io.Writer) error { + r, err := fastxz.NewReader(in, 0) + if err != nil { + return err + } + _, err = io.Copy(out, r) + return err +} + +// CheckExt ensures the file extension matches the format. +func (x *Xz) CheckExt(filename string) error { + if filepath.Ext(filename) != ".xz" { + return fmt.Errorf("filename must have a .xz extension") + } + return nil +} + +func (x *Xz) String() string { return "xz" } + +// NewXz returns a new, default instance ready to be customized and used. +func NewXz() *Xz { + return new(Xz) +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Compressor(new(Xz)) + _ = Decompressor(new(Xz)) +) + +// DefaultXz is a default instance that is conveniently ready to use. +var DefaultXz = NewXz() diff --git a/vendor/github.com/mholt/archiver/zip.go b/vendor/github.com/mholt/archiver/zip.go index 9b535379..192bf607 100644 --- a/vendor/github.com/mholt/archiver/zip.go +++ b/vendor/github.com/mholt/archiver/zip.go @@ -1,180 +1,605 @@ -// Package archiver makes it super easy to create and open .zip, -// .tar.gz, and .tar.bz2 files. package archiver import ( "archive/zip" + "bytes" + "compress/flate" "fmt" "io" + "log" "os" "path" "path/filepath" "strings" ) -// Zip is for Zip format -var Zip zipFormat +// Zip provides facilities for operating ZIP archives. +// See https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT. +type Zip struct { + // The compression level to use, as described + // in the compress/flate package. + CompressionLevel int -func init() { - RegisterFormat("Zip", Zip) -} + // Whether to overwrite existing files; if false, + // an error is returned if the file exists. + OverwriteExisting bool + + // Whether to make all the directories necessary + // to create a zip archive in the desired path. + MkdirAll bool + + // If enabled, selective compression will only + // compress files which are not already in a + // compressed format; this is decided based + // simply on file extension. + SelectiveCompression bool -type zipFormat struct{} + // A single top-level folder can be implicitly + // created by the Archive or Unarchive methods + // if the files to be added to the archive + // or the files to be extracted from the archive + // do not all have a common root. This roughly + // mimics the behavior of archival tools integrated + // into OS file browsers which create a subfolder + // to avoid unexpectedly littering the destination + // folder with potentially many files, causing a + // problematic cleanup/organization situation. + // This feature is available for both creation + // and extraction of archives, but may be slightly + // inefficient with lots and lots of files, + // especially on extraction. + ImplicitTopLevelFolder bool -func (zipFormat) Match(filename string) bool { - // TODO: read file header to identify the format - return strings.HasSuffix(strings.ToLower(filename), ".zip") + // If true, errors encountered during reading + // or writing a single file will be logged and + // the operation will continue on remaining files. + ContinueOnError bool + + zw *zip.Writer + zr *zip.Reader + ridx int } -// Make creates a .zip file in the location zipPath containing -// the contents of files listed in filePaths. File paths -// can be those of regular files or directories. Regular -// files are stored at the 'root' of the archive, and -// directories are recursively added. -// -// Files with an extension for formats that are already -// compressed will be stored only, not compressed. -func (zipFormat) Make(zipPath string, filePaths []string) error { - out, err := os.Create(zipPath) +// CheckExt ensures the file extension matches the format. +func (*Zip) CheckExt(filename string) error { + if !strings.HasSuffix(filename, ".zip") { + return fmt.Errorf("filename must have a .zip extension") + } + return nil +} + +// Archive creates a .zip file at destination containing +// the files listed in sources. The destination must end +// with ".zip". File paths can be those of regular files +// or directories. Regular files are stored at the 'root' +// of the archive, and directories are recursively added. +func (z *Zip) Archive(sources []string, destination string) error { + err := z.CheckExt(destination) if err != nil { - return fmt.Errorf("error creating %s: %v", zipPath, err) + return fmt.Errorf("checking extension: %v", err) + } + if !z.OverwriteExisting && fileExists(destination) { + return fmt.Errorf("file already exists: %s", destination) } - defer out.Close() - w := zip.NewWriter(out) - for _, fpath := range filePaths { - err = zipFile(w, fpath) + // make the folder to contain the resulting archive + // if it does not already exist + destDir := filepath.Dir(destination) + if z.MkdirAll && !fileExists(destDir) { + err := mkdir(destDir, 0755) if err != nil { - w.Close() - return err + return fmt.Errorf("making folder for destination: %v", err) } } - return w.Close() -} + out, err := os.Create(destination) + if err != nil { + return fmt.Errorf("creating %s: %v", destination, err) + } + defer out.Close() -func zipFile(w *zip.Writer, source string) error { - sourceInfo, err := os.Stat(source) + err = z.Create(out) if err != nil { - return fmt.Errorf("%s: stat: %v", source, err) + return fmt.Errorf("creating zip: %v", err) } + defer z.Close() - var baseDir string - if sourceInfo.IsDir() { - baseDir = filepath.Base(source) + var topLevelFolder string + if z.ImplicitTopLevelFolder && multipleTopLevels(sources) { + topLevelFolder = folderNameFromFileName(destination) } - return filepath.Walk(source, func(fpath string, info os.FileInfo, err error) error { + for _, source := range sources { + err := z.writeWalk(source, topLevelFolder, destination) if err != nil { - return fmt.Errorf("walking to %s: %v", fpath, err) + return fmt.Errorf("walking %s: %v", source, err) } + } + + return nil +} - header, err := zip.FileInfoHeader(info) +// Unarchive unpacks the .zip file at source to destination. +// Destination will be treated as a folder name. +func (z *Zip) Unarchive(source, destination string) error { + if !fileExists(destination) && z.MkdirAll { + err := mkdir(destination, 0755) if err != nil { - return fmt.Errorf("%s: getting header: %v", fpath, err) + return fmt.Errorf("preparing destination: %v", err) } + } + + file, err := os.Open(source) + if err != nil { + return fmt.Errorf("opening source file: %v", err) + } + defer file.Close() - if baseDir != "" { - header.Name = path.Join(baseDir, strings.TrimPrefix(fpath, source)) + fileInfo, err := file.Stat() + if err != nil { + return fmt.Errorf("statting source file: %v", err) + } + + err = z.Open(file, fileInfo.Size()) + if err != nil { + return fmt.Errorf("opening zip archive for reading: %v", err) + } + defer z.Close() + + // if the files in the archive do not all share a common + // root, then make sure we extract to a single subfolder + // rather than potentially littering the destination... + if z.ImplicitTopLevelFolder { + files := make([]string, len(z.zr.File)) + for i := range z.zr.File { + files[i] = z.zr.File[i].Name + } + if multipleTopLevels(files) { + destination = filepath.Join(destination, folderNameFromFileName(source)) } + } - if info.IsDir() { - header.Name += "/" - header.Method = zip.Store - } else { - ext := strings.ToLower(path.Ext(header.Name)) - if _, ok := compressedFormats[ext]; ok { - header.Method = zip.Store - } else { - header.Method = zip.Deflate + for { + err := z.extractNext(destination) + if err == io.EOF { + break + } + if err != nil { + if z.ContinueOnError { + log.Printf("[ERROR] Reading file in zip archive: %v", err) + continue } + return fmt.Errorf("reading file in zip archive: %v", err) + } + } + + return nil +} + +func (z *Zip) extractNext(to string) error { + f, err := z.Read() + if err != nil { + return err // don't wrap error; calling loop must break on io.EOF + } + defer f.Close() + return z.extractFile(f, to) +} + +func (z *Zip) extractFile(f File, to string) error { + header, ok := f.Header.(zip.FileHeader) + if !ok { + return fmt.Errorf("expected header to be zip.FileHeader but was %T", f.Header) + } + + to = filepath.Join(to, header.Name) + + // if a directory, no content; simply make the directory and return + if f.IsDir() { + return mkdir(to, f.Mode()) + } + + // do not overwrite existing files, if configured + if !z.OverwriteExisting && fileExists(to) { + return fmt.Errorf("file already exists: %s", to) + } + + // extract symbolic links as symbolic links + if isSymlink(header.FileInfo()) { + // symlink target is the contents of the file + buf := new(bytes.Buffer) + _, err := io.Copy(buf, f) + if err != nil { + return fmt.Errorf("%s: reading symlink target: %v", header.Name, err) } + return writeNewSymbolicLink(to, strings.TrimSpace(buf.String())) + } + + return writeNewFile(to, f, f.Mode()) +} + +func (z *Zip) writeWalk(source, topLevelFolder, destination string) error { + sourceInfo, err := os.Stat(source) + if err != nil { + return fmt.Errorf("%s: stat: %v", source, err) + } + destAbs, err := filepath.Abs(destination) + if err != nil { + return fmt.Errorf("%s: getting absolute path of destination %s: %v", source, destination, err) + } - writer, err := w.CreateHeader(header) + return filepath.Walk(source, func(fpath string, info os.FileInfo, err error) error { + handleErr := func(err error) error { + if z.ContinueOnError { + log.Printf("[ERROR] Walking %s: %v", fpath, err) + return nil + } + return err + } if err != nil { - return fmt.Errorf("%s: making header: %v", fpath, err) + return handleErr(fmt.Errorf("traversing %s: %v", fpath, err)) + } + if info == nil { + return handleErr(fmt.Errorf("%s: no file info", fpath)) } - if info.IsDir() { + // make sure we do not copy the output file into the output + // file; that results in an infinite loop and disk exhaustion! + fpathAbs, err := filepath.Abs(fpath) + if err != nil { + return handleErr(fmt.Errorf("%s: getting absolute path: %v", fpath, err)) + } + if within(fpathAbs, destAbs) { return nil } - if header.Mode().IsRegular() { - file, err := os.Open(fpath) + // build the name to be used within the archive + nameInArchive, err := makeNameInArchive(sourceInfo, source, topLevelFolder, fpath) + if err != nil { + return handleErr(err) + } + + var file io.ReadCloser + if info.Mode().IsRegular() { + file, err = os.Open(fpath) if err != nil { - return fmt.Errorf("%s: opening: %v", fpath, err) + return handleErr(fmt.Errorf("%s: opening: %v", fpath, err)) } defer file.Close() - - _, err = io.CopyN(writer, file, info.Size()) - if err != nil && err != io.EOF { - return fmt.Errorf("%s: copying contents: %v", fpath, err) - } + } + err = z.Write(File{ + FileInfo: FileInfo{ + FileInfo: info, + CustomName: nameInArchive, + }, + ReadCloser: file, + }) + if err != nil { + return handleErr(fmt.Errorf("%s: writing: %s", fpath, err)) } return nil }) } -// Open unzips the .zip file at source into destination. -func (zipFormat) Open(source, destination string) error { - r, err := zip.OpenReader(source) +// Create opens z for writing a ZIP archive to out. +func (z *Zip) Create(out io.Writer) error { + if z.zw != nil { + return fmt.Errorf("zip archive is already created for writing") + } + z.zw = zip.NewWriter(out) + if z.CompressionLevel != flate.DefaultCompression { + z.zw.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) { + return flate.NewWriter(out, z.CompressionLevel) + }) + } + return nil +} + +// Write writes f to z, which must have been opened for writing first. +func (z *Zip) Write(f File) error { + if z.zw == nil { + return fmt.Errorf("zip archive was not created for writing first") + } + if f.FileInfo == nil { + return fmt.Errorf("no file info") + } + if f.FileInfo.Name() == "" { + return fmt.Errorf("missing file name") + } + + header, err := zip.FileInfoHeader(f) if err != nil { - return err + return fmt.Errorf("%s: getting header: %v", f.Name(), err) } - defer r.Close() - for _, zf := range r.File { - if err := unzipFile(zf, destination); err != nil { - return err + if f.IsDir() { + header.Name += "/" // required - strangely no mention of this in zip spec? but is in godoc... + header.Method = zip.Store + } else { + ext := strings.ToLower(path.Ext(header.Name)) + if _, ok := compressedFormats[ext]; ok && z.SelectiveCompression { + header.Method = zip.Store + } else { + header.Method = zip.Deflate + } + } + + writer, err := z.zw.CreateHeader(header) + if err != nil { + return fmt.Errorf("%s: making header: %v", f.Name(), err) + } + + return z.writeFile(f, writer) +} + +func (z *Zip) writeFile(f File, writer io.Writer) error { + if f.IsDir() { + return nil // directories have no contents + } + if isSymlink(f) { + // file body for symlinks is the symlink target + linkTarget, err := os.Readlink(f.Name()) + if err != nil { + return fmt.Errorf("%s: readlink: %v", f.Name(), err) } + _, err = writer.Write([]byte(filepath.ToSlash(linkTarget))) + if err != nil { + return fmt.Errorf("%s: writing symlink target: %v", f.Name(), err) + } + return nil } + if f.ReadCloser == nil { + return fmt.Errorf("%s: no way to read file contents", f.Name()) + } + _, err := io.Copy(writer, f) + if err != nil { + return fmt.Errorf("%s: copying contents: %v", f.Name(), err) + } + + return nil +} + +// Open opens z for reading an archive from in, +// which is expected to have the given size and +// which must be an io.ReaderAt. +func (z *Zip) Open(in io.Reader, size int64) error { + inRdrAt, ok := in.(io.ReaderAt) + if !ok { + return fmt.Errorf("reader must be io.ReaderAt") + } + if z.zr != nil { + return fmt.Errorf("zip archive is already open for reading") + } + var err error + z.zr, err = zip.NewReader(inRdrAt, size) + if err != nil { + return fmt.Errorf("creating reader: %v", err) + } + z.ridx = 0 return nil } -func unzipFile(zf *zip.File, destination string) error { - if strings.HasSuffix(zf.Name, "/") { - return mkdir(filepath.Join(destination, zf.Name)) +// Read reads the next file from z, which must have +// already been opened for reading. If there are no +// more files, the error is io.EOF. The File must +// be closed when finished reading from it. +func (z *Zip) Read() (File, error) { + if z.zr == nil { + return File{}, fmt.Errorf("zip archive is not open") + } + if z.ridx >= len(z.zr.File) { + return File{}, io.EOF + } + + // access the file and increment counter so that + // if there is an error processing this file, the + // caller can still iterate to the next file + zf := z.zr.File[z.ridx] + z.ridx++ + + file := File{ + FileInfo: zf.FileInfo(), + Header: zf.FileHeader, } rc, err := zf.Open() if err != nil { - return fmt.Errorf("%s: open compressed file: %v", zf.Name, err) + return file, fmt.Errorf("%s: open compressed file: %v", zf.Name, err) + } + file.ReadCloser = rc + + return file, nil +} + +// Close closes the zip archive(s) opened by Create and Open. +func (z *Zip) Close() error { + if z.zr != nil { + z.zr = nil + } + if z.zw != nil { + zw := z.zw + z.zw = nil + return zw.Close() + } + return nil +} + +// Walk calls walkFn for each visited item in archive. +func (z *Zip) Walk(archive string, walkFn WalkFunc) error { + zr, err := zip.OpenReader(archive) + if err != nil { + return fmt.Errorf("opening zip reader: %v", err) + } + defer zr.Close() + + for _, zf := range zr.File { + zfrc, err := zf.Open() + if err != nil { + zfrc.Close() + if z.ContinueOnError { + log.Printf("[ERROR] Opening %s: %v", zf.Name, err) + continue + } + return fmt.Errorf("opening %s: %v", zf.Name, err) + } + + err = walkFn(File{ + FileInfo: zf.FileInfo(), + Header: zf.FileHeader, + ReadCloser: zfrc, + }) + zfrc.Close() + if err != nil { + if err == ErrStopWalk { + break + } + if z.ContinueOnError { + log.Printf("[ERROR] Walking %s: %v", zf.Name, err) + continue + } + return fmt.Errorf("walking %s: %v", zf.Name, err) + } + } + + return nil +} + +// Extract extracts a single file from the zip archive. +// If the target is a directory, the entire folder will +// be extracted into destination. +func (z *Zip) Extract(source, target, destination string) error { + // target refers to a path inside the archive, which should be clean also + target = path.Clean(target) + + // if the target ends up being a directory, then + // we will continue walking and extracting files + // until we are no longer within that directory + var targetDirPath string + + return z.Walk(source, func(f File) error { + zfh, ok := f.Header.(zip.FileHeader) + if !ok { + return fmt.Errorf("expected header to be zip.FileHeader but was %T", f.Header) + } + + // importantly, cleaning the path strips tailing slash, + // which must be appended to folders within the archive + name := path.Clean(zfh.Name) + if f.IsDir() && target == name { + targetDirPath = path.Dir(name) + } + + if within(target, zfh.Name) { + // either this is the exact file we want, or is + // in the directory we want to extract + + // build the filename we will extract to + end, err := filepath.Rel(targetDirPath, zfh.Name) + if err != nil { + return fmt.Errorf("relativizing paths: %v", err) + } + joined := filepath.Join(destination, end) + + err = z.extractFile(f, joined) + if err != nil { + return fmt.Errorf("extracting file %s: %v", zfh.Name, err) + } + + // if our target was not a directory, stop walk + if targetDirPath == "" { + return ErrStopWalk + } + } else if targetDirPath != "" { + // finished walking the entire directory + return ErrStopWalk + } + + return nil + }) +} + +// Match returns true if the format of file matches this +// type's format. It should not affect reader position. +func (*Zip) Match(file io.ReadSeeker) (bool, error) { + currentPos, err := file.Seek(0, io.SeekCurrent) + if err != nil { + return false, err + } + _, err = file.Seek(0, 0) + if err != nil { + return false, err } - defer rc.Close() + defer file.Seek(currentPos, io.SeekStart) - return writeNewFile(filepath.Join(destination, zf.Name), rc, zf.FileInfo().Mode()) + buf := make([]byte, 4) + if n, err := file.Read(buf); err != nil || n < 4 { + return false, nil + } + return bytes.Equal(buf, []byte("PK\x03\x04")), nil } +func (z *Zip) String() string { return "zip" } + +// NewZip returns a new, default instance ready to be customized and used. +func NewZip() *Zip { + return &Zip{ + CompressionLevel: flate.DefaultCompression, + MkdirAll: true, + SelectiveCompression: true, + } +} + +// Compile-time checks to ensure type implements desired interfaces. +var ( + _ = Reader(new(Zip)) + _ = Writer(new(Zip)) + _ = Archiver(new(Zip)) + _ = Unarchiver(new(Zip)) + _ = Walker(new(Zip)) + _ = Extractor(new(Zip)) + _ = Matcher(new(Zip)) + _ = ExtensionChecker(new(Zip)) +) + // compressedFormats is a (non-exhaustive) set of lowercased // file extensions for formats that are typically already -// compressed. Compressing already-compressed files often -// results in a larger file, so when possible, we check this -// set to avoid that. +// compressed. Compressing files that are already compressed +// is inefficient, so use this set of extension to avoid that. var compressedFormats = map[string]struct{}{ ".7z": {}, ".avi": {}, + ".br": {}, ".bz2": {}, ".cab": {}, + ".docx": {}, ".gif": {}, ".gz": {}, ".jar": {}, ".jpeg": {}, ".jpg": {}, ".lz": {}, + ".lz4": {}, ".lzma": {}, + ".m4v": {}, ".mov": {}, ".mp3": {}, ".mp4": {}, ".mpeg": {}, ".mpg": {}, ".png": {}, + ".pptx": {}, ".rar": {}, + ".sz": {}, ".tbz2": {}, ".tgz": {}, + ".tsz": {}, ".txz": {}, + ".xlsx": {}, ".xz": {}, ".zip": {}, ".zipx": {}, } + +// DefaultZip is a default instance that is conveniently ready to use. +var DefaultZip = NewZip() diff --git a/vendor/github.com/pierrec/lz4/.gitignore b/vendor/github.com/pierrec/lz4/.gitignore new file mode 100644 index 00000000..e48bab32 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/.gitignore @@ -0,0 +1,33 @@ +# Created by https://www.gitignore.io/api/macos + +### macOS ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# End of https://www.gitignore.io/api/macos + +lz4c/lz4c diff --git a/vendor/github.com/pierrec/lz4/.travis.yml b/vendor/github.com/pierrec/lz4/.travis.yml new file mode 100644 index 00000000..204afe1d --- /dev/null +++ b/vendor/github.com/pierrec/lz4/.travis.yml @@ -0,0 +1,22 @@ +language: go + +env: + - GO111MODULE=off + - GO111MODULE=on + +go: + - 1.9.x + - 1.10.x + - 1.11.x + - master + +matrix: + fast_finish: true + allow_failures: + - go: master + +sudo: false + +script: + - go test -v -cpu=2 + - go test -v -cpu=2 -race diff --git a/vendor/github.com/pierrec/lz4/LICENSE b/vendor/github.com/pierrec/lz4/LICENSE new file mode 100644 index 00000000..bd899d83 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2015, Pierre Curto +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of xxHash nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/pierrec/lz4/README.md b/vendor/github.com/pierrec/lz4/README.md new file mode 100644 index 00000000..e71ebd59 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/README.md @@ -0,0 +1,24 @@ +[![godoc](https://godoc.org/github.com/pierrec/lz4?status.png)](https://godoc.org/github.com/pierrec/lz4) + +# lz4 +LZ4 compression and decompression in pure Go. + +## Usage + +```go +import "github.com/pierrec/lz4/v2" +``` + +## Description +Package lz4 implements reading and writing lz4 compressed data (a frame), +as specified in http://fastcompression.blogspot.fr/2013/04/lz4-streaming-format-final.html. + +This package is **compatible with the LZ4 frame format** although the block level compression +and decompression functions are exposed and are fully compatible with the lz4 block format +definition, they are low level and should not be used directly. + +For a complete description of an lz4 compressed block, see: +http://fastcompression.blogspot.fr/2011/05/lz4-explained.html + +See https://github.com/Cyan4973/lz4 for the reference C implementation. + diff --git a/vendor/github.com/pierrec/lz4/bench_test.go b/vendor/github.com/pierrec/lz4/bench_test.go new file mode 100644 index 00000000..72f1eaae --- /dev/null +++ b/vendor/github.com/pierrec/lz4/bench_test.go @@ -0,0 +1,119 @@ +package lz4_test + +import ( + "bytes" + "io" + "io/ioutil" + "testing" + + "github.com/pierrec/lz4" +) + +func BenchmarkCompress(b *testing.B) { + var hashTable [1 << 16]int + buf := make([]byte, len(pg1661)) + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + lz4.CompressBlock(pg1661, buf, hashTable[:]) + } +} + +func BenchmarkCompressHC(b *testing.B) { + buf := make([]byte, len(pg1661)) + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + lz4.CompressBlockHC(pg1661, buf, 16) + } +} + +func BenchmarkUncompress(b *testing.B) { + buf := make([]byte, len(pg1661)) + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + lz4.UncompressBlock(pg1661LZ4, buf) + } +} + +func mustLoadFile(f string) []byte { + b, err := ioutil.ReadFile(f) + if err != nil { + panic(err) + } + return b +} + +var ( + pg1661 = mustLoadFile("testdata/pg1661.txt") + digits = mustLoadFile("testdata/e.txt") + twain = mustLoadFile("testdata/Mark.Twain-Tom.Sawyer.txt") + random = mustLoadFile("testdata/random.data") + pg1661LZ4 = mustLoadFile("testdata/pg1661.txt.lz4") + digitsLZ4 = mustLoadFile("testdata/e.txt.lz4") + twainLZ4 = mustLoadFile("testdata/Mark.Twain-Tom.Sawyer.txt.lz4") + randomLZ4 = mustLoadFile("testdata/random.data.lz4") +) + +func benchmarkUncompress(b *testing.B, compressed []byte) { + r := bytes.NewReader(compressed) + zr := lz4.NewReader(r) + + // Determine the uncompressed size of testfile. + uncompressedSize, err := io.Copy(ioutil.Discard, zr) + if err != nil { + b.Fatal(err) + } + + b.SetBytes(uncompressedSize) + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + r.Reset(compressed) + zr.Reset(r) + io.Copy(ioutil.Discard, zr) + } +} + +func BenchmarkUncompressPg1661(b *testing.B) { benchmarkUncompress(b, pg1661LZ4) } +func BenchmarkUncompressDigits(b *testing.B) { benchmarkUncompress(b, digitsLZ4) } +func BenchmarkUncompressTwain(b *testing.B) { benchmarkUncompress(b, twainLZ4) } +func BenchmarkUncompressRand(b *testing.B) { benchmarkUncompress(b, randomLZ4) } + +func benchmarkCompress(b *testing.B, uncompressed []byte) { + w := bytes.NewBuffer(nil) + zw := lz4.NewWriter(w) + r := bytes.NewReader(uncompressed) + + // Determine the compressed size of testfile. + compressedSize, err := io.Copy(zw, r) + if err != nil { + b.Fatal(err) + } + if err := zw.Close(); err != nil { + b.Fatal(err) + } + + b.SetBytes(compressedSize) + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + r.Reset(uncompressed) + zw.Reset(w) + io.Copy(zw, r) + } +} + +func BenchmarkCompressPg1661(b *testing.B) { benchmarkCompress(b, pg1661) } +func BenchmarkCompressDigits(b *testing.B) { benchmarkCompress(b, digits) } +func BenchmarkCompressTwain(b *testing.B) { benchmarkCompress(b, twain) } +func BenchmarkCompressRand(b *testing.B) { benchmarkCompress(b, random) } diff --git a/vendor/github.com/pierrec/lz4/block.go b/vendor/github.com/pierrec/lz4/block.go new file mode 100644 index 00000000..00b1111b --- /dev/null +++ b/vendor/github.com/pierrec/lz4/block.go @@ -0,0 +1,397 @@ +package lz4 + +import ( + "encoding/binary" + "errors" +) + +var ( + // ErrInvalidSourceShortBuffer is returned by UncompressBlock or CompressBLock when a compressed + // block is corrupted or the destination buffer is not large enough for the uncompressed data. + ErrInvalidSourceShortBuffer = errors.New("lz4: invalid source or destination buffer too short") + // ErrInvalid is returned when reading an invalid LZ4 archive. + ErrInvalid = errors.New("lz4: bad magic number") +) + +// blockHash hashes 4 bytes into a value < winSize. +func blockHash(x uint32) uint32 { + const hasher uint32 = 2654435761 // Knuth multiplicative hash. + return x * hasher >> hashShift +} + +// CompressBlockBound returns the maximum size of a given buffer of size n, when not compressible. +func CompressBlockBound(n int) int { + return n + n/255 + 16 +} + +// UncompressBlock uncompresses the source buffer into the destination one, +// and returns the uncompressed size. +// +// The destination buffer must be sized appropriately. +// +// An error is returned if the source data is invalid or the destination buffer is too small. +func UncompressBlock(src, dst []byte) (si int, err error) { + defer func() { + // It is now faster to let the runtime panic and recover on out of bound slice access + // than checking indices as we go along. + if recover() != nil { + err = ErrInvalidSourceShortBuffer + } + }() + sn := len(src) + if sn == 0 { + return 0, nil + } + var di int + + for { + // Literals and match lengths (token). + b := int(src[si]) + si++ + + // Literals. + if lLen := b >> 4; lLen > 0 { + if lLen == 0xF { + for src[si] == 0xFF { + lLen += 0xFF + si++ + } + lLen += int(src[si]) + si++ + } + i := si + si += lLen + di += copy(dst[di:], src[i:si]) + + if si >= sn { + return di, nil + } + } + + si++ + _ = src[si] // Bound check elimination. + offset := int(src[si-1]) | int(src[si])<<8 + si++ + + // Match. + mLen := b & 0xF + if mLen == 0xF { + for src[si] == 0xFF { + mLen += 0xFF + si++ + } + mLen += int(src[si]) + si++ + } + mLen += minMatch + + // Copy the match. + i := di - offset + if offset > 0 && mLen >= offset { + // Efficiently copy the match dst[di-offset:di] into the dst slice. + bytesToCopy := offset * (mLen / offset) + expanded := dst[i:] + for n := offset; n <= bytesToCopy+offset; n *= 2 { + copy(expanded[n:], expanded[:n]) + } + di += bytesToCopy + mLen -= bytesToCopy + } + di += copy(dst[di:], dst[i:i+mLen]) + } +} + +// CompressBlock compresses the source buffer into the destination one. +// This is the fast version of LZ4 compression and also the default one. +// The size of hashTable must be at least 64Kb. +// +// The size of the compressed data is returned. If it is 0 and no error, then the data is incompressible. +// +// An error is returned if the destination buffer is too small. +func CompressBlock(src, dst []byte, hashTable []int) (di int, err error) { + defer func() { + if recover() != nil { + err = ErrInvalidSourceShortBuffer + } + }() + + sn, dn := len(src)-mfLimit, len(dst) + if sn <= 0 || dn == 0 { + return 0, nil + } + var si int + + // Fast scan strategy: the hash table only stores the last 4 bytes sequences. + // const accInit = 1 << skipStrength + + anchor := si // Position of the current literals. + // acc := accInit // Variable step: improves performance on non-compressible data. + + for si < sn { + // Hash the next 4 bytes (sequence)... + match := binary.LittleEndian.Uint32(src[si:]) + h := blockHash(match) + + ref := hashTable[h] + hashTable[h] = si + if ref >= sn { // Invalid reference (dirty hashtable). + si++ + continue + } + offset := si - ref + if offset <= 0 || offset >= winSize || // Out of window. + match != binary.LittleEndian.Uint32(src[ref:]) { // Hash collision on different matches. + // si += acc >> skipStrength + // acc++ + si++ + continue + } + + // Match found. + // acc = accInit + lLen := si - anchor // Literal length. + + // Encode match length part 1. + si += minMatch + mLen := si // Match length has minMatch already. + // Find the longest match, first looking by batches of 8 bytes. + for si < sn && binary.LittleEndian.Uint64(src[si:]) == binary.LittleEndian.Uint64(src[si-offset:]) { + si += 8 + } + // Then byte by byte. + for si < sn && src[si] == src[si-offset] { + si++ + } + + mLen = si - mLen + if mLen < 0xF { + dst[di] = byte(mLen) + } else { + dst[di] = 0xF + } + + // Encode literals length. + if lLen < 0xF { + dst[di] |= byte(lLen << 4) + } else { + dst[di] |= 0xF0 + di++ + l := lLen - 0xF + for ; l >= 0xFF; l -= 0xFF { + dst[di] = 0xFF + di++ + } + dst[di] = byte(l) + } + di++ + + // Literals. + copy(dst[di:], src[anchor:anchor+lLen]) + di += lLen + 2 + anchor = si + + // Encode offset. + _ = dst[di] // Bound check elimination. + dst[di-2], dst[di-1] = byte(offset), byte(offset>>8) + + // Encode match length part 2. + if mLen >= 0xF { + for mLen -= 0xF; mLen >= 0xFF; mLen -= 0xFF { + dst[di] = 0xFF + di++ + } + dst[di] = byte(mLen) + di++ + } + } + + if anchor == 0 { + // Incompressible. + return 0, nil + } + + // Last literals. + lLen := len(src) - anchor + if lLen < 0xF { + dst[di] = byte(lLen << 4) + } else { + dst[di] = 0xF0 + di++ + for lLen -= 0xF; lLen >= 0xFF; lLen -= 0xFF { + dst[di] = 0xFF + di++ + } + dst[di] = byte(lLen) + } + di++ + + // Write the last literals. + if di >= anchor { + // Incompressible. + return 0, nil + } + di += copy(dst[di:], src[anchor:]) + return di, nil +} + +// CompressBlockHC compresses the source buffer src into the destination dst +// with max search depth (use 0 or negative value for no max). +// +// CompressBlockHC compression ratio is better than CompressBlock but it is also slower. +// +// The size of the compressed data is returned. If it is 0 and no error, then the data is not compressible. +// +// An error is returned if the destination buffer is too small. +func CompressBlockHC(src, dst []byte, depth int) (di int, err error) { + defer func() { + if recover() != nil { + err = ErrInvalidSourceShortBuffer + } + }() + + sn, dn := len(src)-mfLimit, len(dst) + if sn <= 0 || dn == 0 { + return 0, nil + } + var si int + + // hashTable: stores the last position found for a given hash + // chaingTable: stores previous positions for a given hash + var hashTable, chainTable [winSize]int + + if depth <= 0 { + depth = winSize + } + + anchor := si + for si < sn { + // Hash the next 4 bytes (sequence). + match := binary.LittleEndian.Uint32(src[si:]) + h := blockHash(match) + + // Follow the chain until out of window and give the longest match. + mLen := 0 + offset := 0 + for next, try := hashTable[h], depth; try > 0 && next > 0 && si-next < winSize; next = chainTable[next&winMask] { + // The first (mLen==0) or next byte (mLen>=minMatch) at current match length + // must match to improve on the match length. + if src[next+mLen] != src[si+mLen] { + continue + } + ml := 0 + // Compare the current position with a previous with the same hash. + for ml < sn-si && binary.LittleEndian.Uint64(src[next+ml:]) == binary.LittleEndian.Uint64(src[si+ml:]) { + ml += 8 + } + for ml < sn-si && src[next+ml] == src[si+ml] { + ml++ + } + if ml < minMatch || ml <= mLen { + // Match too small ( winStart { + winStart = ws + } + for si, ml := winStart, si+mLen; si < ml; { + match >>= 8 + match |= uint32(src[si+3]) << 24 + h := blockHash(match) + chainTable[si&winMask] = hashTable[h] + hashTable[h] = si + si++ + } + + lLen := si - anchor + si += mLen + mLen -= minMatch // Match length does not include minMatch. + + if mLen < 0xF { + dst[di] = byte(mLen) + } else { + dst[di] = 0xF + } + + // Encode literals length. + if lLen < 0xF { + dst[di] |= byte(lLen << 4) + } else { + dst[di] |= 0xF0 + di++ + l := lLen - 0xF + for ; l >= 0xFF; l -= 0xFF { + dst[di] = 0xFF + di++ + } + dst[di] = byte(l) + } + di++ + + // Literals. + copy(dst[di:], src[anchor:anchor+lLen]) + di += lLen + anchor = si + + // Encode offset. + di += 2 + dst[di-2], dst[di-1] = byte(offset), byte(offset>>8) + + // Encode match length part 2. + if mLen >= 0xF { + for mLen -= 0xF; mLen >= 0xFF; mLen -= 0xFF { + dst[di] = 0xFF + di++ + } + dst[di] = byte(mLen) + di++ + } + } + + if anchor == 0 { + // Incompressible. + return 0, nil + } + + // Last literals. + lLen := len(src) - anchor + if lLen < 0xF { + dst[di] = byte(lLen << 4) + } else { + dst[di] = 0xF0 + di++ + lLen -= 0xF + for ; lLen >= 0xFF; lLen -= 0xFF { + dst[di] = 0xFF + di++ + } + dst[di] = byte(lLen) + } + di++ + + // Write the last literals. + if di >= anchor { + // Incompressible. + return 0, nil + } + di += copy(dst[di:], src[anchor:]) + return di, nil +} diff --git a/vendor/github.com/pierrec/lz4/block_test.go b/vendor/github.com/pierrec/lz4/block_test.go new file mode 100644 index 00000000..312160bb --- /dev/null +++ b/vendor/github.com/pierrec/lz4/block_test.go @@ -0,0 +1,98 @@ +//+build go1.9 + +package lz4_test + +import ( + "fmt" + "io/ioutil" + "reflect" + "testing" + + "github.com/pierrec/lz4" +) + +type testcase struct { + file string + compressible bool + src []byte +} + +var rawFiles = []testcase{ + // {"testdata/207326ba-36f8-11e7-954a-aca46ba8ca73.png", true, nil}, + {"testdata/e.txt", true, nil}, + {"testdata/gettysburg.txt", true, nil}, + {"testdata/Mark.Twain-Tom.Sawyer.txt", true, nil}, + {"testdata/pg1661.txt", true, nil}, + {"testdata/pi.txt", true, nil}, + {"testdata/random.data", false, nil}, + {"testdata/repeat.txt", true, nil}, +} + +func TestCompressUncompressBlock(t *testing.T) { + type compressor func(s, d []byte) (int, error) + + run := func(tc testcase, compress compressor) int { + t.Helper() + src := tc.src + + // Compress the data. + zbuf := make([]byte, lz4.CompressBlockBound(len(src))) + n, err := compress(src, zbuf) + if err != nil { + t.Error(err) + return 0 + } + zbuf = zbuf[:n] + + // Make sure that it was actually compressed unless not compressible. + if !tc.compressible { + return 0 + } + + if n == 0 || n >= len(src) { + t.Errorf("data not compressed: %d/%d", n, len(src)) + return 0 + } + + // Uncompress the data. + buf := make([]byte, len(src)) + n, err = lz4.UncompressBlock(zbuf, buf) + if err != nil { + t.Fatal(err) + } + buf = buf[:n] + if !reflect.DeepEqual(src, buf) { + t.Error("uncompressed compressed data not matching initial input") + return 0 + } + + return len(zbuf) + } + + for _, tc := range rawFiles { + src, err := ioutil.ReadFile(tc.file) + if err != nil { + t.Fatal(err) + } + tc.src = src + + var n, nhc int + t.Run("", func(t *testing.T) { + tc := tc + t.Run(tc.file, func(t *testing.T) { + t.Parallel() + n = run(tc, func(src, dst []byte) (int, error) { + var ht [1 << 16]int + return lz4.CompressBlock(src, dst, ht[:]) + }) + }) + t.Run(fmt.Sprintf("%s HC", tc.file), func(t *testing.T) { + t.Parallel() + nhc = run(tc, func(src, dst []byte) (int, error) { + return lz4.CompressBlockHC(src, dst, -1) + }) + }) + }) + fmt.Printf("%-40s: %8d / %8d / %8d\n", tc.file, n, nhc, len(src)) + } +} diff --git a/vendor/github.com/pierrec/lz4/debug.go b/vendor/github.com/pierrec/lz4/debug.go new file mode 100644 index 00000000..bc5e78d4 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/debug.go @@ -0,0 +1,23 @@ +// +build lz4debug + +package lz4 + +import ( + "fmt" + "os" + "path/filepath" + "runtime" +) + +const debugFlag = true + +func debug(args ...interface{}) { + _, file, line, _ := runtime.Caller(1) + file = filepath.Base(file) + + f := fmt.Sprintf("LZ4: %s:%d %s", file, line, args[0]) + if f[len(f)-1] != '\n' { + f += "\n" + } + fmt.Fprintf(os.Stderr, f, args[1:]...) +} diff --git a/vendor/github.com/pierrec/lz4/debug_stub.go b/vendor/github.com/pierrec/lz4/debug_stub.go new file mode 100644 index 00000000..44211ad9 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/debug_stub.go @@ -0,0 +1,7 @@ +// +build !lz4debug + +package lz4 + +const debugFlag = false + +func debug(args ...interface{}) {} diff --git a/vendor/github.com/pierrec/lz4/export_test.go b/vendor/github.com/pierrec/lz4/export_test.go new file mode 100644 index 00000000..3052506d --- /dev/null +++ b/vendor/github.com/pierrec/lz4/export_test.go @@ -0,0 +1,13 @@ +// Expose some internals for testing purposes +package lz4 + +// expose the possible block max sizes +var BlockMaxSizeItems []int + +func init() { + for s := range bsMapValue { + BlockMaxSizeItems = append(BlockMaxSizeItems, s) + } +} + +var FrameSkipMagic = frameSkipMagic diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/01572067d493db8dc8161f05c339a5192b0b4087-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/01572067d493db8dc8161f05c339a5192b0b4087-22 new file mode 100644 index 0000000000000000000000000000000000000000..4b8b629d5449a3467afe85535aa7eec4223bac59 GIT binary patch literal 105 zcmZQk@|DO-Y&o%a|NB@5Mh0F628Npd{~H(>B=VRT6c`zV85kNQ3=J)f3@nW-EKN-f e%z-KxKUFp4G@E%rU3w`^c_n8 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/02766f768fbfbd81b752cce427eb5242a44929cc-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/02766f768fbfbd81b752cce427eb5242a44929cc-5 new file mode 100644 index 0000000000000000000000000000000000000000..ead0ac0d319ff48ac6dc14c1db920ee00ceb917a GIT binary patch literal 19 ZcmZQk@|DO-Y&o%a|NB@5Mg|~g002Oq1@Hg> literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/032f04032e12567057782672bb12670c20d38439-10 b/vendor/github.com/pierrec/lz4/fuzz/corpus/032f04032e12567057782672bb12670c20d38439-10 new file mode 100755 index 0000000000000000000000000000000000000000..f1a389337beb616a2f139bf9205844ad38db9044 GIT binary patch literal 23 dcmZQk@|Ey)P+GZn|N8>%=qn6B;H2d%0RUK(2I>F+ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/0367b985641aca66e6e4eeea68acf5e2a02c62a8-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/0367b985641aca66e6e4eeea68acf5e2a02c62a8-16 new file mode 100644 index 0000000000000000000000000000000000000000..753a67cd3ca9f4e93e6370b727a4729ed05f2bfe GIT binary patch literal 38 scmZQk@|DO-Y&o%a|NB@5Mg}GZh6V`+ULaZX|9=AmgG3$^g957r0O39gRsaA1 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/03e85abc49352b2f7cc83efd7e4274da02d78b84-6 b/vendor/github.com/pierrec/lz4/fuzz/corpus/03e85abc49352b2f7cc83efd7e4274da02d78b84-6 new file mode 100644 index 0000000000000000000000000000000000000000..d2017a91adb9aca4ffd9ec8a84fd76ffc43f5083 GIT binary patch literal 13 RcmZS4@|9o!0u~@W82||00lEMH literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/049f82a81bb6b4d7cf69fac5e413f6ce299d48cf-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/049f82a81bb6b4d7cf69fac5e413f6ce299d48cf-8 new file mode 100755 index 0000000000000000000000000000000000000000..a69e01f280889b4a8249ce9b8cb378b796c262e0 GIT binary patch literal 19 acmZQk@|Ey)U|?|4^5tPrXJlYF#{>Wye*)G3 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/04c05c7956f17e57a91a47909bd0706135cf17a6-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/04c05c7956f17e57a91a47909bd0706135cf17a6-1 new file mode 100755 index 0000000000000000000000000000000000000000..0ea966b8f7cc3049888e796ad3ccdd9f375d71b6 GIT binary patch literal 46 zcmZ>Y$}l!`j8qGbjGmAd!oVOV-{8Qmq@d3d!eIaYj(`F~O1^kq;)OQ06z*mIMgS$D B4Kx4% literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/050e2af2a57d8044139ba21375f0ac6fcb7ab0b1-12 b/vendor/github.com/pierrec/lz4/fuzz/corpus/050e2af2a57d8044139ba21375f0ac6fcb7ab0b1-12 new file mode 100755 index 0000000000000000000000000000000000000000..6cb971272a19d3fa9fddcb0617ef95cb36991fbc GIT binary patch literal 84 XcmZ>Y%CHbGa|KV04m2CKmY&$ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/0547c73efb9b6a345fd9a52aa0798b48dd9aca62-2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/0547c73efb9b6a345fd9a52aa0798b48dd9aca62-2 new file mode 100755 index 0000000000000000000000000000000000000000..e2f4639b3b98709980a056683b5217dd0870c8f6 GIT binary patch literal 33 pcmZ>Y$}lu^j8qGbEVa7Mz`*dT=HS0UrPW literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/0990ac54decbca1a97893e83c7feb2be89cb10ea-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/0990ac54decbca1a97893e83c7feb2be89cb10ea-14 new file mode 100644 index 0000000000000000000000000000000000000000..37a0194e55dcdb47987d0f668a3ddc54ffaf1529 GIT binary patch literal 68 ocmZQk@|DO-Y&o%a|NB@5Mg}GZ1_lW~Fqwx$Ld20pU~CW#0Ig98lmGw# literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/09f2eda28ecc97304659afded4d13a188baf2107-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/09f2eda28ecc97304659afded4d13a188baf2107-22 new file mode 100644 index 0000000000000000000000000000000000000000..c1b1ad50619559026aeac86cefc84eda3e3a405f GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%Y%CHbGa08$7BS^xk5 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/0cf885cd35e7124005b0ba0c3c4431ddfaeff84d-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/0cf885cd35e7124005b0ba0c3c4431ddfaeff84d-11 new file mode 100644 index 0000000000000000000000000000000000000000..b45509f6e5afba39a7f6aa400b98857af321b0f6 GIT binary patch literal 48 ScmZS4@|9o!0u~}@kQxA6pacd0 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/0d7c02d4e91d82b0355baaca1237062639442db6-3 b/vendor/github.com/pierrec/lz4/fuzz/corpus/0d7c02d4e91d82b0355baaca1237062639442db6-3 new file mode 100644 index 00000000..66665729 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/0d7c02d4e91d82b0355baaca1237062639442db6-3 @@ -0,0 +1 @@ +"M@5 \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/0e1b2b0c49dfb86fe01d3453dd24e39482e132e8-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/0e1b2b0c49dfb86fe01d3453dd24e39482e132e8-7 new file mode 100644 index 0000000000000000000000000000000000000000..8ca78705a4e4e7465e5326de594a8bccfe422481 GIT binary patch literal 21 bcmZQk@|DO-Y&o%a|NB@5Mg}GZAaDc#OG^c_ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..c21a363248ee3e69300c4f872699e14d94b64609 GIT binary patch literal 42 ycmZ>Y$}lu^j8qGbWG}V6&cMLH$Y9@~z+lM3aO6Y$}ki!aB=VRT6ih(^4M27xNDQn(7AT+u5(ddY JltL+}HURCk8Dsze literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/10fa5d9f0fe75f73c0e92a1fe1c00f0041ec8f39-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/10fa5d9f0fe75f73c0e92a1fe1c00f0041ec8f39-24 new file mode 100644 index 0000000000000000000000000000000000000000..62459e7280d635ee35f1980023b924ec33fd2c66 GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%z8{OoL FL;wi63k(1N literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/11.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/11.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..b8539d875265721333033cef148a8ddb5b49cee6 GIT binary patch literal 14 TcmZ>Y$}kcyaY$}ko$aY$}kZxaY$}kl#aB=VRT6c`y~85kOrK*B)O0Fi-GP*nhK C#S`%W literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/142d4f8cb427dd3562d72d889dfc0ea3a2b03d98-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/142d4f8cb427dd3562d72d889dfc0ea3a2b03d98-22 new file mode 100644 index 0000000000000000000000000000000000000000..d162c38e792e97a45e2f10a9bbc70df796f7e142 GIT binary patch literal 83 bcmZQk@|DO-Y&o%a|NB@5Mg|~gpcDfDw7d=Q literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/15.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/15.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..bd2c29c27df1ef3674b1ac103ab04003f810e7c7 GIT binary patch literal 14 TcmZ>Y$}kfzaY$}lo?j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42DdC He^MI&cccu4 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/16.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/16.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..5e13f64415b9b631a4303809662903f269bf3e4d GIT binary patch literal 14 TcmZ>Y$}kr%aY%CHbGaY$}lu^j8qGbRA4aVVK{Oq^<3Y%CHnKaY$}lu^j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DGh+=a literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/191e0dd24b8c7f8babeae4839768df39acc17eb1-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/191e0dd24b8c7f8babeae4839768df39acc17eb1-17 new file mode 100644 index 0000000000000000000000000000000000000000..000242c63608a1181bc2c414ded8cc81b0d4bb8e GIT binary patch literal 32 lcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^&cG||4gkZR3)27q literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1971e6ed6c6f6069fc2a9ed3038101e89bbcc381-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1971e6ed6c6f6069fc2a9ed3038101e89bbcc381-26 new file mode 100644 index 0000000000000000000000000000000000000000..073f103567acca4e3bb2adc17ec3ce85ece940d7 GIT binary patch literal 68 qcmZQk@|DO;Y&o%azuNm)21X_Z1_lW~FqsD;>lwi81|SnBZU6w$8w;EO literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1a582381781f264f551bd6f0f2284a931147e6d9-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1a582381781f264f551bd6f0f2284a931147e6d9-4 new file mode 100755 index 0000000000000000000000000000000000000000..c02b40509a98970d9d91af2f9b6dfbf090a79955 GIT binary patch literal 9 QcmZ?L@|EzFU|?VX00=h$Hvj+t literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1a58f02dc83ac8315a85babdea6d757cbff2bb03-30 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1a58f02dc83ac8315a85babdea6d757cbff2bb03-30 new file mode 100644 index 0000000000000000000000000000000000000000..d589b761ceaca3f9e4d5494faed7ce2f601e939f GIT binary patch literal 66 xcmZQk@|DO-Y&o%a|NB@5Mh0F6hK3qs0RfB=VRT6c`zV85kNQ3=J)f3@nW-EKN-f e%z-KxKUFp4K-j2Y8n8g?j1q^ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1c944d5065b1a2b30e412604a14aa52565a5765b-35 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1c944d5065b1a2b30e412604a14aa52565a5765b-35 new file mode 100644 index 0000000000000000000000000000000000000000..da130d44bce039ad904b05c916480b0c55a1af18 GIT binary patch literal 44 scmZQk@|CDdY&o%a|NB@5#_hZe3=K6Bd2j&+`)!$b8GwTSfB*jv0DaLC?*IS* literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1d37fb332301cf7de0bd51a8c1aa9be4935e89fc-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1d37fb332301cf7de0bd51a8c1aa9be4935e89fc-1 new file mode 100644 index 00000000..ee12c7a5 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/1d37fb332301cf7de0bd51a8c1aa9be4935e89fc-1 @@ -0,0 +1 @@ +"M \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1d6b87b52e62cb84be834478ad88129f5e1f247b-9 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1d6b87b52e62cb84be834478ad88129f5e1f247b-9 new file mode 100644 index 0000000000000000000000000000000000000000..bd5ff8ff1fa0e21cada483100c931b2c0509ea8a GIT binary patch literal 32 icmZQk@|DO-Y&o%a|NB@5Mg}GZ1_p^d2niHrNCW_vPza6y literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1ec2f11a8d8b9cf188a58f673a0b4a8608a926ca-3 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1ec2f11a8d8b9cf188a58f673a0b4a8608a926ca-3 new file mode 100644 index 00000000..7eeb2e86 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/1ec2f11a8d8b9cf188a58f673a0b4a8608a926ca-3 @@ -0,0 +1 @@ +"M3 \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1fc2ba0bb981fec47badea1c80219452c9e3c76c-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1fc2ba0bb981fec47badea1c80219452c9e3c76c-22 new file mode 100644 index 0000000000000000000000000000000000000000..b53b47a542019475666d8c29698187d4d7d018c9 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_lWRULaWm#6Wf)6N7>&NT8txS)D9UKnWxamihm` M0i*y-feDE`0G!1a#sB~S literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/1fd8444ac43541c44a1c6ed8df2f688b1fa09681-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/1fd8444ac43541c44a1c6ed8df2f688b1fa09681-1 new file mode 100755 index 0000000000000000000000000000000000000000..f3fe56210bc1e92f2456695a25d79a5f01b7af13 GIT binary patch literal 29 kcmZ>Y$}lu^j8qGbWG}V6&cMLH$Y9@~z`(Y$}lo?j8qGbWG}V6&cMLH$Y9@~z+lM3aO6Y$}lo?j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DGms4| literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/202a9c8b188cae90f29bce3bf0438a035c504eb4-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/202a9c8b188cae90f29bce3bf0438a035c504eb4-20 new file mode 100644 index 0000000000000000000000000000000000000000..0014dc68bb5ab4a287ce9ac3fee91de7158de0d2 GIT binary patch literal 62 hcmZQk@|Ey#P+GZn|N8=^=qn6Bz(R~r1H%=dMgVf`6d(Wq literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2065ba3177c7dc5047742faa7158b3faeaac1f3c-32 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2065ba3177c7dc5047742faa7158b3faeaac1f3c-32 new file mode 100644 index 0000000000000000000000000000000000000000..8f24c4c02577e35325b95a4f58525772a6b72780 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_q-%hIPyg5_wDv{~Z~GfdW9m6o!VH|Nk2p7{G)? Po-C3uR8JlQlAb&O1KSma literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/20cf0057443ecb322ff1169ecbe6cf20250f15af-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/20cf0057443ecb322ff1169ecbe6cf20250f15af-13 new file mode 100644 index 0000000000000000000000000000000000000000..f83424bf2b5731f4849848410e7298b21be08baa GIT binary patch literal 32 icmZQk@|DO-Y&o%a|NB@5Mh0F628RC-kjDgMO8@}S8w~yc literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/20d1a26afe563ad77e7a95fbee6ff59ebf3e61ab-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/20d1a26afe563ad77e7a95fbee6ff59ebf3e61ab-13 new file mode 100644 index 0000000000000000000000000000000000000000..ecd0320fc6c4619a9705f58e75c34e3817de2cc0 GIT binary patch literal 46 gcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_p^d93(>?0Qg!67ytkO literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/21.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/21.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..0701d3d648e96b370bc62da1aaa0ab9d125cb2ff GIT binary patch literal 48 zcmZ>Y$}l!`j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DGrbKh literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/21c8be1bb9eeea5b141500dee4987ab7fbd40d4a-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/21c8be1bb9eeea5b141500dee4987ab7fbd40d4a-23 new file mode 100644 index 0000000000000000000000000000000000000000..222b09581f5b34d1375ac85c970706b75a71808b GIT binary patch literal 20 bcmZQk@|DO-Y&o%a|NB@5Mg|84h6V-zN6rQ? literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/22.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/22.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..25578e2dbe9903b2544519f846e4e149f2b37ca1 GIT binary patch literal 48 zcmZ>Y$}ll>j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DGwKa4 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2201e32d052c15874f0323a09c330f3666029a72-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2201e32d052c15874f0323a09c330f3666029a72-1 new file mode 100755 index 0000000000000000000000000000000000000000..c4353fe81683aeb72f1cc8ec101a86d5391353a4 GIT binary patch literal 1473 zcmV;y1wQ&hT4*^jL0KkKS(G)X0|3c~|A2H5p~Qdp|M>s^|LQ;g|L|hUKKsA`6YlAD zc`I*Yq>cap03SdA000000Pe>@o%ZE+&|9wQdZK`RbC%m4%MG;|_Z&S3uFrNr00Yvf zPytkx3ZMko01IFM1MbBD=%4@+NF%Ic3;?8kv>bPxFFi;`@6aWAeqKW_jHKKq5loTBl0MJoVC{aKaD`r6|I>_9? zM-U21B2p*-P%g%l=nSX;C@ZZ12HN{%DIf&^prud%0HT0U0)POJ0HHt>000F508@wo zs-*y+P(lKPiUD5i0011Q3ZqJiAt#e00)2o9%b#m03!C@cI|cX z^ewwOgP}kG00jU5PyhfF00000KIUddWzUy*zYj(XS zo#2k@&yew7MfZI4zGbj5%K6?ETfXnR=e?&s%=R5=*Q$L!xO%M*Oy+NSp7(1bO*@-! zeNVjg!`Ha__?%a};t#KV*Ig4ehLd#HZe5%WSj~3RyPd!h+Oykk-8A;c00%OJ&5)RG ztzZTyDyoWr1qzf8ce-*`#_b&`~O?by^sztE~1O3vuo5Rh`LsGW40~*GGGf zPkZB|RQR@KQ$s-R(QfYVxO>gByB(iRb4rwhNl&iel{AKY-g)hu*{4F9(z?@gEw^V} z*k>>R001Z(;r99-PrD}1S6tohk5Or+g!>WWuW9l?;k?@!?(**4fMbO2WQ3SjEY|`r1R~S-8op4hizH5 zZJVK|2rd%0M72}MN_ly03Lu262{qixapuq!IDEzDy6p7ni5vE zvAVms$OAwqHg4?L0noVH4FKD=8s*Sk7t5?i9^UP%z3b8Dbba^F2hWYOH{EvTcYP0f zCNbRm>+Apk0000!$C&xIS@S)4>^Ugzy;~{NwKG>SO?}u?-^ zYoHD4qPvZGO1tfYRDJWhUER|;dA-{3yPL<#rBr|b$7zpvoxMJNA5aw?>zhca6KxH7 zeeN~f01B<{6~4WFd+yyc)y>^ERz2)Q8e0majit0`DFGT1=yEP;Q&{Xck1STz7;T2u z0ZJMhd8O}XJH_ForBPGT#_v6DbiBKCLidMCgSG(i-E2rb0N1CX>GlKR@1~Ri3i+WN znwxeQcJ1!PQ?Wj}`p3q7?Fqc-TjRM6 zn5%=UyEmMpdvxS-dE2MDX7*z@x!-N?yRB{&w(fn`nmcoMZEyep9RL&n4u-0(==*Bv zZvlY_pIQgEv|#k_Ub-!sYV3F3-F){w(DUYj<|MOax&;6R<#2euGN*3La1^9T%+}iO z?G7oq_keq?2iqmq54P*O0YFdy2J_0R%t|Fb=eN7P+2?uNw>fR*#qV`Zb#{ty4$bDO zS@+O4zTdH@9gy?Rx_gJm2Ww{7>!eaL;wXwQ-&hMT*9zW5v9^Y43I zxLc>YyAMoK?X2w8RUHV{rRmw7cYOdf3(p&a*_F1J(>865RH?AlX}fjRBv5yydcX(UP7O~$LJ<%^fDqFm83fa6nWPN{i1w$Y bJxnyhAqYYtOp_=ur;|~jGynmh0006^ON7Ej literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/226780b32ba8f87ec614fdb376aa0884011c4ca9-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/226780b32ba8f87ec614fdb376aa0884011c4ca9-17 new file mode 100644 index 0000000000000000000000000000000000000000..747cfa5225ae3e20fdc337a7414292ff69eff5d4 GIT binary patch literal 32 mcmZQk@|DO-Y&o%a|NB@5Mh0F628R6qK!TBhiQ#{Q{C@zSmkDD4 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/22897c61698649d7570de91613afdc19b66e6965-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/22897c61698649d7570de91613afdc19b66e6965-20 new file mode 100644 index 0000000000000000000000000000000000000000..ea2cb769eb165150857c610aab5410ff18651319 GIT binary patch literal 71 zcmZQk@|DO-Y&o%a|NB@5Mh0O9h6V`+ULXlVEg%ZSkOdM-AYqV9&Hw)(SqKGYOXL9n DeYF#P literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/23.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/23.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..bc8b6be6a45bc9948999c68a8ec9070ce440a596 GIT binary patch literal 48 zcmZ>Y$}lx_j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DG#3po literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/234cc427d9be32470f3c2e11a6bc16567f558e55-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/234cc427d9be32470f3c2e11a6bc16567f558e55-22 new file mode 100644 index 0000000000000000000000000000000000000000..c69e874b3b8a83312db1400176c83fb7889b297a GIT binary patch literal 37 kcmZQk@|Ey)U|?|4^5tPrXB1*!V2C@NY}6vb%Y$}lr@j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DG(-(B literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2486a84bf0f161f45b050d9c19ea9e35f5def864-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2486a84bf0f161f45b050d9c19ea9e35f5def864-8 new file mode 100644 index 0000000000000000000000000000000000000000..9ed0d0e084d5b31b353699faaa49f01fedd1ec0a GIT binary patch literal 25 ecmZQk@|DO-Y&o%a|NB@5Mg}GZ1_ltH!4Uvv*#{l~ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/25.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/25.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..869a668b58382ce1b5c9d869d038e9b47a3a2840 GIT binary patch literal 48 zcmZ>Y$}l%{j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DG;s|v literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/25252b16cd4afa8ef86122448688c7095684c86b-12 b/vendor/github.com/pierrec/lz4/fuzz/corpus/25252b16cd4afa8ef86122448688c7095684c86b-12 new file mode 100644 index 0000000000000000000000000000000000000000..b5a986b2526123e39a24241fc9c34fda8adb9e40 GIT binary patch literal 25 bcmZQk@|B28Y&o&_G6MqxBM>t%uz-aCP=5tz literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/26.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/26.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..2d7678a7acfdaf4e7ec6cf9de1e87cc3b26dcd70 GIT binary patch literal 48 zcmZ>Y%CInWj8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DG@cDI literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/263fb3d738b862ec4050e5a9fbabfbd99cb0d9a5-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/263fb3d738b862ec4050e5a9fbabfbd99cb0d9a5-16 new file mode 100644 index 0000000000000000000000000000000000000000..72e921a6686e4a2eda634e52f94048f906a51078 GIT binary patch literal 32 lcmZQk@|EyTY&pTe$nfhwBLgo314I3P5J+cdWcdG|0RXLx408Yg literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/27.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/27.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..409a9a2d97d6f314b6e6c898648fa5a1a57ef4d0 GIT binary patch literal 48 zcmZ>Y%CIzaj8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{{s!*Z42R!)vp%>NPq DG|LS$ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/276580343a14eec04143e89a778dae3e14df472c-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/276580343a14eec04143e89a778dae3e14df472c-17 new file mode 100644 index 0000000000000000000000000000000000000000..ce6896874300e2ea4a8df1a3bbbbe3415fa37ea3 GIT binary patch literal 52 qcmZQk@|Ey)U|?|4^5tPrXJlhwU&j9?kU#SB{{n1Qk>VvhmV1qnj{ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/27fb5dc4016dc640e55a60719a222c38c604fa6b-2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/27fb5dc4016dc640e55a60719a222c38c604fa6b-2 new file mode 100755 index 0000000000000000000000000000000000000000..c742bacacc44aee87823184e0084d75395aa9b02 GIT binary patch literal 14 VcmZ>Y%CHbGaz1i=6R literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/28.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/28.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..112aea2e8c0e8b29c3121f2be1ec2a17b9e35f86 GIT binary patch literal 157 zcmV;O0Al|_T4*sbL0KkKSzC~1Q~&@LAAmpyA|NjWQ~*Ek+z=oDl|xkVKxoL&9*`cO zB}{~RDWlZ%n4Y1K^$n*SV}F#i(Y8Y9`#e_0kn2jrQ&<)@Eixu}cN3W|eT2obV{S=$ zAzI3A5HnhFs6ue@OfL1nJQJm4Zx?=H_0Wa}WDBNGGL(qUj^!B))kRsU*Y%CHbGad{ivR!s literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2b39aa66ecfac58e61185c9664a968233931496a-9 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2b39aa66ecfac58e61185c9664a968233931496a-9 new file mode 100755 index 00000000..27cfb62c --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/2b39aa66ecfac58e61185c9664a968233931496a-9 @@ -0,0 +1 @@ +"MM@"©½¿ïp+[Ô \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2c2a5947341d76797a7e2299f39d01e3aebb2eb8-19 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2c2a5947341d76797a7e2299f39d01e3aebb2eb8-19 new file mode 100644 index 0000000000000000000000000000000000000000..e94d8da56642f42dec7b8e176ad022612050e10e GIT binary patch literal 70 ocmZQk@|Ey)U|?|4^5tPrXJlhwU&j9?jJ5kr+VY>{9F0ENyAp8x;= literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2cc2308b75a2e8f7eafcf69370767e5fce314892-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2cc2308b75a2e8f7eafcf69370767e5fce314892-13 new file mode 100644 index 0000000000000000000000000000000000000000..202625196ed4cd0cd6601c52e0e0557ad943d6d3 GIT binary patch literal 32 mcmZQk@|DO-Y&o%a|NB@5Mh0F628RFt|2Hr&NaQgA*%AP=Y$}lo?j8qGb6zG4f!@$5^{oTi@A>%^Ir@q-C3PxY|a9gTBdgrm6ONdGEPig}I Dnb8ta literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2de93224b5f0db491ced1ec491a9f41d71820671-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2de93224b5f0db491ced1ec491a9f41d71820671-11 new file mode 100644 index 0000000000000000000000000000000000000000..71c5a14eba7cd3ebbcb82906e86c2f2bd2274ede GIT binary patch literal 23 ecmZQk@|Ey)P+GZn|N8>%=qn5i3=K|Nz7hai6bEVm literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2e8487cf61feda70c0d74f12bfb5b692b684f82a-9 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2e8487cf61feda70c0d74f12bfb5b692b684f82a-9 new file mode 100644 index 0000000000000000000000000000000000000000..f1c5b7a4fefd4ada12ca7689806d3ebe6ed44dae GIT binary patch literal 25 dcmZQk@|B28Y&o&_G6MqxBLfqVl*j|}839z823Y_A literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2f0ee9cf4bb951a37efc6460d5709442bc3de54e-6 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2f0ee9cf4bb951a37efc6460d5709442bc3de54e-6 new file mode 100644 index 0000000000000000000000000000000000000000..49c3db23b6d6173fb72a79e88637ff17a29379bb GIT binary patch literal 23 ccmZQk@|DO-Y&o%a|NB@5Mg|bbNX%0J09l;|#{d8T literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/2f1ba7fe1cd90a4023706a2ea9c7c9dca8128119-30 b/vendor/github.com/pierrec/lz4/fuzz/corpus/2f1ba7fe1cd90a4023706a2ea9c7c9dca8128119-30 new file mode 100644 index 0000000000000000000000000000000000000000..3d62f949ed5e5b9647961e404b8e3c9ab7fb29e3 GIT binary patch literal 167 hcmZQk@|Ey#P+GZn|N8=^=qn6Bz%r&j9?jJ5yK|S$Y$6A0L}>w3IG5A literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/3.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/3.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..197b557835ae0dacf12146abcfdea1713aa313aa GIT binary patch literal 42 ycmZ>Y$}l!`j8qGbWG}V6&cMLH$Y9@~z+lM3aO60|QVF$Okgy69EUm B3$XwI literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/31.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/31.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..22bbfb22c38d277892dc0bd8d87aee40bcfe6533 GIT binary patch literal 157 zcmV;O0Al|_T4*#eL0KkKSzC~1Q~&@LAAmpyA|NjWQ~*Ek+z=oDl|xkVKxoL&9*`cO zB}{~RDWlZ%n4Y1K^$n*SV}F#i(Y8Y9`#e_0kn2jrQ&<)@Eixu}cN3W|eT2obV{S=$ zAzI3A5HnhFs6ue@OfL1nJQJm4Zx?=H_0Wa}WDBNGGL(qUj^!B))kRsU*lvUT0LmH%YybcN literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/35.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/35.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..fe6da549daf1ccee4d483b8c88fdc1ba181869a2 GIT binary patch literal 157 zcmV;O0Al|_T4*>iL0KkKSzC~1Q~&@LAAmpyA|NjWQ~*Ek+z=oDl|xkVKxoL&9*`cO zB}{~RDWlZ%n4Y1K^$n*SV}F#i(Y8Y9`#e_0kn2jrQ&<)@Eixu}cN3W|eT2obV{S=$ zAzI3A5HnhFs6ue@OfL1nJQJm4Zx?=H_0Wa}WDBNGGL(qUj^!B))kRsU*Y$}lu^j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkg$`6D9 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/3771c6e8ea0f20350dae0180a9b14e36b8aef244-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/3771c6e8ea0f20350dae0180a9b14e36b8aef244-22 new file mode 100644 index 0000000000000000000000000000000000000000..0d255bfa1e0cf635c76827fc44bafdc32e6a7823 GIT binary patch literal 71 scmZQk@|DO-Y&o%a|NB@5Mh0O9h6V`+ULXlVEg%ZSkOdMgU|}4R06eD+pa1{> literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/37ee7fab504f2d2039753d73dd0290c884bd57bf-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/37ee7fab504f2d2039753d73dd0290c884bd57bf-8 new file mode 100644 index 0000000000000000000000000000000000000000..901a42d396b5128898f62b06b22b2c70753ba00e GIT binary patch literal 25 VcmZS3@|9o!0v04%!dHTY0RS7;0yh8v literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/38.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/38.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..30ca1c20ad7c03598b3103c2dbf1976e55f3a3f1 GIT binary patch literal 58 zcmZ>Y$}lo?j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkh0S|=$ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/39.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/39.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..16298f604e58d565c56b9217a7432c381fa4208b GIT binary patch literal 58 zcmZ>Y$}l!`j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkhI1h#Z literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/396101a712463bb336a18f4096fc3eb5923600c1-10 b/vendor/github.com/pierrec/lz4/fuzz/corpus/396101a712463bb336a18f4096fc3eb5923600c1-10 new file mode 100755 index 0000000000000000000000000000000000000000..7274cb5ed0009231db71fae8344f5c297e5eef84 GIT binary patch literal 74 WcmZ>Y%CHbGak literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/397127b75cb59b253ed49206082b0428b6b23d02-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/397127b75cb59b253ed49206082b0428b6b23d02-17 new file mode 100644 index 0000000000000000000000000000000000000000..4a94d99edaad732774b82443653252cb142b220c GIT binary patch literal 43 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=Oz20R7MjnE(I) literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/39ccf446395ef707cf92a04b5508deda399372c2-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/39ccf446395ef707cf92a04b5508deda399372c2-15 new file mode 100644 index 0000000000000000000000000000000000000000..974c4236d8fd0df9d712bb0ee8d611ebe05ebaea GIT binary patch literal 32 lcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^$ngI^0|3Y84P*cS literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/3b6fd6da48bb34284390a75e22940e7234dbbd28-34 b/vendor/github.com/pierrec/lz4/fuzz/corpus/3b6fd6da48bb34284390a75e22940e7234dbbd28-34 new file mode 100644 index 0000000000000000000000000000000000000000..de4e0a82c061df3cfe02c205800ccf515b685a27 GIT binary patch literal 24 fcmZQk@|CDdY&o%a|NB@5#_fy@3=B0Ad5J9mX&DF~ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/3de3c5c394a3cf05620bb80871a1f10e9e36f25b-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/3de3c5c394a3cf05620bb80871a1f10e9e36f25b-8 new file mode 100644 index 0000000000000000000000000000000000000000..667f2f2a71501f2b69634fa6d3faf406cde73dda GIT binary patch literal 25 ecmZQk@|DO-Y&o%a|NB@5Mg}$ph6a!bgChWFvIi^x literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/3dee65f1cf51dfe2e5be498150ce22d2ac5a07fd-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/3dee65f1cf51dfe2e5be498150ce22d2ac5a07fd-1 new file mode 100755 index 0000000000000000000000000000000000000000..8600d6d505cd27825bbe8a69b069f3b7fdc17e16 GIT binary patch literal 22 dcmZ>Y$}ll>j8qGbObcOP5R-3kU{_Mm2LM3Y1pNR2 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/3e34341fb51769fd9d948bdd20c011e335b145f4-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/3e34341fb51769fd9d948bdd20c011e335b145f4-1 new file mode 100755 index 0000000000000000000000000000000000000000..194057f9beefcd15205479ab1c65f3d361d07cf6 GIT binary patch literal 64 zcmZ>Y$}lo?j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x RvzUFH8ZM-K>YE*+008=i5OM$j literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/3ee211efb3d5d8058cd9a8c59e40c8d0f7a3df53-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/3ee211efb3d5d8058cd9a8c59e40c8d0f7a3df53-1 new file mode 100755 index 0000000000000000000000000000000000000000..bb86190c205ae17643f402d0d6983e2f9b6ff02d GIT binary patch literal 51 zcmZ>Y$}lu^j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lU!CAaqss*m1z HEaw6MO5F`n literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/4.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/4.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..679a04b7741552f16f2107271c43c7d5cf2d24cc GIT binary patch literal 42 ycmZ>Y$}ll>j8qGbWG}V6&cMLH$Y9@~z+lM3aO6Y$}ll>j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkhZx4q6 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/405726718b3f54a0cfae1666f06d3cc1ee747104-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/405726718b3f54a0cfae1666f06d3cc1ee747104-14 new file mode 100644 index 0000000000000000000000000000000000000000..63f58da0e6967f29514d765df519a8db4f388194 GIT binary patch literal 27 ccmZQk@|Ey#P+GZn|N8=^=qn5i3=J?00Ch$OivR!s literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/407188676d45d6f9dd5f3c84e7df0e763c7cca57-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/407188676d45d6f9dd5f3c84e7df0e763c7cca57-22 new file mode 100644 index 0000000000000000000000000000000000000000..76680dd54f939e3ed45a4bb7932d17663e6dfbb5 GIT binary patch literal 82 zcmZQk@|DO-Y&o%a|NB@5Mh0F628Npd{~H(>B=VRT6ih(^4L~+Rg)C4&2_y`XfhdJi GP;CJBSQ)MW literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/408ac1a4a83e082e848c208eed903930d81e81b6-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/408ac1a4a83e082e848c208eed903930d81e81b6-17 new file mode 100644 index 0000000000000000000000000000000000000000..934e10f0702b38f38b1066f17363509c7ffbec7a GIT binary patch literal 67 zcmZQk@|Ey)U|?|4^5tPrXVhR|Xkf@MOD!@~F*GnTGBz+WF*7nXG&M6dF)%SQHZwLf UGqW(TG_Wu-FlGRP*KX>e0HSvd2><{9 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/41.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/41.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..d63608f3990a460aacc4e5e5f072b726fb26b767 GIT binary patch literal 58 zcmZ>Y$}lx_j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkhrVoe! literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/4114fd99aaa4dc95365dc4bbcb3c9a8a03434a5a-29 b/vendor/github.com/pierrec/lz4/fuzz/corpus/4114fd99aaa4dc95365dc4bbcb3c9a8a03434a5a-29 new file mode 100644 index 0000000000000000000000000000000000000000..4c8ea2b5fe46b2be82e7e9e53f4cc22e407b20cb GIT binary patch literal 55 zcmZQk@|DO-Y&o%a|NB@5Mh0F628R6qK!TBhiQ&(G83th>`~Uw228MB=Q&->i;tcGcYtTfcOnHAYmq`oGeg4 O38Wf`ATlrtssI4@Y#o^Z literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/413e39442f005279560ddad02bbdd1a05c9f0eaf-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/413e39442f005279560ddad02bbdd1a05c9f0eaf-4 new file mode 100644 index 00000000..8e4e3529 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/413e39442f005279560ddad02bbdd1a05c9f0eaf-4 @@ -0,0 +1 @@ +"Mna„Ƚ¿ï½¿ï½ \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/41b7eaf8892043eccf381ccbc46ab024eb9c503c-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/41b7eaf8892043eccf381ccbc46ab024eb9c503c-4 new file mode 100644 index 0000000000000000000000000000000000000000..6b428d19e1d8c2a3ed5259538555cd48520856ef GIT binary patch literal 9 QcmZS4@|7?VU|?VX00nFS*Z=?k literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/42.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/42.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..f0f25c7fd78aae73103e7cc63a701c3c11e818ee GIT binary patch literal 58 zcmZ>Y$}lr@j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkh-4BTX literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/4208b7fe7ac3a530c159a1c8fd09dd3078b5650f-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/4208b7fe7ac3a530c159a1c8fd09dd3078b5650f-15 new file mode 100644 index 0000000000000000000000000000000000000000..c8c2c6aa62426046320864a69c8868615dac6e1f GIT binary patch literal 35 ccmZQk@|Ey#P+GZn|N8=^=qn5i3=QZQ0JNS6ivR!s literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/421bd1daa317c5d67fa21879de29d062c342294b-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/421bd1daa317c5d67fa21879de29d062c342294b-5 new file mode 100644 index 0000000000000000000000000000000000000000..6a19eb3d8ac56d593b679b31cfab290dbe9f960d GIT binary patch literal 19 ZcmZQk@|DO-Y&o%a|NB@5Mg}0Y7XU}<2$%o> literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/42544ff3318fe86dd466e9a05068e752a1057fcc-32 b/vendor/github.com/pierrec/lz4/fuzz/corpus/42544ff3318fe86dd466e9a05068e752a1057fcc-32 new file mode 100644 index 0000000000000000000000000000000000000000..a71836ea2676ab4efde32a1593c920c104903222 GIT binary patch literal 123 zcmZQk@|CDdY&o%a|NB@5#_cH#3=H-EK|mspi9vypL70J|LBi0`(#XKl$imXp)W965 uf`NgTfdQnR!G2rj-G&;8Jg5l{U`YX>9wi_Ka=_S$AHfER0VRR@{{sN*Tp$nt literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/42b056f9dac9cc658c80092e490b3dbcd436e3f8-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/42b056f9dac9cc658c80092e490b3dbcd436e3f8-15 new file mode 100644 index 0000000000000000000000000000000000000000..2b38240671da6d27fa7c9648dfe5085d580c4684 GIT binary patch literal 32 mcmZQk@|DO-Y&o%a|NB@5Mh0F628IeCW?+!WV`5NXl>h*diw3#? literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/43.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/43.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..f68d3a73a41dcc6ca6420448a0efc858b52bc8df GIT binary patch literal 58 zcmZ>Y$}l%{j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggki6c363 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/432c09281c46537c98864bc7d601780562b68410-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/432c09281c46537c98864bc7d601780562b68410-1 new file mode 100755 index 0000000000000000000000000000000000000000..f462929668c6773d243d7ecbe686edd62ef035e2 GIT binary patch literal 22 dcmZ>Y$}lo?j8qGbYz<~$V7L>*z_5UU0RTmB1%vY%CInWj8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkiOAm_x literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/446dc91ff0ddc34c3b02f741e3f6f079a4dfcae8-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/446dc91ff0ddc34c3b02f741e3f6f079a4dfcae8-17 new file mode 100644 index 0000000000000000000000000000000000000000..2ae4b5acf927f24991600909fda9df2bd6913ed0 GIT binary patch literal 81 WcmZ?L@|9o!0w*-ul0-gCKLY?@_XrRG literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/45.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/45.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..855e812da10291f9a0b563932857d0324099879c GIT binary patch literal 58 zcmZ>Y%CIzaj8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSe^Ch?U462Xb Oc`WA=l6WJqDggkif)9)U literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/451831159c1afb87077066147630b4b6caeb54c3-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/451831159c1afb87077066147630b4b6caeb54c3-11 new file mode 100755 index 0000000000000000000000000000000000000000..bfd673d45aa96bdd9ee338aa4dab59c6b96156e2 GIT binary patch literal 25 ScmZ?L@|9o!0w-h|!~p;(&;vyP literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/46.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/46.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..a11978d36014479974c9b2ec30e1dc1b82b8d5e2 GIT binary patch literal 82 zcmZ>Y$}lu^j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0Bg4w_5c6? literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/47.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/47.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..78995878879f418a2ff19c29f808255ee361aacf GIT binary patch literal 82 zcmZ>Y$}lo?j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0Bi;q_W%F@ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/48.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/48.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..d7b0df5d367f6506b92c91de2859a23911995b40 GIT binary patch literal 82 zcmZ>Y$}l!`j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0Bltk_y7O^ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/49.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/49.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..0e16e69c13346cdfcbbd4306e763a01ab43af9f0 GIT binary patch literal 82 zcmZ>Y$}ll>j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0Boce`2YX_ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/49861b3d9bca3e2857d806aaecaac09af4bff1dd-2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/49861b3d9bca3e2857d806aaecaac09af4bff1dd-2 new file mode 100755 index 0000000000000000000000000000000000000000..0648054b9d0bb5320f83f8cfbfc79ee18ca0b232 GIT binary patch literal 35 rcmZ>Y$}lu^j8qGbRA4aVVK{Oq^<3Y%CHbGa}ga9Lxe< literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/4b0ab2fc1fdfc56066c5c1f2751b292f4ddc557e-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/4b0ab2fc1fdfc56066c5c1f2751b292f4ddc557e-16 new file mode 100644 index 0000000000000000000000000000000000000000..51ffa5a1efd59285a4f3cf5df05f47a3369140ec GIT binary patch literal 71 vcmZQk@|B28Y&o&_G6MqxBM>t%uz-am&I@Y6#UMhMs_O3B=(cCY$}lo?j8qGb6zG4f!@$5^{k_4dA>%^Ir@q-C3PxY|a9gTBdgrm6ONdGEPig}I DpMesE literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/4bd00d26b893ce064dad6e771f30541b541d43b9-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/4bd00d26b893ce064dad6e771f30541b541d43b9-18 new file mode 100644 index 0000000000000000000000000000000000000000..244f762135fc9bf5123f4dc774beda16f78d9593 GIT binary patch literal 114 zcmZQk@|B28lsGS_b(w*Iff0xqSinLpC-%ZcphCo`%1Z=l-2XlnXcQ9zLxU0nFOaPH QFA-UH-$u7RV}GIq0A!*YGynhq literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/4cde5adc216a29fff2ec39e23ccc6fca80cd4a15-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/4cde5adc216a29fff2ec39e23ccc6fca80cd4a15-21 new file mode 100644 index 0000000000000000000000000000000000000000..9a3f3a8f744392c70e32a58cc5caa85c4ab87872 GIT binary patch literal 83 ccmZQk@|Ey#P+GZn|N8=^=qn5i3=NcG0NBh9ivR!s literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/4d1b64babe1f045b8374f4d74949622591546eb5-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/4d1b64babe1f045b8374f4d74949622591546eb5-17 new file mode 100644 index 0000000000000000000000000000000000000000..983d0a4f2365a137bdc720b79c121899402f2796 GIT binary patch literal 56 zcmZQk@|Ey)U|?|4^5tPrXB1#yXkh3qOD!@~F*GnTF$Q8YsF;zdp{bdviGhicv6-V6mBLY%CHbGaY$}lx_j8qGbWG}V6&cMLH$Y9@~z+lM3aO6Y$}lx_j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0BrLY`Tzg` literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/50a87eb0c097a7ebf7f1bf3be2c6a7dbe6b6c5c3-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/50a87eb0c097a7ebf7f1bf3be2c6a7dbe6b6c5c3-23 new file mode 100644 index 0000000000000000000000000000000000000000..e6a919b262580e935678fd90159ab65434172abe GIT binary patch literal 105 zcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_lWRULaWm#6Wf)6N7>&NT8txSsjLeEKr3#NF7+_ Q|NjOC2D2J41tui&0C9mGo&W#< literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/50e3ac1126c605158726db6f2cca3120f99b8e73-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/50e3ac1126c605158726db6f2cca3120f99b8e73-22 new file mode 100644 index 0000000000000000000000000000000000000000..5ad9706b72da7752f765a964e2aac568f88d9411 GIT binary patch literal 105 zcmZQk@|DO-Y&o%a|NB@5Mh0F628Npd{~H>BG!ugYBZDvlLxY5&p{0?5rICfDsi}cE eP=*1duAv55qbyKB2_y`b0h$0(0H(l%L>>UBf*nNw literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/51.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/51.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..b965c7a646f1fa109fa59d67bf21668b0f70ac4c GIT binary patch literal 82 zcmZ>Y$}lr@j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0Bu4S`v3p{ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/51075c34f23d161fb97edcf6f1b73ee6005009a0-28 b/vendor/github.com/pierrec/lz4/fuzz/corpus/51075c34f23d161fb97edcf6f1b73ee6005009a0-28 new file mode 100644 index 0000000000000000000000000000000000000000..4b93cd1b82c356135e91b096f11ee90948b1d725 GIT binary patch literal 61 ucmZQk@|DO-Y&o%a|NB@5Mh0F6hK3qs0RfB=VRT6c`zV85kNQ3=J)f3_!@#)W965 zf&rwip$4WAsEY%CHbGazW^!#00x~HM*si- literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/52.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/52.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..8215bac9f089d253c69d2685a83a4d9a97f90431 GIT binary patch literal 82 zcmZ>Y$}l%{j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0Bw;M`~Uy| literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/53.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/53.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..2ab0a6de2512a19021319339370d361a190bb63f GIT binary patch literal 82 zcmZ>Y%CInWj8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0BztG{Qv*} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/54.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/54.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..6004de354485e1710d01b2429c4db9a597e4d835 GIT binary patch literal 82 zcmZ>Y%CIzaj8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x kvzUFH8Zs`VeCnGWqG0rO54WZIqjw(5xrCSm|D-km0B$cA{r~^~ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5431cabbc58d8dc143ece079de40300c1ce6e101-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5431cabbc58d8dc143ece079de40300c1ce6e101-1 new file mode 100755 index 0000000000000000000000000000000000000000..4061e90f86018fa5953c22b91b481bf3e4647abe GIT binary patch literal 144 zcmV;B0B`?7T4*#eL0KkKSzC~1Q~&@LAAmpyA|NjWQ~*Ek+z=oDl~nOSXvokWkRG5V zdMTsS^q8KZko66x9F(-twnFIpJXXe#>q^5@SQa)dGA4L;6PYf3gvGLBZb^C}TFPz^ yGg@(|LU8d+F7?1X6QyKt7k**&(1r$NPn3wxj^!B))kRsU*Y$}lu^j8qGbRA4YE=Y$}kZxaB=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-KxKUFpMm1pS|9`N_Oh8={VDoFhCV&Y}g{f%%IGWcZ#XfDFpy!tOnr# literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/59b254c3565c9eed2bc93385b821da897afcbb15-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/59b254c3565c9eed2bc93385b821da897afcbb15-1 new file mode 100755 index 0000000000000000000000000000000000000000..a6cbaf736a7253a27ec10d0aa24f3ee5611619d3 GIT binary patch literal 44 zcmZ>Y$}lo?j8qGb6zG4f!@$5^{k?&qL4b*)(SgCCfkTKvfT2-9fI;Da0)rs{3}gzD literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5a962e3d6a128983afe9ea78a28cce0f40a790c0-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5a962e3d6a128983afe9ea78a28cce0f40a790c0-14 new file mode 100644 index 0000000000000000000000000000000000000000..014f6a6f30af0debdd97a780bfb590e6e6181838 GIT binary patch literal 42 jcmZQk@|B28Y&o&_G6MqxBM>t%uz-am&I@Y6#Xv#;$|48p literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5af52ef91b6f717ffdd805585e24806407e9621b-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5af52ef91b6f717ffdd805585e24806407e9621b-14 new file mode 100755 index 0000000000000000000000000000000000000000..8695d399b324f101638ad360c39949a7f582aa2a GIT binary patch literal 114 XcmZ>Y%CHbGa%=qn5i3=JUcq?IM%1OR}02uT0{ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5bd895c23369df9505dd99ffcd035dc5e897264b-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5bd895c23369df9505dd99ffcd035dc5e897264b-1 new file mode 100755 index 0000000000000000000000000000000000000000..affcc488964e3a17c555604546dd3bfe94d8d2d9 GIT binary patch literal 49 zcmZ>Y$}ll>j8qGbjGmAd!oVOV-{8Qmq@d3d!eIaYj(`G#bI3=Bj1w2+u6&udaKcyK FY$}l!`j8qGbjGmAd!oVQ*e*az|QU&63^Rt2ERA-*6u8}Km#wz;#n520K00b%* AQvd(} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5c4f347c3567baf700dfccf49a91192c83b89da2-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5c4f347c3567baf700dfccf49a91192c83b89da2-8 new file mode 100755 index 00000000..6282cf69 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/5c4f347c3567baf700dfccf49a91192c83b89da2-8 @@ -0,0 +1 @@ +"MM@"©½¿ïp+[ \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5dd8001f8a87c24f866074c36b6b80f42b298ff0-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5dd8001f8a87c24f866074c36b6b80f42b298ff0-1 new file mode 100755 index 0000000000000000000000000000000000000000..39ef02cbfe8c969084e4200339e01042b5782d19 GIT binary patch literal 38 tcmZ>Y%CInWj8qGb>{?*|jDdlbAw`6Nfnf)O0)rCQLzUoGPL5T~{{Y4_3PS(@ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5ddf63d61aa38da1d409e37b301e0fe5a207a051-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5ddf63d61aa38da1d409e37b301e0fe5a207a051-27 new file mode 100644 index 0000000000000000000000000000000000000000..ea34cb440c9d3528e08033b6177f44ebd54201be GIT binary patch literal 156 ecmZQk@|Ey#P+GZn|N8=^=qn6Bz%odLRssM#7BOuA literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5e19e298d051aac48b7683dc24577b46268b630c-35 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5e19e298d051aac48b7683dc24577b46268b630c-35 new file mode 100644 index 0000000000000000000000000000000000000000..a39d2617255c92e35dbea47856f6cba1068c041d GIT binary patch literal 24 gcmZQk@|CDdY&o%a|NB@5#_fy@3=B2*+*X|j0Bn{CQ2+n{ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5e54c67050ee8583c7453ff13d6eec15b2255288-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5e54c67050ee8583c7453ff13d6eec15b2255288-20 new file mode 100644 index 0000000000000000000000000000000000000000..0a87f43f7dc7ded006b3b5e0945ade4bd4fb5845 GIT binary patch literal 83 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=NcG0NmCNnE(I) literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5f946423d1138924933334c6e5d3eb13e1020e9c-33 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5f946423d1138924933334c6e5d3eb13e1020e9c-33 new file mode 100644 index 0000000000000000000000000000000000000000..fe8e779fa12c16b7e9ef7a35d5f6b43cfc625596 GIT binary patch literal 33 hcmZQk@|CDdY&o%a|NB@5#_hZe3=K6Bd2j&+0RYr53`_t3 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/5fbebd9edd144c4b9869ed4ab40c7cc3c46a4a8f-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/5fbebd9edd144c4b9869ed4ab40c7cc3c46a4a8f-4 new file mode 100644 index 00000000..bf8e930d --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/5fbebd9edd144c4b9869ed4ab40c7cc3c46a4a8f-4 @@ -0,0 +1 @@ +"M@c¯ \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..0cfbc601e365f93232364b895863098d7a65bf63 GIT binary patch literal 42 ycmZ>Y$}lr@j8qGbWG}V6&cMLH$Y9@~z+lM3aO69u6S@ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6046b14dd1f6925bcfe470a8484353f525db6a9c-19 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6046b14dd1f6925bcfe470a8484353f525db6a9c-19 new file mode 100644 index 0000000000000000000000000000000000000000..1cd81c49e0b0da9db531291694f168544beb4c34 GIT binary patch literal 57 fcmZQk@|Ey#P+GZn|N8=^=qn6Bz(P<6s6_$*62=nb literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/608a9993a51ec7bf252ac76b163def5f7002d2e4-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/608a9993a51ec7bf252ac76b163def5f7002d2e4-4 new file mode 100644 index 00000000..79174b20 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/608a9993a51ec7bf252ac76b163def5f7002d2e4-4 @@ -0,0 +1 @@ +"M@T \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/610d8dc3cf4012e4e2d070988b0720285a4c361e-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/610d8dc3cf4012e4e2d070988b0720285a4c361e-7 new file mode 100644 index 0000000000000000000000000000000000000000..20c9dd137d1deb6d2a0cf22c2712cd86361c57e5 GIT binary patch literal 21 ccmZQk@|DO-Y&o%a|NB@5Mg}GZh6V;l08GmUGXMYp literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/61b196987682fb64ef9c4ff37532bf9b2ac201bc-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/61b196987682fb64ef9c4ff37532bf9b2ac201bc-14 new file mode 100644 index 0000000000000000000000000000000000000000..d9fd8979ef91e7678a72d9e5eed974dbd34e5346 GIT binary patch literal 30 lcmZQk@|Ey)U|?|4^5tPrXJlhwU&Y}k?__V{qN8~{!f2I&9* literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/626f8b6efa3ea0f254789fe6cf52f6e52538f357-25 b/vendor/github.com/pierrec/lz4/fuzz/corpus/626f8b6efa3ea0f254789fe6cf52f6e52538f357-25 new file mode 100644 index 0000000000000000000000000000000000000000..6b1a5b5844ac62b4a9fc4c350a76770f1c18031e GIT binary patch literal 219 zcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_lWRULaWm#6Wf)6N7>&NT8txSsjLeEKr3#NF7+_ S|NjOC2BR7<_5c3>nG67ZGB@7< literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6277f2e0a6df2ac61660ee1965c690b87c26b556-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6277f2e0a6df2ac61660ee1965c690b87c26b556-7 new file mode 100644 index 0000000000000000000000000000000000000000..a3979ce0f5fcfeb5e57fe29c3ea562d2c34e65db GIT binary patch literal 21 ccmZQk@|DO-Y&o%a|NB@5Mg}GZ28Iug08J|fqW}N^ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/62c738f00c488f493989b2037d9cf1781f0bbd40-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/62c738f00c488f493989b2037d9cf1781f0bbd40-11 new file mode 100644 index 0000000000000000000000000000000000000000..f965e8c674b218d6516f5ff33a6f46637087e39d GIT binary patch literal 38 gcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_p^dWD+a@0K1Y0jsO4v literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/631ffa88df9713a124b3ba6c704c0c75727af2ff-6 b/vendor/github.com/pierrec/lz4/fuzz/corpus/631ffa88df9713a124b3ba6c704c0c75727af2ff-6 new file mode 100755 index 0000000000000000000000000000000000000000..b8f1f4a4d8a6408ee66904e79899ff314ed057b2 GIT binary patch literal 16 RcmZ?L@|9o!0w)OV1OO4z0p$Py literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/633df0cd78621cd45067a58d23c6ed67bb1b60cb-31 b/vendor/github.com/pierrec/lz4/fuzz/corpus/633df0cd78621cd45067a58d23c6ed67bb1b60cb-31 new file mode 100644 index 0000000000000000000000000000000000000000..57f89bcb4fb441502ce536c9ba1a0ce2aa97501f GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_q-%hCBuai99BT|Bej8Kmnj&3PVH9|Njk)3_t=T WC(FRlpahZtBCrgc`u~3xNC5yU@ftw@ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/635d5de257a1910a7fd0db2e567edfa348e47270-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/635d5de257a1910a7fd0db2e567edfa348e47270-11 new file mode 100644 index 0000000000000000000000000000000000000000..32aa66d51fa27ed4d950f8a7adac40d1aaa9e029 GIT binary patch literal 38 icmZQk@|DO-Y&o%a|NB@5Mg}GZ1_p^dWD+RQkOu&~Vh8pB literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/64c500b5addcbf8c673188a1477e4159851ae04f-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/64c500b5addcbf8c673188a1477e4159851ae04f-1 new file mode 100755 index 0000000000000000000000000000000000000000..6c6541ba79787771828977d31a017d6585d7ff42 GIT binary patch literal 124 zcmV-?0E7QRT4*;hL0KkKSzC~1Q~&@LAAmpyA|NjWQ~*Ek+z=oDl|xkVKxoL&9*`cO zB}{~RDWlZ%n4Y1K^$n*SV}F#i(Y8Y9`#e^V>q^5@SQa)dGA4L;6PYf3gvGLBZb^C} eTFPz^Gg@(|LU8d+F7?1X6QyKt7k**&(1r$k<1+sM literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/660387064a3cf4cb81046989929abe1b4fbfc815-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/660387064a3cf4cb81046989929abe1b4fbfc815-17 new file mode 100644 index 0000000000000000000000000000000000000000..1bf5f59afb271f1bcd67fbf5bc329a415862e7f9 GIT binary patch literal 51 ccmZQk@|Ey#P+GZn|N8=^=qn5i3=M=Z083p8ivR!s literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/66068a7e7bdfd1038a84aeb3dec6e3cb4d17ad57-2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/66068a7e7bdfd1038a84aeb3dec6e3cb4d17ad57-2 new file mode 100755 index 0000000000000000000000000000000000000000..1a2cd7c6d79c283c95fbabe626d0a03b09827cc1 GIT binary patch literal 16 VcmZ>Y%CHbGau0hr)3lvZS34>++|8HPmFsk|gAE@;I|M$E=lbL`_35FT~lxrYb literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/69dcc80940a26844b0afe7898fea9cf68b698214-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/69dcc80940a26844b0afe7898fea9cf68b698214-4 new file mode 100755 index 0000000000000000000000000000000000000000..6864d20a003159f36636ebc2df5af296316091cf GIT binary patch literal 12 RcmZ?L@|9o!0;h%s1^^6H0u%rM literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/69fcd886042d5c3ebe89afd561782ac25619e35b-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/69fcd886042d5c3ebe89afd561782ac25619e35b-27 new file mode 100644 index 0000000000000000000000000000000000000000..10a5a710215cf427832f74474db6f8ac94ddc840 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_tvyhCBuai99BT|BMX63=9nn{~Lg0&3_ODCM5D? PfdWb()j$N5K~(?%ZKE4` literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6a04b54e1511633ec895326b4e043e186fa5693b-29 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6a04b54e1511633ec895326b4e043e186fa5693b-29 new file mode 100644 index 0000000000000000000000000000000000000000..a8d5553527432ca1ef5bae6262824e1b9b259e44 GIT binary patch literal 171 ccmZQk@|Ey#P+GZn|N8=^=qn6Bz%odM08FGdTL1t6 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6a3e8935204dcd3dc48a1ff7415c305f0e5863aa-9 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6a3e8935204dcd3dc48a1ff7415c305f0e5863aa-9 new file mode 100644 index 0000000000000000000000000000000000000000..d1c7cf9a3dd8034811dbe47a18eac93115731a4d GIT binary patch literal 28 QcmZS4@|9o!0v0SZ03fUaO#lD@ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6b351674a45f2d9be602fe8d3fb84229551b4ce3-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6b351674a45f2d9be602fe8d3fb84229551b4ce3-16 new file mode 100644 index 0000000000000000000000000000000000000000..e736a98f5605aa405b676b4a3e6d71e8f41f85da GIT binary patch literal 69 mcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_lW~Fqwx$Ld20pP}l&qRSBv9 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6b72fdd9989971ecc3b50c34ee420f56a03e1026-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6b72fdd9989971ecc3b50c34ee420f56a03e1026-27 new file mode 100644 index 0000000000000000000000000000000000000000..3eec515907e2e814604245d93300d58a6c7f3c1c GIT binary patch literal 112 zcmZQk@|DO-Y&o%a|NB@5Mh0F628RD&Ad$z!puor=%)rnfVQ6S+WMFAzVQFe=U=CEl m08-abgRD^&D4+xq2Fv{a-@w3NR0F2|{|B4Q1k@$LPy+yh3n1D6 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6b7f4ac7aa8b357dee3067d7a60143c03b54bb8d-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6b7f4ac7aa8b357dee3067d7a60143c03b54bb8d-16 new file mode 100644 index 0000000000000000000000000000000000000000..f1a956bcdb8a6c111a7fde3f2202c3d724e27d1a GIT binary patch literal 42 ocmZQk@|Ey)U|?|4^5tPrXJlhwU&Y=~gBNH7D%Qp6qu0F0IgmH+?% literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/6bc138796e9b80572a6cb1b4a7ba30c97c22359d-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/6bc138796e9b80572a6cb1b4a7ba30c97c22359d-1 new file mode 100755 index 0000000000000000000000000000000000000000..e1fdc112331bc4a7efc663e09681430342ec387d GIT binary patch literal 46636 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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7102c7f297296821114661e00e5bf54d0891d105-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7102c7f297296821114661e00e5bf54d0891d105-21 new file mode 100644 index 0000000000000000000000000000000000000000..5aafd5aaf2007937d5767840462fa75d5ac898d3 GIT binary patch literal 76 zcmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}6vb%pJ@}( literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/71a24ce771fb7f1a4163e57a478c3044ad42e62d-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/71a24ce771fb7f1a4163e57a478c3044ad42e62d-24 new file mode 100644 index 0000000000000000000000000000000000000000..b80bd7ce35ccaf4f7f087a3d6505b2ccc938ba60 GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%<%s|1A```SmG`Qh6V literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/72c738d7492d3055c6fe7391198422984b9e4702-32 b/vendor/github.com/pierrec/lz4/fuzz/corpus/72c738d7492d3055c6fe7391198422984b9e4702-32 new file mode 100644 index 0000000000000000000000000000000000000000..00aa56e448e13e99007baea3f42163872a88ef6e GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_q-%hCBuai99BT|Bej8Kmnj&3PVH9|NjjP3}8Yc LPZmiSo1Q!X@`)8f literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/72f032947602f1be74f01c91165c5118121f36c7-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/72f032947602f1be74f01c91165c5118121f36c7-24 new file mode 100644 index 0000000000000000000000000000000000000000..f7f621e0abe3fb320f9ed6091f8a40f237b3050d GIT binary patch literal 51 wcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%B=VRT6c`zV85kNEK>UUpkT4TeP8KMj O1X2w|5E&Q+RR92}bsRnb literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/767d1943125a0f6e9397779cc757c9cdd1e05631-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/767d1943125a0f6e9397779cc757c9cdd1e05631-17 new file mode 100644 index 0000000000000000000000000000000000000000..f9a81c35d8c47fb38cb61f54480d3a56b9239a69 GIT binary patch literal 62 xcmZQk@|DO-Y&o%a|NB@5Mg}GZh6V`+VIWz9F091B3ljeSzkz`POi1K00RUEC6Gi|4 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/76d22068e2ed4a5952d4adc7ea8dada5509a784c-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/76d22068e2ed4a5952d4adc7ea8dada5509a784c-13 new file mode 100644 index 0000000000000000000000000000000000000000..0d9259c3818c499e5cf3adbcf3802062414083f4 GIT binary patch literal 30 icmZQk@|Ey)U|?|4^5tPrXJlhwXkZXy0P`gno&f+n83b7X literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7740102922cb9933980bb800c1115daf38edf654-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7740102922cb9933980bb800c1115daf38edf654-24 new file mode 100644 index 0000000000000000000000000000000000000000..228afb56fb3fd900430a8df0a0e3ef548f4f7eef GIT binary patch literal 72 lcmZQk@|Ey#P+GZn|N8=^=qn6Bz(TZ;Pi9F8P$Li}0su^P8GZl& literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/783270b1e353ba3895b7d0c4135b8592e22f6508-12 b/vendor/github.com/pierrec/lz4/fuzz/corpus/783270b1e353ba3895b7d0c4135b8592e22f6508-12 new file mode 100644 index 0000000000000000000000000000000000000000..148d9721f9f1e8116472a10e82a06f0a5608dcdc GIT binary patch literal 56 ScmZS4@|9o!0u~ZzkXitG!~~fD literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7851a406571c6b4c1aeed0af16db8c48444c3f2b-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7851a406571c6b4c1aeed0af16db8c48444c3f2b-1 new file mode 100755 index 0000000000000000000000000000000000000000..2f6cbc18ed18bde0aeec327a70ce1f7c5ae78177 GIT binary patch literal 34 pcmZ>Y$}lu^j8qGbWG}V6&cMLH$Y9@~z+lM3@aUb#axNi;cL0~+2}J+^ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/78981d313038119ac4f7017349e50a1cba56b382-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/78981d313038119ac4f7017349e50a1cba56b382-7 new file mode 100644 index 0000000000000000000000000000000000000000..74d78e493891c9eddd04b7884d66db2198a7714b GIT binary patch literal 23 ccmZQk@|DO-Y&o%a|NB@5Mg|aIjXlEz09d02pa1{> literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/78c88c4afaf5962056b1aea720509b9f6f286b91-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/78c88c4afaf5962056b1aea720509b9f6f286b91-15 new file mode 100644 index 0000000000000000000000000000000000000000..33bb48d49ca59524c6865f326b38abc8e0dccb62 GIT binary patch literal 64 mcmZQk@|B28Y&o&_G6MqxBM>t%uz-am&I@Y6#UMi1Q~?0N0u0>% literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/78e59daada9b9be755d1b508dd392fa9fc6fa9c2-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/78e59daada9b9be755d1b508dd392fa9fc6fa9c2-27 new file mode 100644 index 0000000000000000000000000000000000000000..21ad88cce77ff8addbb52f93fa123ea9c6fda6b1 GIT binary patch literal 156 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~H(>B=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-Kx!0P`02Ww#hawWh5HDD=;JO%~@QzoEE4K+Zc4z>% literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/79c5ac978f5aee35e123f523369aa46b1d0a995d-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/79c5ac978f5aee35e123f523369aa46b1d0a995d-11 new file mode 100644 index 0000000000000000000000000000000000000000..a5d3bf48c3046dd8ff77c573984a1ca76ece939c GIT binary patch literal 26 ccmZQk@|B28Y&o&_G6MqxBM>t%uz-am09F45fB*mh literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7a0fc8dacceae32a59589711dce63800085c22c7-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7a0fc8dacceae32a59589711dce63800085c22c7-23 new file mode 100644 index 0000000000000000000000000000000000000000..adcd6885aed71fac911c112900bd8b2c30e95006 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_q=5{~H(>B=VRT6c`zV85n>Zpm0MCvN~CyfD%X; NECbfiPy?o*ngK+W8b1I4 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7adf4aa021efaa953268c817467959fa3c42ca42-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7adf4aa021efaa953268c817467959fa3c42ca42-13 new file mode 100644 index 0000000000000000000000000000000000000000..5959a250beea437da8c5b7ba9757b329d3e28d44 GIT binary patch literal 25 ccmZQk@|Ey)U|?|4^5tPrXJlhwVE7LP06Q!Q1^@s6 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7b8c99ded96973a6e8f523bc1c6ed4ef5c515aa1-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7b8c99ded96973a6e8f523bc1c6ed4ef5c515aa1-1 new file mode 100755 index 00000000..dc224e05 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/7b8c99ded96973a6e8f523bc1c6ed4ef5c515aa1-1 @@ -0,0 +1 @@ +BZh \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7b919213d591e6ce4355c635dc1ecc0d8e78befe-30 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7b919213d591e6ce4355c635dc1ecc0d8e78befe-30 new file mode 100644 index 0000000000000000000000000000000000000000..2c7bc27602d32afff966248dca4b54d84b84d19f GIT binary patch literal 66 wcmZQk@|DO-Y&o%a|NB@5Mh0F6hK3qs0Rfi_@% literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7ba80199cbce9a2eb47da15f0c62fd1fb8fa67d9-3 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7ba80199cbce9a2eb47da15f0c62fd1fb8fa67d9-3 new file mode 100644 index 00000000..7a425b8a --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/7ba80199cbce9a2eb47da15f0c62fd1fb8fa67d9-3 @@ -0,0 +1 @@ +*M4883 \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7cdc0917ad63ce7a7c98301a366c31635f0f099d-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7cdc0917ad63ce7a7c98301a366c31635f0f099d-14 new file mode 100644 index 0000000000000000000000000000000000000000..ce78b27630ffd1823dd1a4a10c5fc34ad90b0080 GIT binary patch literal 32 lcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^$nZap0RYCu4ATGr literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7ce37ad19bfe9f52eeadda03e6b8448e5bf57800-3 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7ce37ad19bfe9f52eeadda03e6b8448e5bf57800-3 new file mode 100755 index 0000000000000000000000000000000000000000..b4ceb19f0f0e7a81ccec898d3f965f0073e78c8d GIT binary patch literal 1452 zcmV;d1ylM$T4*sbL0KkKS(G)X0|3c~|A2H5p~Qdp|M>s^|LQ;g|L|hUKKsA`6YlAD zc`I*Yq>cap03SdA000000Pe>@o%ZE+&|9wQdZK`RbC%m4%MG;|_Z&S3uFrNr00Yvf zPytkx3ZMko01IFM1MbBD=%4@+NF%Ic3;?8kv>bPxFFi;`@6aWAeqKW_jHKKq5loTBl0MJoVC{aKaD`r6|I>_9? zM-U21B2p*-P%g%l=nSX;C@ZZ12HN{%DIf&^prud%0HT0U0)POJ0HHt>000F508@wo zs-*y+P(lKPiUD5i0011Q3ZqJiAt#e00)2o9%b#m03!C@cI|cX z^ewwOgP}kG00jU5PyhfF00000KIUddWzUy*zYj(XS zo#2k@&yew7MfZI4zGbj5%K6?ETfXnR=e?&s%=R5=*Q$L!xO%M*Oy+NSp7(1bO*@-! zeNVjg!`Ha__?%a};t#KV*Ig4ehLd#HZe5%WSj~3RyPd!h+Oykk-8A;c00%OJ&5)RG ztzZTyDyoWr1qzf8ce-*`#_b&`~O?by^sztE~1O3vuo5Rh`LsGW40~*GGGf zPkZB|RQR@KQ$s-R(QfYVxO>gByB(iRb4rwhNl&iel{AKY-g)hu*{4F9(z?@gEw^V} z*k>>R001Z(;r99-PrD}1S6tohk5Or+g!>WWuW9l?;k?@!?(**4fMbO2WQ3SjEY|`r1R~S-8op4hizH5 zZJVK|2rd%0M72}MN_ly03Lu262{qixapuq!IDEzDy6p7ni5vE zvAVms$OAwqHg4?L0noVH4FKD=8s*Sk7t5?i9^UP%z3b8Dbba^F2hWYOH{EvTcYP0f zCNbRm>+Apk0000!$C&xIS@S)4>^Ugzy;~{NwKG>SO?}u?-^ zYoHD4qPvZGO1tfYRDJWhUER|;dA-{3yPL<#rBr|b$7zpvoxMJNA5aw?>zhca6KxH7 zeeN~f01B<{6~4WFd+yyc)y>^ERz2)Q8e0majit0`DFGT1=yEP;Q&{Xck1STz7;T2u z0ZJMhd8O}XJH_ForBPGT#_v6DbiBKCLidMCgSG(i-E2rb0N1CX>GlKR@1~Ri3i+WN znwxeQcJ1!PQ?Wj}`p3q7?Fqc-TjRM6 zn5%=UyEmMpdvxS-dE2MDX7*z@x!-N?yRB{&w(fn`nmcoMZEyep9RL&n4u-0(==*Bv zZvlY_pIQgEv|#k_Ub-!sYV3F3-F){w(DUYj<|MOax&;6R<#2euGN*3La1^9T%+}iO z?G7oq_keq?2iqmq54P*O0YFdy2J_0R%t|Fb=eN7P+2?uNw>fR*#qV`Zb#{ty4$bDO zS@+O4zTdH@9gy?Rx_gJm2Ww{7>!eaL;wXwQ-&hMT*9zW5v9^Y43I zxLc>YyAMoK?X2w8RUHV{rRmw7cYOdf3(p&a*_F1J(>865RH?AlX}fjRBv5yydcX(UP7O~8Ktd4^K!6a_AsGbIYMG=B28i~j Gr9DhoExbMe literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7e3132012be223fd55e5e7a7fc2ea602361ed2b4-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7e3132012be223fd55e5e7a7fc2ea602361ed2b4-5 new file mode 100644 index 0000000000000000000000000000000000000000..010f13fc267fad0d5cb5034505c94c2a6c84acf0 GIT binary patch literal 8 NcmZS4@|9o!0ssS)0F(d# literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7e9a88118e4c41e61f5c501e6edf9a5bd2432be3-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7e9a88118e4c41e61f5c501e6edf9a5bd2432be3-23 new file mode 100644 index 0000000000000000000000000000000000000000..de4f0c660699169e1b2a79be0f8c16f4dfb89dec GIT binary patch literal 135 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=IQ;0d}Sp82|tP literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7f081c89cfb6344f4aac5f813da1fd15f8bab022-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7f081c89cfb6344f4aac5f813da1fd15f8bab022-1 new file mode 100755 index 0000000000000000000000000000000000000000..16410b7f524dfc8e7a3d86f278ced1f5d0bcaa4a GIT binary patch literal 26 hcmZ>Y$}lu^j8qGbEVaDOz`(%B(4fFz$Z+IPEC5|Z2MquK literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7f8c3b163798c8d5e1b65e03f411b56b6c9384bb-28 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7f8c3b163798c8d5e1b65e03f411b56b6c9384bb-28 new file mode 100644 index 0000000000000000000000000000000000000000..d4eb29f0931907f280276380bf86a7a50be33a71 GIT binary patch literal 124 zcmZQk@|DO-Y&o%a|NB@5Mh0O9h6V{kLrWtAOCt+QQ&R(T1`yx{;{X4_Dwu#w39vv7 tNQOZokAXqKlnJP!p$2HuVVFrE0g#EZK-wOp9<1X3{{{vIqZ%;v9{{vJ9cKUl literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7f970f16026c689c096a19fef1a3282a13ee69dc-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7f970f16026c689c096a19fef1a3282a13ee69dc-20 new file mode 100644 index 0000000000000000000000000000000000000000..42795e94d20f877ebc25af82000fe420e4319766 GIT binary patch literal 65 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~H(>B=VRT6c`y~85kOrK*B)OPy?2MQczU@ DZ6_1x literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/7fa96d28faf45062eb803ea84a334b607e966f90-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/7fa96d28faf45062eb803ea84a334b607e966f90-1 new file mode 100755 index 0000000000000000000000000000000000000000..28962b057cd816316e88dec33d065eca5d1591ae GIT binary patch literal 31 mcmZ>Y$}lu^j8qGbJf6@R%)r3F!otA8(4fFz$Y7wrdY%CInWj8qGbWG}V6&cMLH$Y9@~z+lM3aO6Yz`v; literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/8261f0c1799ca71c411f6d3f34069b25dac8b739-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/8261f0c1799ca71c411f6d3f34069b25dac8b739-18 new file mode 100644 index 0000000000000000000000000000000000000000..590b0f110e19f85a6617943649ab8c7799a14da5 GIT binary patch literal 52 scmZQk@|Ey)U|?|4^5tPrXJlhwU&j9?kU#SB{{m>C!vQp6qu0N4cy!vFvP literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/82a499521f34b6a9aff3b71d5f8bfd358933a4b2-36 b/vendor/github.com/pierrec/lz4/fuzz/corpus/82a499521f34b6a9aff3b71d5f8bfd358933a4b2-36 new file mode 100644 index 0000000000000000000000000000000000000000..945f5fc94157b8ceed5f4c3564c7d234934305d7 GIT binary patch literal 44 rcmZQk@|CDdY&o%a|NB@5#_hZe3=K6Bd2j&+`)!$b8GwSUv1gb7cB~L5 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/82afa534de59025bf1e3358919286525ae7d3347-2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/82afa534de59025bf1e3358919286525ae7d3347-2 new file mode 100644 index 00000000..2fc2c285 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/82afa534de59025bf1e3358919286525ae7d3347-2 @@ -0,0 +1 @@ +*M \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/82c627991d65c5c4e88c9ccac39be082cca40765-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/82c627991d65c5c4e88c9ccac39be082cca40765-24 new file mode 100644 index 0000000000000000000000000000000000000000..bfa3172a74ebcf89888ddcf89a21bea68389c4cf GIT binary patch literal 82 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_rbL{~H(>B!n3lfD}-mp$1unEKop+0ab?)Lt%NaQ89002kW1&#m! literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/84a9bda8369d33ffe0d6f520c24331ae64e9dc88-3 b/vendor/github.com/pierrec/lz4/fuzz/corpus/84a9bda8369d33ffe0d6f520c24331ae64e9dc88-3 new file mode 100755 index 0000000000000000000000000000000000000000..12276fc7a588dee0efaa7cc1c0d60fa2a0bc0367 GIT binary patch literal 10 RcmZ?L@|9p4000SA0sH^} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/86513e3435adaf7c493dd50eb5de372010185e36-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/86513e3435adaf7c493dd50eb5de372010185e36-1 new file mode 100755 index 00000000..15e4658e --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/86513e3435adaf7c493dd50eb5de372010185e36-1 @@ -0,0 +1 @@ +BZh8rE8P \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/86637b211f4fa0118ccab9ee193c66286126bb5d-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/86637b211f4fa0118ccab9ee193c66286126bb5d-20 new file mode 100644 index 0000000000000000000000000000000000000000..32b0426952105e4f64cb7ccfc49a75fbd176e95b GIT binary patch literal 35 ocmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}6vb%y9Y7e-N+%0DeRZdH?_b literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/8695984335fa005895377a8a60000a921d7efd99-10 b/vendor/github.com/pierrec/lz4/fuzz/corpus/8695984335fa005895377a8a60000a921d7efd99-10 new file mode 100644 index 0000000000000000000000000000000000000000..4b074d949fbbd9fa4a3e4cdb3a5cf5f3bf7cb6d8 GIT binary patch literal 25 fcmZQk@|B28Y&o&_G6MqxBLfqVl*p4ed?5e;Qs)Kp literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/86baa53eb98a9a342b0d5b79dfa5c58aa9c1b05e-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/86baa53eb98a9a342b0d5b79dfa5c58aa9c1b05e-16 new file mode 100644 index 0000000000000000000000000000000000000000..ef5234f697fda64b2d58c1fe2ef3cc7b8093464a GIT binary patch literal 35 qcmZQk@|Ey)U|?|4^5tPrXB1#yU&Y}g{f%)r3Nz`#`LlmY-=6$OU? literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/87caf7737ebb025ec2d908224818ceb2bc76b658-28 b/vendor/github.com/pierrec/lz4/fuzz/corpus/87caf7737ebb025ec2d908224818ceb2bc76b658-28 new file mode 100644 index 0000000000000000000000000000000000000000..10431de1f82c962d06f66a6447abc75de9fc48a4 GIT binary patch literal 156 zcmZQk@|DO-Y&o%a|NB@5Mh0F628NRV{~H(>B=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-Kx!0P`02Ww#hawWh5HDD=;JO%~@QzoEE4K+Zc4t%NB{shmjpWi literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/8d70b7de160bbef22ab46f798d687a69dbda772c-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/8d70b7de160bbef22ab46f798d687a69dbda772c-5 new file mode 100644 index 00000000..cfba1be2 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/8d70b7de160bbef22ab46f798d687a69dbda772c-5 @@ -0,0 +1 @@ +"MbT \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/8e533f8a1e58710d99d6b7d39af7034961aa4fbe-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/8e533f8a1e58710d99d6b7d39af7034961aa4fbe-5 new file mode 100755 index 00000000..049f5296 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/8e533f8a1e58710d99d6b7d39af7034961aa4fbe-5 @@ -0,0 +1 @@ +"M@" \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/8f0d2862c49eebbcd473a38c8fa1e76288f47127-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/8f0d2862c49eebbcd473a38c8fa1e76288f47127-26 new file mode 100644 index 0000000000000000000000000000000000000000..c7dd425011b7d2e0682ae8c1d8f1f623386d2e41 GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%k-M C_6rCA literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/8f4788d30edd22ebcfef0e52bbf9e8c3d1e8d7e9-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/8f4788d30edd22ebcfef0e52bbf9e8c3d1e8d7e9-27 new file mode 100644 index 0000000000000000000000000000000000000000..4cc2e6ed233a656b59cfe16c7110de337a5fd63c GIT binary patch literal 105 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~H(>B=VRT6c`zVfdc;x4K0lfER8HIO-&8V efdUL*b^nny$}%uC*n@HRx7?>Ctn;9FLmFA^Z6r?7Xqyhk%jufo` literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/8f7a47710904981ffaa1fefa21fa95fd2d818487-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/8f7a47710904981ffaa1fefa21fa95fd2d818487-7 new file mode 100644 index 0000000000000000000000000000000000000000..107b0ae8668d3187ece858002aac4a35ecf8ddfd GIT binary patch literal 23 dcmZQk@|DO-Y&o%a|NB@5Mg|rJAjn9}0{~cN2CD!7 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..3ce6c4456d67abdd27062e34b6a1635fe44f4db1 GIT binary patch literal 42 ycmZ>Y%CIzaj8qGbWG}V6&cMLH$Y9@~z+lM3aO6lMW;R literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/90a227d3beab730ed6eecd63657f5406beccabdf-12 b/vendor/github.com/pierrec/lz4/fuzz/corpus/90a227d3beab730ed6eecd63657f5406beccabdf-12 new file mode 100644 index 0000000000000000000000000000000000000000..cea8af6ba3dc7cc2963cbeb8caf14a7ad4d20095 GIT binary patch literal 39 gcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_p^dbTW?t0K()4cmMzZ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/92197169aded0d5d0407e3925959e922257a101d-28 b/vendor/github.com/pierrec/lz4/fuzz/corpus/92197169aded0d5d0407e3925959e922257a101d-28 new file mode 100644 index 0000000000000000000000000000000000000000..82153779a3afb961baf829b5623fb323ec65810e GIT binary patch literal 195 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~K5sB=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-KxKX9_c0tJ*n!XTNN|L^zj1tLbEB8LC}!6q{SbxDBDuK^hVG2axTT%ss7 lEhja(L@zkC1gsy~Ng$K$5hnj{U|=w+0Xh+6GLVqS0{~>oHCq4x literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/924e17974cd194fa756d23394676d37cc3641f64-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/924e17974cd194fa756d23394676d37cc3641f64-17 new file mode 100644 index 0000000000000000000000000000000000000000..4cbe3bede9963229670a1324c9a869ffc1ec4419 GIT binary patch literal 25 dcmZQk@|Ey#P+GZn|N8=^=qn6BzycCt003lu2HpSw literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/92a785b5ea93d36e27029e281e9a34377d81ce55-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/92a785b5ea93d36e27029e281e9a34377d81ce55-5 new file mode 100755 index 00000000..44049efb --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/92a785b5ea93d36e27029e281e9a34377d81ce55-5 @@ -0,0 +1 @@ +"Mref \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/92d41e4fca52311e848fac274144b6293d9260f7-34 b/vendor/github.com/pierrec/lz4/fuzz/corpus/92d41e4fca52311e848fac274144b6293d9260f7-34 new file mode 100644 index 0000000000000000000000000000000000000000..d2c123a2e6ace32d9a5540b8e988c37352445f58 GIT binary patch literal 65 zcmZQk@|CDdY&o%a|NB@5#_d`R3=K6Bd0>G}e~rw|O-)VBP0b8V&5SH84UJ6=4RkFH R%qY$}lu^j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?p@9Mb(bx!F literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9363b81db6b35e8beebcc32d560f786472829bd8-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9363b81db6b35e8beebcc32d560f786472829bd8-21 new file mode 100644 index 0000000000000000000000000000000000000000..76c0eb4055cb2242bcf948bed5f0d35d550ac165 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0O9h6V{kLrWtAOCt+QQ&R(T3qvDQ240|W4YE2}pnwuc R7%cPue*;JXm;w_Lc>qKQ8fyRm literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/948b1ce043c82d0cfbaa910b6989a1b35a19b8ae-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/948b1ce043c82d0cfbaa910b6989a1b35a19b8ae-16 new file mode 100644 index 0000000000000000000000000000000000000000..8ee35db410ce6e2c7ad9fe71e14a57d52f2384e2 GIT binary patch literal 32 mcmZQk@|DO-Y&o%a|NB@5Mh0F628R0o|A8o-osr?3#7Y3cFAQ}6 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9505b43fcbc3139441e35bdaaec138e28af076f6-25 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9505b43fcbc3139441e35bdaaec138e28af076f6-25 new file mode 100644 index 0000000000000000000000000000000000000000..f33bdb30bb4f7b7977781e6abc11e1f6bf080944 GIT binary patch literal 91 hcmZQk@|Ey#P+GZn|N8=^=qn6Bz(To@uY^x#2>>y{9T5Nk literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/951bb02c199adb52e9e300e9fc070bf55980b910-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/951bb02c199adb52e9e300e9fc070bf55980b910-14 new file mode 100644 index 0000000000000000000000000000000000000000..812adc7c3481e09fb921605e4d9dace8a04b813f GIT binary patch literal 25 dcmZQk@|Ey)U|?|4^5tPrXJlhwVE7LLasWC@2PFUi literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/955404fe3f375361f5c3be1dbcd28eb9a28f06e4-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/955404fe3f375361f5c3be1dbcd28eb9a28f06e4-13 new file mode 100644 index 0000000000000000000000000000000000000000..6b83abdb76df271b5d57995049075336eb99c289 GIT binary patch literal 23 dcmZQk@|Ey#P+GZn|N8=^=qn6B(BP!S003CD2KN8} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/955c823909722e2693dd7cea3eadc17833dddf86-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/955c823909722e2693dd7cea3eadc17833dddf86-24 new file mode 100644 index 0000000000000000000000000000000000000000..3dae9dc2554cc2249cb468937cbe84f41ddab9f0 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_q=5{~H(>B=VRT6c`zV85kNEK>UUpurO3k7AT+u LQVm2<8B_%Trpg>Q literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/95ca8da5556065f33b46c2c8186c2f1cebb1b5da-29 b/vendor/github.com/pierrec/lz4/fuzz/corpus/95ca8da5556065f33b46c2c8186c2f1cebb1b5da-29 new file mode 100644 index 0000000000000000000000000000000000000000..c95c989da8be80e3422b66b513a653bce411a994 GIT binary patch literal 112 zcmZQk@|DO-Y&o%a|NB@5Muu1h28RD&Ad$z!puor=%)rnfVQ6S+WMFAzVQFe=U=CEl uz`zR>u7PWG0E;y!frS76XJDxL|G$BO!3anJCI0_^&kHn}3CNUSr~v@SsUhtE literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/967e50c6c1bc99aa5e7fa07c2de14564f52b0fd3-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/967e50c6c1bc99aa5e7fa07c2de14564f52b0fd3-20 new file mode 100644 index 0000000000000000000000000000000000000000..9bca31c7c2305554a06102f7b3e4d7440e9ba004 GIT binary patch literal 28 jcmZQk@|Ey)U|?|4^5tPrXXIpHV2D4RY}6vb%+8 KN*f?LpxOX6SsFwD literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/98d40a50ee58c05727777e242ecbc0d4e214f7fe-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/98d40a50ee58c05727777e242ecbc0d4e214f7fe-21 new file mode 100644 index 0000000000000000000000000000000000000000..dff3de3533976b04786a2cb40d807de90923d98d GIT binary patch literal 35 ncmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}6vb%y9Y7e=q<5e+LXb literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9915e9bb007bc2c1f3d346123933923279f0dec1-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9915e9bb007bc2c1f3d346123933923279f0dec1-27 new file mode 100644 index 0000000000000000000000000000000000000000..d39f6c7993c4eb5a43551aaf1d800ce3d68f07e7 GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%Y$}lu^j8qGboRAj6z#t~ykZGill30?ckeOGO2mph82=xE} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/995d50f1cb750cbf038246d6cb0cf8db11d7e60e-33 b/vendor/github.com/pierrec/lz4/fuzz/corpus/995d50f1cb750cbf038246d6cb0cf8db11d7e60e-33 new file mode 100644 index 0000000000000000000000000000000000000000..9d5311e86ee3bb8d3b288c026f848dfcee69c422 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_mRBJRm8N$Heg8kwF;91PZ1wG}Qe6-@w2CCM5D? Ok%Yl|@<5spdh!6(zZBE} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/99cfa74a1fea5d16168dd9efc720425b85e95eb7-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/99cfa74a1fea5d16168dd9efc720425b85e95eb7-15 new file mode 100644 index 0000000000000000000000000000000000000000..acd20c4577e786890e88501f4c7ba950926dde91 GIT binary patch literal 32 lcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^$iOJ<4gkYk3&8*Y literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9a552bab72f174ede3b9bdb7a663c963fd1463d3-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9a552bab72f174ede3b9bdb7a663c963fd1463d3-16 new file mode 100644 index 0000000000000000000000000000000000000000..657ce91e0d0754c21d2c31586380da1882ba1adb GIT binary patch literal 32 lcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^$Z$?#B>=`R4D|p2 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9a5ab6c72a445b3b27129004d2a1a417cd4d8440-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9a5ab6c72a445b3b27129004d2a1a417cd4d8440-26 new file mode 100644 index 0000000000000000000000000000000000000000..f0c11e54da5c54ca37428a47fe3c3fa7624b5332 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_ty0{~H(?B=VRT6c`zV85kNE{x<;08lW%(1DKG= QlLZPWfm8z#R0dT60H|afJpcdz literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9aa3050cb38a6ad276cb5e5ca0c4776d92cb7b0f-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9aa3050cb38a6ad276cb5e5ca0c4776d92cb7b0f-1 new file mode 100755 index 00000000..9e58f1c4 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/9aa3050cb38a6ad276cb5e5ca0c4776d92cb7b0f-1 @@ -0,0 +1 @@ +BZh31AY&SY \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9be44693435bc6c51980f30418bcc690d8c25fe7-6 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9be44693435bc6c51980f30418bcc690d8c25fe7-6 new file mode 100755 index 00000000..45ec57db --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/9be44693435bc6c51980f30418bcc690d8c25fe7-6 @@ -0,0 +1 @@ +"MrSf \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9c0420bf00f888487d543f42fc48b407c65d4717-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9c0420bf00f888487d543f42fc48b407c65d4717-17 new file mode 100644 index 0000000000000000000000000000000000000000..635438d986ba0853cec981d2cad9188fda50cc7e GIT binary patch literal 95 zcmZQk@|B28Y&o&_G6MqxBM>t%uz-am&I@Y6#UMf$s`5Y@_rH$?YGh(yXi#F{1(G%Y QB_iwY+vv7u>`#;c00|Bk`2YX_ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/9ca2a086f1f08c7dec54d52425bd72f17c11056e-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/9ca2a086f1f08c7dec54d52425bd72f17c11056e-21 new file mode 100644 index 0000000000000000000000000000000000000000..b52fcb904e7846b16ef63ceb2dcd59428e1f4e72 GIT binary patch literal 37 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প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%0D<2qAto3;!NWm9J$MG_^gIkf+5mQEAOC;if40-F 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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/a01e13c3e401957031defb62b05434c65b01d5c4-10 b/vendor/github.com/pierrec/lz4/fuzz/corpus/a01e13c3e401957031defb62b05434c65b01d5c4-10 new file mode 100644 index 0000000000000000000000000000000000000000..4582464344334bc231319855bd8997bee60de8f0 GIT binary patch literal 31 hcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_p^d2niHr0054{2rU2r literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/a059044bdb0402471dbe9aaaa555a063a6bc1e6a-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/a059044bdb0402471dbe9aaaa555a063a6bc1e6a-16 new file mode 100644 index 0000000000000000000000000000000000000000..a0735ef2b06b039a9cca862a54d1d7e5dc1c17dc GIT binary patch literal 38 tcmZQk@|DO-Y&o%a|NB@5Mg}GZh6V`+UIqq+n*aYB7#Jk-m>3jTB>>t!3Dy7r literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/a06b1a08fcda463f1d51c485b0e7271ff9048b41-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/a06b1a08fcda463f1d51c485b0e7271ff9048b41-16 new file mode 100644 index 0000000000000000000000000000000000000000..f400b22c08ff86d2adbf6b7a632fc9d48fef8b9e GIT binary patch literal 35 pcmZQk@|Ey)U|?|4^5tPrXB1#yU&Y}g{f3}oe&NT8txSsjLeEKr3#NF7+_ W|NjOC2BR7<_5VNZOa|H_kp}=%cs2_F literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/a2e5916be780e35e9ecb7c42be52dd5e134f3363-25 b/vendor/github.com/pierrec/lz4/fuzz/corpus/a2e5916be780e35e9ecb7c42be52dd5e134f3363-25 new file mode 100644 index 0000000000000000000000000000000000000000..67cfb1080b7f919b7688a12c3330016473cff695 GIT binary patch literal 195 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~H(>B=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-KxKUFpMm1pS|9`N_Oh8={VDqcNCVpF literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/a33252a74974fc86df30c311d501a1f363d350cd-12 b/vendor/github.com/pierrec/lz4/fuzz/corpus/a33252a74974fc86df30c311d501a1f363d350cd-12 new file mode 100644 index 0000000000000000000000000000000000000000..c2a9be06f713b696a360271716baa610f261cbe1 GIT binary patch literal 33 kcmZQk@|B28Y&o&_G6MqxBM>t%uz-am&I@V<-1L?O0EgZP8vpY%CHbGaY%CHbGaY%CHbGaRsSU*d literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/a6dbaac639f3b82609ec27c80fbd003684c28867-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/a6dbaac639f3b82609ec27c80fbd003684c28867-21 new file mode 100644 index 0000000000000000000000000000000000000000..9f39c8e439181b414a21d5c19396a4389a0ae18c GIT binary patch literal 61 fcmZQk@|Ey#P+GZn|N8=^=qn6Bz(SPJ6`(!t%uz-am&I@XR#Q=^92VMXG literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/aa04575587509ffc65a6b0224d24ad1125cb0f63-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/aa04575587509ffc65a6b0224d24ad1125cb0f63-26 new file mode 100644 index 0000000000000000000000000000000000000000..d95281c298e1efe1b30345159672a9aaf747c23e GIT binary patch literal 91 hcmZQk@|Ey#P+GZn|N8=^=qn6Bz(To@uY^ygHvlo19OwW5 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/aa290b4dcc8198945311c8149fc1252f14555e70-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/aa290b4dcc8198945311c8149fc1252f14555e70-15 new file mode 100644 index 0000000000000000000000000000000000000000..3e939f9109f31dbd3354fa01b64c0e7dcadbfd78 GIT binary patch literal 63 mcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_lW~Fqwx$Ld20pplkqr-w7fB literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/aabb8fa4913c79f0a42494ad2215a32927adbd45-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/aabb8fa4913c79f0a42494ad2215a32927adbd45-16 new file mode 100644 index 0000000000000000000000000000000000000000..3812c581c117632f16ca452fba409c9e6ff61ace GIT binary patch literal 63 mcmZQk@|B28Y&o&_G6MqxBM>t%uz-am&I@Y6#UMghQ~?0AB@D#? literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ac7077c5220abe6cd481318c42dfe6cb2cb2c666-10 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ac7077c5220abe6cd481318c42dfe6cb2cb2c666-10 new file mode 100644 index 0000000000000000000000000000000000000000..592c47a4f1cffdc5f70790a525d2714f6f0d5732 GIT binary patch literal 40 ScmZS4@|9o!0v0?pNDcr&6a#Yr literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/acbef0322169a93c7421902883cc8057675c953b-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/acbef0322169a93c7421902883cc8057675c953b-26 new file mode 100644 index 0000000000000000000000000000000000000000..48bcaa723f0179276cf77cccee6203f2daf32be9 GIT binary patch literal 195 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~H(>B=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-KxKbq?7-WG0N+4md4A=yt8Zh<$KiFg@pe_lp`88k@z~-C64LXeE0))vR OCxJ}1$6;~<$ejQw;5A18 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/aec95871bc7d87cae16c36a0d30955b43076aec5-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/aec95871bc7d87cae16c36a0d30955b43076aec5-17 new file mode 100644 index 0000000000000000000000000000000000000000..2bbc1c02b4b64222258094cf6e370f9204b98a0a GIT binary patch literal 35 pcmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}g{f3}oeY$}lu^j8qGbJf6@R%)r3F!otA8&=A0oVJ=?eYN0Rz0FSQ-2LJ#7 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b27fb21ecbe6e77c91341738621ad7092c29bca5-17 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b27fb21ecbe6e77c91341738621ad7092c29bca5-17 new file mode 100644 index 0000000000000000000000000000000000000000..0292f9be34d257c386d44010d47446736e5bfc6f GIT binary patch literal 89 zcmZQk@|Ey)U|?|4^5tPrXLMy?Xkf@MOD!@~F*GnTGBz+WF*7o?G&M6dF)%SQHZwMS bzke?fnVDG_SQ=Ou89-GSBB=n$F)#oChJO^s literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b38ce47b707326024fb24860c4365d58ab9f3528-29 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b38ce47b707326024fb24860c4365d58ab9f3528-29 new file mode 100644 index 0000000000000000000000000000000000000000..8374ff944848c3abe63811bf477552434247ec0a GIT binary patch literal 166 fcmZQk@|Ey#P+GZn|N8=^=qn6Bz%r|iQ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b3eaea244bd47b64c8de3d81c7b5e94e421d7f32-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b3eaea244bd47b64c8de3d81c7b5e94e421d7f32-5 new file mode 100755 index 0000000000000000000000000000000000000000..6c89843bc4d24eb4ffc350485113a38fbf0cc30b GIT binary patch literal 9 OcmZ?L@|9o!0w(|lm;n?3 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b3fd355dc090a732d5cf3b25151f165ea901a682-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b3fd355dc090a732d5cf3b25151f165ea901a682-24 new file mode 100644 index 0000000000000000000000000000000000000000..6274d9303318c5aa7b9c4afee278a9c36cd113b1 GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%G}e~rw|O-)VBP0b8V&5R6;EG*ye-^*uc YY-*^bYiVF^X=rX>WMuAOYG7^w0G+QE{Qv*} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b58429fd1107617191026029cf327b2ebed963bb-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b58429fd1107617191026029cf327b2ebed963bb-18 new file mode 100644 index 0000000000000000000000000000000000000000..c261703926fe528fde51e0c9cbbb6b64aabdcf22 GIT binary patch literal 6 NcmZQk@|DPA0009Z0Qvv` literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b58846d79a8dc960a718ef88dd3a06ad49b1fe72-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b58846d79a8dc960a718ef88dd3a06ad49b1fe72-16 new file mode 100644 index 0000000000000000000000000000000000000000..a1bb7d40072fd5f4b3c8491543f5d4343361dc5d GIT binary patch literal 35 qcmZQk@|Ey)U|?|4^5tPrXB1#yU&Y}g{f%)r3Nz`(@7m;wM?CY$}kr%aB21Eb= literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b71a5a7c576e5cc5ba23845d352b2af16737c03c-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b71a5a7c576e5cc5ba23845d352b2af16737c03c-7 new file mode 100644 index 0000000000000000000000000000000000000000..1e596c355ff642c3ef131ef634f44e5566a7e519 GIT binary patch literal 17 TcmZS4@|9o!0u~?*VkrOs4(I`_ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b7815c3b5649d9a367ba99e7e09cf1f251ab6f83-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b7815c3b5649d9a367ba99e7e09cf1f251ab6f83-18 new file mode 100644 index 0000000000000000000000000000000000000000..4cf6940c45f769d717e6cfb2e06ccaf0a6598b2b GIT binary patch literal 44 dcmZQk@|Ey#P+GZn|N8=^=qn6Bz=A_a0suJ;4FCWD literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b7a5b15c9e2d4d659d421de8e3b463200f71f1ec-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b7a5b15c9e2d4d659d421de8e3b463200f71f1ec-23 new file mode 100644 index 0000000000000000000000000000000000000000..a47008c94c650f98bd7325a6d47adbf2cc51b807 GIT binary patch literal 143 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=IQ`0U~`C82|tP literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b83b3d04ada1403578065d7f10aa7441830dea3c-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b83b3d04ada1403578065d7f10aa7441830dea3c-11 new file mode 100755 index 0000000000000000000000000000000000000000..1288ace233d98353d9622a06742503716db48aa1 GIT binary patch literal 20 YcmZQk@|Ey)U|?|4^5tPrXJh~Y02}851^@s6 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b92c70d3f12e67c69ba5db9ad491b7a4e075ece8-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b92c70d3f12e67c69ba5db9ad491b7a4e075ece8-7 new file mode 100644 index 0000000000000000000000000000000000000000..b113b1c5fc0c753d313161951e1f512368fd70e5 GIT binary patch literal 23 ccmZQk@|DO;Y&o%azuNm)21W)D$XMC{09hgj9smFU literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/b94b7ebc6d153e0c99a97864f58b26f7192f66a5-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/b94b7ebc6d153e0c99a97864f58b26f7192f66a5-20 new file mode 100644 index 0000000000000000000000000000000000000000..11053a55e2cf79c70420e5fe4b6ba643becd750b GIT binary patch literal 35 mcmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}6vb%Y%CHbGaB=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-KxKX9_c0tJ*n!XTNN|L^zj1tLbEB8LC}!6q{SbxDBDuK^hVG2axT9L)s{ VHOK-WlkE{EgWP6R19l?RodAn$HT(bo literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/bdc123d9da19a7ae0ff87ca0741002fbd8bb2cca-34 b/vendor/github.com/pierrec/lz4/fuzz/corpus/bdc123d9da19a7ae0ff87ca0741002fbd8bb2cca-34 new file mode 100644 index 0000000000000000000000000000000000000000..b6d6b05ac192e13916dee57d12dc09e639441daf GIT binary patch literal 41 ocmZQk@|CDdY&o%a|NB@5#_hZe3=K6Bd2j&+`)!$b8GwQe07n82_W%F@ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/be06bb3c3b604660fd36b2af8860d35e31c8bbf3-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/be06bb3c3b604660fd36b2af8860d35e31c8bbf3-8 new file mode 100755 index 0000000000000000000000000000000000000000..ffe89ef6a12a8b19bf48bcb43af961fcdf876f42 GIT binary patch literal 66 WcmZ>Y%CHbGa%=qn5i3=QOB0BsHpnE(I) literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c07f4e4cb1d0a34dc6899097fd27ee9f1744cb70-12 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c07f4e4cb1d0a34dc6899097fd27ee9f1744cb70-12 new file mode 100644 index 0000000000000000000000000000000000000000..9551b7b887fc38e9eef806a4894adbc7e4ee5d44 GIT binary patch literal 19 acmZQk@|Ey#P+GZn|N8=^=qn5i3=IH1?gonh literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c1972d0c898848e6188b69bcdbb7d14fcc780ee5-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c1972d0c898848e6188b69bcdbb7d14fcc780ee5-26 new file mode 100644 index 0000000000000000000000000000000000000000..79651e1cf3f584b7eeefab5732bc0c7c0ae2c407 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_tvyhCBuai999-1x5y828ITP{|!L0=0Au66B2o{ PKmjF?Y9NBjpeg_WIzAej literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c2ac55a7fb702dd9a527b576d99008fe9b4f376f-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c2ac55a7fb702dd9a527b576d99008fe9b4f376f-14 new file mode 100644 index 0000000000000000000000000000000000000000..2cbdb3a8c8b69d9f3b2f1ecb4d3ed30842ee3135 GIT binary patch literal 36 rcmZQk@|Ey)U|?|4^5tPrXB1#yXkf@MOD#&v$uC#P&r?XwNGt*XeCG(o literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c2c3d29bce8aae89fed326832b3e1e1077cef1da-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c2c3d29bce8aae89fed326832b3e1e1077cef1da-18 new file mode 100644 index 0000000000000000000000000000000000000000..468e64850cdb63c1eee4d75ff6776a9e79e0b0c5 GIT binary patch literal 61 ucmZQk@|DO-Y&o%a|NB@5Mg}GZh6V`+ULaY6F02F*{{O#$fdNcNb literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c321670bbcd985327045dd1468bf2ac4ae7333e5-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c321670bbcd985327045dd1468bf2ac4ae7333e5-7 new file mode 100755 index 0000000000000000000000000000000000000000..eca662b7694b7094998f4deeca9a3b1b901b6264 GIT binary patch literal 32 acmZ>Y$}kZxazm)C~N?DB?!3y literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c652c46aba3567521f912bae6dc263b668c34c9c-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c652c46aba3567521f912bae6dc263b668c34c9c-7 new file mode 100755 index 0000000000000000000000000000000000000000..5cfdce9b9dbf45290fa1a487d46498f712f4c05c GIT binary patch literal 17 ScmZ?L@|9o!0w)N4jtKx1(E@V- literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c6610b87900912d462229a5259dab51ea0aeef33-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c6610b87900912d462229a5259dab51ea0aeef33-4 new file mode 100755 index 00000000..7a1dbaaf --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/c6610b87900912d462229a5259dab51ea0aeef33-4 @@ -0,0 +1 @@ +B*M \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c6c37f6c89fe55768f8b3f7b28b99467c239703a-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c6c37f6c89fe55768f8b3f7b28b99467c239703a-1 new file mode 100755 index 0000000000000000000000000000000000000000..8c206a17cf90bbd82e1cbe005ebcd6b2ff77491c GIT binary patch literal 39 ucmZ>Y%CInWj8qGb>{?*|jDdkQkU@ljfnf)O0)rCQ!*Z42R!)vp%>Mw;uL`FC literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c71abfffdcf530a6d28fd99cd2c3505c61ef0ac5-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c71abfffdcf530a6d28fd99cd2c3505c61ef0ac5-8 new file mode 100644 index 0000000000000000000000000000000000000000..490ee245d6b8ffc19f7048a59af391cba9e1552a GIT binary patch literal 26 ecmZQk@|DO-Y&o%a|NB@5Mg}GZ1_m&n!4Uv(4hQA{ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c77304b250e887b39b5447d19b9c106fcebe7e66-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c77304b250e887b39b5447d19b9c106fcebe7e66-20 new file mode 100644 index 0000000000000000000000000000000000000000..7f1cf184c1e69db74b083f3983b559de0cf83c23 GIT binary patch literal 71 zcmZQk@|DO-Y&o%a|NB@5Mh0O9h6V`+ULaY6EG!EYPyz{qW&Zzf04V@dU_v4f01K`b A@c;k- literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c78cd8530e6d8a606a28797552ce3f5494763621-25 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c78cd8530e6d8a606a28797552ce3f5494763621-25 new file mode 100644 index 0000000000000000000000000000000000000000..5140f6f62cd9d09079e740107343de9fc9513167 GIT binary patch literal 195 zcmZQk@|DO-Y&o%a|NB@5Mg}GZ1_lWRULaWm#6Wf)6N7>&NT8txSsjLeEJy`N9a!f7 Y{{{vIqZ%;v|3Bp>+v6}9Xp2N10B_SaNB{r; literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c790308a65efa1b895bc57abe53e4fbcdb2b7d0e-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c790308a65efa1b895bc57abe53e4fbcdb2b7d0e-13 new file mode 100755 index 0000000000000000000000000000000000000000..c2479e6d87397739554a60f77c33f5f123a60a54 GIT binary patch literal 88 XcmZ>Y%CHbGaY$}ll>j8qGbjGmAd!oVQ*e*az|isy|;gRtZq9N3i<^jSg}?BCxJP+*wq9P$wW DIrtTA literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/c8b01a7ea9c1b84e4ee5eb68121c64f183e7ea10-9 b/vendor/github.com/pierrec/lz4/fuzz/corpus/c8b01a7ea9c1b84e4ee5eb68121c64f183e7ea10-9 new file mode 100644 index 0000000000000000000000000000000000000000..56aee0515cf853d74a223441a2cfe163bb19741b GIT binary patch literal 34 jcmZQk@|DO;Y&o%azuNm)21X_Z1_lW~FqsD;>lqjTpBe`O literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ca5d375d8a66727221d3e198d4ad360782944de7-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ca5d375d8a66727221d3e198d4ad360782944de7-27 new file mode 100644 index 0000000000000000000000000000000000000000..8c22c4dec7c989c754f375f9279ab19147fa6911 GIT binary patch literal 195 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~H(>B=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-KxKX9_c0tJ*n!XTNN|L^zj1tLbEB8LC}!6q{SbxDBDuK^hVG2axTT%ss7 fEhja(L@zkC1gsy~Ng$K$5hjD&W>f=qBGjD#Vj4A9 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/cb1314cc880a1a389cedf5c16cc4b8ad505b4506-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/cb1314cc880a1a389cedf5c16cc4b8ad505b4506-23 new file mode 100644 index 0000000000000000000000000000000000000000..29567cd5ef6f04a0f19a24a897c8323a870bbd57 GIT binary patch literal 105 zcmZQk@|DO-Y&o%a|NB@5Mh0F628Npd{~H>BG!ugYBZDvlLxY5&p{0?5rICfDsi}cE fP=*1duAv55qbyKB2_y`b0h$2hPX$w8LLv_UsmC2& literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/cb635ef244cb6affc005c63d0bf8b52aecb1d986-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/cb635ef244cb6affc005c63d0bf8b52aecb1d986-4 new file mode 100755 index 00000000..9206cb93 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/cb635ef244cb6affc005c63d0bf8b52aecb1d986-4 @@ -0,0 +1 @@ +"M1 \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/cd67bf90feaeb1912792508afa01a09fe1f044c6-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/cd67bf90feaeb1912792508afa01a09fe1f044c6-13 new file mode 100644 index 0000000000000000000000000000000000000000..71ebffbc207bc13b8584d97a7d8a4e9727e3bdba GIT binary patch literal 33 QcmZ?L@|9o!0w-KF06@nBhX4Qo literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/cda434677d4bdd969a3bbf84086349f821e39c80-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/cda434677d4bdd969a3bbf84086349f821e39c80-1 new file mode 100755 index 0000000000000000000000000000000000000000..0d66552a94f9755ba775f3a5a30d1ae566e55710 GIT binary patch literal 48 zcmZ>Y$}l!`j8qGbjGmAd!oVOV-{8Qmq@d3d!eIaYj(`HgRA-*6u8}Km#wz;#n520K E07-EVlK=n! literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ceb22e7f581d85ed876e3d61da7df65da8954bf2-32 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ceb22e7f581d85ed876e3d61da7df65da8954bf2-32 new file mode 100644 index 0000000000000000000000000000000000000000..3f4ae7812cf5e5e3b504382b3293f8caf64784b9 GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F628R6qK!TBhiQ&(GM+RXa8z`8<&``t3(7?d(|38qB T$dg3~gGCU+|Nk?;04e|g4;>iC literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/cfe7201e28d42484764264c231663e6372e95ef7-14 b/vendor/github.com/pierrec/lz4/fuzz/corpus/cfe7201e28d42484764264c231663e6372e95ef7-14 new file mode 100644 index 0000000000000000000000000000000000000000..ad5308bbad6312d84f874040858f22b93390965e GIT binary patch literal 32 jcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^$N;1O$mR}X literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/cff88dd94ee94e1901d25a74e29ad863bb78b1e4-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/cff88dd94ee94e1901d25a74e29ad863bb78b1e4-16 new file mode 100644 index 0000000000000000000000000000000000000000..50ebc75bfb4fdb40ad07fcc99111f961cb8cdbca GIT binary patch literal 32 lcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^&cG<_4gkY?3&#Ke literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/cffc7573debb5af80aaddfa752538825275fd6a9-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/cffc7573debb5af80aaddfa752538825275fd6a9-7 new file mode 100755 index 00000000..cac35b69 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/cffc7573debb5af80aaddfa752538825275fd6a9-7 @@ -0,0 +1 @@ +"MM@"©+[z_ \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d0ae058f71e53a7afd648b859cd7485886be550d-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d0ae058f71e53a7afd648b859cd7485886be550d-22 new file mode 100644 index 0000000000000000000000000000000000000000..8a7600c2c87c4e9934e84d8911c6a12cecc93589 GIT binary patch literal 127 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=QgO3 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d24f23a23508dd6bc93ea6283ed49c8ba4b737ed-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d24f23a23508dd6bc93ea6283ed49c8ba4b737ed-15 new file mode 100644 index 0000000000000000000000000000000000000000..3bc8f21001899a43a7937c8ed3e35f33d458be5c GIT binary patch literal 49 VcmZ?L@|9o!0w*-u5{(a+2LOjy1t0(b literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d295ca4c78f7fd3ff10b0520b09a0a346310e0a9-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d295ca4c78f7fd3ff10b0520b09a0a346310e0a9-1 new file mode 100755 index 0000000000000000000000000000000000000000..104bdc3d18f289e79d59ffef745a011a450b8113 GIT binary patch literal 58 zcmZ>Y$}lo?j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C{x KvzUFH8ZrQ#K@ArG literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d3ddffcd038a5646a53d48b684eac5b721c7062a-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d3ddffcd038a5646a53d48b684eac5b721c7062a-18 new file mode 100644 index 0000000000000000000000000000000000000000..0702c4f88e08ccafe37fe70250000fd5aade110d GIT binary patch literal 59 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=PC$0HtpWnE(I) literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d4275f1f814a5b24f7b4788d15f3fef7b2be8aef-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d4275f1f814a5b24f7b4788d15f3fef7b2be8aef-23 new file mode 100644 index 0000000000000000000000000000000000000000..7405bc729cc0462e338851792d70ec19bf4a9605 GIT binary patch literal 72 ncmZQk@|Ey#P+GZn|N8=^=qn6Bz(TZ;Pi9F;PAUT<14AMJJZu$u literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d57eaf0fada8726afac2287cafb7720af7417b16-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d57eaf0fada8726afac2287cafb7720af7417b16-1 new file mode 100755 index 00000000..50220fca --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/d57eaf0fada8726afac2287cafb7720af7417b16-1 @@ -0,0 +1 @@ +BZh11AY&SYà \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d5c9dc3b5b4e71d902fe4cf5c44b237b104a32a9-4 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d5c9dc3b5b4e71d902fe4cf5c44b237b104a32a9-4 new file mode 100755 index 0000000000000000000000000000000000000000..5a0cc7def8c4e585e04e5adcfc52b647a09c47c4 GIT binary patch literal 30 WcmZ>Y%CHbGazQ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d7855c38db11bfeeb474a4782f1ea293192f786f-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d7855c38db11bfeeb474a4782f1ea293192f786f-1 new file mode 100755 index 0000000000000000000000000000000000000000..d4bba7dfde6e5c111d70903c50390f914cfc4c27 GIT binary patch literal 42 xcmZ>Y$}lo?j8qGbJf6@R%)r2KCx(Gx0Rw{qgM%Ui3kw4WLxTc?A%lSeGXUah2w(sJ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/d7912c5e2a776c408e7640f10bd7d655a6a0f31b-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/d7912c5e2a776c408e7640f10bd7d655a6a0f31b-27 new file mode 100644 index 0000000000000000000000000000000000000000..3df2af3fc89b18264e42538f1bf6b5eb08e2cc24 GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%Y$}lu^j8qGbY*1h@>PYEOplBxOsA0!K*z-);;0ORZy A4gdfE literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/dcb49d3d45d32601fa27208cec33813e03ff6179-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/dcb49d3d45d32601fa27208cec33813e03ff6179-1 new file mode 100755 index 0000000000000000000000000000000000000000..a2dd20a4cad4ebc32b9f00cbf96b41c2936ba0da GIT binary patch literal 47 zcmZ>Y$}lx_j8qGb>{?*|jDdkQkU@ljfnf)O0)vuKS~Eklyp{`Bxk_*=C&w!0e+d8~ Ctqe{8 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/dce9966b94744440d75a845a48c806041f5a6612-3 b/vendor/github.com/pierrec/lz4/fuzz/corpus/dce9966b94744440d75a845a48c806041f5a6612-3 new file mode 100755 index 0000000000000000000000000000000000000000..de247315cb6fba307228d83d2166c8108552fe24 GIT binary patch literal 31 ncmZ>Y$}lu^j8qGbRA4aVVK{Oq^<3rd^lSU058x4wEzGB literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/dd92516fbea2d0f96abc78f325d731053a451e16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/dd92516fbea2d0f96abc78f325d731053a451e16 new file mode 100644 index 00000000..5f62a794 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/dd92516fbea2d0f96abc78f325d731053a451e16 @@ -0,0 +1 @@ +ìª` \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ddf986569f89016184b5b6e924d5ba827c9980ca-28 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ddf986569f89016184b5b6e924d5ba827c9980ca-28 new file mode 100644 index 0000000000000000000000000000000000000000..c80538dd4374026fe627ee8dc69aff393be82111 GIT binary patch literal 156 ccmZQk@|Ey#P+GZn|N8=^=qn6Bz%p2b06T>++yDRo literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/de0acf1136a1e05cd27345ce135ea26abd32bbfe-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/de0acf1136a1e05cd27345ce135ea26abd32bbfe-18 new file mode 100644 index 0000000000000000000000000000000000000000..60f4c4567f35494ba04df43fda31b6cb6570f2fc GIT binary patch literal 36 rcmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}6vb%#fUsm}jG_z`y_iZ%PK2 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/de33e3ef8a5780c7d3458188a423c00f470904d0-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/de33e3ef8a5780c7d3458188a423c00f470904d0-15 new file mode 100644 index 0000000000000000000000000000000000000000..57de944141fb2c859d84250381bd99a6070db3f2 GIT binary patch literal 32 ncmZQk@|DO-Y&o%a|NB@5Mh0F628N3N{~H(>B=VRT6j&tyt#k=E literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/de501127da94246b2d3aa947637b49fbc17d5e47-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/de501127da94246b2d3aa947637b49fbc17d5e47-1 new file mode 100755 index 00000000..1d6eb7a2 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/de501127da94246b2d3aa947637b49fbc17d5e47-1 @@ -0,0 +1 @@ +BZ \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/de702cd20caeb08a843e0c09b0ce87a74e300415-20 b/vendor/github.com/pierrec/lz4/fuzz/corpus/de702cd20caeb08a843e0c09b0ce87a74e300415-20 new file mode 100644 index 0000000000000000000000000000000000000000..bf568f6f4853bd8fddcef874115b0e9e53684961 GIT binary patch literal 71 zcmZQk@|DO-Y&o%a|NB@5Mh0O9h6V`+ULXlVEg%XcEDPi*frLRaHUIyEWFZuoEs+NR DdC3!7 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/de8abda1b9bd5628ca99c8f97237fa885a857bb5-19 b/vendor/github.com/pierrec/lz4/fuzz/corpus/de8abda1b9bd5628ca99c8f97237fa885a857bb5-19 new file mode 100644 index 0000000000000000000000000000000000000000..064419b0cea2314dd9a997d13994314094564932 GIT binary patch literal 35 ncmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}6vb%d$0-k literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/def6a9e986daf0b268ef29ef7e821a9f6840ef2c-8 b/vendor/github.com/pierrec/lz4/fuzz/corpus/def6a9e986daf0b268ef29ef7e821a9f6840ef2c-8 new file mode 100644 index 0000000000000000000000000000000000000000..61307ca8277c078c79268eccd91620319bb2cd15 GIT binary patch literal 20 QcmZS4@|9o!0v04101=!4x&QzG literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/df0768cf0c709a1ff1a93cc0dad23979501c54ff-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/df0768cf0c709a1ff1a93cc0dad23979501c54ff-21 new file mode 100644 index 0000000000000000000000000000000000000000..07995a45638fc772cff8fd750794098f82ee7502 GIT binary patch literal 115 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=Oo#0PGYJnE(I) literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/df5bd5044e9b74c648b5f5fcb4dbdf953175f9f9-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/df5bd5044e9b74c648b5f5fcb4dbdf953175f9f9-27 new file mode 100644 index 0000000000000000000000000000000000000000..eb27e25eeca6f2ef6d53c1bf7864f149e6c5be4d GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_tvyhCBuai99BT|BMX6K!N}N8yFZGYQPkjkjRq- O3Mhe80})gPRRI8o?;H34 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/dfad565009b0667ef2ee10ea9c1286ee5c3ce6b2-1 b/vendor/github.com/pierrec/lz4/fuzz/corpus/dfad565009b0667ef2ee10ea9c1286ee5c3ce6b2-1 new file mode 100644 index 00000000..dd3288dd --- /dev/null +++ b/vendor/github.com/pierrec/lz4/fuzz/corpus/dfad565009b0667ef2ee10ea9c1286ee5c3ce6b2-1 @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/e.txt.bz2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/e.txt.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..65bf3b4c32a4742140c57c59ed46a06f859f9ca1 GIT binary patch literal 43149 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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/e1556049ba9794a15ee21aa283876bf63e531a4f-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/e1556049ba9794a15ee21aa283876bf63e531a4f-24 new file mode 100644 index 0000000000000000000000000000000000000000..fe1bb6515770027f402f5e181ccc298280353d87 GIT binary patch literal 147 ccmZQk@|Ey)P+GZn|N8>%=qn5i3=IQ~0efKBR E07f4a761SM literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/e346c715ac3187598d8c0453d9e741fae1232c99-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/e346c715ac3187598d8c0453d9e741fae1232c99-11 new file mode 100755 index 0000000000000000000000000000000000000000..22d3cf6fb98b691629a5cdd0d89e80c473fc655b GIT binary patch literal 29 QcmZ?L@|9o!0w-)V05fp|MF0Q* literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/e3acf6f2b5a1b97f5a82ebf7d1822077561583fe-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/e3acf6f2b5a1b97f5a82ebf7d1822077561583fe-26 new file mode 100644 index 0000000000000000000000000000000000000000..27156c76824eb0de31aeebafa23adf9b6f7b3268 GIT binary patch literal 195 zcmZQk@|DO-Y&o%a|NB@5Mh0F628QDQ{~H(>B=VRT6c`zV85kNQ3=J)f3@nW-EKN-f z%z-KxKUFpMm1pS|9`N_Oh8={VDoFhCVY$}lo?j8qGb6zG4f!@$5^{k?&qL4b*)k%7Sh2pJkUgct-EfII;K289C(42C}H LkKTDK=Mn+{qihY} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/e544de8de59a005934dd4b7fd465c5bb0046482e-26 b/vendor/github.com/pierrec/lz4/fuzz/corpus/e544de8de59a005934dd4b7fd465c5bb0046482e-26 new file mode 100644 index 0000000000000000000000000000000000000000..2f3eeb0661b9c126fc480583e5dcf5a749dce0ab GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_ty0{~H(>B=VRTA{ZHj85kNEK>UUpurO3k7AT+u LQVm2<8B_%TwF?|{ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/e68b04a675d8d4192565a808955764c77ae510e6-16 b/vendor/github.com/pierrec/lz4/fuzz/corpus/e68b04a675d8d4192565a808955764c77ae510e6-16 new file mode 100755 index 0000000000000000000000000000000000000000..08838f05e71fa5cd6b9276bc5c69bff991d49ebc GIT binary patch literal 122 XcmZ>Y%CHbGa5LiqoG<`+N(04&HEVgLXD literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ea212596f8a7aec4eb2e85fd2cdb5c2816b58495-5 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ea212596f8a7aec4eb2e85fd2cdb5c2816b58495-5 new file mode 100755 index 0000000000000000000000000000000000000000..8b21a561c2247bfe09d2ea4425bef60c1ca050cf GIT binary patch literal 12 QcmZ?L@|9o!0w*9101E^GqW}N^ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ea83e3b78398628e8a85e2e618fa956c0ffbd733-35 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ea83e3b78398628e8a85e2e618fa956c0ffbd733-35 new file mode 100644 index 0000000000000000000000000000000000000000..0918d6f8aad212ad88a47309ec8d4bc613075550 GIT binary patch literal 42 rcmZQk@|CDdY&o%a|NB@5#_hrk3=Itb8yFaPfs7i7Jg7`k@y}fVKoStu literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ea9af92f89e6889b523461ae7b2b9fecee5a7280-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ea9af92f89e6889b523461ae7b2b9fecee5a7280-18 new file mode 100755 index 0000000000000000000000000000000000000000..f5635a23833b1bdd9a50d03bd0a659cc01a03616 GIT binary patch literal 130 XcmZ>Y%CHbGa%=qn5i3=K%wNecj+>j(t^ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ecbd6bdea50b52d263b4e9cdb96c7ce078d2b780-25 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ecbd6bdea50b52d263b4e9cdb96c7ce078d2b780-25 new file mode 100644 index 0000000000000000000000000000000000000000..41a813aa9bd54cdecf6b746f4456ea9f98934106 GIT binary patch literal 147 bcmZQk@|DO-Y&o%a|NB@5Mg|~g7-$RtDF+qs literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ecdd1df7d975c8cf8d015b2f1d0d7c6e00eb578b-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ecdd1df7d975c8cf8d015b2f1d0d7c6e00eb578b-15 new file mode 100644 index 0000000000000000000000000000000000000000..d02e56eff147b92a29f530274518474690eb5683 GIT binary patch literal 33 mcmZQk@|DO-Y&o%a|NB@5Mh0F628R0oAdt?^$Z$?#<$nOwBMtNb literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/eda1ee9cf85f3f71ec8a4eec7534ed2677b47775-15 b/vendor/github.com/pierrec/lz4/fuzz/corpus/eda1ee9cf85f3f71ec8a4eec7534ed2677b47775-15 new file mode 100644 index 0000000000000000000000000000000000000000..f0d2c8cea4be83518d0e0effe712dda49cecf440 GIT binary patch literal 32 mcmZQk@|Ey)U|?|4^5tPrXJlhwU&Y}g{f3}mHY%CHbGaY$}lu^j8qGbRA4aVVK{Oq^<3Y$}ll>j8qGbjGmAd!oVOV-{8Qmq@d3d!eIaYj(`HgROgV70J~obmjD0& literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f3f49f3016c41052be090544cf110c322bc7ef63-24 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f3f49f3016c41052be090544cf110c322bc7ef63-24 new file mode 100644 index 0000000000000000000000000000000000000000..283f07800a19702d066bf9aa146dc6c5082fabb2 GIT binary patch literal 82 zcmZQk@|DO-Y&o%a|NB@5Mh0F628RD2z{nuXz|g<|5@@JFRv`-%Pyz{qW&ZyMs%fYJ JQ(!_O4*+%@8{z-} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f4003ca01b90a4ee1be5701a5dd7d5f04e00c8f8-28 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f4003ca01b90a4ee1be5701a5dd7d5f04e00c8f8-28 new file mode 100644 index 0000000000000000000000000000000000000000..7dbc6dfb683ddd7fee8f38f9ac9d1a7430091172 GIT binary patch literal 147 ccmZQk@|DO;Y&o%azuNm)21W)3hK7O0069e#5dZ)H literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f493376c3eda80cbe822ac456486734b72f891fc-2 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f493376c3eda80cbe822ac456486734b72f891fc-2 new file mode 100755 index 0000000000000000000000000000000000000000..b06a853b78e23f1cb190543567fa465eee20fb90 GIT binary patch literal 44 zcmZ>Y$}l!`j8qGbjGmAd!oVOV|KEXKNkN|_gu(v(9f6d5@w&tdZEPvr%lwT1AN38B literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f55efbb04cd32f7828e951d067319db00627153f-28 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f55efbb04cd32f7828e951d067319db00627153f-28 new file mode 100644 index 0000000000000000000000000000000000000000..4b730fdd58a4cf87b4284c6a55189fbb41b19132 GIT binary patch literal 51 zcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%<%s|gS;*yh|kc#0F(prfeiUX00x!| Ap8x;= literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f5ecb47dfd92bb0564588beefd03ffcb0bbdae54-29 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f5ecb47dfd92bb0564588beefd03ffcb0bbdae54-29 new file mode 100644 index 0000000000000000000000000000000000000000..ec0539ee81d2a6e4796f68f6e3b82f66741daa6c GIT binary patch literal 88 zcmZQk@|DO-Y&o%a|NB@5Mh0F61_tvyhCBuai99BT|Bej8Kmnj&3PVH9|NjjP3}8Yc RPnLn9K?x)QL{J%21pq6a8Y=(* literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f71b4776ecbbe47746fb53d7749751c5c5bbff05-22 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f71b4776ecbbe47746fb53d7749751c5c5bbff05-22 new file mode 100644 index 0000000000000000000000000000000000000000..dd1e8e9c061c7a43cfcdc0b43973d53b709c924b GIT binary patch literal 61 ccmZQk@|Ey#P+GZn|N8=^=qn6Bz(TYT09r;8ssI20 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f724d4c839c012c7772618e28ef68d478cc00c74-21 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f724d4c839c012c7772618e28ef68d478cc00c74-21 new file mode 100644 index 0000000000000000000000000000000000000000..0476ee760651c63160e294c45397e7bd08f782b7 GIT binary patch literal 37 pcmZQk@|Ey)U|?|4^5tPrXB1*!V2D4RY}6vb%Y$}lu^j8qGbjGmAd!oVOV-{8Qmq@d3d!eIaYj(`G#^S=ZDu<;5Q literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/f9bcd3660c355799a865fedd15cb27a18591f244-33 b/vendor/github.com/pierrec/lz4/fuzz/corpus/f9bcd3660c355799a865fedd15cb27a18591f244-33 new file mode 100644 index 0000000000000000000000000000000000000000..5af2a422ba3a62ceaaaf5a18f82a8488c132e20c GIT binary patch literal 33 hcmZQk@|CDdY&o%a|NB@5#_hZe3=B0Ad2j&+0RYUe3(Noj literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/fac6c4165067ef2d87a23a2530a59eb560d470e0-23 b/vendor/github.com/pierrec/lz4/fuzz/corpus/fac6c4165067ef2d87a23a2530a59eb560d470e0-23 new file mode 100644 index 0000000000000000000000000000000000000000..72b39c999b57d5240281988a4d8ac16244fd3e84 GIT binary patch literal 51 xcmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%Y$}lo?j8qGb6zG4f!@$5^{hgsffQh4#fx!U?85%f*7z7xAJOKd)g#!uY%CInWj8qGb>{?*|jDdlbAw`6Nfnf)O0)rCQLzUoGPL5Ta{{Y563P}I} literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/fd4f0dc77a022a8140ffe5b2e1a5ff577e844878-27 b/vendor/github.com/pierrec/lz4/fuzz/corpus/fd4f0dc77a022a8140ffe5b2e1a5ff577e844878-27 new file mode 100644 index 0000000000000000000000000000000000000000..fec864e0afc1805e6b39ec2914ccd6ca5b7e577f GIT binary patch literal 51 ycmZQk@|Ey)U|?|4^5tPrXH;NdV2D4RY}6vb%B=VRT7+56$trQ6u literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/fe002e4c7731ecb4c09c09a4e1fa29c0c61874bc-7 b/vendor/github.com/pierrec/lz4/fuzz/corpus/fe002e4c7731ecb4c09c09a4e1fa29c0c61874bc-7 new file mode 100644 index 0000000000000000000000000000000000000000..9bf6f6e96fb9501712d70443440e3c3bd4863e1e GIT binary patch literal 15 WcmZQk@|DO-Y&o%a|NB@5Mg{;XUIlOf literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/fe78d4faf4ce717d84938010f92ca5e844f9980b-13 b/vendor/github.com/pierrec/lz4/fuzz/corpus/fe78d4faf4ce717d84938010f92ca5e844f9980b-13 new file mode 100644 index 0000000000000000000000000000000000000000..88b3ef7e5ea0c0d54f243afe1d291fcec0bfdb6d GIT binary patch literal 24 dcmZQk@|Ey#P+GZn|N8=^=qn5i3=JUc1OQ*>2TcF~ literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ff3b7ea844eb197dc6bd59d9f8e4a4a5718a6771-18 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ff3b7ea844eb197dc6bd59d9f8e4a4a5718a6771-18 new file mode 100644 index 0000000000000000000000000000000000000000..eea11f1681947a285ae2d927b29c0d62cdd53451 GIT binary patch literal 36 pcmZQk@|Ey)U|?|4^5tPrXB1#yV2D4RY}6vb%Ad2 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/corpus/ff47856b8fa7323572c8b4a6d8028dcb2663a37a-11 b/vendor/github.com/pierrec/lz4/fuzz/corpus/ff47856b8fa7323572c8b4a6d8028dcb2663a37a-11 new file mode 100755 index 0000000000000000000000000000000000000000..ed4aac7166ac3db93a890972d9bed4272f79f7ff GIT binary patch literal 84 acmZ>Y%CHbGabe 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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/pierrec/lz4/fuzz/lz4-fuzz.zip b/vendor/github.com/pierrec/lz4/fuzz/lz4-fuzz.zip new file mode 100644 index 0000000000000000000000000000000000000000..a7783c029f5a7fdd1c81fb9157f47247f277ea77 GIT binary patch literal 2149434 zcmV)@K!LwdO9KQH00;mG0000000000000000000000{s90Ap`@wd(L~#?9Ofy(0_m5|LgZW&GW#_ z&Ya78-rITK_q^xKz2)LGtHpwhKP&n^BERZ%Km7Kx=k1vy$cxHQ9`d4*$c6?Xgg8?< zFS|3YO{|`AMNWF**uUTM^!IOhZ`O4ID{fplb|uZ&k@?S?b=_7!H0x^gXEEAnWX~I~ z&blsb8j^K2*Bb=C&tT85$+|Xr=)kH=Y+3bYeiT|T2z~QE2fH?o;BG|cpQ5no&vB{( z-|)|39xM5CGQ6_!Y`bA-R(WT3b>w69t;T~ierdhLFSxAo#X0o}3))cMzr=9b(@;xJ z`J8froc{L}2HBO?pP!#yKDYnbIrY7xgX~J{H{_Jh#rt(R_1Cld>qqBeivH!o|C5~h z306PB>L)+W=K5Ut^H}{f4%2)}`F8%6?DDzwPtU1e^ZqsLO6xmsJ$Zc>!--M9F))W+ zN5XYYo8_eSN9EM_4x7uaXTsGr7M-;IvRs^cX?+x={l9by{&_Ly*-JiJ|D~C<{zErp z*T}8ED(Bf%|1*zXUvk0q#o)>7Cvu)0`}$gXwVwsobENF@x%Ic@JUjE=`Skh#tv~#^ z?DDzw_vJhrf6;aHdga-0y)vhKZvDq{p8b^7|0%0~PJUii`P}+n<~)-wqncm3`a5tf zeIdJiZvC-L1`PSh%qR5sf}HYP&hI={>R*3(y#ibZ zm7kpc|NZ;#-+%x9`}g0!|Ni~=@4tVD*(kHw^{U$ux_H`cldrky!n<$2xfFXsbN%1* z)n9ng!l_kr7yh_*dg=G3e{aFOa!+u|jM|Il&R%@Ulv(qpPF(b(?_D+V266H1AKh}% zZRIlpH{5=G^_1`pb<_RglsPl5szzA$3r;Ng1y{=!^0xrX`R8@(x{fdVk#o^h964Bm zrCWqztdRd?zfg)LP9QgBq?QA>`2{C2X4I}32wHQI=Uyz6@{x@tEvob?hf+^%+46th zJ~7PHI|pii+`rvEak13X2Wr1#gQ@+T29+reEF&z7q}_ah+>~KS6da@xr~3Nz{@dJ= z{>z4UT7U4$4lH|VgR~C=cJ=xJnpe*tAV1lseSZ0Igit?ye91czKc|DAkPHvvI`1yk3XCXt-pAkX}|AR0@oDp@F_`idpUF$id zePm!Ln?I{@#MMY=1AA_@_RfG9Xr=>$QBUns$m1V^4bp#Z$QmAwO%Q$~7q z;mF3~7IndT4y7LYKkCoZo9WMy)8DAx0s8xDT|fQt%ZZndBL{<|PfYs6q;@rt!B__$ zC4|Rvz=7qtE-Vknu`c?Ij|WB`P8Nrz0SKh`ETq>Eqyx2NtGYmq zsJwsMR)CUOt@wqS+-Fk0pmzU&V|rgEnyQTh7Zocb-g)OVgrzFRRm8O=fB{1ltFsa| z#1xV!l#mx?lywyQj-&aMC`wv2g`P3EkrE_dpwG8lZAJW0H5})V*4V4-IrzW+cf;*Mc$u< zJ@18w15M-#2lgcS)rlrzthf`YBkA&F`U0eW$vYkVge1Q@$^RxXI@u%|W=;0^zA(yv z!8;ubPg=of-^-D5BjwaFhyt;QE>AdSUw$l-U~V11W~#31~8Z;3Ql$VHV*M|zu-#kR6qF}hf)v! zJN<1Ns6Q};<_k`>#e&lPE&jjI-*A-aFK>YU_~mB~pl@P{&`+_9U09y!z_G5-t$f@& za!qmQ0>Z2{hP>5gR08SB+2j}M`se^UTc5mWt6!+Im^B3_sI!6tXo{=eH*1QbY)$d> zD+6i@_t$+i#oJHyuPMe%15L5@ISy%?GR9J0{EZqIf45Vq{r?n)r_C4uhqm1(!C~#o z1LE-0FZG$JgWRa)6Rap>En($~Nwmttr}Id4b#VwQSGeh;`^Y0Zee`|$=w9;Zi%t%u zeuWkLnO~c_DK@$xH|m}XNjLT*U%3#Dv|F%bKS*w6`=^;F2k4UzGEa8WC+}sRybVv% z#@)zgIix)VILDELE`nSqL9Ua~sn{?dOQ?zX>n=*a67sAVuK*r$;>bqOz$dBC%+Gn* z_2nv|^bqEsA4X@YvaHsiyS0E=s_2=NW zsPHI@w_qtMJPsBnfjhFXu7x~#6o960Q1)92BPWkfD6se&Am&6itLgrqpTMb!nDsU_fS&>QcFV93ps<{K9zIFN~KcmI)NqII^*( zCF6%H#GWVY_75oF#GcOj+xzWGBwZ0>sC6&2?lM}Bbe|Fa)wh6d;ob~%+I2J-K&;jJ zrvBL-EA|`ip~NUnPl9FXe!OYWFjlIB@noh7lDkqY6$+~Q6o<4Q=+v_vcu=43$qY&x zL&>uxn?d-vecq>p7JT##MAbqWpzfClp{&RT^QSp$sKOuPG;UEmrKO#Z9k>38-EMuQK`({0lNf8v$NQ;#eYlFP7~$oJaZdRxAgJ zz3JYa8ie&0QR={+?LV7|IsZ^H+7bF&t6y+hTHGC}FWh=+8~KG=++FTOYBiQeyx%kuVb3;x*&TrJ zQGbWuJNd|u=BN3J-ze6rk8y>d}C)EP%*;!wXWv&$l^gSpUbYag9e%blDuJiHW z0)12CQ47D~Yd%>1 z;gE@Ga4D9DVNY{-h*_J=3}R1n=u>&AiV%t=LPN4h`&xrZMS0UIsw_uEef(s$it2l3 znh$dw3OrmNC2q(`MO0Z=YmO6>(Hek=TCC_9g{*&Kj*(0@Nd^KczHB?W5fc=)LPtPuX z`Eyo;@VH%Aev#^Q&%6Bc)mCEc){XQYZuRofYe@-t@*AUxj2`BrQ{eZ{9az3ZBr4h6 zL4-9~Dec3a9$wi5QkwsErTif2q*DGBX}40^Sm|lzS3F7XJv)8;LoMae-Qgcr$`7uh zr5=Sh&5NgHUWe8M$)hliWk^7L`Nb~Y6~RQ0#Pn_XX!{J$|G8rjzpE7c0RJ$ zg3t_^YcA*G-UYtKZYv+%2D8&@ic+Z?CqJ`^vVB2xB*ID64xM{-9QnlN?nrR~CEySh z?kv%h(+OY88RO$V4WI zf)G$RcN7I=&JB!t|IrL%js>xiMM1zagUVn6IV3blTSa05rGAGM`vZe`(Bf+E;~Yx0 zWl%y`w#+n}ddYu5tQ3@oIb?Fwq!5ve`9u(_h$&(S^s|q1CIq{6_hIc-h)8>j&GS1E zkog8t&PQgVVCf5O0aP)bsDsCvW*8hf=q3DKM))0O^lCE6B-KG!YR1WZgYdW{5v>|* z*-SdAA%hQM%NOK|vE>k;(tX&ir#KvGbzsjPJ`yD$9BI80ArxNB$1lZtGmdpE8iXUs z?$mqyE1#hH?PSa@X^Bus&`?Z3FTqNFY1D${{6P?UwDe?%aV|FeTku#)C`fWhaLG%A z!c+_^cB`Ec;jZ6vD7Cfovy@B*U4|nYy)FIPpDup6*V@_JH~tfQX(+`gha?95gjO9 zE|6ai6Hg3c##aON+hkS;R3@QkDw=7&vFA)aRsiG1UbdFwEps2n@~dN zC=`oOICW1 zQ^_#Ar!Ta!-mE8?JH>wXZ%wvZKADFexC}xjj{mVC?T;tGV9oI_{gl75rc3}l0LI4B zqX=0LAF;yhF?U4cF$ce5mxYc9vJmL-dwm8-mF2WK9ClF%^!(wmHG_gv}SZY@vPY@-yEwxkq zWr9Pg7r^RU1csh(ljAyO0XprQmcY?Ir(XXWc%I&E<_z$jt`|cimn1$YH`hKj{T14(~U@ZuVpCJe^F{rEX^Q zzrN1INFxa&P4lo<(g&tjW5}xu;FbE-Z#bm={zM;ty0874j^E3gw*T?u}Fv?F|(94v};g(rcMjCFGDJ@GhX{;mUAWsM{$RmEgkIDyDs>z^Y&0zK!$}L!o+q{_8 z1>e%y>UAJ_)J?QjHIdUgD>XBy5ma3rwaSwN`&>v=mJwf5RPG~hL?!5q9p+;rNNEY) z;I?H=M!=`d>!jf!V1^|`llq0ANZs>#936z^`k<)H4uWm^a|=R#dDI7cNiQ`nQMt`o zPC&U76iA&5OVgZKni@=_3@i5T2Tr3*4L12;D!HyR$gg4>;aYnYb*sHtZlcb2l~9H~ zoA}rTHiYDY@Lm@pqn`1R7YRTcZB|^13p*mjWQ0nhgCdMVf*(c%#Sv$8JvQS`Ce}K8folxJ~ zz@gNAX&&?z5itl@5z@v0wU&^HH|b8O&uyTp=n`Gm1JW^3`XnH=V(F0j$OaCH(r2P{ zNL>lHJJcv#_iBIY)pdFD!aW4})hMstN_zv+o9={K z4%I&qB~`tYwKx%aKcZC`McdSK;nmiF)Z$L4r_*v|{BXCE6y8ZpL#f3Wocif2q>-Hl z3u;T?eKTg^K=mznzt^2mTi|X75Lu1Gk8a>=Z48*3xCG0=Vt!q<3-fC?V;gp+RW6oS zGLaAkr#kOdv&iBStS7MqwTbA4iFlO&E_9P~Ir$MZ0F9M`j+?1%T}%3DV*S*m7dniw zP(Q{9X1OxFJI*pd+p7KyF~o;MkX^F1dS&6*u!W5Wr7v^f!*mj;i(p5PPp{~ zrug482ZGKdU`)K2y&CDAff)kyj(jg7It1k0c?)5F)zMh`=w2k<}Ojq=oKZ0K!% z!Bt2_w-|nvfCTKCZY7O9`(SR+>JJlPCc61y4ry=p^p|hLFCR+d>3u>nGA2r~mj{2i9pUNJUXrL@kY|>XNv7DC;;ONppu^;XR&$8= z2TyZUThrP;h*Y>zZNz8*j^);atit=$Q`G2$(4QPAHn9rWH-t<5MD*>i?{cA7B78a> zRGSxe^=KD?rMW~Xb|=)Q*UFar$b1WKC|t!$wzmI%LvvlirOi`EB0NnZPIT1nQtZYar* z&ttmwip<-I>9_6hR=r~thqU=QCip26cBy|cf=vjy>9i((SNy^ue3{S5FTa->;dGLE znoeN~yUJ|Ejc{fwGsV|{QOidc5W83&q5YlN)Ze%Fv8iDiROj5EX$eFnly79Ly}*G` zVJP=mp4qmZz?u4|#h1Up_<~;-B=h_xnCIoybTu&66|SZ1%qD*I=j+W);8Hr*mzw8# zYFtMUxcPNJIs5?3s?U)Lxiu<0PbX%Ekfj?}!30YK71hO9Dl(@H9e=^xqbPW_o52A! zuoj+>>1W^l>3$IF2j%vYgtnu1+`cT2{j@_T9m8Hd{K)iU+oo@+1^UR z2zOAoV9R#u7E~%XQMcei;)Y1r6_9+yE%2t%hZXxM+3XhNGq+%5#2PkDliK51X@I?T~*dH zPhh9IY%R6h?}oB_wHJDI-7gnh+m&_&%F1IMS-wCSLAZ8bFKcvf06O!mWxhbWI)Sx0 zhP8P;EsCWh0cyk(#!wwls*Sn@$DRcr!JSY)hr4Z9+AB)CwZEUxb#>3Pq@80}YQxet zb=$Ml%9r+Pi!y!zVPo~BXAQsLuW+|bn?On^1uL(o#&`oU#*JJ78eTBjHOG zk4u(sApU6~K3k>&Pc={?T%1$2AIdYp%$A?}_ZJXKZBz@M$XNWOkoN3RShP&XIxvpy z4vipky?iOWa)OM9kLo%^M)=sxM|J&FT7~!!ppO#a%T84mD|Y_5T#vv$HrvWy`J~y( zAKBN+|7r?Y`R%b>D}TcnnCzkwhqUW^PM*KPFaJ$H_C8pNa~%+OOu+zHEHn11p@gFr zdDNX-i3+=`n7nudM3>n$vW1zOX4jyYxCU2l{XcOHw5eIH!KIJ);~Es3Tm$W|X4k-- zPW)p_fiRE-cSA&vwMfI?bHLUY5E~eQgDYG;H!e(nj83!$@yQ zudBB7rSH24=Lo?Z17Ckmw#)c`Om0g4?Dt z)paIrn*x3C@p+Eu?$DW7KFghWo#^*N{PQo=S`gw_w?ub`{z$zGdAxul8y!SJ&HD=> z$5t%uRA<2L5qCl@{|kpwFUX@VgzoNe#CC@r!2OogV;HpAcWGJmY*JDJF`#H>npaALU~Xq_1+ba53;3yZN6gPARFRWCsN6i%afhTQ#FyNAd#nF%C0&R9C9bH zQt-%T7kY)^Y#7DY0ofkgOuPd=`g=r)UlT=GUR8ZASYZ79k0EL+tDP1a`=`bRxq*Ff z_q{?r*4ik-_G*}v)0)|SUExT!W+GDMj5EsF!kQ_uu#O?42gIp?S{bICBd_|MV^%tf z&P^^vvlfFmvaz}a%d2V_uq$Tkx~|P3ev&Q5A#G2e1hVXW#FQQUNoe-&O?{DrW%~yc zM=~=*nQyh=rN>koLcH=v0@oFA9|1mA=2@^Z`MTj`yz^UKSQ&NG@R2BL!%Ce6FYP5I z7vGKTXCBved}Jq?5s&P|$?hw0@?#qw-HH|NV(i)R^MIirN+}AH2W*6+o$8lhSlFuo z9HJr>zr%th`_zdeDg3W=7-(ThtkTic->_~!f8t1#`iI&w81%9@I4eCU+ka50{{Ugh zr3dM3`!o%9DeT(j7pe{VSA%1m(9+q8SiZxFrAY!?t#)7~M112=zXVs-Q(Wu~NZt6z zUYyjg3`m_Y;L%61QZ>v4o`*ON){SAM&#R8=NgIGh%3xK}g)Q5R-%$&e9|Yd@Z2OtV zpwKi}`kLvATCozeV0k{N(}F#__!Se$D@N7jmk{_mW^D18mu>yc5B!~Rf}c&znoOu81{|Koc^%S_Un|AM`c#_ z&I@z<`Xkni3DnkD!w{kM_UgJiG!OVFL@$pm<&d`i!~pRre);cFZoW5G?067`Qso;F z!Z+CSTV00rRxlpk5E%md1Aj|iavY&i^d%{9wu;6)eA+F92#{VVmu2de5B%OpZ zo@QR5+qcfd@*NKF39zU4=X?EpoV(1|*nLI#@6@#>+)ad}m<6JWnEgTRgC&Af9r-)9 zcO{w#pMj0sYcJ$pL>v6gNv}D#o7n#oq^)V-r5|9!~aLiAT3ntzl`WydqVZ_YyFc zGHu>ce_>}Kjr$%kVfGAy*_}l|`#;>vA#F>JhBfJvs89oVBr4@ns!~9-q^AX!g{l;| z%2D7+y6?q_V;$lAmj?rnjyMrM4Pm+3MXbN*T~G*C2l*I8bd*;GdY$|~f8$}n@erZW zA+_r%qAYKPe4utjod(Dcg6$bWCwZ>2=ZEO?5*nwB3Jwc>?zGS)Z^UGAJ)<&pP6siG zagiH!QOw2?%8az;Qq~IfQrSqCZX^h3!O9Y$8Y`27*+7pnfR?cn@)}_cf)WZBV>wtt z8l?WKk+(n$J#QI#z6PFC+dl(#nveRz+#LN@Fw4~?MkKe4u&g)JiTxK3oBj4P01}At zLR8c~aS450LSB~^kj~#(K|2q!5cx{hd9>fo)k}WHA?*)D&1A=$f1HzklmThMQZq@vib}sF?wd$-F_!Yf2 zgqHTKw4QetzhaJ++#kF5i3$9QpIXTMn}hV>d`twv9C5~kd_*)@?0lfcYG8goeik1+ zj*N=ov#?U|%tfSNl8?QQ5c-05TKOn+FR{IM>Oq!p<4R9!G=58cX7#nv;70EFiAl$R zRr%rh)=b<@;?hfIKvT8#e5lr8t_D-rGpyQkrfO-yRrL$3NZmxblo`5~ZX{T2`2zN1 zs27d4l0o=|>Mw{NtllnIk^1Y=R+M_1pOesvbzN_oFPx|5jkbb5KCg)r)Lq}TA~j43 z{n^0O2AD3l_UbxCmGN9_hey{>`TjyamZU1~f=d~ysrj8ob?7!mtJqq|2`Om45KtYS z{w43Ue#tv4I6k(zSJ%HJu#f+eA0`T=>aE3A^d%X=_%Hc+2^aN-*Vb2?HlG|d;rsuPOoz{c|N1n{Xs%05cUb^syG?Bd<;Gf(s-J5`T4}GYzf1s1brQW)r{2U0(s<71^Q=gHmlVv)9YHEWyH11O0N`)` ze)DsD>@^DV%JGamkD16rC=go65I zIgG=+KpVIXGP*oSxNSUv^tuyix@-XQPEuE&!w5SmO;~l?Xe&~WonuAX_!F6-5l+1x z2139~kF5$GU7=QN<5%1X693SSiq{M>S$)rJNR!D`nnNZ^B`6;oeH=#n;`hu{%0Eu2 z)Sw<5MUf9#rRsDtq`3sb`;MonMC=`P<0#ndP=;@yj5djo=^|3H=6EidmeIb`Ls<+% z8JifiB@OaN7v+FVBZKHt%K?nXh%m1iWkuS1 z#|(hCH_aEusKZB5(HMjI*D1(L$>5fdvdSzyR0pm~>%jD4 z?)?PI9Yt289X+b+04g2hI>^mcClpytNfN8RV@2w3Na-y{bA|uM=>et3I0qiR-T2Ny zKK3sx@u9ooK{JOJ3!KFP%@0fjrkG<3b zgLW{@=LTMToIGSfVD)Eb)3F-4nd(6T^CxFpk>)yT5ODKCX})m2I`eER;@A0w^Z9j@ zfX@;6*+9x3>|xkQEhA-1)bm)`63o9r3;%*Nd_O7tMo%s>F4QwmVCRwg(OED-*?xRl z&N^d0VVbK*GYvhuu3i`7kml;{&wo;)f;VkH@3+B}?`8IL8MB|unEgzjbAtNXpKNT! zE&E)Mcb>7az@D+)%4zURI%eJK7n~*P=7%{}GM3<1jPhk|R>93Seg&+&OD%X@JC<6FSjXsg9O<=%GWBX*eS3G01@h3u)XgVpMpsv<)BGg_B3G#G|)kCI6g^U2Gc4I2C0L|z=U2GlrjuVm9TNK5&#&WL3w=ww$4%g4XIR+ybVMBxu)>td3!cid z<;VVp+VUckLs6o3h)8rE`H=u{e=F=n)a>0yuH!ZZOhfC$miNfWx>$To&e3w7a*QftRB5Pd$+mK=CaeM!)c^^DE3gJxtZYzA+r@|+RLf_ z>F#VZ-eCI)(5BjUI0wL++s!Szp~a8^;M@Tk+g|{U-Ax-)jID@@{pEZ6gL73saQ5ES zf78op(=+Ngq#Zrh|M>$-R8V^jeeeVe(J_6nis=Kmw$Z+kv2Dayyp9TwGc`flT9w5u zHiKJ0NzLgsT*FAWm0x+3wOV2+kB(9S0x+5N=WdMLDCRGdUTII!bX=C`xkSI zgdfQu0E););DH4qFtP7aB}keZ@GJ9CIvQHS_Z@W$I{brX%B zV?;`@$4x8yuW9&H59)f_Rd(T6N2m}(1P`VJ(Ho~8!+DnjI zakax2wTQ~qPI_@cs>D#y-5z+^H{#G;s}7d^GeD{)6XynA`PJ}UzbyFUcgF_!waq?= z7EhOjvqksE0esRniGmlx|%iaQw0w3*0&Q+ zf|L85-=s~8PUR-|07zpta;mGAav7u0gafthCJt#|9EbBnWP9K_%HIxoFg>M8;g%5q zU~Eae{-kg)OpgMH`=tN`q_fYD!V2c17AzOMz1D?TpZS~c#g2cwGa$FC@A+TB!Hq|q zciyxB%SCKA_qC<+3vjsM1~}Ys1G)D}hms!;^SfJpQn&j^@?UxGUcc1lOR7$v`;cFX zz!`@XpTjER_5+PQ#b@pwy-VNZQ;N!ByTU{Gb$E!LTqxloEvDNoS${eD=S`}AOh-%* zO4MR`W(ij2me4()u`WJ(59p#homjcs3EMJmwo+@euAE*8ZWN&PnX8U|@RYLzDsd)9?WbFssGY#(TRx&$v$8$4f7-(bPL zIxJ%^J(sSLkN(9%qkI%f0^AG>ZIuWW`TaHY5-7p)Fhb@ECq3tCqNq%@1U&8c)?wvp z3zjMza>2@H2oRU=iFJghu#AiRJ^Z?06;ZGaSXnZ>JDMktxbYb>jPM97@#zGi^idgD zYFDf7<523ubdE;(eH@~@%&^p%T1%_|j1~LuTA3AW+W#mDE)k5kWLcK+M$hMh9fxzA z@`w+f1_;i;QXZC$VresRdkAhIy<7de#G%y3Sh3%OXcy|~Y=Ns5%MB&bJh|WxPg7=h z#5%%GERAHq)@hx+>D_9IL^EAKz>59z2?eyJ_C|zc`;VVyVj6=*qAFsZR+O+nSf{q6 zmu8p+2{xvYW=N6LUO=k$mtI|WC)5cNhqNN-?ua{~o=bjydP3Lb$=uT}bhW|_i5(6P z#?ln0cKC#@tG!Je(hi<5aRKnf_ZkWBRZ%arR@+R9*5Ak>?VLUv(E6U|Vm^LIvES0n z2Km9gxhHghN`ga25-(kU7sKNB$t^A!q+3P08VvItxPX1Whv{Tz#npApCa~$P}e0PnwtS?nqhn zB#v}D`1{{O2yFlZYx@VdGli8&*J7pU1?<_$KhhH29p2GYF*w>0=IQQl(>BT~A=o6Q zbv`Gk$_TMzGnXjgk|m!_B8Vk+)Q^_Y75BK zw8yfO?XldH+Npl>V-9Jj!^&lD{tVT(Ia}Hx@iPkcIZJbX8fQ{sM%mFYTB9ix-5J)U3p z^D4}*-73mcT-a9Otc)c>7y9{lg~N9^>ENU1kd8;UV1DhffKpTzwfXq?H}q-LD8@^FFA(po8GQnkJ0_Uk%Ya;b^*OB76q9IXA5vVLvraJw&QvK8}NYJUEMP zwC30D!b<*TKJJ}OeK|!O;)o_fr?b>O)9M@1bqD!%Kdi#ad}5Rh#gJ?+i9)HnOPdUS zvAyJZnm>?L?>!BXx1A|%7u{29?WdGtzvMS2e`7T9H;$fwphim#hqOH>*H`@V!jtez zvx#5gW`5cD|2Dr6ULib_%P%D-oO8IBa?Uo&Iqd@#RqRI|&1Ihr$AEpJKje_MweNoG9R4{%=NC-)$4mGJ z^5Ny z5jJl^CX5$HHe%qN1O4(&nY#;O`-IfBh{en55VJIm+C5r|F;8pn$;+xgn$L`<{`o`k z3*9u>x5y5`J{tIZn&pbIt9d_9sokVx9CjLgqG7lU)6`@!&5JB`K8tT?eiRMQ@$tEi z$Y!o-t^><+omjcU3F$XyS`pI5a|i|W<^Yg-nFXP!Z5kgh8a`bShWpEQhAu0Q?hfz4 zv5xS2enR+4>77b`?RGyOUo@+dU;Fh8rD#t;+Ec0c&vH~M;@J*S`m$2`rzq`DtszcE zi71JJ7dD?00#wsR__e$Ie0<@|fHMDVM|t!^!airy6);%20`_6afe_`JpTj|Au)>Yy z)hsSb{0QSH7I}$KD$)aDM4_7aPeBn3YN|yM2X0Ex`=NYdlj^qvFZZ~XfL+Sb7HA2Tb+z`ca*ymXr|sK*V4>f$osZn4>w0DELweL55C>1euL5{K~@i$M<=4y75Z-ZF;!GTiE5`6qTti zA`sOeiy<;4)jP2?+vVruQwIB+rdIf6yF?2YV|j|RJeJ^N#jqecwHV8bynKAoNblj+ z#!wBG?<^6ODJ2m7`5Q>soh8IgBEPHIZ@+B6lr~q2mZy5LG&RV_r#Nt=*%8@iyWAFX!1~7_ zhm{x~>St`irqq)Tr5;oB8#ttW-mB}XmE5&a3-M3?8cO}+D{fD7KMm?^`E_nkr!B*5fqj@onwl6S}UxH=9G6a3VMVIb(lJJDL6QDwF2xU3|RW;XT~S z@v);EUGc5K@?s~PEGEj+N=11_P?YDCh|2XPL?bo$`S?$+7UkQkD`hXl*lM+hYzX=E zjRC2}*Ld8)NA4uQqgFp3UyREwAD2rj_MDxdMShQcH8Ldur*_TEpCZqtw65&g7pfEu1 z7aCE%MJUy3dUahMapVzKhVshwj#yXtM-ca%;h=`OG$V-R87%ndNrq073tAq5S!^tp zt|}qZ%td;l>8h)#tVmZ?_cecd2wOL(zX`$it<+}q!H}_il${UO2oH9oWK6@TL1Vc2 zhTm|OzMWZpp&@`O?H^noJ2 zf!3v1+Jm>J8hgBzXC}naEg}ty`GvY^d^{idBKs|(XLD%6H{l^lwZA}m-sc)5Q<4hl zvejDI31Y=)+AmM&dZpB(?LH1xN@!wtrF=%Y`@_muSE!HxUnWYo2&Kd}uhXtQ zPRxlp-bznr_%uHspA#T*5$ga3n(eBLb@9_4T8y%qrzohwIrAFt60ews5=q-MJ-ECEs{MwIZD3c0((Lq=7@xnr%zRA~k z)K>4UQ1Of?f^zqKf8lNsl8aS z#~;o;hV97|*b}!-=aBa3!1lzemfZcYd|VW~uTVvD0DS1i9*$pj2NV7>EZ2J@$>VR( z5}#np4lG|1kPcyf?Ge1R7d0ZpM~YxkzPHZ7<>6yw$#?Yrfd3gl#@$2#f*z-9bRS-gz#NRv$Lembh)xeQMEZOC1ZziW_ z56d57Yxm%2C|J4wUc&52Ee|j4=|Kq9|4>v4roCwzR=p@H1*_MyA!#MF z8Y)Hzdp@ss5J4%V&-8N%+V-P;y3UqUVXMwIZ5T1K_jdtFk9NZ4OL|!;a!4CH;P=+f zxAq_Jk)2p?=HqxU#7*wsZy6xqzl(pQnan=VTM%lhBDOk)C8`oWUOm{dy$O6>I0v>! zP#GOHlP;sm^92_luX9L8A|D_39&WRQY>~Ig^y(e#C!996+|urE@(%Vk)j8zJ z{6lc^1emDjvItZOmaq#;L8o!7%fdD<9R7k!uo5i6v5pYNvKz+^hrFWfb718z2jP}j zA=r2J4G+2y*p(ZAd+u-;meLas(z6>LB+uL6>)FJ69StqVKp*3hs6`%e*MqR}+ZpQ$ zpN6HmPILHWr~1>|IFvd_!((tLj$&^g&djOb-$=|U&x1MUR5h4W63y92Jqicn5Y=9M z8#Sk@QwQj=4E$~MScU~Uv)vA<$8Y7*XST5wzY_J6TiKT5ZR-1Qdq{g54h_eSNQa{d zJ2Y>vuDiQ5H#Hys`s3U!R^d;8o4#McA?@V>^JjQCn7!{FlTtn&9L&e79fw;Sp#?NN z0l_rC;E*~qUimdTJ@j<+yRf5Noq^KUYtV&bUD>`1h7D>?oSn9JHgUdo>YGxJs;dGV zf)ktvif3)3_9Qzb@;PQtu3`4%n#?)JwdB7Bei+U6%cQXVmgY?=^)8WZ?10s6k!4p^ z@@qGVw$u1{J>lkS9lpaY4nDfvj*#@ZZv&kdJ}BqoqkZ}oU*mBbzicgciateUflx~v z=5l^r4VfSgh_)M?qO?G$tyFFycHb>RLpdL>4bD&&9CV1%lQ22>`S=Ymt?|(}IE0!+ zVJtCuz1mP>8taL2K3*3r=i?2tDlK1ET8_gypR&(J1{9xUDUTiw=lNPWizU_NYwYFt zWm`FT)iAR>s`JscV9frE?y4fd1VwsI<1GRfrCp}M&$S}t*8R%$*7Bwzi=U704MdJv z`A7qYP$2n%oj_GqA&W(Iklz!%-+~bNSsS%TM=InHdH!*pziE=&$H(zZVoCF?NJG>j zPd=!)5F`jdVt|JfBF0m=LS9+a2>Ws6$?b{@Rmziu*x~RrQF2cwtp@bg=~Aeuj{G3_ zYY0|addZW9>GF$ElVPWKx0Vn! zsaxfs*F(|~Z7{JtWN#^;#MJ98f>V9{r~h8B&-CiLzbPb~S0Ve0YFTDv5sg}@o&R74 zJ=Cg@{6)1DZT=z%Gt=@4c2r1WQG?MJp-vDh{&q)&6s1_|2e=RcE(<6F9zS_`o+vL7 zsuomxiVY4%IxnTNmpuCc`JlAo!#llBFWU@^6X@Kt%`T_Kd`9B`=@ee^L zYmD@H7GMLw1km`UHXl>I##lAS3A(6Uish*cz@URphY+#yXRk+v&Pqp`5+?Ylt_Qy@ zsg*VMaP_uGlJf(AzQ{gHW*i}5tkiB)*RF(Wtc_xw*w&wEmB)1*^vDcl!RYQvIbW!Z zb%f3$mUT@zAFl~kDmOW1C=2#G+zCyCvmvKC)>y;&0om(?uZcAhvwv!Fz|$Op&FE{W zA^IG3nHXo#a9=Y~%)5R3I&T%0k^wkTWU4Fu(MZMDO%?dBZ_Q}d3{z(K(VJ34}+O4~n**Iz@KGSfz3!sJ}<4?A8#4_z^sLoZz76sIKd8YxPHUU2SV; zp|`K6m?l2h7`kL1Onl{2Iiw|e`g|{QC+hb+k(tGC{(>~O7%y$MaEP7g?b*dI{|)GZ zosj8}%ENjqmhLFV@*Tz4vnTW&QTDm~{JM%Nkzf1v45iTFi(0SZ-7IF$O;0R7GFlb`$k24+jmo{!j06N$wX`u!sGmVX*ihn&yu-az_& zFsHvUIC9WQ`g4%}9IPTIs5gG9!?EfP9NFk>QOA(V8@HIhuPM<4Ui|IOr-@klwVz-) z?Gn@a>-pyO`-|z1!O@QJ5-fY2soAjLndFG^UVpKCCNZi!Uxqb4USy5#4($h%iH`?n zVSa5VR{YiyoW0qX7Faj43M*C4?x+RJRx$<$(ctc`)KgfoPhCY9p>u1c*Y@P$a&xROH(eFYt{VvJK*S$cyYbfm;K)XxeL;#LJalZ}Xws^h_f6U0Yrw{q? zw-d1^v0~r1@;^evjs+C1EJ}>E!m^Wzn7bcv75j~ga_KehJ)qYYmvKnD?iBR;)k)}e zm5E-LnducU$(v-z+qGtzUG{Bg_U%OO_gJxymH%@@ZUE}_5xM&N1{Ap`Lb)VdxC2Od z(WM;HDo*x&+8_t?%lQOV1JJMAmZ9H4n~8pi%h2z~Kx7(J!s#ywM2;2n$~)kC`y6n} z4IysANwa*w#FDEWnGafh8Qv4M@bRJ{(cK|-%8l$YJ^+I~$3hdSDMHV&E25uiQA_7! zj=33zGpB>ViWX$})bVleENW};Yul-IqsNU;wh)?0P~^EZx^ zI~?w=H;B>3M%KzkRtib<(;NZM&hW=k;y!aj%A<+UE>RvN$~4cs($mgIcUllCmxq2sN9nb{|QHQN7#;~9jV`tA=LHDnCuHteR#9s6uep2 zA8($|c$1HoW-|XOl)}8I)yKz+%2*oL&^~EgV>LLPLT|y5W+!BZK(Z*7?{vtXVcG!hc(Qqe4G zml@QqJ~g%Zb=MG0F{~TQLvXAk1e{!rm6;CrZp{sWDEpD+CuIkzQ~Q)9akU#e8~_x4 z?KZ4Lhn#}l2$@G?#s1(adRZcr;N&M9Rz%(bIg>9k+Rrz(+J*#&dUjPBVWGcdVWs5T z$$<6b;3)PB>T=c2XEegSelmx&UmWW%KOWfz&VOySnsf}^D`(Dm%~r?NIV^7+7#|!U z0c|hwDc`ps6ws4_NROkwCTg9=#|wv)N4vrWIMxyV7)za%QhRDoKj$-^Ove-De|AA_%EZjyS^vByAXYK9_QJ3}e@qsU_UA)4q* z@Stw}gmRlP@|lCNv^ghWJGvRm^)!u&elIbT_qzkzW;-Ec3Jw6_*UipOmx48-?Vl|4 z9IcltV_l(%CZYF5t(8(T5ZRYEwTZKe(zdG=@ji!KB~(kpux<-T&DvX#u~1~B6p4aU zoxWMuMY@Lopq@`uc1XbG?nLT|fV9coCG}`7_?*e6)JnRWAbqAkkRHx9oHG=${l><( z*@E;qR4GKygT(1=Aq?3fC>y0F#&)Psf9-YV`?Std}$%pME^3h?Ik3ak`%f~(< zAA3#m@uO47$0i4sPZx=Rh=zb{%oPw!1myj1BOuYVfQ;%#Ku&yH0eSYrZzUkl{+j|a z=@bG&a0bgqhKOwLD} zo^2M9r~SEd@X;0~2M_jnwaIwp3#Ub7(R@Qhwrm6u317q^ZQt=e{{5Jf$j3pmd~Ez* zmX8BOJ~-FrW~<^v!^nMr3&LSIi1>LW)b>g23;)< zLI%i9zFawZqJzoF^ggdv7_WNoNQ=ZNvzsJJ29`ukh0Hvd+-yM79p#SR(unEN#P5PwJh3 zbd=b@0ckr{szy3Q`Ns~ComXG!IT&(?(k@Zjk$Q&iIhIe)_>f0KRoM6xFNW1Nn(j;- z$xm>`$(TS@G|lo4k?}4OyrS$EN@>CaBfBV+z!|XE^l{KCVr$Qu1>Yr+tH`+LIj|D7 z5a=MGf0ETm=r;`Oj6uyZ@wZnfRi_&wpAQ=}-8y8Ur6vD5v*gcal7AUw-EQ?uotd1d z&Vw_Q@e5`s!qcMX0G0f@jO0JWmIDnMokH@DFv+jWlKg;_pyJF&-bM%!nf5n{!dQ30 z-JyNIUyWeO!SCWDw-6l05}{d9gry#$3H(j@WmwvTllwW+y0XOLNPk!@eR9_fhg|T7 z+aW2B=>}0s5D{BMbi*Se)eS}FboQ=9I-k*?Ev2YiPc6gJR-zX=;oDhQ+N#yU44c#@ zF#Q1YOkIwC_>6tU$k^OHUua+rKz5{gi*wafq96WsTaJEcF!Vzy0e-Q0&vn<;R6jI; zeh6HVs|1$4$&|o^KCgaayxMbXT0dO;14BRD^cv`g(@Qv{eR}NV`r$t+U!-R2De^`3 z(R`6(^zbvfMdN99Y7o7$+>PqK2^{HDK$U72ajn;|y(Y#IXMkVZjcu3l@#?{Tq7~_O zx1ZP$lHT*ZOhshloO%mJiyK=z)c^0+D8}(((bQ1Lb22irUk+nNHQUPU_T$Pb@&dy>ENSRSP&|Ae_F1Dt^TG-Bg^^t zr-8@`D<5ej_D}L7J7jfEmqX)g0+C(^A6-K;2*y`OQH3myufdW1dHyEBL7vt6 z+6>}j&Xs`dRtyW%a4-Uaf@U~VVGaonb=|A!%!pfr(hA8xzPh5#KfVST<6@Z+<7;sw zQ9|CQ;mNcP3AAIhuRw;Umtr~K!tyW~!)8E-NG2P3h~5cvBOjj+$qPGu{6lXV!;s!% zX2y$bgV(?#VSUZ(Wjna0D^(-A1M;OfriTj2oE8+7ISx^|zQo<7{qqD(B|Dt7h6}Jf z-8gw8G=a!mz|&4s13*lcZhV}k25@GJ>ZyIYp4!c?n_h*bO#yywJGNmL1nY^IDiz%@ zM76QfBt~icmQlx~{&mhAB7oJGsdKw8P3&b6K!UF7RlCUj&hwA24ah^%fT&+jHH#?086^G(^!^p(FV}qw1&Nu0><`dytlEC|e^HHo zaN<;I6uY~$`hQ!E*6jX9YSe@Ochx9PtI=N^2Q_*&QKR*LWNP#eqjJ?~$p%oPpO4~@ zcFVDW_M89b=~M5hQ|ME69{%0jfal>G-%26>)e+U!$Z~tBvqtmtjC|tf%=yHL0rQCu z*aprgKFxNDK1F4LP}6TdaZNg(xGq4qmXN0nrc7eNmdPY8)9S71OyXIA$VO+SMG^= zf}>KNB#6>nhhHA`{Eu7+J_-2%jMW{Gy=A0eZW8TXUXy;UW%`wA)JW0^YSbW~kB{S7 zG*Dx!aFJIHn4TR9T8q+KdRwHs`&YB1N0xN!rAfC>QI}Da4yosSpEEK*{e`fj&Xj*U z^KWSf6t-lN5^erMdfo$+S1{53g>~4@4y`Th7aG`bV2mIKGy^I~y&WSG<){6smu4LI z$+{IxS-0tYTK=JC=v4aL=y8Cqvamq=)4n>M6aIx zJEm6yu3Wvk?IqBwzj6^KIo9v@gBHe5x-|qO~}(v93iPlC}W0Z?K_soUX=b4`LPFanmb$ZW>(_ zrvZyXL47xF%OrC`)&<>FL`u{^iN80S+9*!9fw3}ToTGq#FV#B{u~uj{D0ayOTdspG zM9x@8I80aiVHJYzBPx*#p1v;qq3Ed)vc?jI=8Lg}%jANU^nED=hUh66xD-oC?VsTH z!U=g;U34jjw4IqJL3P2UbWin*>`Apci#=I}Tp7-lTNM_C$- z3qCkM6=*?2R?&`uXo0goS;q-#<4dQ)`wz_}O422QH2y?N%;(TRcz=En!+U#aU%Xe% zKRMnf%|AKb3+E4j_iHUCy!V!INDEj@ct2Q{i}zh+2Hs6EQid|c{`YwJq3Y|-FuGsH4TDfineO;z~pJi@PS<^dka=#5nlEvxI@B;Oe z0{JEvYkKCz)Vg#<^JIJBwPgG=9I-^Wg29rPfn)}Jn9GZ$%LVln#yIqVz2nfT{lr`b z(3V2>R(po+#%oa9zX$t*v9#4-7xks@(XGsDuww7I&NzgUSda3bnf^JD^*CfaZU~sv z(z&E9&-0*`tc4uXZq1DcGCpw-jL21jQ=aD}Hk<3>A3E{q&9DHPDiD>cEZA}kkKQaw zZKC4e>8zAdWh@aISt&aLp3d-|N*Ox>p3lSYz|okHVhx)CTXOVYsU>&6WA>>JjVeMY zmf&LtfidiFedmnyhrp!mIQdU2RtjffPiOrogDZk`9{7N9lCkrTNJr-fSea_Y$$hpo zMiBjUt<$1D^c{n9r1UxX@-Wu&fu5y0uQWzqte}v*F|0pg(Idd<)pKi&xsM2=S4t zjc5T*9^mN5A=sH$a?vn}?S_T5VfAk>rgg3HVMSQwp}v$ne+ZXd{`B=md07-{u&14m z{S?^Nq~TxRU@GIFTKoSY?OouTsItfLJ52&9Hr%w(2MSB8acvbbL0lWbHPwK3Fu{VT zMZ4HlL|h+>GzDByC`q8>Fp93O_*_@lw=3eV;o&Q3wJ#9+P=un$OPwL;w^XGq(9ZvJ z&z(u8Y4N+?-~aRB!!$GZaqhYIo_o%@=izP%KpcSzWh&e?WEg0f?4OvtnbJz-q&9l* z`vV%K#}VYN5FgW6gsfw=T-8*@b-HWy-gflsy+Ks7ga<~)`N=MaGh50Xj9%%O@^V() zbp(8)sU<#iEdllK`0=@`GDUNLwymhg~^atH|>9X{p-Tg3(f!F()4_Wk@O$ ztzAli?~Q!Hz^13^_nD%{uFs@UV%LKBZyusK`TV~E1^O*}Jj@=OZDypj52=5JXnzCk zHzW(XMmzj2$N-|=^I#4OQ1>`=Npyc5K&jQ$7M}`fE{SM90o6A5s#?T-3h{tlO#~dG1TC)RLReT;Zw$%kd6EqF zHE$SLa9E$fg69({yYXZOTb|$imT@Rnb|48?T1CqpvmtwP`0WHm6EJ~j3&PcTqRlrO z;#W{UaEZnqUTxR-ysHaE+XVKV@`1l6TI`m5(r{%lU5BF0#y(Rv&_)`rWSPW;-uRsm zh~-P>7T+_`jN&&W-oS#D4^CupTmC)Zy;I)C-a|$#AVcz&iIj;1T4{F3SG{iBf(lE1 zXZd!Hk@;ErJgm$7)67V@vHw^6<*pnm|6({AIFE=PtIkkpnU?hk`F7db&z#MeqRJJG ze<8m+!i?fC4r>4Iq5Sbg>wr8&oSb*Mf%C}Mu$;(|4Z+msIPCHx7bG^jm#wROGSFd9 zo;bpclzY`v#RFJ!Yl^=fZB4X>o2v4OWZ`aLm(@51$I&1h`lIKY;s6?qG23gq{K*xm;-%Et4tOQ3`f01^ZcgmN_ZpN9CsBW|l5+ z@ciC27*?mw7Z+>s?#>{R?QhrXu1P7`HS{^A+n7!7i5y0^bXXA)7|oA=C|^b)`HT81 z{w~6h_%p(EgH;ELI~7nOmmn<+f4AkFa=K6YV7hG}4#Gn1jlV7*D>9?_|HuyyGqbdq zr-b*>Q_Ocb8n^|xeBkL?tA3N90WjsI^Dxy8D(9U0eezNG&Km9aD%M z!Z-bMNTpICk+MJkMLYB2<55z%kUzM|M*cY)@EsFxM(rYVET{*6PCx!IL8y=dTa88 zBEl|N`E4Tl&EDUdQGCC=)MQ4=VgPL*Jh!Bt&z9|3EP0dN)f6`oHAcid;@(~9BvN^! zJ!B$cd83_#_XG}U63$qMb~~7iHsNzvGfw> ziLeba?g%?c^#N5Kj!1edn6vec0+o_`chzsTlgUMd3yIL#N$|!@4}PrP6FL@9jJVNK z%rVAJj=jnuB3aJ6)}RKMfDn@9jhsQF^wdTu_DQELSZdz z-=Gy^(#KR*?B`>KVvr%QQY)4Z#m?TyA^GjsIV3;Lpxmh%DrC?KZJ-#JpXSU+c{#y^ zX`Ff{3AY9EiO@n~$48Oa0TU5Vr+68IAFBh`Pl|?tp7}%0&jVble32|5@=oy)#32-J z!)q_$5K?Oe_zl($bXkx!Bf?EMG@3(59QXRPJQO^^;fMMWLYvK+SeLJKz+at2oJ7LM zs>Twb-WBb{8%KEXV-22=8aPM{vEj=d&IYsNH+1~()ON2q7C8>OO9ZSWdD-U`eqCr;L&Gbg14$Bq}-}caLW9=&gh>ZXNxNegnA7Zjs^n3 zp0q%TLE}f9!D>1~@TVxiB|bVyZa3;^cG zC7dxptk*GGj{g((OaHkB5XRE7S#NPj^g2chET8O!Z$P;bal^iX6y}Hj#Uc6Zm*DI4 zvka}APQR8v4Ffrw4#cAl@~8L;rP8wj*r(jHyAg*$sUg~~x8)%ED%=!Uv1R4o*0UW! zsZ(A&TU$t_&iYl^Iu78fvsgSmyr;@b#4=}nkbdIy)rgR;rngj4#8{4H& zRkHHWqs%D&jDa{d#OM+RZjVTo;TeX3kD?WBVTbXAJ`+-gCui_fgVh-d4+%G6=^=nW z`!)cFd0%Mb^*KC457qPE4)yc^4E3~A4mBNyn(%7Z#;doE!@FrAuZwPevx9Zbv7~76 zbb8Vh#UM6a_G_mlpdU%9dnx=6Xu}u?KbN>Z8VKp4N`Ul_r|FPZ`L&wFSznzPd9j!o zZmY_bH#(Cb<IVn$ zb3^Q(fKSULD?gB*rpv3w9DDKt15D%f!hbxIWe^`@1H$Kk)55t45Va>x~p=MyQzL!|7r zw`L=}Y3$`hx@f;Y4++og*kuR15)$mWVtEGoC@4rssPBiV^XxhGh-!JZZP;jwA#xFsaEuaIn|_yBcgdJBwuGs;K#A?-*8f39;_ zH2J&c>cW3G8h9DN*g=bJNmP*5u_&Df&^}cq?;(Wp;cVyHi7;+K2jwQm{TUuRNl`5+ zY9(BZ2(|$G@(1>q*O9{v+iGmLbU+f(sr1nuqiy5x0uCKE81JX)Q zDq!hlT}^C@zo(-ip2HHrNHaMt!nl*|m0+(KOMlZyKm`%!Y+p#kaSNnuM5^mlbrd4i z2NCL2iMwv;0wPU5oqR;wWGL(>?#{}QL|U(^;}Zob%PpC6iIC8oNj^GVl)`*?eR8^R z=yupOJ}rDmH$p64OtOdgJKzVjJHD3)jmmHO8Qu2KsRxV2Qu*0u;T-HRva4Ww@$t(> z9(ln_9FjNwoxNgr7}wBO&(T+G|K-ai^vzoOW;0!Xi~}?~J^9Jm6Q2+GLK3fVg zTnL|J*DofdoIL)k_KQ~x8DFpgJDeN%ek& zP$!Wlk0I`#mO6;Iz7R@xlcK$l#N@+7LOJ(Oc=ZO@+giixq2Z$4w82pn_zK-VM8Bdg zcNF7D4H*Sid|KQS$elOtIg-axq|4i{McN7zYoI}Zk!vM__H&(c6y&I1s%aWtVHg+!|EO!(G#U|o9fIg9YTbe`n@*Ia)*1n9WgjTgp9CDb>+qT&AS6IVrm0R|=pjYl5a}kBe3ZoM ziKUki@kxft4pMy_A;eXl<70gg3()$rfz%7t#RI#Iuc3swFiD{$FLMvH%S&c6)}~ac zfN=yI&UhPttDhQOoK;NREjSFBvNn}e;7yIh-HO9kvLol~dXsil#t562E+L)DTmkjq$_n@3D0ylHNQ zTDL%$TY)$IM8tcGiMxO4SlS$1Dle*;<5))57$L!rOY2;1@pl#o<&GS>r1In+pMZ_O z>nFn&9!b%f{SOY|OiHD-9%B@J)*$$<8UWv2&vHnv zd6GkNC2M*yF*NO>6<(KMMYUJKBsFn!q zuW%b)JJLEJ`%9@)U4?)zDs_gCxJtJPnhyA_em(2+IM3P6k>nTHk!?&9e;)Ai_d~kn{UmES=gU9VlZ}W*|c7J$JVBS?y z#u%SannzSmJ_8yVffk>lgODm!;T`%%@B~*i3P;v~Dx}Sz3K7;0IUhcel={V49zTA+ zqvU-LSgd=$;)5qVSZab0(SLMaEln8f7w;+dyMMvK|CkWETADwW*RPHFI=TH$ne;0A=xS1G=2F}0{OZBWg3d9J}a+8a89`L!Mp=i}OjV&E| z3u)XaDD6Opq{|Vg!Rr9y54m?KLh-Gl<){-{HM^qmSBYp_b$uQpVs<5cxLfgGqwz-v z$fjyF+e02FyL%CIWdbus(MAME`^5wIpU+Xo6sZ)?PilC^;cp>iy{4DLp`G+F*A}GG zq*+&bSU1U>bk+o|0fC@zI){`y2Nq5yTeBv_c)NVo9)y%%;L5@F#KIgz+`Uyxw>Y(y zikYKOauCdFmz_F=MU46}_aNO2t9i)<5R@*wComp_zh)w3oX!j`#2c)H+eU;Ntjeum z%d^wf6h8zPeZtQ89wHo#3qG;b4oOUK9}6vUdLJ`UsP{Uo7WrT|L!BL*&Vd=D;uU3( zC=CHW7>)iwwCD?zH&3c6FI~m)?T1OQ*W(|v$6wIl7iM|iO*ARKdGv&CgtXns!F=+O$ebX8y}3B_~8DNif}?z@z(DUUbW%`q(I?= z`}>v36RMg>_pt$Tc+4Em#}pHzZtIC5~i_n1&;*eDL@cIQS8K85g*g ze%Uno8lS+B9zrFp`={YZ%e3@XD6KO(Ytj&!Db8sr^ouu8N_4Q~1C0`W%Lh+-uyhVb zDbb&tS4)Ajkzf2vvESW~gP9y9MR%Uf@!g*=Qq%xJANp|UL!^C(rRPbrUhFQNEmX|y+i>cHr5*oczP7h4u#Q1A;hG}b7nLDP< zFa#g@ucz6k(rNZNIKDm3=J}An;Gkc)!Q&VHMCbX2iW0SM!8GB93SOK+=XnQjnvthu zs4&kKRaJc~iwPf7hVv|o2@Xz#Y0O?;!DcK|;rm&BQG$|wP6>A-B3ZiLXRPBQA|+9> z3`dx$Sq&@atqD1*p*&psY3d3|3ymP({T*X032E>+IgNUf1r44G#sm?cSei#f&q7-D zd7ZlcDt?$RsIM44-vA z3u8AFah31B6PT>q*rS3y=H96>h_$`86nS)HNc;4`VZ$e|#r-L$eQLbSz|l>jpLW3~ z`5)hzkTUhyugasRb3@&qdx%uS^3BBXDp1)AF%pw)n!+hyB5G7q#m7i&pDn?z$$bjU z?UMf_t>nQ-2r@VFHC~6k-s{NZ=r2;^b!5rUWN=9Z+FT|TQ2qtXjzFwrrm!RrB#FC5 zA(XU#6fzt-mDU8Q^9vA4{46!x>Pwc;x2Zasw^wN>ynWE8$KjJa?^_dsvt(%eExB|^ z+m2Lom(4#Lj1GzoSK{g+6N>+9`zhyViF4rH6-nHGR%x1UtA;WCDoTEnHo5hb^Zgkb zY!Bdb6q8^t7r31=S8KuI2h2Rg(@F3|LFE)8S-!g>84T?%2|M2;Q(ep&Vc%-1(C_ zWE6E{g8QAWHq!kQ5xU}APJyR&r)ovAgo_e^MGo8bz#{g0nf=2-6M~FLgYh?gApYdv zYa}3F8Z{F%Vmd^UGyYc$~ZW1 zeg-BBpey@QgwSyO&{Pf~N<)UHTqr|c%O@eP<&*SpVQ1_>rmIWX>uQf39`5Q8ev18Q zckL85(jrpEZ>smJs%lbW`1)uU!RN*n5d1(43cVpyyKq@+7q(kA!SC`Ge0_8Qp4hTvB0VOqZ=!V?yRbdG zft7D&^(REtD2wH)!VWS!(QQ-ocy?Y!63W;nm9*{Zq<=AMhqt~l7}Xj= zvB}@=Ga=9g8R5%IRw9I@fyhSbt$+y z1lu^qzvc~)lGPw%)n_}I?*ipA?}s-}wIEG;z68E8$|aXJkfr_1Uxy5HQU2lz4k`p0<;(n~F3W5N1Th!GJyotd}tCiyRoefPaNF zc@z=uu_oniak-<=E3TnXPm_r16&{8Ga4jXl9+1fXmK0g1Ya%O5ME2(ul$CD{T+LKd zQuY~>L4K*iDN{o9T-|cf<)BIFx-c(s#t}A*k1l72nKNEXB+ES&>=2X}exvGHw_#&3q9fv-HD~H`I2%KaYua{b)#nK{)OYcG=jk8wd zAmyHZCIuuGo>lI-M91#HA#I_URltl&vNVoP_0xLfKJ9q?)A-bDgC+W>z2_S~ol8I6 zsDGMgO0^B}+{ftkp|qj$xx)I6vi)bsv4JC&2@VisCu(Oyj9v0Aw$e2bj#mAJQS@*$ zkU>P-Sszi%HdcZwKTF3!#O!Q%+fsR$h}lK&=O7}EJDom+dQ#K~tc|;+@-iZt>u5V4 z1Ha+kvG_eAGXBH8qjCd|c;-*#s$L<&WQRPt7NPhvFd0R)2!Xk{{P4{%z+DH^5X6UN z^xeQ*4Ji;4X9(d)bq)tQgG-Ximq9Y`DeX`glOtABi9H-$@xHD*yZarTGzppoD@jl# zPl75jT6E?fjTY6f%;EkYbR0=IjQmV$vPetCnRGI7_#to=vXsKlz?}>th?~!5_gpf- z4qg6tLP%%tjkXGs?Qs~W7OkO}jTQzf&0&G}uLAC%PHGK9+GBS<}bzecu4{A<6QV7IIO3b~l5vFuvVT zKxg}yN*(|^bfK!o#Z>&l5O9P*oRB|hPH=XTFocDhZ%B&o9cHHJZ_5YhN2Fqb)y&rk zNviE7NhpIROjgx+Y>1wGEF-2>eo%`HTddrfY7eyJlA-(`gj2XZWU8vc?Ln^HZ9?(4 zQ_kkIgM7`cP1kBt{!=v#n6Bh5b`J1Emp{=W(-sG7_Bx6~nn~PwHpiwML}H4Ch}rHl z@(>Z%=Z~ViZ_JP@mq@-$m8i|6yNwhy6L31l3zgbL#YUnfR7M1&j2`Q7{6d~-UlR(xGJCVj_hD=1v$fOLj zKs>4b>DLco{|%eE)Jep$V&ZPcp>$ft-GSF&&6&_n#6=#0-#_+|hoTF6yW^K=N21vQ zS(Sk>-;*Q}gcfhoi+@I!uAK-w2t+jw_Is-Gi8RAQg8QSyy?gP$iBRUG9eIpr@YG4f z{Y~YaKGEYL(oBwTmzj34$zRau6X?r1lQ_~{dl^Eg%0k>7RilVd>STcm4Cr6Z_JRiN zVG}#AKJHHd3z3$WJM!bvq2ORX)=97|`;ORBu3a}T0yeF>-Gr32DG7%L%i~mzT+cMV z;;cMU)IxdANv(2hVA=ml3QArRyWO>w;mg&>NC8+G{cFfCc+)lI1aGLtk*jV?si9H%>U~+U1t(lXCGX_Fn-vSbt=B``^qbLd&w}jxGK@ z5wlE1!*x%aPWXhpEccm$TDAR(=K1K48*OR&r|R0 z|5(kTBq=kkgkrUyrz%P>sWx7Sf3<>{HGgO*2By-Zs*P?4@3LYUAEw$59a+gC`5Xq) z1K1$poJqgVyBk*4Ijtt7)b|DYj z`Mf2}j$wDI71rz(M)SI#@8^)bVu@yiha+VE%3h8IDv;$WXyW^CQq}Ev1&8Dr#!7^_ zNv~U}9m<6e(+Zfc7g#I%KS=d^X?lP)0KA-h$Nf<3mrqkw%r87(bZGIiVoz^Nbz`|t zE5?jv#<5~62Nj$1fN?WW`CNWvDTn0cRh)L|5stFRl(G_lHX>ZAiJScay)13xo#jyM zo2{ukMY*39TL{HOR_wsm)SXgGXP}Su)n(jA!;pRtqq9ShIXF*Vw;3TNlY%&%Rr}=! zLpAXExQjOWYJfw^+GMlg_HY4sbzz^X;!W29<^2;W zI)OK}k%A5)jlBd%W-cJ@hk>4|q~JIac9SAXdRpJ2q~{wFi(5$1E}&FC$07>iG7|eA z6A6BA60|7q`pVS;9vW6{(Fr16w~+D{Q&>mwmGm%-`U>j2c+>Q9AKp-hBQtN~HHyB6 zFW3b^&bi}6X!i-VAT1H$_%v5E{=)z(lKPcJ971VCvJ_1)OyTb-e!jjP2+*+E@c8?7 z6H@*%AjA#{9;u+jr;HLGaDZGySQLOdlHNjD)nz2Tlf1^PM^-{ee#;wKOn|B|F$0p^a;IR9Oni&(;mBuEZj08Wfpz~P3`lE92 zsrp)H=xe>9uUG$D8x(a?D$3dpq zxb)H2a*$871YgTRywD03Ni9ISX_-zAAzmEaLc(oI~>^H(0{sty`7y0e``+zPU;0Pd2ZG$K8*E{l;g!eZ*1d}8*OZ{#38CR_YPwSMVx zl?3;hAalaI!2ZO|yfni~+(&WnDHh5wj~AMSSbH3AJ%}pZS4m?>gwlNC-=Ssk3|=^c zZ@5B}0@%x7ot+5qr%(L*`Ya0ao`5~rW2!W((fISc+USbLpY&1bNANl(_`sg<`Y6t% z^k^dZCruDyOpO6cl?7Y%I*O@CzR(BJW8OB*2LOE)1-eq1h9h=f*e1kE+7FlDtp`x$ z@2{3dpXQewXHc*=P_X=BmS1!@{KB=!FWhSNiGU_PSZntQPcXP&p>X@%pC{pdmcjiu zpHL2P7gD%AI^4(42e=CpaF^39X9V7(0blNL#@|Q+FMDQcs?;^34Ewy0?(<)6)mXJb z&WFZ5xvoW*B|~XUM5-V{BS-)-c^KtZAxLQZK_b1wmP3FtbjuwJ3D@IliVr6evHFB4 zeN{%>y*PLehfrt_4$p<#eh*g?LhQo)avU*RL(!^XL@FtcH?TA;IFc8t!=Z8dB?AP` zsqs2;K@skgMvtL`F7=1^RILaN^NBC$Qy`3X@VW%)6CX{^!J}*rUeMhQPY-CC(K}c+3Ss|f`F@vL-L)hxi+IMu7iGk@n&X=Yj(&B z=MNbd(ZhIjF$)+$`Gq^6rTa2d0c#2j4cJD;)SUiNs>$y9fRV-9dJhyk_cKE=@PxQW zE5=M;{(29G-Y2s79J>?T& za@%X;>59CG#AFLw7{Oj^)!CFWV~VO~QWOJc{CZ9$?$)Yb43eZoRJIN2(X9p4ls6qQ z86p$7qRJI2+=2b_y)EU+N~!=x>bg1;f@}`k8AQPzYt>mq*Z5dnZE=hvV}b`eYsQdZ zt(mAz#9h1i2zXIKGy-|F9@7}ifbDvPp$7IvhQU+pe zRhkg;3$b`UFKqJ(F~9IF-+qXx%Z~XAe)gvy@k!=%+HSDNv!r7hCE8tP2%8-%dCv`T zz$1Hj;S;a0i>I4!K}mNfjYft8JPq$_q_!seh2A zIhaJ$TDT16-M`@QGjNntT1o6j6A2%~p(=MqwdAO)jhAjrBksDY5jesH_iazFt;sYVC@nA%d7%;|77Q&d8yQ-~3|AbV&5U%@dx{TE(Z%<;lb z@OkZ2DpggTA$ik#e8SGS43JNPb#v4&e3w{?s=wf*KmEuIX>z(xdZ330JN?49M5y%( zKl_B9_}fHi^b6nlg(LBOKH(S-cv3D_RW;a?hQm~bV#~wC$G%JBgF8Gpa&hpxe|yu9 zdFbRWRY~wf+EV*wPzVU!(_F`trao0AF*(gA-QExJA&AiJ6Mj^DVAb%G5~APfn*16v z4>tG&nHRpGhtDyeaM&j;RC&DN7h+Qzt1SbcL0OXMpb<5vDp4H$@4xho&W#rkjD=kk8`=YV%A$%*W%% z@U5dLC8cM@m^}p@=`A(GljU$^Sa6>y*l5R*-1ja7ic8BKEBL9qy`a5)AN|o*(2~B( zSjq60WN~&I&OXSl{K#C!5sh`o*WEZ|a7vH-?9IS?bnh}$28X4O??_>SG|%%l@8FQ! zJ)cAJftv>_QO~DU$3VaGnU}-k4EFf^Jrh#C=}iq+mU>=X&GHKlP;qGSKD%S%L8p-k zdQUB=rtSdkuEn9Fn)^@ajx-}n<8=T}qgj0wLu?}=bP&pNfEXuq)3wG6yXdhT-h)^F zgF|Qmtw*WW2@bDb&4B~@q-vsW`_P0Cis$jdZc@FC!cbE_*~!P0;Y6+X3EN2Z3HoyJ zX(ZTRxOlg+3mCHgLL6-1SXm;?<4EvCAr8I;&5m`hBx+rJ3|*3^7p?OAu+= z$yDghO4IN7z~~SA^1lZ#)_E^9kH?c?YWo)DQ z9EGy)CfF4lM;La+d9?q^g+?La@mrzT*;`UCMSNPZWl-$yTR9{Pf8>xHVC{10sqMaT zttKRVfl_@<*TE-w?q(BG9y>W?d@;lg<dk5YAmOGZix@c)G{eEt0e99gb)c|bhz4BG z(xz}^^oW(m|4}sxEaF(?+=O4UWSMKc8i3e6p*etye@%tQ%j|(KW%IYmgp`B*y1kd- z{%~MGSaCTepe?Q@UTCCZcdQ4@PG(UeQI+AXN#kR(m8iAxLoAas=Bpb!VLzw&q}eKD zcy8olikT1Y$9#1YFcA&4lz*9ClaU3rgSGwfm%KQF{X#Pz+`odT4JCN%f#G=7ALxnM zUAqE^;A4ng^VnS~FZ9A8yF-ESDHN7Vv<)ShA(UA6ZW7!-oN%r2k=_~;g_{9dN5V}@ zf6#6@HE$+_%NPQqz1ox zTjgzD962Y!llIO0#=Hwa~)`Gt>DQT8XbBs2~Ag?)VNh?x%_!hH31hO3!nOgR=)jUg4y5ePd~~g>Co`SJ6uhM zibn@j++nP!`U_6@)AuGT`tgRNOt$D^q?yCv_d!WFTlEQwU#N>`@v(i@X*hDGKYbq` z{KU$u&3^Z%ixt27Q@lFNA>=Rmloy(Pf|9tqKjbgi#|L{k9R8N#E!e~1a63Y13l%|l zFz#1Xm5b+lYfk55aVsB;_7Js}r<~{!f6)$~(B!B5;y&KJW3i7HntVblohY4q{lQ-# z`_t?Ez`dT}0`>9nexZX89>je0Ha3r^^RdHbJ{Ubo)MmfX&IfzUm3!hZ`oqVTTG0N&55%;cbTfb`=}ubU~ET_A1k;)SCyd!H%&lnWGE;@|s(qsn!vs$MNQ()r*? z_tHCjLK79xw!xyaoTx_ z@1c7%;qd1x=C@Ypp)vFr?1)OS4RT>~I3 ztSyPB!sr11H(2!t4gPTHyZq8vI_#N}FH2?PPK#d-;|?Ccur79|j@_R^%#7Mr=K<(hcHaM z@Ts!pgsRHl{%&afo)(YRXtE_)8XwTi%Exa2HCW5PwcnpPP*N#tCz9>C2Ut1@`SG{e zVQqIc#WO?nAirfY{WPbskfF(8jOyIpu>I~KFJ?m2#@REI+Z=k;PvE+#=$-CQi`MduLD*N5^cl^i8Sug zNnn~1_?pdJY~L^pT~@A&#C%sTDcSl;N&0sHoqCWJ(rB<4VfOQj5?&NIMuCa&4(6^fN*Qc1tNzA9U~NA1KLE6cR7 ztT=ophY4y*lqZUHF@ajWGTArmC`lmn^~yj%1%k z;cE+6Ls1-pxOHMlK4|o*ZN$A3hn}V%Z;8ScXD7k2%bj>rNd+{FH`Fptm~xbs8*}pzEnvqH%ZmS@xT;zx zTAuC9Md4`GmGvdJa6~L&)~CUJQC)zr%5|D}P^jf5a}qdxNPCyh=JVK&eWA7S30`p2tZ z(~AxsMo=~mey(ahu7*fNRr$#l7QL#f$q=;S4R+<(lW^(ebVZen zK2??9GMkXHup26qR+ z>ln?x=~D@ba{CVI7?X%ypJA4_M6Ui8JWxl|ZP~qxeGqxN9~+63-9C!#L&(lkNdGEv z#;fHwCu(QHn?|!)xK6B|1_+w*stGCIo+94v9o$g(apDNMCDeq&E)Jo3&#fGe_#DNd zroh=mBz9n)PeNq$d8>2K8d6s8b$ABYr6*Cm{AIRK-E>bpNGn;2R zyj5s6o_Kpf9W(AyGn{y*5ougjRyM+$GOmK@foKLye^W;f2j%#HbQG)S}Zh$)Q-)lBbK!t8WI?W#JYqrc`% z;N7onwN%PK1l8Jg9^mTex$t=KB@nQZt&}ZVAB$3H73VlADDNqjJLU`Jj?rSku}}y&^2FtiJB8(rv2sIqKOi$- zqqK7zrIgf;CJ>&3WuY==vSVSAV1!98(|7u{n6ja0;BGcG;b>rn0Uo`m=yg=kNff<~ z`N2jzC2gYDv5@l2qStY!;B}0ZCl3G#g5eUQf0Wj#)YGrVpCP)V6U!(rzw)99DQz&t zDag^I8zu7eku6jJJ5yWU_ASh8!RN@6-#In_DRdV=nC4)wEii)wdru1t6-7}Nc~G?O zF_$I(K|X{}9$S~q^d*cK-< z{%7|wiFith^n)Qw!U%al(8ZMXv+xxDB|?n6rmEu+4uOOu)RMCi+6RV89&o?zu4kW5 z0Nt1~N+s0?phP$t7)7MF5z0rv7=p)6I9l~*h-yuj)nyQWG5e|Sa}iOS!9N}1{Ds?b z_yb)PPiY7xwq`o!H65k_VVpP{ot1f(CSO&Z$j~h2GWzk0Y*}} zw!NNeuGc3-2QhHivJ^( z{!L`-cToP9El7*MN8F8C)ci!>Y+gCU3JtaOpE$0j&_fS#w*)58GYmF;nZD_@=rYD; z<=&tA)%b1_ZmRlh;D>!bF^W=Jp8yBU zQoJoT95<(GeW-c+rbivrdWL4ot({qVKhtPGo&lFWX+InGt&{GXhcD6iuNxw%YLx(d zlApZ-=ysAG11q&`=C0+p|8SugKM`*!s08-V&^S!n@x#z55Xttz-q8q0#*QJ< zMQI0fQO(#KB3;grV2|hi-_b*E^QSr;>{bZZOk&5=AfZn0Wh@@wqeSQ+McYX5gk|yD z3OE~!w&!Wz;w&o>vLA;(v!4TK=o{N#;f-x=UJepx*-7yDtvFbV5CS{6P8^$SC(`Ig ziL|^mPaHRMe=cMyg|u4`%uy(BW#BB>@|Tq3MzWOa0KT{$ z)Ms<{()kPcal|r%{rUTP%kTH*B2;fF-V1r-EQPr_dLVw=Sg4=jkWEji$%t5nh)b?$ zyxkRzeU$;>e~mGglI1C_QMr0On}Lc1 zM^&cmOhZU4cT5oWu9<5mLZk3g@?&@pUj2tOgjBk{ZpFdAG=zk5#{?oxei||@`$TVN zAs>v|eS+8F^toer)iFrU>+5v-DL?+U7Q-6O1!ifS24AP)$gJFw;DPZaE02%H;Wbce zPG@mRD9tO5+x2xWnikf*7=$dZnEeSIg!C7yPb}}upB8Sz;d9~J4OWO>OJ6)eab$UC z4@ITu>&(-zr_DN*ue|hh_Ja5_?FkdAw}kiP>KZTby^xm2^2F@9&{ugZpGbjNak#B2 zpEP)5d78~aEMNZvvc)MM_N%HZDo@@@_v$yUsC+K`)$NMP`CCm$c@8Y&mOB;^F%1@- zPbhcTeRNB-tW#Cda`>xU;94Q+QeHS(HBmds?L;8flnJAAmB@$egqV-a`9o-tH*TRF z_t4*qs6-$%%Fn^8miQK4sPzfE!0cn%JK zg%I+JwyVF&g?Y)J7H+Dt`h+ayX}w~MR=f-*2(yRL zo^HrJR<{y|ra?DZV09fVh98ePSi+n(9Qtb-D;hjFe&vZ#IQ*Igfj4Chgqy!%(t_?f zv=WDRn&GE&0bFqx&|i_oqdmv!IUJgvhR}xua4hIJQw4>Qhyy-aC1$P@?;x#8JnJGF>q)m`u zqu zi)d}?b0mZuEm|Y5>T_K9hzUZK!a}P4cprpPr_@I|06Lw@+~9ZPJuCZj0=Iis_K&W* zk%*NZu)=*?v!G+}c@t5O$2#OniK&AML!gb-m&jvU!WlLx%AcVD<~^%C%~TD_U*S2{ zAwTRgB`!Cr+)3L&;!Ffe5pQr3_ih}%3F@>A>R_Y>;W~Y=Qw(he-c0m8o(sUxuT1MP0iwO}QVJo?IX$BD=VTP+Mi=9M#WS!ytdhLB45g&P8 zd;bg(A9u`=l1{uyH7eAGjJXM)+2+H(*6M%fCXLGtI z*K-pMcFT*%fTa2fXz!h9%;;@^mi)KS9(s5%v_7VK^T-cAnT8T)2T2A2n=~N-X7~C3 z1(BluuW;nKj@L(A#N;&nh)?==7d#BzG<|i#el&UZi#*-r6&yk#j;O2F!`W^tz8i#3H$3PN+>MpcxXw#DbY9X?$aF)x zk*2$)@=F%K#zta_jTAK!(Uy4!#6?WI0|F@GU<|5c)B#bF;K$rNBJ3sZuK%(daSNkY z$17WKf$6H{qE5lZvL(n2EU6?F*oN#8nIlqBE49)O=O(~>knfVtDv_QdMTkN=DL^y%c+ zV^FQg*4K1(isomT-%wHrMTACWK9%(AouEVd`=QiL^@E#3a-j>p#$QflV{bYKP+s_; z2`PW=PvKty-&+yj+aO~%SZ-gK1FG6CY`5I{)=1QaGc9NTLWLH~j!#EZ=5_fUT5R8F z7q;7OhcfdZqOkPVNVEV?Y+T~%B6vcS2$s`+$wl%43e843x8QLGieSO=@u(a_Q0FdO z9%Ge24~!66NzxnR?-LKU~NwCLMH41OaTu^=d&kL&3ab#B7%Hs?9YCEKJUnnpo> zb(10DQgYdC?Cw|VEr*YQ0G)v9#2OP)mZ+z&x0o<^e@d3T>oohsKd+_&?ycK%k>GVq zpo=-&biV}@!jw@EY%{j!B63SBi55=R z)^a9L z&PtoBu0_ZW{OxceWdDKIvRu=g3&3jO#5-Rbsf81_Xa5X;m$g#JYMGxp1Tk;H_5)pb zUTYUFZ>Qs$%Er-wSAWVO`q%y?!@*Umq?m}wT3xujS+pE%qW!gX!3&CqOum$e7TE&l zv|`CYu03%(5hw2o4a1qMNftsxtt0OC<#AYQ-*8~hvYkrsD@LSTf^=cK$I}HqXhgJ) z?PLZAP9kRK;~YIW)wub)bMQ}QBJaU z|Mkj9q-6D}s(eOJGeKkfQM5!F==9!i+5G%!IuhHAA7K%{0it0mUh^E#@o`h=>+qiC zfn->FyX~P@U4OwClW^OL^T0_$Kg;w8 z``F$JwQ=TEo-RDEwhL!oLF$Om8vlZFd3s#^y;{9`dIkceCgHZ_XKQb3DOe3JGq4!C zM9YdFauJI~E3_~~$t1ltS)(i(ZycIFg@)3HM4nZRz>^B|C0vUh(1q^%ZTzlXls)rIE)Ik^kkDeIslsN@Kc z&iNFy@&jGie$n+WjYQafq6^R4>&5nH7cQ^$VtZp3o?GX|_RqU;`96A96+_3p@KEA-{uK3*qDE9W< zhGGya@7W8qZMu+c(`SpI;0=Qc1}-pOl>Uvicio_3e!aa#tUW(#4-YEnxWIU$I-Rw5 z+Mr^66Sem8SbKeiQ1IisQVV|03R?d2BApw%k5(v)!CxLoU%}W@%3rX)8U{7-h~8Hj z>+2EL*NcM+F4X!eguZCe1+3`BgNj}{(HLa#&#deEdkn=WZzkvHU01O7a#(v$E-@4w z0sQ~@T0z1J{%{Ty++JxYm=5!=7c6B3KR$;;vie&N$%h>V${b3>&09vQKVHeQP1iI2 z`$v-AnOt^dhm@6ljJOuQFcK+S!PGa&sy8Nga#@>l{@|}VEhuYJ;wPXX%SSRWeM0~t z&%fVtOKL5fW=+5 z+|}uL+N;ZO;@N{IhYX}LB7Rw8B*cYBrD z)fWGW)+9hz^*;qh94@T@0mAmC&95<#b6xQ zhSyp+#IBt~ZGqcJ!^(;*#*PqiB@9B)g4Pmr68j91is-zTO-?RWvj8&!Gw^;UWFtP0K=UHB>gY)wN@a=ID@sZN31ancF z+-LMW_BslI{iMw-9Yq?dDeMfwMrEqXoD7PQw)+f0 z-}+URWpP`Z_-j=^WUrf%c;OkkI*}~1zc3K9-%*^b0sXgJdans7V&AFl_wefVO#V0I zFOf&QrD0CA{kb+5Y$=NxNjSO!Q^^iQVV0&OMcpS*+CW$2lMAz0wrLY!ni8&g&jJTv z`F(9}LK;ibzj@6I@We*^M6?Dp40`+Wx@9J$T&4aR{KE$MM**K@_c;iiL%jN$G{#rq zOk4HATqN4Qe?J$6oABC+u)Az)59Y!?Sc}pU%vCET+D|_NoX_qqJQuj1_GdKCd-Z!9 z6A-r%G5hQHMk8_Djo0O%@E#nR&p|4294ystcj$J=f=mDG)1dd;wchh#Q;i!*d%vZL z;0@a-*&irW?gyb#$`}P9EDypega}klB3v|KdoIEe+YeiF=q819*P;!x*26XM>yvA9 zP`D|O)rB)HcU_lburR0l|3EIH^J;-B!b?#;@ZgX{Ps~0CN{<7*MNvBm?^!W|Hd1(9 z4vKHl`FrEep4vh0-@b|p-1$bif5-YYhEBE%PDz>-Af1>~W*u_{{rWUizYfkXBw&VMl zq?}L0?7jOKkDEutafj7x7A;@ibp|joBUc#qJ%p529Y!X$;7lm?b!DnZy31i?vW^!( zv77#ECI3(Z9M*YR=R9(Q6OmTj5z=V{qQ#qg%da=OrU-{1xXUG^YIFq=jxml{tp(||oV++j{heso4M`H@{ueiR?3TKay;rsv$FyTDv*q-a^RnH~7w zm=JPBL(u@1AHNeZA{^{dtF{x#vbj&o(-$9+Mr+SW)Sjf(?o4B~acH~7H~^m)ekTnf z&??tho&dIqc{)^$7H#)!%|#F`;Xb_#Tac2?6&cO6iOX4c;RuswiO!P%6X;AsNPc}R z&vX=g8u-wy^t?>ph z;g%mxW+S=g73~CK_YoGS1~&cM*9XY^s;$C(Ct|#wMki> zk!H|k%WJl$A^mDj9*$84Cci_8+dy?VB)Eh*&6O8+ssHVTEmH!=@G`2 zhc}|c>Bb;Fk98m7mdX2i6<%Bx1O)VKX7DQUL8OG$HJxGSpsa1xs0s?H#yZQY*#kGVIG zj-tu}#$R`*pjnz~mL`!!f>UZDsELBo3eu4VU!Z{i841W}l*NqOAn70~U_y68%Ayb) z9C01T(Q!jX(SV4OCYTMCBseTV*+;5rmjKF6>UZ9~uevLpz|8lZ?~fnnkm{aG?4&WfuLOgj2IT#2M8j-sj>Pv=XE_1U=aYG{7DSp=5r>1 z_o2MFuF(YW59c_*BNa#QIKY+X0ARHd0q%zY%i9s=>&!5}1X-s^p3ItPlL7d~Gl_uv z&l!L}aPI#oxEtRD4UgDJWWm`>Jk2Lt7pz1P+-vz}=xSw{=7G};ujHO~ z5qGs1x&ZiE`1BOSrx!zAAkTG>XCUSYoUrhXz%a(wv0F9}%BzlN*ChjyZed&em37Gm zxyZhYWkS)%uoFwPbPD#d<+LloDSlNkJIw^39;dHmIAVPhAwW_F z5wItwu^yE+VKBVEtN{!tLW$BAzo1rdi=vLl9_!4}>P9D@KJ-CSuU5R3BUT@Ips_l%819>;5?*NjT_c2+ZI zRUYZoY^-4mLp{SEvXRIW7qJ&mgAzEe29?E(P9WE<20DJV1l+WWPw3SvYgn%;g*(?I z69QO^s*dGr5PO%d;R|+4#~7+k!DSSDGyci)G29uS-2uly;G~Oa%U+A0eDore36+;h z^DKk}39TxL&6lwDBQ{^3p(5l)X_Wg5(ICiav2ZRmpzmIgpK|29O(Rt7#7*_UAaZOv3OhOG}=zTjRG#LrPKR-ad)uES9bBgY1jkcLqEL|B*fZ zTuy3Vyp>w2sp{~4iLCe%hG*XTj=dbCOESbV;g)aV>T>`qp$;Ah`TA6fWkP?Jp!V$r zWJZq)stD~_qD>&shH&N!#zF~|Cm1NM?d&nYwS_&z59=sKIO?0r7OAc8NPLWgB|CT> z^;s& zOI6rrBrPk@b#3?O@Ua(Wh0t*BO%(~7edOeuX)O*SvH~wQ$ED2ifh`TFyphO zD9ot&noDEhmb?lTSpnwBHDcGLpvS5W?83H+@Gyg5fB<74hw1vVKR@)L@WsuGk<0In zJf6yRVGZskh43iO#*b7Rt8$8qt-ldpC&yK6V}1hBd!PD=lmY90kP!?dmxol)8$EH$ui*e{72P4{vPq_#a5wq{&$-;#d5WRB z%l6&0p2)?uDmJ301@{pf&G_xZLp>n>)=7x~b?<2*+Bk5|E{MlmFaf(_69CG}pm44@ z&NR6Io9)8a zbRLL=;Q*DrQjYdUCm6@@1k*SIVZOD8g=pu>zks9-jGnGMHo#{6=%mQrD!Yva>;!$v*V>^XGwPp(Khoea2KqX z)4*v#RF^;=Ll1oE78DFJAQ=gtra3yoAYYf0I4y%%m4E4IA!x51IBoMc0M89`v!eqP zJ25`7*oAHuq75-a!bT)g$q1Y2!oHtfah-6*VgCh}KB5qp1zuP35Tbq0LgttGUDMzb z@QU%Hv^%l=QF)2iXbZZT(1f8Iu}Xy8h2suT&F}IeJ zc$0Xdt0nF(*~r}mbKgHT@t*K2p8GWez5RwcKN^<^#Yfw%`T#WvGNE>Ch z5UswWg=ibuuXT1P{L>pfu(JElTg;R;k{SOqN5#p{k}ZrHtAH6L=T;KwaSEvB=?^)Grn02_Pr`>+a~wpQ&pzz_9T@tV zZzYpR?(Z>%{-)m{pT5l0GB|xmZYD(Rr0vhQk;r?$T}od60cowjDij}Z@#s~G<01I% zlhQI9qBg2;rtZxP=1`?ieb7dgwRj13vgk+dEn%AEj4AX9nO`~he%$#C4AJtVt~j6| z7rA>T^x(0hE+C(U2ad+YPjNJ!5?ySvKkvwTHCS(Df3A9^)5t7ns04zV@2hd!srZa% z2TLwxLI$l`#Hh&)!O8|KzfF$9lR;%`+~nkTJ5_}{Bb;EmHXjD;+X_DA27a|u z)iq#-gZl`q@=7UARQ*c@)jv>e)>2dA8#aE2sV;|yGEK?>OPCw2=3!DE&Ct|6kZK@XNDCqdv(4TIjrSWkr5B9&64H z+=;9ATgc&CIZyApCh@~RjsS>Oye2gMH&2~_D+YNl-(mxXt@i!x0gq>Ehg>Afw%yO;#DI1A&M}gt= zKRJl@A^Y&zd0m&i(jYlk8cG$o(FOKeTVX}*5+xCxt?z`?5PEGpif3J?yG+^OMq@=M z2$VJma(#j*f7jH+Tn}Qdp^$4CJ00FhvJh=0HlF*qDL?3>Z#~U$shlefk^Rz8?I#Q5 z+h)EdaRL2{^`d^!P1yR>R;~Zs(bT$=wLXBg-VyMj|KAUPS--`!@6$&in)Tr)NfkXzszkCliRb@i%^zkVa);*3{vSu_z2)5c$jBm?0BW%I}FUyRfk<5ky-Lr zwu?*Kw~7W?ikH_xLe-MlhLVC<=5QQ#ff9t*Vj?*Kx=A+@)3w*{vsg2|c~3hdfT;$+ z%R$xVABQ*)yTCI0z#$j0P(^s6k@e2;WTT73&b-6=wV>$Hjw)+W(c`3l zG*#w0*(o@TDr-@}1Kth4jKOx${Mu5?FNXF2hI*;E8^5XAN(hNQpLsG`|0M_qYqhI3 z0KmT<1i`?(Ex=G8z_+RRcH`?Hrpn!dQqh+|@@MkpqfPwMN}|6~Rj5D6505odbv@FZ zox5dhw;ydbIVu8LO1y!f@;6n5mk#nXdD%f17qQGf=pwA1(^pwYWK^@RR|@kFx`-t* zfYHDouOlR~8h3k@*;g#MLJ9uP7xFlB()BFq&qh+Zc}s(#)i@(5Vs<$)geBbwN!t0z zHWF!n;bQvgK}+lP|M<%&DH;n0gV6CRt^|MYow^6=k6&PXYnvqg?|`Hr~e4{yT`?@ z!pxiCc7Cyuv|uvcNj|*WMYP#I62EkeYAYTlq%uh&+K@*GxX-Z%%Zq-|UVN7j&GjB> zsf5yFH=lInk3c)J_h5NZFRBV>cJUOIL>f!JR}@xaG9*x)L}at@TShGy*bZD zqKCEH{%9l7)t4BLKUrFhhvHh!s$rzfU|hj@jeJ7?J_*Jrr_n{CHY!)sP`MvnWUBL= ziYt|Y*HF}vu`;ap(eE?MwcZSp?TW+p66&gai%Z(x7?akWF_zN)T-e;P_l!x5#E4F& zaw82j_-~@h)HJHjN%Jbgr!OXxks*eVs%{73GulYyvs6BnEthAOYyW!8MtpKPm3Kxr zE3VQP0j}$4RWSUvK_4T>z95aN4vnoxWn~xz)*Im&Rl#SPHtjL=AhC_ALcRgm&AGU+ zaTcjM?6%!5#&})-n2kiPfkVcs*G0k%ZGAq;M!?N(o8y0wTwFf^V;RO|^;#IvMekK` zo)(Rz3QwoX3OLQIK@zl3^=UlMeC#}P4g0~xh`k3|L>|$W3^bo*>G`bQ6W_Z~2au|+ zbKe7{+EEYd)$VG4FKW2-jtSaLF1;JR=c96LlCDR;i?sw8zwbaoqARtsi8d0kuyx*Y zeLvFD)~*E=s;qDVo19vBEmb;DceUA>4ON9dn%zsKvc`&kQ+I188 zEmCYhwA7dNF(f_#Zc8($yo07UvY$?>%$L%l?WnxdCvTRG zKDG0++4To}>D#FL+roJ?P?g~+9eN{G7wSHDRgsgrw-w%1>AhUPjs_~5qid+#9DR?v zcP#jr<-dihcVv_%-H5ztdK06yPwk@N)5B^1CTiJ*s*&l(z{Z?0Ff^`jTDAka_aQ#s zhDV$0?IBCs{?mpP|7{f!13TH|)@$^$q5HC z9`{alhz$T$vlx9pqi`RMg}aHnMKgFwCylv2)D|=wrSC3wkjz{3Ss(40ttg)?&!r)A$MjE^-=!bZJ6!+8_Q6 zbFp!}jYJ;1sJ&aIwJm?|IcR(fQ{0QnJ2LfXXP;uD@=hu@`s4~4+T$NXl}RboU0Wzn zxiNZRu1M8McFaNLbJ04gOiHD46?Jbe>_X*T@VSD@r=xqs#e-R^kbM`Gw?_~037HQT zl^Z5CT$vJ6Mrm0*mOP#noWlL1xVqWmf?7vf) zkf!9Nxf|#D(24cLRIrG4Hx}iC6Eyc`e_v4P+FUe<&#uAh?Mosg`ccBi7X?D1FH^Ix z_I75L5n|7|qJU~ZJ4?>b9}HuoeU z+P%LS#T8E~*A}Fyuq?H&PC#W}o0a%3W0n1MKE`DwN!qLDA={=YiJ*OT-rVMqGlXbX z*5=Px?_9HozbjY)>8L?On=RhJZ(j#U(i(g=66t&4()u5lSrYB5`R->Eot;XRoD_%- zy@R0{fv4HoJP-GG=jQ1Ce#*o&B|FVsTj=7e!!SeMYa=9DlkoA3m5}HsMqz=5YNBh6 z)ia$hk)jE-D$Cy1%BHI0?eSm^t2nle?@8zY$Exw5`5GP%p7dTHkDmTy0lvqNs4Acn zqaPqR{OvWW3L~B~4IxA_tJGi!pBZB#k=o`<_&59~Y16+ukF1@+y7Wh?Oi5)J;vT9z znnK+>3I(ckh#rQ;N|i_LjHm2Em4zwPy>pI0I|C z1bXt-Xd8)mbPz0=&ilC+oqLEx)(ZmVx+@u}_hbq?E(NOejz;FTqsm?O=mEfIm4%%s z!-as%zGX=x?9nDF?}|oa-o3TZ1>NNQRlA9S^JpvjLtI=#+V(FTDi?z<665X%4qQMI z3?)M}xZqQ`fw;pBJQya}(dTq79?*7-tqw>csO#MIr!ApS2jlGV#Lgayn>?pg8E_=d zy$qWjiF2piE(2lI_ubR24eR zPLxP}{vTLCL24tB;s4dY_-hyI59J+7G5UkBj&oAkg8iCj=N-GlN#zt%zy5FgvZpYS z>iqRE^kw}WHUc5M!M=9tQZ5iHVYqO*Fm5R@h%eQ<@KRNHp&nFTKdyIytoL2yBTsBW z;ZiUQq&=*EX8F+#ROwSkm9=R2xfY3$zT@g$gqBq5x{c8AFWsnn@4{_V9(;4Xi$p7_ zBD`u;3f2Z}5qRvTix^gEJyq7O!b(x{-Ph7~rAO;nrDBrI|IE<&oaHuEUQnz{E!A%fW~+Vl-iW z$=1aCD@6!za}mX{X&WdTF8T#|)uH38z}a?1e~dDGyU=Lm(~-K#`E%A2EPD zrGBZKHYN)F&A-94*g-*K&TnSQLqekH`9Y>^;3{|w&xXbb3ywp!fkRB$z~YmYSG-aW z8P!5Y9)o<<9#cNB9yosjWmVlvlO*k#pCQ+`wOEc%KrE)F^59whsspf*$Jc^UFfUysh{bv)@^<<{0EcjBHdIEBxRmB3# zb$U{wglo_VLbSgiJnipEyd?P7erW$MBWxrx^-}(ihok?Dd2GGTX6tn}RRqsBE}~K^ zRb01y<06(isR8{q;ypj+qI-P^=P8?A%{%B}7*;*t*u zA?_+M@D}da>E#@CK+plj$xsId;P4`6l#{t9I*T2C9;zfYQe_RpNj{|*-QN|jvJk^G zaFCRp-sF>c2wt?U_ev@0+khp}9_JSa9;)VnN_$2u3Iqq2x+~^C$F{?48rU+gBC|ZR zAu?Onb#=7WeOg??FsOT*7*^kUin>t65vp|&D&r^B zv8kU8;04FR`R2t?KvfUg#!373pryU9vOBzi&D)jOIIU;cxT zNaF=v*Oad~BU3*vkty>00K2S%hxNMcc)~pXirEJd`nL|#@cwRGC#;W?Dt>7Qwd|no z6NRH`_&{f>2Cal75u^<*_0-)o_ZphM7gdw|hH8=#b|6K|?MF;vwl7)PXoE@He#Y?s zDgFw^!A|g*RIr6h?6wVqwUxgG^)Z}^<4+-!(rzaprM-PiOiFvBQRtT828Y0QKPu3K zsazZFhZ0McXVmRh!ad(ELLZ<$$Y1n5(#5K9xPn(VW|$#mP{I8WFj_kx72Xx0CJ3?D zuHtNo@EJ=~h1ZQ5-nmV05oB=KstQ94{_4Fp65ZY+v9JO}wZVIBB*ONV*6TJKiF|dD zcmw_L{4ZeRm(Rv8Un~<+s&TsL?X?)t`z1e^QAO*b5YNTO~;AOr-3a671}>G!)ff725MyoVT}&EHj&!+Aqt1@ zKxl(R2+_74hA&8^{Gt(}b@&e<+HY7xvYB)MM$>I=7;s5auv`p&zym{x#sxQ51S@&o zN}|7Nw`|3g>50CIS3=o;!YiStk+VPhx0qYaX_6C-_xtF&Zg}74wcQA{8RKUR-rmUP z&1Op8RA7rHk52hpkgT@Arwq@w3Y5jTctPh;jJhrXj4<83(tbjyrLjBFryI=341+D_|?ZWnWHZ_+{vHeG`uB zbbS;?oi2u>i>{@L%NgePsQ-X<%jhGe?-G`)Q4B1O>vQ?<(n1f}IDpVu@VgRZ+?s?m zMS4B8m4ZJu86PEQO1l%XFqx{Z7mAa4q{OOX+AVP=6_>mK_DcsU%WU?e&r)T+b0tZ; z{s%y!-Nu?QB`7c5`J;(bdi)UNdS!4TmzIIKB*--hb8Q%v$SHOF5p2=Ec_NuGZtkUh zglMDKpG<81*rY`6sbD)C6h0|co+e3}{5|9wYF0RgC^Ks?ASH69+wnj+H7F6vr~hMu z^8JH^Xw`cO(bi(E|L`VKl}8)kl$bu$N+P$NPbAn{%10k+rJL~6CQjx2VGz)2hmH5? z7?JI}O)i2;fI`hCpo?nbUpC>Fw~aDS4L09fYpH{6B=Y1X{cTLLw33giLY`6IGdJqG zB9uIi2I=+|9)%Q#dlT>jw{UhVR0~_C?-dL_l-~+H5x`^s8E&Kcc7jiXT^kG|w!mJWgln?uYo+En3Lo=jCC z1(u>WA=t<@>@5|pvCDpePeV)*5UIR_svDry_Rtw@Rz4mX0LW6f!Dzk%Z{8d}@y#1; zB(l7my?=plyA>c?8TAM%3!!px8EA4SD*!QC>S(BZ!Rs75 z8kI7b;l`p0-myJbI)hPt5oZ{pBtOmlj*4Hn!0%|^c3-$iW(`$czi)JrpcT|kg~&#n zZ4V9AEbJfmd^<&`deT7Fsw40ux3s0I@Zm;28jEjeamcE|n;T=B?e8@L?+&GRjl&(Io+6PBay+a`3E&9HKBcJinw?Ns*IyK$!auQRQXd0g5thd zR=NdUFonKij0F(w;)VmA#lXWhu9P(%#ZL0uHt zX~8pgA++L{@;T}__QG5_RL#kO4O$PgFkhN2PA+E)u!$|eCT-ZA>}-0NP0*`dZD2tH zldJ+Oz-=g%rQAG|Tai{JNkBAIaaDY3M5cuWh|87x0Dg+9yhezU)72|^w2|Q09R~(C zX*`QPR+o19^YLtz#aqB_m%@j&WD6T@HrceWhaqZe!I>BqrHtP`EXHRda*As%Y71|S z*B_|^nS<3oI|4V<6D|bKTExYR;A=ZEB*HKxG~ODR$vKHvwl!aK4r8zR+=O^lA3zdL zz3h{wQDwOype@kC{{}R-^4dh1sJ5517(DIyy^u4IYRU;NP`})Z2n7P@X-#;9t-Cex z2xH|HuQZJdW7qE?MBBcTl}8ZXz28&1*PBcwz`M=RmVoEC0DSy+P%7n)M9N|A z4+(%@iGX))1-S1AGvEvNK(>*s0KXCe&*y+wvJt;`2P=;tghwTU5U53c)f=rO^4PgH z^i5Q+q@n%FW9PbimX!*65ON;KS{d zhRWyOLY3QdXsFzu#XwUCxcXxaPA{k7{TPFv%g_v?Rkp1iopDn_-%7TuGJ>BN0>hZE zR5RS#&IherPQy;HTdagA_E3$uEQ9kp^ORg^P^dv%dX^C4t`*heygIO!f8i1Ig^mg< zykp?kjG}522$nAa16cM=Y5_x?&48iOmH@+YE5cA}HNoI|#3&5{o9P`uE^Hp;^sRB< z{D2!fa9-U6OESJl=3Q#NvCOxDc*7C$wtN-do zf|eH3arsZ)1sN}-m@e8KFdf)%DGJgCPsvj~Wab-AmwOkp)aB2?q zOk5d^&hH$^J(=}HWIo2%*FH}??_6NXNhIP z*AJmD6)~xmRHzt(iNV-RfWV~r^i&0-oy1_ZjnU7CY+?YUWa{7{OC5x&8^EtQN{{@K z$EyfUAG(NFas2$Di{)qkts~vlVqhjWK6FxfzLdg}qLLWFu05*fo*QURofb#6rkeg*wMF9^{V}LPlnmLqZBmU_aVJtV=^htwtb* ztc<46k~4Mf2@#h_@xw@zL$nhJ~ag+ z+J^QNIcZ5HTOZ;`h>#4&x?f6*e$J9oBM&v}I;#hx zv4gS+1K5z~$(<#w`B&o(gw>PT5Sgmu1mwpGBAl#HLT6Y*;&$_xsHvZ7qwU8 zt1=^DRf5UYSapIvR?cx|mz=%8rXa9^5HeozRy!llH0%1v%<{+*qu#5p|KIAp$0$&l zL5Q*WdJ_Xfn##qBSa=`CUtoiCh(uNyKc2xKNrj!MIyhA7Ad#H&x}JG5l6_v+=_Vcj zJ(YPfGW@)*YZY&Cu4&~k6RH7u-@HwLYO=1dk;uyl4k8oe=Lao`_oHH&Fs%Ub&AXOX z_y&~JC#29*jRx*vF7zZTg<2p4zsGbnYEXmPpJP5B+#5Sx~}`wJ9M8s!kJxinyt#h z8>uqwoD+6l<{rH8V-?N1j*vF%sBG4CZT*{kDO@|;v=o4We)tPm3O`1og=j`{H0C*@@}7%>~c{Wv&Fmv_+c(RP&Ua`@Dw&VRVXoqaQy#6Q+RNAuxr|qJ81S;7p2KEASJxD~xyb+(`lje<6dvqDA zbQ>FL@Ynd_mF%@xceoi<{qc(EeB@^cm-1YQYsCV z7u`T(5%QE=$s6m2;%A3Fhn>-Q06=8C&doMs_ttFZ<}iHjgn%s&y#-W#Vy5^$RQVaA zy^=&o^ck!Oo%kM)Y~eRt1vIc_c7^utxI*n!Y1*#RHKbEmd|FNON z{`q5-ha_iq$py9>iY8~)1Z#@Eg4y@Uoh8sT(%!k!Ann+(&c*<-%qQHB4Qm~z6RY+q zxzcQ(g783SCNZ$rLdba8`%_A`?&X)3(UqAs(dATmsvz5TD@{K|OLQE7r!0hg#(siU zKz8`3Ejw_~mZ?WO(m<8nC)baZH-oy*1hywax)}6W2+0bZwc$1ysork!ie;U$#m=(oQ-Ur?327k&|F_!eP+Jo)UF?M>74*~lm!Z_z!0?-uIstoH&S0!QzN|~OyapV#&JafATXrDJb%5Qn z<=W^5DxZlg^mR0!VaAXq0im$)Mv0|?)6NOxp*8^58h8)^uy=^4oZ(H99 zVk{=yFY{|uP*!H^@w4n!qt1|iDx-zK^=X{eoI#bL{4{+k!>25%W0N0*8=ZBhPqbLOxtEPZu7HcK zM1AHyGg;vO zKWqEJY;|a6ut5xtu@Dk$pCy*{$n>&z4Gz{x1vGHhE{1fDgQ-|{o8pslJPp4F&e%s@ zR_^UzY$e=JmeQ4m8vG-uGSx{-&H;u=&1?uZ_&b`(0K;tN_Wp!Ke-s1g zLCf2iLiO977!2d<%!X*SSa!J{Ziuq>PWC@>vcf4ow>i2@onVo-$@N+5oiG;r8JrDS z{p*^%_IC0aJX}ofeEkyjie>G*Yyh&-H9_r`JgRn8&iN=CEjrS*BF|u z_UI6_vYI-0gZ2In(YLjkufW#0`%B^`zy$nk(4M@a8?nbjX{te6HKW|F_If4d3>v+XnWzFM%ZMo%0^J@Cv1y%*;xPQGh?h3S|FBrW(>88q0cQ`5AkDuZH;Pq6fRy; zGaEAZM3ZP>vz@wY#lT%~?Rl0Y5i+L_Rc9Ad_YTI|ufbJ#d`^2{T%+HzNlRnA@_Axf z9BOAPn8x`es_j}2puTPf6&8seZhQS52}6M`&7Bk0-?zK~YJWB%D*fJEFPLn+6*kXz zb~zir^+rkKw#HrUPt%62Cq%2>K!~<>y=hFq;#0|$(lYme8ywArT^QM_si9#)w8z#H z5?!k`t%FRb&6z-$oy;;#ga&e@H1L%b+=Fx#*MD&{zTywJlJTm8MDGA=lv}6 z>rhh+!tU!@%vDS$`c_>3{VycW)fMFlxFU?xHRzf|dCzHfa@^Rmxi_8zv^mUaBavMu zr}V9aJ+I_KU=2|$6Q0OLxz8eEKAfH&it3>lfxXFY`7erzL4qW(Z3Q@BlJNmjUE7LM z{KOt&nWF=1kgJIrQ_i<=%oJ$RTesFNcZoh;1(J#p=9vQH#AQ7hllBUg6jqa0=u$| z%3LsyX-U(2W84zMEP_GT=b7mGX}^Ixp(G+7;?pKzF3sOCS-hbgX_54ejTHY4y5dGJ;k z6&|l2M`da%4Igq)WnuvhHOw6*SAweBP7Ee5ca~xtEJX{7X;P|o<7hoWAwDfqsOvf_ zyfd>rS{3K2w8;(|iF9j=ziF$#?@mZ&{Se-X#{2tR^#8WMPu}wXroV@>|M&jh-?{Dn z&K=ZJe=^!m7Xr&%L|Y68R?O4YTY1Fng(;=8jYP}ZTrXLcMEys_;hvZrr|j5q*a>8T zLWgCb%y?GiN@tID)b&buwZx8lstN})y6|hh^1n3eR26DeLlM!jv!lbL;^b%@UHjTf zLZY2?;T_dQv|>g!-<4$Q+K*8|dteK=@v>--UJ-ZW6``tduL0Pu4!W)ge~Y+CsN6ra zQkV=Ns)8pD$hiLo$Qxe~5?w@9p_5VT6`gcF@-Rs9hBYsB5v~7qHWG=l({Eiz8;QK$ z+{XG;P=7t2jc*2@LcxU<+vNEWELH;oj- z_AI?-WT-||j~ZbOo3g~PGqW71&d))GE@wvZS&LuvDxSP7cM}FGi9W03U2;ztwm#FfB`Kcwq=wvq+TJTiQ8XQ|RF*@>pvaH5>-@R?}ghmWCj zfBcA{bRViI>Y+IH9&wRSjlZMfcrAyq!%y|2=yfGKBLI#&b$)BiMl`S`zk=^^p~RmY zI|fE-e7{r0l@7ld^8L$)$SU2I$e;Xey+IJg;$MFXSFqYN0M>dL-V38wN zB%a?x)|(09shF*vBogag*At8=mWE*$x_%59cO@kf*xEWmv_E{v$1(B)sH;a-H}hDY zR2}@{k1n#LC#@=n0B_HNxUD)X9O*!nl{*WZgp5;r)Mf>(qm>@DL2FjYe%(UIXeDX$ z=&Gd6U@QI$IGD)F2o&RxS9zrZoeMW`*k!*YmF7zQyrB5h;{yQpX7jyxF9z(b>u~b> z8HD-NPax-&t-959ok=}?5av2(Ciq~KqGcxa^e&$eqNT4P#AyG>(8Q@7^9J&lOX1;Y zZzGXBla_i*{5n2CR#wH8g{dkWI%4HYmTd%=nk5*)rEo3A%oty3XCu*6#ULE7+- z7RL|Di(o3Xr>L9qq6UtTi!hXHebIx8V-5Hb&6P5gsd?_L{_$#7vpPj@52Ei5XP=5}ZD__ljks z?(>#=7l!cHiaoq^}*ieHQ z^tWdP>N6X%PaUVqojKX^78=%UK6RioD>#yjmH#tV{P19Q;6LrNb|A!EK+WnC8UGzFg&1e9|BvqojPw42DN@ zrFjgQ&IZqQMn9-rn=PM4v_3W_h#|)p^Vly__oJhER947-)vFc>gDsZG?)&vJRf$8UIwVY$?1K zpD8Z7ofU4;xXzbx8Qz$%Ox@T=GX&A4^#@8ZJz4@kS=nd>YZ1*s7G_ZQnZmoNGOmD% zA68R!VG6a0%CPy_$t0wU!Ff8WTY4zmo8?M&t$#k@;u!^(;-!W@ax?5K4A#LqxF*)Y zqNl;f4r6b$KXGGdyIAIvu99o(A}7PT82Zji$gEJg7}^NJ_m`oG$`Lay;DA?L_hf#S zd^){qmONh?ILqrU7nl6q23C>RcuM_J`Yd@wKG;Am8>q)!uoW zu9P8fUos(2T$d{ioE2&i7e5L_m0!BXbFxwwgFl$$KtV#qFHh1y^9V5jk=&GxO>2_a z5H?WDSt_r@H#T?d{2T_R%>ghb4DWA8RoBvQ8Brdz=5*(Zc8sVM%P@9KDL<~dvOQLS z3M}qMaV62dnvC5`36}elOO4Pn95X$$~FMFk&S&W>!jw&NyehRdqSY}^RVjI&rD5&TkdKa?w zIA($vpp0tOr27hy`q24G4?@hQ3cpD5w$m^dY&)d^Gb#ygPn!QT_7z%$<3UF}~FrG)p{ z%K77sFx7w_j*C+^AE)BLYV=2%zME}$C%BQ}4!~zLf-|vCZ)@eh{l3XykS=e<5ZF=L zVJokD`*AU^A^NK3ywl2tAu^5gHN0Tttd&GQX>L(&Qd;pz`AuRt zD^+H!i88?{S5R=%<&}m+(Jc7j*=BBe%rYy}ByRfbt`iqwbhFNq*7r=a>0Vck2_D_G zb2gyc&)r4SX#F92s)BK2MZ)J0$^twKgb&$3$&D=(575|-%5fNb+o`QgF)1@jBABKfO@7xU`s0WGb6K>aHuC10E069-FDs zP03D`YuI99OtibYFe_+XPpl;7CwyUds#2Z0!-a#XGHvr|8rtLk4_6dsb6(|@Jm>(! zaI_b+(vm|k6!Na<7uxm(e8azH*7b*L;Zl_KPdIHQk%0*=aVoz4`r`Y4?wFSHLTw@A zJ9xa86e?S^VIBF0P`ST5|C(ht$qs$IMD(Cmf67Xtf4@|F;^IARj&CaZI2D7hAa&=Y zTuB$#pORyzvXjcx4lerQ$tySeM^YurNr!>*J^2+><1IH^Cu zdA5hUJp1}_U5_3v&6PyhUq9Ok(dGe{*IA<6yP;T?D~Zv+Wi~{gg)-~8k5C47W<%r& zUDvfi^I;CYIcX&kyM7V*fw*{!r7eHQ;L)GM`w(L{8$I7+Yr*>zD&kP^izj~bNwWegdH;c=j<)mFIYNq=oyJ3jt)E4)* z8MlQLPKZ=$=zjU6JnF6$m#k*R8IET_rf+9^I$PdFPwk=MbHi!>MxWx7GP2b{U43!| zoHe;pnpiep>W5tpl`rhWwthapK=Df%z?Jyqy2vbD*F8a<&Hm4B)9lCm8Be~A&;GZM zvDt^2KLpXL`RKFZi4gPdk<7$o$zBzI2Gvwn9J7e-B?vfU8d1<@&roDp7T#p?kQLFi)F)+G4 z`Z_}-8HP=SQBRVj)t}Q1-{khlootbhe;oR*ov;#!bMpU_{@O3m-;GKCbAJz5-3j`18GJI?~X zntM>yHEh1i@O8o+kt;OCNG!fJ<_N_TGjicE8d%NFBtoKZz)vBGtHNr%S?Ai4&t1a5 zEXUXWCjm7pQ=K%lr)UCnBXBlp;V@`oQF~%A(cq5Sq6qig)D|wTxrOgWj~{kpJdL5c zyKIDLKa%*ll*&$^=*RJFTHY~h%)e~Q^DV1Q*ga0RQd$Br?sVq_iu{IUF!|@2tR(tQ z+xz=c^(RDYc-qV$fghI!73zQK67`FVHA`##Q=$BE9%t!s49^`ZFPaaSm{rav-VuGA zyB#^i$re~9(=%(L?WkN&MIDJJBxTNoxzp-N#2wR{`2(W+6nzCtzrZJgKw z_GFNx6>$0tY!EV{YY+v;4XRY(s(LFoF;h7)=wZK5x-#V#vt@4-X~;p3^J}zQe}PNE zq5M5YP1>~y10iQeBj-oIBH@?{{5(~Krg=Q&)XywM(B|O1ff*71!>$=+`RM3gTc+RssOtD;E-tZD zs<`^k1^+BX_bINjxh|sgeT@}tEOIKYW$?Zf-V3j%fzuu5_ojiMR}rG!vyu>PG}hX&L*g}RNh!fdf+_MesgL&h z3dk3-B(`4jqRAogPtQXxXRFr#`J$=y%I68u4*Zo6?Q5)csXeiE8@BG1oX~d(^R;i) z`WUPi7xyFB`m>S5)~__TPFd^IS?lAl)-J7DX9R}WNgH?6N+M^@UtIs^d6Iaas6Bm# z%V)T8pOeblY544L8a_IlS{iBnSw^1AQ=C-JaZ+W9p*vrA2jW(B+U^vLx~}Gd=fW6! zu07?lnH0%ZoHGdrhL|ovPd@^{uZS@IT)!lLzPL3#q6(+y@D;Bg0ldFz4xEogS+q)6 zJ}2hEb@v=Yy+hbL$Hm3cL(?GbQ=^J$5i>HQs<8b=(^#jmvA%3EfO}B0lE|MDJO9M))gW9+GG+c_xGc!aGjCzZ>>4*vMYAUnmh;mgegK7?4kc_stVWC z;#q4K%e+!XY5WE{Nz#7#ksY6Gj@GOj$1ohu;&Z0fG#l&Qb*&ui zwoRXy;wf>Bw>0(#?2U4QgsP<(PKLjhd*HEZ2z$7^2R$lJ}ju08%BuIC52fa&f&i8>NjgH&8=`pm96Q6)!C&!Hz!RX1y7Zdf&Ewor60u7y9NOW`v+kq zZ-APVtLGRt6e}Q6mRX|MwL}}lKsh}q1`3IRayeFJ=b((hT08*C3Oj(}S8^3Lz6KjFhsNvTjqi#zE@AQgyxalUuqFGURgJgWWVFhDq(HHs z)1laDY?a)Er2`gd?liV)zlpV)a#O6;)SHY}KfvN?yxeWrDtoOg$+(FS3ywD<+Xhp4 zGY#)gqE%iC4|L?U@K|0!i_>n@9<-zwzZr=)te6lozk;eOoK6P4*tLZH$SjZMV}~A9^<~TKSdQ7I9P_%H+h(WT{8dz4L7{EM z^<^6LmpT!dWrP}vMp3y0-m6M-oV+mHB7`*?l}qv&{8ED=cOSh*l`r zNOXhtkYHmwF0v7Qoc>9$5i0M?EY~KnU#jr(P05fxgJF*0Jo9CkIU|<&D$M*Bo;i$B zYw1nNMC*h}xjd-=!f0#1CmBVfNsvB>r+2`j7X~L2tqzke<4J4IL(-f(97OvR%Tu{p zdlz$^7>v2bV6MZgf@hKt-sm}Kv^du2+$0-`{Pmo!Yn=~RN#yFb{D(3A<*tkHM}Xw; z?1^?Xgu^Yr-^eEh4hr~M3X>9NoL20&lISyEU-G>Dyfr<+)&bTzgbpZ8>&{J?6xZ%6 z*<$h4>Qt|#ry6MgdK!+{sInZ_#Ht)POSTqHr0)91?xu2S4jw&}fA@-I#k9MjC6Lqz z9ZKJAK4O*)!XqX{%gxeT7&gY}h~6{d>XTU> zIShl?+b5TUPY6(oEzDCNZ+16}p`(Nl^-(=rE|*U?i60f_@c_|9mq8xg-R!UM8LFYi zkvUBo;zPlP5jtyhFJiU;VZ#a&c$~X$XY>rCt!~&CyRXBjbTH$nDA#j0x0wi*`^V#I z0P5OO&DmBSa#0)mL$e`s^hx>DU0vAKP{hllO0S5E^JHe2*@Q>eWy|FeN!M9-L42o8 z+-oI~_Y)=33FEt>&HIO(Xa|H(&Egnu0hsyHAb;hy?J!UbhpIt4!6Wh`cZ)Z!CU$lr3i-BRq&=#xF zcf~7t_yRrFh){c!Qprh3sHP}WEOWfquP69eeUiJ&qei?nyH3PUErWLght&R2-dBAr|x?vCOgSa@M7yD`NF%f7@f4u)MfvLVLwyCDEPi{E@iO zxlJJo$u(Wj-mV zl-|eH;5Oo5q|)#K2bF0-rDqnIRppsRNTug~_UmpG&3dS^Vm%<=X%c0uj|{J3S*|o8 z*x;W`b>aK#*wEz^P@C(8&lm^idX_zO;jiowKIEXP>$Q<6|L+BXKugZDolz)(rJK64 zEA9jXcqxS+N0E;}D!IbhqHjV9A<=zQ{IZ4y&WtF`r>g7qkv)jGuE%I9=M+%2b2gQ0 zY5f7J_WkpW9z-k~)X7sidzQG)Kgl{vo;^)0^L4V6()-1AzDY^5WO_FS#{YS+l|!GiTIo^5XF-cLyOuc78{9HX$y8)NhIYW=VgkxxPm0w=fIJ~ zF~F}oj3bI~u2vxyRg$o^{1YoZGpv-yv&B_i>A8>XRSbVw zuu4;D_@D!Pd^wWfiy``N-f7yGreKcR$h{U4NllEGDK1{u3ja|<%Y#z6Hkw4$F&0{K z1`a88sTDLP`D>sM{MT)z;R8uj_1js$?Qm~ZOEFT{Anx&LayO3Y#44^q^|kRX zLc~jVy|}1}qu5lc+Eh z)hnrcM`0hTe8vbap918&Pwjkpw)@PSA0iKOe-$}YxeUh9vYpD8QN8Y@;>-yYOs(guEUyNPP z*0bGb#K2+;A=&b@>eDULDNCCUX-U-yMHQMlTJ?3%Aa+?-FIq6CMS;`ot7?6yoC{e9WA}(eX($ItG`ay&mOBMO_n3KJ?j8I1TFv zZ?}@j!1I@o=fZtcqOL%YP{D3Dh?AHB_K77XnVu;yuQql2Mem!$#iOjP?@zr_J`I$& zr-A*aQE8XeH;fP`5d-b5;OoiBg_1Eg0O=!624dtd2UphtT;_?9rFlUsRbRw?*GJL@ z-eKBzo;EfZ)W9}}O#e@}8TY1`M+ZC|+hX$8XnQIrZKHaaDzj6mWiNFfD@>uv$H?7n zz#VmLPGjT`jC*<-s2!TeXc($I4OEDY@iX|-AP8{BSYl_WCRxEGvcO`x_cg5khX6)| z@WE`Eeh=57AZ`_YzY-b7G|e^-#B`tZO%$(RQ$kFa2EK)m?Txy`)oUv;s8g2hO3YSL zY03s(B)%^uL`$BBz_#%E8Jk+RKY!n2Of6&hB3@v-!jY4VG?{WIEa&5ORuXyTlJULg zj%yVw#QXD^2ORq5f}fpO?kkOO3zFSaCAWn zVE-S#<*Wb?lpVKGPTx&sJ5_E+{dF6si-oaLa(ohCh+3_HD~NfXq`GDk|F0G8u#iYj z>+^hs(271|6M^ThMGU=ZBSc(B^JmFEspl+qyj8*qq|gD&alamQ&{Lb) zkti;n52rrLWRx|qN!2HG>fR>?HbK&~9j8I&L9MKpV32MTL)SxEVG5NWO`*!8snk}O zO65mWsZuzP%8$+y%O0I6mOVMM!zoYc<1-<=c=~awtig8HBQiKH26BOj0H^l35IcS+ z=P0sWNpQwcS0B z%2VfwWm9L0WeaC^*ykyIVkT8yzz%mkmwI6i1FI( zap<0DPw+~ThJR#*+S%i?RoLF}d;(&WNHG5M@%Yb2nsr?}O>8l3D_G26?845qrx}+R zNxGox#b>NyXsU(pR<==Z;95aBk;l&Ky7q?&fHnKz!vzl*u%JbeQ@IEzL&?cQp9+jt zmZwQ6TJ%xC^_9ThR<+LqNKsLvQM29cYCy2q(BuSe3IAohwWy%J|#H_ry z&MWmaY(x${2034=NHpMh@d@)mvk|jBye`pQOW_k{bokt3glKCD3DI7{{(N9IApyr$ z4fk_8YJRdQ30#P+Gm?h1N_zQzq|a)tB=XwXR`|7xayU(Aj8HFrX`(bJSfc zF5ZdU+&oy6?s_q}nSEfyEt?ZdBUJ`JBPJ7C(hPU8i(i6$G3`d3sta{`YA5Y~j`rV4 z-TUS~O4IkDsN*b6-^L5f6=+EJk3e@9ilg)8$poA~I;`xMTn|`K&Y2hYzkB8?6Q$=d zY5bV=U@rbi-U*70ndQ+G^bWsq&V?~$&)Bp)H18JJ(5Oon;1y5F8Z^9|g0GkUIlHh@W93EKXfQz6efTVw) zdR0BsGZWa|?~gy2bXRrNtEyM8UcD1L&vw}kTLzc%5xuw2Bg?IPRor_o|7uz%<`>Mx!Fg^_hO4$u zbGsr4t7-cG)q!iB$mnMu}Z$Cgl(>|(f}L7>lK<#c2YhODQt3}3Y_ zxx|=U&X63d6;OCx+d1X;za{01jmaz79ThwDO2RM6lR0~GOHG>&vff*9On_S|PsW-{ z;8NmPDr76>pF-u!h`gl6PB2q;XsbB^iJj~%H<_t` z7<@7SIkcAXP>`a~S3$?Xll1zDHu0)O(W-l=K-K%q6b_CvQOkSrcWTLt<{SV8TJ@5#k+z{LEe89zIf;3#F_ijW6WF~tYrr_9bbKDstCc~ z{^2p$5(A3ujDFv|HSq#6$Ab|0^ihPu-RYsZdz*m5Kc7Fpp)}XqF1;x-+$8AD$y|=K2Iauiy+05^zOiN{F zbxP$NQt=23?NW1EnJekg-kORGQDv%3>L)|BpFU1phl;5vCc7v7*_?iwRBhB$^NHM< zRl9AosTyP!=|9z&dRpy!j)h6Bb)Je$0>w|KAVlzE2$8GVV5;j9?YJKq3n%8)TLlE{ z&3V`74|I<8VKM%2px#>q6BuarUW?Tdu-os)4pX%YW%F2&*(|IKwSqqm3%hFMOdMj3 zgxNX*r7E#A4ae^j0eG)DU|&xPe2*#SDc$uUZ~4&+y;rtM4B%FX0RH zRnJEeBI%Q$r`ffM(=_bQFiq)O1QhxOy3d`^;qX4EWfL{8Jb65ZJA`AArF0} zPeO?N#Ckg1WSSwc#_b6z3i4A>K;a*Z8DcFkcL*@bvPL?B+Y00w_x?)va-iOGF;>g0 zSm{h3;jd9vw!7J8-WuJm-RTaGgtwjpKP90({Vk^4yP8$EDhpv}qvU(o@C%Uqo4DRK zK5h()Cxz8w2bYAW%4E)ZcJ5(zo@w-+Dsa6>sazsek4~!^BX`BxhwQBMaBqP5n+=)1 z$bwFnJvRZmSTD*R>Y zZnzvw0RJ^RR=R*#!eFOsK5NrWichzk&ys{|qjlv)`iJkd#hVdJdTpiD@xW=wJ6dLm zSLw1AJ^w!~B6Ev9My;gNzDM#Yz>4&k^fw4hI-33{wYYa9gq3yfnR**mQ)_S_=;;K~ zW#?B@I~D}PcfnUIeyj7VsmFMDE${c?>zTj6gGWu62+^1SdM{vNa2WiI+AN^(=k4cT z|FvCxKgXA4uW)>E$M9tp$CsS{h%a}nHQ`H+31943Tf$JJl-X5~hc_9frs87G`q`!G zQn|#8A|8e!zj%)_lsMu24kF`WwR0RUZ20v5xNYiR z6s0QwDQ;Tv-yy~1b0Wpv3@NVt)r1rf!C(%Py1z37eq5Ub6#jRjv@!`l%7i3&oF*;~ zax3KbH-InBaUG38oXJvR$uac#R#LM|zRPi-B;aU{&lhf^;$^F4A$uf9K|GmKU$ZgS-7WeTy%hb)#`fW zJ*2Y%gB}RvM!uSS>oV&0fp7`+6ymhSAGpU zvc@G_Eu`-mJ*so@jAO@tr$#XaC)&`!v| zEWT~DF=>5U`=)D%!hh>|^MkKQhF=p)jFz8R3(&P1X_zm*(zJhaux9J^Dc?Uotm722 zrYKF|3xw@a#Q`Hx$6I1nW#*Wj>ytYJwGNb%Ll`53ZdfL7Vi-E-H(F>((1r8`i@=8e3qU)BIT{Wo%WMr{Om zE@AN8x)I>%yD<))9t@s^MjIp6w&~$Vb!d3|rbM1uDuqejQ!SwIYi;fM2Y=NLzb4i> zv$*5FFLWagg*z~Hdxw~=Ynd3S_(%fExaW)6idDPDwHfT+J!pXtxum&7o z;F+G{dtk+^%t=#AZ^D(QSZn_1NgpV&AVls1ElR44Ra<{2a~Sns2_JXC>KOWQ=3ZQR zntl8=NW;MBU@24Xd4ToR(!b^%Oe<#P{?!&_xLDY}E~HRmE7oi~>7Vl~SQ9@f?jU8EM&M^@n8(J}e%0p*0-YLECCccR+vH@Z~BI}2e&T}FS; ztT8Mu6Z?bgn_trYx|oJNtz$twM0CKtPZ%@dV@|8?G<*1GIH4o*-mq5Soyjj82TKK;JqT>hkA z{9&Sm;Ks>~pci~BpvZ=E(%V%i$=_ZRCtky6TmKNY!HjE|cT``j+DhT?daoE6i zYWgb+CL-PjUy4^<1GJ!!JvrIaCG6?aYqIE$(QFr9W8iMzBK9B)$h$gp==r-&-W0~Fo`+`N0C0G;h+G83Rgw+~+8w{)i9aw>$m@jWyNxT03 z*p7XtEZ!Wf;(V;R>KqA3jWyA?B~hBNdj$0K(gy;HEI-%&x%=Gx37!tvcPiz)y`Bms z_Ie-dwHNL6xpvm;B4%%AieH6Qo8wA;GCadg(?E+fqaawYFLE(f2ZXR5#FhhCX~Cf* zX;{m>7ApsEDAEBJoW#z?^8HvHc(iX8@^`>$xjYeD&Ona3@6z0stt?wzhvI@gw`#dT z_SCt!U=LpRZ1-+=Zo2r94OrP-+;Rwqe(HiJHDCOhfJP{x;@*wLm96wa^4$#i=iG9U zo9=_*YHCePU-J&r*VtK1e&-4A5z0;!JDa@UFm=~g-p{dC;_wS@wIsjTcREj+_iug! z#u(BJ8WBtR!3!7Cm@*=toZ&WG4u8;_AH5HQhG+&)1yC+ebW^U%O))b(RyXd=JS-`W zM!1ryS%wPZUW1JU&P;{7GU^JiVTa#>)slP+APPq>}6o+C9bxd>skuZ(@$tXt`mCGII!Ms^mU z`1BVE^y0y!v+?LJ*^H!r_ja4EivRc}8|lII@4Wr?+YmN36uxc}J(D{0u2aOtzht8t zQTrtu`1+5GFN@zbpK|1k0OJomuhIaR2`{R}7)+XJ*RI&beHd0)2CRT0L`B^Azr0C3nn^qq#39`Z@ zsHJiymfml`p>WSf>r<57y&G`oTM?^ndmc`)g5b$*&&MhBOvdowz$x@91P6`1kl8=u z99-+NGiQccmp$M3!(seUXqW&|a&1-i08&1z>t>s&C2tEToO@3Hcg-)`VcbLP(%dQw zgv_1{8~W z0buz3GPWS3+PeNb8!2vi5MaanR=z+G4{(q#By8a5+Jr+t^?bBBrFRn!9Tu@#YRv<; zAo{D8S{;zjk^*7bOJ6#$CLa5lNa2cGb35fPv0(Tt0JOg0%%Vqo-^Jj2R(Re-j z{p)WD5C9iuxN;kv_^ssqe(e6YT0juoB^f`TMM?G;npkE4b^BX%Pj>s+z*i8hrpshr zi+Kt%_0YLzAfL}bK7A-;KI?4wg;*1RKE`_rtZp-huuIWSZWPZOigTvr?3&^F^XfLU3~>16lo-@-x5${E~lTWZT-<~N~C9Z0KZhYh*`0- zY1RXAv7FV9^C+%tr06z8IUYLF#Z^!hwwbYJS`4an1 z>7I`GMci^KBI1@k12=Jb7MJ<(Op?|u3ecr(6lQHv1ZFS%6Dbj8-|ky z?8>kBZUjU%hpfgL_y1^jSN{5&X;&5*SpS#bjBA<>phgSsiWaB~*yb@Pq$WNU;YeqH zlS0O4t8yEiJeFTGI%tR_#7Aw94mJuJ`I$Qj<%dOG*U622V82a#wZ%Tfjb=PazL<;D0V0ZL*I2NIHR-_90)}^7MxVtLjSfG9Mp1e zC{}{X9<1zc2fYA66+loN;7LW5 z7-LbLZ@d$#RV_|5qnN;}L9#Pqy#uN}kW}qPUd>_9j6BBEUC!F=m-N8}cOpcJhZ{on z_+2GZuIp*&@prmgH1Xg(BMcd1qu_$qJei><=^ra=tYGYwyHTpdfixCR1ZPRsf(W?RqzYvw;B;ecSmL&P5 zChqx>kAKn11bnlb@Qw6j<9T<52?DUF#2irOBYT?^{Cr9H-mr!0?Yry0EAXRio|JaP*{ZSC;`RYrq1zH+|#Y`Ph`pRhb}K3i``h+KV(c?O;zC?K+u zeUM>BD6qMzr5^}%oHK7mh*;@hPu|?_V2}R5VH>tGj)VCA6#;?e;Eo;VI6u`V?YOe- zz-e8V{C`J`otm725bk{(4_?*{A{MmH<+6Q!GYG#=;&-r`HRrnw zgey-k&PK=!S-+uL~DR`SVB6nybMT8V<2>8AVl7RI5{Z-_wO^uTnyY+i0VY?>Dt z=+PiJU#xU&SGN~Wa$=&cN__X?ECa`EtKo0AY>y_9Yna&=tGSI>y%*!aK2L-N4^nbv z@_Ot(z=Nn;BRfo&0sqSaip)vu|B*y_kl6QPxaeMaaTXVdIUA-9hI_kOgmEC~>BSBl zIwyyC)I;_plv_;ECrl#PNtePb2o!<}e#m1hPO;%m;3hGI{={OF=HV3E1+1haE8$Mv zRm)N-Utl{7_dMHP`cqp$U-I&mto-Y8I&HRQ`cqr6GFHBtm4{gQ23EeBmlxDW24F4g z-AA(!)?R8rUFavD)O`ToT#dCJ&%$Q|w&PkqyoE;f5cZuKR$dcj`jQ!52j|1L9LG|~ zf-Q~M**L|_==OyAEraR_ts@23s2n@cgko(WK;)Tg_m9$w>E3 zB@t}xRx{Y|)7{kILWryx8UuUOP7~Pi`1^Ew@=T3hr>#el-$v7~7EwMrntpX?T~r?sO@j~! zdM}N3$r2fqGO1_@>p=C$MUll=9aTcFh@qcSur?^e-x2$cbSzftu=2~0^(>RtVW~PZ zV~D@W)9XLB7apwZ`f-<48X{HW2Y(M)Jl8>8zs2~}tyWcBh|q`>JkhOG8ToLN+WD=G znT8ZGpD1UO1ml_8Uwx#nQ@3)#9J`1LA%Y2^Rz-y%^VQn9!@wg%}QI%H&gS zJYT}C@yoEYuDmhU6e;fkn^9yxe_=njylg??JI*HQ%ckX<#jB(-Ef%0PZ+|wL7n75c z(!UBQvL%V%vRab#Pnx(Vo2$8A>BOiRv&Znqa(M$ffB1Y9!7#lzdD5`<l`>$j&`_ zsRSL2#rs55`BYPsgRowdX9Q3HY%Q9MYb%0LaW**EWy<827mSO$5*J>$J`Eu}j{BnK zFkgX0RhHP{fQiiYqGWE))m(V}#6eRLNSQb}f#%_0$P#jIu#N}pbJ9s%&8-jTJgQ@5WTC~C_ z+VG{R2t2APm=wSGc>zIaq~!DG=5}JW^H>>Mm&R7x$`>gO?3HQhP0z=PsE<4+pvdbx zxc#q{O^;_V&<-4^_g=}kI^U@&-U|&>z=r4SR_r@9-FqC@7J*}Erq zjZ02PCsA$n=9oo{hT_o1Z$&8AddiK z%}|#>Sbpurm23jMr7@Q5rDqL;lK|I8=0tSJi6bO2=*Z^uPj6{lI$T+B$%lQRC(rb-?!l2$@jSOMH>7UaUPJIO} z_eieCWoxwQjC$e}Q?<)`Vt8A4# z7si)?y`sq&&Mg;4b`K6CggkR2e}_LL|E;>tEY!%z#R3ZdksyCaBzRoZu}(0KqT^Wl zFim z=}74y`xi;i)fV}6&lg~rPAOceKj^t1YvPZFF*RJzHE~l#I*N&;JF<1nyNEvJgOl+! zn2C}py_jdgzE)xS6WG^k!J11hlb$n~f=ksya{NJ0I-A-+(6cyF<2y6Odl^r^$WmX@4IIdllX!$XY$QY(8DjliCGn^8XRDZLlAMHV^-b-h<8)Ovr?Bj9q z1g}sK#D+l%w~sPnH=qBN(iB;IPWrtrc|V)tUFoX9QPDG;9&tXzBtVlTp0bS5ZSjl4 z**rG#ig!%ch{A&ANFG*p<4Mhs$wnJs_jkbRQ&y}DvSZ~*E7tC`VBhJCDSIL55~JjH z$ht(&jX!B7bH5_f-c>@8o#cZB0)m5T$2rHhHtGBZ>n$rHTWbVLsjP}Pb5{lm1ZVc8 zC8-FJ7o#QPprkyP&c(?Z!F;?%|599XCYjqGX5o9Y7Z~`P{o{HTnZIR^;bgkci4Zw5 z03p)EKAQbWBGyr!P3laV)OPZZ#nX#v39-CtU9xP@V!#9XLd-)IbR*^a4Jolp&R4~` zJ2McYw5b+@P#X#)nXTpf|Ad*yY1v~~M)I(K*HF-&OxAba_n+WVMJd*;aE@*Z&D~;C zx1Y@yP(<6&{(NYDx#+Z^Up&k7i$xunB($&tlY|yRT<8V=%0Rx;y5zqGY>l3iaR-F_ z&659O3qnA1A*-NPE*Gw+i;QUN-wLYdrNY4P zp08SJy5%9{DgKNedM!1%^pq*orcV$2?%Alg<-S;Ry)+0`By$jDd>qku6!cC>{H?l9 ziM;BT`$py~ZIRjnJ+e-!_A_9Eo>7ci2I{@HLvBOONb#zQ@9r?B*iJ!I#>kl@bsL*g zy7qzK%+9{nKfL$R4{!|?A82d% zeP^-kEo%H(IqBc$J&yGdc7|qll&Z(1=S7YMn!UNeN+^EWk;iZuy06?uq1vi6Mt-Pe zMHZA?OwM*@_MdYF6t*PMLuu~ImL&bMaaZHwU95@6>oa1ydlu7*e9{q$dJIV8mWZ0D zL>LzZ0TL$q!RiPiAX%_#dyE&t`6h{m;*$HjOk~`b;+FHs)0^4KD=v9J6b2(IGma`z zukHxAKfpi`u9H>8{%PR$aeW$7)D#h=4}jWbuW2XtqfLA;z~KM+?mfs(ypPOcaB%#X zJAic-+vuOLs?R)`sGhu+9-S}rVfB5jzj-euRtCUMv)E%Wt$P)%`v@y7ea2J@Q5{zG zgtdFbFQD*E$?;4yzwG$KI8W{pn7v9Ww^vDJm`Zg^;&F{w z%Wd+fU^TOeUMY{#cR{SBhWs%w5JGli#_hx+7}u0QPztc@GfMX3m_ zM|OlFEQA|wIt&IYbl{bzXtPtVXOv9KT2PyfxC>3D1>F1$@z zmrX}DpZ)}b-p;sIe7Y_h0jNe7u^CE5WZ73|ncYh&vwKNJXlvp##pZSlhK{|-42EcX zhP@6XFb7WW{WZ};(V@EK0hHyumA!KWf-~(&ol;U@sJ=8KoFs*_f=@Ucxa3++D$WNm zxuYYXU!+n%;koCs7dV>4zZL`|U0G}&k8CB{NWE64pEaIN^gkVP>7;ac%9 z|I?+~=GSJUn*#M-2`d9P3t7mm)Nqfk!S4%Ms8|VMLCm6|H_W<|`#+U3<8?+(!Fl4hcZ8V91vcUwTd@)6n5Q|0 zUDhqbV)kWLnj)*QDn^#U#@@e-Z)}Jh9JjHTe8e_3;}rt+(9e$wR+Z!t-C4ND*b%BDX9f5l91y~vC zFo`@myvlNqhp^H}POSo;*~oUXXqJE=op6l*i-+f$1bn(+xCN2k9|$KB4WA6>baK8pmInji+6*gHL~9bo!Zf9_8*JV$jncGp>$1pH?1a_SNsQ5K0>R z<^0=3`rizkkhBT1T~oT03q;8el&FZwj>LU^(s(#y&9)0pNTy2DxJJ#kfxj%on(Z%Z z)8KE6HQRjtzGOXkVS^2_nwf^RF>(n#*Dl2BOEO4Iox7#LYoOB2S`Y%2^FtV7a%9ia|s!=a0&nptUjgR!zLX*6`c0S<$P;&|!*9X{T^3BIF^XX!mMFA(%*MrqPm zGsiD({#)V&ZC*~)Eh2$_DoN*2Y^Si4=0y%j2CG6quRuHI%$jZW+ct!qbxdOIVEQ30 zFLcXR(g}KJ6DIz#InCgW#m2@oE@XQ1i8fv8Ox}N5K;hBn+213R?0Y;*fb2d*f1&{( zyTV2nOIX>+B|wrrsaP$t#=v@30&;l$)93b|Xs5pctj){f`g;o$)1sY~b!or9OIUx~ zpZcHr^DJiLTWs#{TGn3)D;v4E-TppexAuGgxBgtL&4F?K)j~XOF^`q?Y`?#utiQ;N z|Ea&%7eSlPFEaOc59_ajl~pckx4&i^^!LpF)?X=W^QO4|egwxc(ZR|J+VAf{)?erI z_18No_hPO&Oj3Wk8Bb?IJ6op5@rM=6 z%qYA63PMP=t^G8cJE&JLL85RfI%zvkc_d8JU5I@4NS<%wT6& zt=aDqf?EHO!3Fbgs-_}H2-=W=Og>!+^y}*6_$;+9xv%Lkbrb|68Njq25^7zkec3TO z#DaaTV)>5+!AJ_$!Qp@2pDf_M?>i+*KCp|RFX;_zg9AnLKuf;Y*+XjzLeocM-#3q_vrMtK|#&7Ati)bXW-JGdn4z z>3ze~bzOIUB?aC@2!$V^Fjj7vP0=#+Q%78R`V=&NEo*$wF>~XWu*NUtjbp7x;lT_P zS&p^kC=X8asTo-7ap}PfTJ4WR87TY=YhS;Zj^tZ(h|Wk4fmPT?D~yIoDshB6=(;)9 zu7)KX3a5s@YSVQ$b4ND3n8+O$!M(iGQquzF&;@)-j;iZYWwN3tRC{WisT$~v?vRnm z!p_60ZJv~P%kLvc6@#fV8PO9VGO-6jj&$NN-ytk!x~yj1x`FPsA&x+^w+mLpLBC|i8E*{k z^GhZo*ZfsL5khuNO_Fyf3zKrV_;4Z~*MtMj(!9SzOp2H<228oHRg`>xgKObv2Ub_G zxI9=JP~=u!C&!Km1id+KO}w%-6OB;)!PN+%5rLo-$Oh{%*U7PN)qS#TL?Afp-Vs`f zKEk<0^4)7e=yuf|YIQ4aIR`4Z)iEc>j&SZ}xOb~o9%^-|J?>dguZ;Ux0-sxJU7=Ql zShEvpL-SH;Cratbu`FkLV4sKmrF7;BG_^zVfC41>l9oEDTM>BKwe2{h;iPZ}^7nLd#^rXNh z79vDE0zq)eisuCs9-=c-7wv1SXD2|Nm^GKOhbN}>V+vTm}e9hM_R^~lyRgtF3x zN;pJP!|pa+C-1cYwq4799PqOve*G(tR`L5m1-~CKqcOwx8RtR#C#4hw+EO45q)Ir4 zl6I_=%VqEu0-B5io!-39Omyru=71G*6XU1?HiLjK#msV$t{q+Rv2LyOWSLtjmGKB? zNb=`c5Mp5zYKl_1xt3M6-L*CwxwRsQNwtgRTgZtT@~G~UbZ#h)xlWe3wc(axXZ`H{ zSQ~D^iu>eP)t0?B8x?DV8Uyv-%wi?Ak=_I<*iC@W##SOeC!k0eYoeQUg8l4fcXh+j z+zq17MMEtJ8`?G^TPBLv2!#Obage)pE zxCc$DOcwt|FfAlqKxT;Op%9kKWo}4>@-i@U@#Dw75F@nLP%N4ehY+RAWxgz&PRnu= z%fbiGo|}J8=1(3pE5adv$>?;TmzO>P{K>!{>`p1nTt?z@ur?*frHbEtLMczsdmpYH3WO4Nt>2;! z-1-S68$)gO6(z^RWu`Ide*gAS&MNe)2CrHNN7I#!0- zvCpReJ~sa(Bg#YQGdJ6ZQ|8^i$vvH+31bC@5lOP&!v3EOQb zSo!FU@z5HCUaY<%1}%@~b@IV;Ks!7E+GpDgXo~>a#iaEQwz?CsZ`SyKVZ=%dT{Ik}jhll0e2P#joY&Mr*b zrNChkA$2)rL?{(`4W2-Pu}=zIAtEjzQ?x^yl99^$1cY2t_0ZIt{6Wb-2eE7&Zf$tph(ORI4yh^X zX>qAy_51XAz9WZ{${TU*P;Su2NTy2_U!djc@O)Z+p<5|t)N*o*uERwHD=luNj#MlV zP~?YVrPZzMDhQG%7f?z_kHd!-2y8HvFn&N82*^@VQZqD__Ff3R56`2AG`@)vq8CBS zH8juAWs!fTqL^j*L=b1wE2R{eK$(|jtd`{{ZaFuq`%=d6)1Q)A^43HlwmM7}uCZKC zg;*V(kDXhkz(ET_YL9=smkmq)Gcu*qtSw?Zwrvs2F^jDE33M|$pBZQa-C%LRnU=it zcU?D!pDAh6_4Vv7nN{~LtYDgIy8#+xSQ4oB-oc5|kUT()K(nWhR6V+Jg zoD>@D3|6)l1j#yhO_%UJ_-hZSw&8xa6fSbR$n*0B6uuuQ*ARBI@}1IkGAo4}&|uB> z?K?4}#X_tWv1;x!x*lEC*(qT5$HQ)^e5+P&TgIfjE_ov9OFR1GkEm5jrPUI>&sEyt zDl69QU}S^r8V`P|;YUnlM4}y4r*LtB&!2ePTmeO7TRJrLeOV$+jAS81df6D)#C9>u zpJ3$2wGt9Os}o;3LgWGoA##c}mFG1zl|h?wu&ze2@~4uzs-RtMOg~>&Gig^jw5!)H zK!_})e|2K*ZJUvJlXcMc9!+QSRmfbUs(^qowN}M(-fj{3XJ-^M)x|MCt7DY3=R<#; z5hDF)r`=e8lPXR9f#pq!0ONbAGnBu0PvZDi(#H06KHvEMM$YP_kao4zh7fs=HTC|~ z#HswjLc8)o7-fosj@k;aVq=_*Wu~cqHm$z~>XQS^iK6Z9M9@SETG4qy6DVkZOQZ8a zLCavEt$!*}{xqC*l`)>~kW)$aM;a$$G5g=Bq6v(etx`44^VfSi874bhdEiMab~bo_ zswv8|Fm|knH3N)foW3AFV9=R*zB&3oD40~Fruru1PgCp-+qbs~Mq24OZDCZbXiBs8 zO9<1Ja`t%(~}6)2xH3nCn85n8(yy-wP2U z(0=lPJwQFxntoETDA##*~ z^xFN2eBh;RAmcbXR$ze>+MmzATiVe#@d|7Lvo0K;g@D&#F^EPw^f@da&Pa#4+{zic zdGutQL!T@LgH}l?p_;Yv&1{6V^^_C_n!TfNZRK%(ej2WEUEbganI`UhgM07)aDSVw zic8K?Ts=GSh?+=GmDf6e$ryMI-}0CNPI@#WvwhW8!3Zv*KT?gTmTlLw6d>F*U80y7Et)Q z^Z5%s$KoNH@)=P?nygjvof4Pqv=;^T0iK<9vauWC2FJIgQYsf=by<#uF^`4hV=(a&GtFoX2~+mk zP|UD`l(WO|@QB1}AKOePD!GeQTXUX_Ebo+Co{XJ!((^&7x>UZrQzM8!3}->D%}yMx?T8~nujOoY|a7CTnQv{=Kd{?K)@{SeUM@%IWSe0x&5r5y>L^^_e5 z)O(`dg3cxn4>P7NrlhscVz@##$KDb~SdSZ6>OF$h#q1W{?A@yZ`3nTSjcO%j{x8%2 zt?Ry4!4nN$23|ehUyRUV3G@VF=Ea@2Q9d?A$3Wg4mtPFX0;~qOFSKt;n2%uyF5;5>WU^Tf6py5Wn(V;TZG^1f-#g z(mZXXrD`$#!(Z>|;;Z0nbyO|I4KU`t%y-d|dwArN$Zm4QsB_1!bjP!!as5Yo)>+RL zrz|YS7x!Dz#2ll$uA|!Y$oC{zCZNd6N%(2Ths)dLzluPTc@iNbsxepOM{Visz4NxFa#-#_BSLxb>b{*tuJp_YvRGdARpptbB=E_Ttd#8*$Iw*zz@Py9hhK zoOK(9+=4uA05=1JK0ojoG3eAP);`-9paiq*#m&wjXSnv* zNm+h8dl*HT+rI&n!R+VBd;U{=rD+98^7~E05=C?k9n8Ejx#%7NMb`hNM>UV!KKq5s?KPDo|J2~xj0DR3dYPN)Ch(>y`y*C5T?Z$XF_defgy zn;`XTlIFc-VG_jdjN|8i8Z|DtdmpF}ptB>*7c2;!knG~1r)}tjbbn}q)UR=xNUL25 z86WdcV5x5t)pE$3Fb<%?=u za&Er~wJ!P6hx*_^aHh4!CCgXhmOWSr;dPzAdTsLHw69*nEn#eFh0=&{%Cy~R=(`rpbd9ax#eD1ORvUFhjH)i z+O71(?J7w~zo(?3Wimw_`(p4J6MOvmGU%7!LL|E?2uaoHbg6gPDuAR!jzmmA(b`JS)G!BHEf~pC3^!_ z>X_n92}O=$O|%Y8#ICI=al2F#zZsHPWo29y>7M5BS(Yx~R&!P0!o6`-NzI)C3O{)^ z$=}YCa6N821?}Y&C2p$AQUGmSa^4B4OR7vRJFDyPoX?)K7$DP%5*g2&78O z7f8EV$4V0p1ZT~p2eVR#H%8Ho65j84?3rhA(~reU9qxS!``X4&9fN%#N0oa(Zn3X5 zZR&dZZu$_c-TV?q?3O)n#`mnjnrlEVj9hUWOu?#C?I>E6n#g+6aSssC#b3cs?>ht( z{4NiiZ$_}8xq&;@u;-3WlyAmY#w>;{PnT<|M~wu|2wA{ z^UqYo>tX)WuwIWtKc!-&5eMpLT|$?@cSyook8AHvM^bfa3ih2EKXpo#D?JzcPTQyM z!rBlW`&!3Oy{E>Ne$fo94QYeNAvLb_?hfn=EypciW2J%qPf1D7I;^=;`3jU82js=A z$tys*e+jdm!G6-&&l@EI3LkGvw9o0)PJ9xW`hW7N=l0waO4{`om^LFhw|)sWVi1(E zqd&nI+kp-9lYDG=E<126(yU>5kRP)Pf8Pr(=?0(HYV#>4H4%{1)_2D>Y%w~-tuCap?gdE9y?Rl6dZ(3n=+&tPx4F0mT@ zp4{+T9HG1Yw)5K;OLGg7;>VJwe}$xmm(#QR^1Omzq!U|nZ3yU`Ct@wv$}Zi`ladbt zr~rz9HvR7qnGN{W0Qe3nxiVJ8FF#60Sj*b=Q99BaNzSh@hDp~Y5^K7C&_7c*2b!e- zBp=dT^5t=(g>#k3JAY-fQ)C$AGp^D$p7nSi?Xiixc~aNO;oo$f%P7T&~D( zhLT_6qPdcoxh$D$LD5}N$n@b%_EIXBVD&-}zL23OVN?%06IW&u*ZxF3S-2_2NHEqA z`z3u)_=f=_+|7E|0jzhhvvHs^an?G~Yq0C2u0srD9MgiN=}i!nyUHbBE>#EpK`HQI z8(ZAG@LLpL7M{>`(v8kbDurGhBNv5>X@Qp(AX*Tie;qlYn*!UCmRkiB{wO&(`|`WaZxR+NII-NOVQ+7 zLjx5 z3PLl}R9nSDuq4^9ihqGGyxE38w^zA<3W7{;5&7LPOVz{&iqcJiSUT}QEbx>MTjw7F zLXq{0iFdDV@c~rv2`Id*P1hHbkqLFguQb!vf~T0&;1<#aYKk%YO<4r}NeQY+0<~?940`1>gC?XYDKw$tItG{zNDd??*p?R zufQb@cEjM8jN1*{V}Bh-xjS!e(^c`Cx=avzRhje`^>vvD@@##;>taoG+?sBZMM?}2 zax&>t9w0)dfRHM_40t6id>G_U$AEy|Y`!BvyyUvyb)BUAtn1+$fe{^idtD|XQyviv z!*J0(%JdEBrseNpNsiqtpm3c@29cz{+|9#BkQ1)<^p^?qJ<^iMKg3!57^X9Q1r?4eRQx@`u3j0RhsoJtkNwv z2?*@e68Fofgm^ESm}x}&Xh$#=W1s1e%c^+THV7o2Px^CCk;i)3?GjLANkV@&C*=m+ zUm&1pH;!mG%-o0aG_(z3kd|R}34Eo#Xs16-5$xP6Y2Dbdb6Y(>b~;%QQnN0f4|Ya& ztWCC4CTzmUyUqi zohDvskhjcXOyXRI)ha8WcK?Sk5$suA4E<`ObnM(N`9PeedKy}>R^HI+QpMd>%o6xX zTS1cH8DSjcw=P@`ZL2>?dcRsEV0#JF9q%d zYKiSo(1$%R6W0{>fZ<^u^L}7X4<8G02B0jdI^AEh1%%GM%D=pLzLL;=%`UvN4$@d31(Ts0u zy;Uo3YIUhsUNM&<>M`%Vx7NCvxT6g8Jc1%>4YnN+FAm1htIO#6sY%h zaw`+;;iq6@*SM8K6TiA|Z-R@`I(Eqe1N&5nGGLE7`{yL;Z`<(?8BviqoYP;! zG;JO9U-_53?@0u41N+|B-uHczzE7WHSn`WYCfPX8|JNpHqKG!Jc}Lv8qy!cl?*OOZ zO?PA>7Ab&-Sb~Nwc*4wvwEMlvzF*Mp_dEa6&iC;H!2L}V09IY=_n6iwfnV-vN%DsU z+v=*t+#cr#cK^Anf~#VWI_ahsf7l369)X{%AL)-a%7UG{XWxyrkru3EZHIS*>eQ@J zm9S+Bn7BvDti!7K4_c~-zt5)IU2K`nTkm&$Tby4D-7r_&FQCW{tPLz!PdDxWQy3Pm zSsf$ikx$Z-H?ER(+r~_!X6>l}0MfA{Ub!*TxRea;xiJ%w9rp<+T+En_y`vMao3ogN z|CZ|n6yB1||4MT&Ns|A?$!iL0#g3n4BKzfV5i0@TG!|W>6jDJYMAt}9qkok61*~?$ zif!@iY((xIZ$YHGiv^J-H^!oIvarfe2ndlY=AYF`-~kIFhmKefiS$XVbt=VTwg9eR zb|~Vvv$7F6R*ewJ-=OPcYLMR7-*3}N@n52Xm|mMRkt(8DkWf#?n(fa1>9Hs^aQVA; z-B~U{X0dP$_xFrDED*g$s&>nn{(8y3n_12*+>Q{UYb`v(?mJdswl;%-{e>0T^nNpI zOpSQ?>}+JI5ig=YShc;hKGO(GmsJISm&!#2!N`?d(w@G>Z^4zJXzqm1UovEXdN7I- zMc7$az7wmq8*a~pxZ;=MTCv~lnW!W5{=qDer{rKwoY{wtQ@r4I=AFx(NVUOdZ-X=L z{yyo5EV-BRIjT#RAxbCK#3Az&Dfr+o0D(Fb3Md>((%(sQSD-}uMpgWJ6YQ-9`qRg@ zds8NIhGv_>Xh6i#%mdKlgd~)`{znKLnP~)4d-MmWIHJ&05j3h7{;2C@1Z!rJSpf<8 z%Ke`M;3KXTP#B+EUSF3a-$)2a&M&8h95Wo0zhgsV!DEu^I$9tP?aUtOB zUz=gE#|{)w_@eXXGk8QujGrY{i>qg3fi!amml9)ke3-HUj&|rix(tJvkSpWwDQ~Eu`v140) z;vropzWut+`iC&Gup;0hr7m8^r#_GD{2E#ud0irWzkO>~^St#fR9h-1!ngBVGkl1_ z_sNZk@X_y8mz>Mtt2?Oc+fg8KaOXA%GdI} zIIMtfvmw*7k!rhfdNy*_&2srp<;}W&T^czsYibIVr|K7iiLYvNl zQ5!-uB^3Emsf*Mop~yONP5<`eAJ0mH=V&!=^ z8koLxtYv)y-(||=A`XonRNb<*cPLPgHJ6+xymg+7^s=-#LdBa zh_YeMMoDAY*?N5SAwAg!*3lp5*OCvmwVJyVs~$SlvmB7vP5lfScAoL3U_FG@9v`fs zr}aKh4pujUo<6o_C%(KU6X~?%3B?Ci-0I-RKFmaJReYTOI73r!cWcng5I@4| zpj}wm$od@YV)brf^`tqux~@mMV@l&@apo0p z3e}1wbQ*Mhw()7vnoKm$LY6E*NUBbi{Xy?0qm5$^3W&^D0Ime^V*i6?Nin(aDglMd z&VAk&q$bjT%A;#ljI5_f^DYw*QbJ(HtCq^8&Mn?clsbBa#>b@(mr^2BBt2JC+IUhsQ_0KbGa@lvxd8>HMBf51#Ivl-hmMNYiy3_bvqhNZYXv>$2>ORCkC)hdNr z8z`Z?>nmL+MPKMi>0aG3R+n(vo{QBNW3>I*&!P3p1}4(Z_1~C5ee@fscF)C$wDZ|- z%(QdcKB%T%mq2M7Z6bX1drIFqd=?5{E`^Wxf7l$r{aX6P4Rx^8 z9s39<{Lz_q?$62ju_$6{m=creS1BPIvLmFH%6*+%ym^d}b1wbaXfD)^*amiM8rToZYdtFuLAXnDS#` z-_bHUm=Zde64fP7lr|hnmwfBl{b6QT=2V%_L$yApxa9%#($75V7v@9A*NMJXK?;=f z3(;7qddW5f843bdS(sN;#LZ|wh;tyr|3RWT_r`qVs^a9;@Z_ zWUf_?gSKEhbf9|V$Bs)Me#pslZING>0`GD3%3%PddONG@K~<_-JmYbo*)sx!r=Ct2eJM2_FbYid>7Iag+*z0-K_r`OzD;G#t)kBP06gRWF|ZK@1HoN0p@ z{y4&arc3eg0|FvLjoKnz4iAd{G2H!g48{?K)v@640W2UxY0 zUAFr25A4iIk$teNg^?c!Y!Bg<^TIdjx?WR32WP2)Tz?khnikolO+D*tvqFPUUmHdm^biMLSsvRN8?`zZb0FXd$zep#e((7^e#lm*)iw<(b4j?s6 zeG^H|LthwEL}Bg9xTKV>iG=)yFU<6QGCN_f?Vm`<>G!6Crm$Jp$(=hXz1zV>3+>() z9pvTh&|=Rd`2P91Az7gfPG_vqxa>suUjEz+Un4s<`~`{d(eF(>&$1?6Cm;Vy*Ny%k zxjvEi{vrgV_+^>ifBrc4{bya${l_$1->D8}p-tr}iya|vH_QTUTbb~J-p|O9Uv)k5 zg|_4@WqVIsrtObg-Mr}P+D)sQL&i1$^e3-KoV|Iw&9moZ%XV2-;_Qv()tD9Tv+P(J zgf&Ah)fadQok-g-SOWMna z91ov23BFRJ<)wKLyQFnIhj;3xM0jf}TDfPsY7^tY&BC=6hSz!wx`H72*(IRJF*2{G zfWlMscKEL~=h0u7`l0U+GlZj zpeZYJZBcp(-D={?Z_>NFDsEks$qk@Y+xx4SkiVp$Inn{^Td>lKom(XBuS`zRq)ttz zXZ#absa1{-fwUIKUDAic(v3UicBy(`_wiY%$p5=HT_2X~6R)M+L_Wq4WKA&+`wjt% z$?KZTuplPlV-eP9Ewx;BupT07u~N(a3{TW`JvxH@Z?F*zd4t9O{SylXWGi?h6B(g? zu6!dCLjB-C&|9O5Z@-a=6qlTfHQVmjxtQg;Jdm2?27=NeFh~>qZ!jaiS76xUs+FJ* zcy?tbuzm%+z^J9c}JMf&U^}FVdijmy8EH z(F}-SwUA?r5h0U@vn;}z_`-OukUQH0tPJNG&&TMq5y7%3vUX!{Sn+|cKAw&uuaG~L z!*;2C-DEJka;^oD=PzxG@&sRFO?>0^OyoznR$TUaCZKIt1mZbBhR{t!+{DE!PMk;# ze%c7c;Nw3DDBLe8zf;_nsjaYE5TZ+QE_=a2N%HJO0RVRBAU{@ZXCKT4yN4zVLL~Jl zWinFbDwo_9Yc}yUzM4C7>6U1CFdM11&)En57cB_Yid!DchLO@*9mX2EFU2M2)r#|9 z%j6sTx!0I+#m!7(@{d;y`=>wgIC@gGTkaa^sD$7gt#ZpWbEn`0qE2r9uUZt>m(p1}Z?5{}xtiRq{#5u5$j%di9kq#qznm0qLUIM&pv&V{S zhj1Gzo^dXkopH(>6DEKOYz2>Mk`q};Ue7iDRtcWY{SDZD6$ib_W*2MXU}HX?>(Qo% zSG4K65(+=krt3ASG9vFUVFwtq864?AD4fA`CQHpR55Tl}+kF1MHQtoILEN{ z?#@j}rK(h!z+EA#DNM%q49mIW_Z#}UkQ8X*3vY_h6U|*f!h;YZzvc*tyw8=acIHNq zbrn4roK2qDTx|o{B?I-|QE-;LXop}d-s`Zl!7GtDaiLPMTDga_^8`PP46hP6_V)0j zEwa59LVm%px6(V}2CQ1J(qP18)Uy8ZMkb0ZA=e`3S_{kg zP@J|l z8|~4bp2B(7qlnwHYPK&aL8bT3`IPpo{vILXTM?W45-@LbGLrH1%N)gr%h`#xFhi+|Kdd2Ex@?Jr}X#@;CXc= zjILSz_68f$hC=ga45Il4>TBu(Y!}(V>%y?@Uek_{_9k8Z&6g*V&An8~zvMoI)I1k_ zs?GS+rVK#Cz-OIEbxeo0@7J-m@y48l5avy`+b{rj+2?aCuK_E3=R5G4hW<9BZB2?7 z$`lq=rkq!Pqg$87=dr}JrZVa(U~Ye|QR|q&sb>b+!Ng~&4DzduaQ5~)GLYURIeI_q zM6#py4|F43%%W1JVTu2V)+zh#X>bVo9xju`QuoPd3f6aG&!-CpVtM#+>^bB=66#(A zl45a9&GVNa6g{YZKN}>SQ_nb2G!@H5>10nEfu(wCe>!kf*sz9x8gkxORCxmy;c{^r zmTh`-ke|5@1Tvq9-3OwZWq!&!Q`)-s8DoFW=!_ktV-I7Qzy4__i-40Imp@GfQE!4E zx;S1C4ao14Q3Z7_a6ibTqur5sfpi-vZiG5Mbh`_MB7q!zR2E2}zxJidJuj#wpgi|z zcO?20=m7xY?#DP3J1ZAI!~sV0qaR|aVYEA<-K*=S+}HqeW92h+&Mt#B&QD(jQ!;54 zksHZ0Y$c*%1{r@SMSg~ioQQ#6A*fic@I`AGk=mVv0{(Uf$cmG21K;Zza|6vXfP$`0 zJwM=}hUdzPCPFSgh z_pYUWmebS|*V&MEKaKYM$f|0Gq|@s+F!@rp+GYBZrYDW288=&+E+I`bp-EK-a!8wf zHX;5U`1y-epBjC%~;{@TfF2Ab*@#}~11>;|S38lrDcX(txR7OEDFed~xBA^!UIxsa za(y{lxIKdi5IwL|OKwDWfvVX3cR>uvcUQI1@0naB)OKMby z4z(fe5oiz>ATdwwEhpwytNVg$veBuExo>+xCzP%izG(o82|5Hwpe-I%ALfhlk ztim~1sm+D?TLw-B;Z|WK7v#Sw&mefLtuQq6SaH?-J_F&Jo-nFs_9LWb955-17B0Vc zkTvcWDo<9|Q&Aq<>2GB@sv>wuCvts|{D;%kXB{@ARxCHvZ8E67feCHuhG?EZDxR$T zk8UPO+qBZjGVL1kh-E%Hh}IVz1j>mygP3O+^(Kal1JxrTiy#<~ek-yeP3_cm_5GD` z9^LWs@a%YZWp@NCj-9t;pc*b5nRA6yEIQpyQ75DvxP{hEPFFA|7mH3${VX-+xeN&t zxfBcbGYLT`uB*xkW^Lrq(4wZ3ooSca)Z2zMzurZD4Pj9|muPQc!LI5xXAJq+sEV78 zkUG9Fe#RYVcl2O>rHW$;q?z@J1++X~0hGrZM{er%Si)XNh#ssz4EZ^Y+?<4O6=5tF zd9hS97t2KjSSqTd*Xk-lX<(4zc25Sz8?rT%Zw6y>c3lb-O%FQwStlrOjbE(Fa`yd0>KUBu7F=U|3O&>lb#gEw42E! za#jmUqdGO;hO}~>X^7SGe6sAfg56a8A^L#dGuPFY^TLgcG~5g3Q> z1((_kMosDI!7}#kMox|Qzd+VZK4*K`sQ+M$Us;Ub?nrI1C}7!f8R;f?niE3R>L!ahp#%O=WOkKdDP8x6z=1suL4w*2U-ncxhC@GJhrQRgCqjmFh|M&s?snd?YMYnNfN{ zefpHKHkI1F$RMTyEWs}lz~Gp zk+ps*W&H$uc3Kjf?Bu^GrKjO<4S*rNI`!x$SmCRz!Osx>Ht1!LBaim5A?^M1`r8gm z=5KZUpb2yz+l;7-Z$kPRzG4xJCjAPglN`FKX%luQLI`{SvMFs;cmZjg}wQ zq1XUHWb-i{+?!8;0AFW77AE%bt5u@|4)D9y19G3T+mQD6^ZVb;DNkH}SaDo2F@v(n zqr!$h!pizk6XcUS@KB=qk?YW{>6>D1D4BK}imvK%KHE^DzYA9Q#>Gs~T-vQu*ZF@h zb|Urj3abA#nw<7dU4vxgF;T>h8>%XdG#~`%qYguV8IAj&|ZXj)6I{|8L z`v+kf`_ErIA%mUl9DM;cO;lg)ZX|cyw3F{O0Wym4X%jN&iAx`EK5=+Fd*YGqARw#b z+1pOp;djLN{T|<`N2^rS-9~eqo}1pQ&aa=OM@%BB4~P9|IX!N)3gJGG%TjUz6A;2b zF#1l9UaRi=M`uh+8Pg!bfu*5(O8n1erfVefzszvomTKt$K6uqblusBCbGlg|AP|M> zcG5&O+THrFvK-TWq@fyHUMw$9XWumezBHx_9ey+FQWt7bp(*?&b_;DnaL10nu|sTb zPfHWjLU_$+n&V2;YAuB(wSu=HZEB}+zKw0SJF5tOxozj3KYLPsL_!x5L(^L+Mr;z{ zPTe_E$?W(>?lzj{ z4Nf%Cje#aLJ;jE!10CmE?}uzj{Lu6>czA}1XMa!G(Ov^KrEC*mCt<|uyf`i_J4TJ6 zMz?u3#Kh@vlmAAnEU)ZKCmj9({r3a_xj7ve$o24J`P{y-dn>nwT7^)5XmCA6);a;~ z0Bv;IVkeTbdoFe&&we5J4ad^0gd#%tLjbt0h5%eu<3!y4aBCo&>@BWKYMkhOwzmwV z{fFmJnPb}`L%)uQfHJ=ZqF8+Jwanx!^Y_;<_0L^3G4+pRJb9GsjL#={V-0J0$wt*b zu#3xUsOrx@uq!Q;5MB?jk{6Ky1Rj$4>5H65cAXlXf%ILTt${Qw^S!Br5x5jsTl)F~*0!HR@OVz=Q1sc|yU)Ge z)}BY72MRn$1qQ359O!-pgyMO23E^Vq0g`Lc@`YDYJr*1!HcVvt8M+CEkaZjU4$;ZX zJ>NEnWr@6AmX@JdtQZ$4Vr_I&OcT{XSsmNEFxi$DNpCtFyR zhYULH@4BvzS)bqy4%O;%O>c0g#Tz_RT|@gC%qO}@Mc&leHxe3~^(KJ*@kp;27`RET zVPI4-`0?uiwxVa^W=x*9xJf&QDDoU(TDl#f_`= z4FLP+FNxzj{f2dXSJLqv>XA4;^1Q{(?8K|OuJ$J5WADc~iTh0cTDD`nV2vUG2W=NL zsRz$;NGmyKyqB)@?di)HBwCwZxiwTQP zqI1f_vZJCJd__Wa?2Anq$e&FmHM17iYgHC;V5a(I2{N5H(y`(gQ^l-fz1vwZx4GlA zRWXiwq>6IXi?G7?uVQ?3;h7Fy_54b)VTz-TM)U8^cIeU1u)=>}l{vBq62#REKg|~> zN)J7tNo{TC5V-4}4?j1b=e!`Xp!8hWAb_RX*dnp3<;})gZK!&lu@CBKjN)A_h+LN+ zY7#<_go)O2r0Te8Z=5=AJ@owqxNy1dg|@l*SiU_!+!}ZkOBMN8F3Fc&2Of7KSxVy& z^0WkQ7U~@L7rMxl4Zt$4B(h2`p{}+8Y-WLr)i*1Qv<61)ANdp)=QdH>XmG`{KX54e ziR2X3KfTNNWAr&@>i$m_HFeJ=^u9NX1$mjD!)yrp$V_bjfw=WFhqUFLaq*2xv3Qu~ z7hc>8@(a^4S#OBIc@*OcQf?@r*rK!;a`J=kFP0sv9|hyG^e9a}8B`%kICU#M%*wRb9zjw`u+3&Nz z1)&nf%lV{TIM|jdC@-J{W4pX2hwNt?$Ob8GApc8;>c8#dJ|mrSAFPjdcb||t>yM~`loc$ww<*+DR3V(XkNvJE-rzb)sQbcMjky_lXr%r@*A#}0_LQ*6AJ|(qc zPrDHOst3(UlrKA1H57{llhR}&35?^65+zUzg~lj& z_6driCWRcvl~{H*f|tPOcbUR@-~+7isq@*I|M)jZjX4;8vndHj{1>oejdOnNSd%`V z9cvVR$2|7<;8Pvu_~5v6F;A#r#to2&FfMKOM`p6@8gm^WIb{1@hYB)=8rYcvL-FP9537JdYfn`VFdUBfa zFASmBApDhBsfE)FhvnKzV`TS0d7~1V5vvq_)Y8)oy+iAK}+-@FVw9uZk@Fuu%BiEL z8JbF|SS(e)7-Ym1IW|7xGz=)Eu$-!?zT<^Q7#-Yy3|8>Rk95so$n(Z3e(MpF!Q5j! z{_*iR1{3Iq&9Is&-PpMfer+9r45c))<)?{iVK?KZl$^B!HG++Q%`kBFxs1X6xBbNE z%+xFAm2;5(BUMyCy#p{TpMlRgJjaQ&8E16e9no^m7{||yGi<{Qy23wX#^lQ?mIVOG*LZ$|58de<6IgIzsJ4SimwEz003V$fTCgG-I9Z73Md-JTW z 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 z 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