From 41595cdd2a17b9bfbded215941fb5cf5e2049f6f Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 11:01:23 -0400 Subject: [PATCH 001/114] Relock dependencies to latest versions. --- Pipfile | 5 +- Pipfile.lock | 5288 +++++++++++++++++++++++++----------------- dev-requirements.txt | 259 ++- requirements.txt | 166 +- 4 files changed, 3345 insertions(+), 2373 deletions(-) diff --git a/Pipfile b/Pipfile index 95aa211..c7656eb 100644 --- a/Pipfile +++ b/Pipfile @@ -12,15 +12,12 @@ flask-cors = "*" [dev-packages] nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "development", extras = ["dev"]} # needed for testerchain, and must be editable -pytest = "*" +pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" # Tools pre-commit = "2.12.1" -pyflakes = "*" -mypy = "*" coverage = "<=6.5.0" -py-solc-x = "==0.10.1" [pipenv] diff --git a/Pipfile.lock b/Pipfile.lock index 5a4c43e..92f44f6 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "113917e763ae51b7e1634dc48dd2b1ecfa93fcee8c837a088d0bcf05ba4274b1" + "sha256": "feeafffa39620228409c72e746bc7cfbab89196493db3297c696f15fa1ca2343" }, "pipfile-spec": 6, "requires": { @@ -18,81 +18,96 @@ "default": { "aiohttp": { "hashes": [ - "sha256:01d7bdb774a9acc838e6b8f1d114f45303841b89b95984cbb7d80ea41172a9e3", - "sha256:03a6d5349c9ee8f79ab3ff3694d6ce1cfc3ced1c9d36200cb8f08ba06bd3b782", - "sha256:04d48b8ce6ab3cf2097b1855e1505181bdd05586ca275f2505514a6e274e8e75", - "sha256:0770e2806a30e744b4e21c9d73b7bee18a1cfa3c47991ee2e5a65b887c49d5cf", - "sha256:07b05cd3305e8a73112103c834e91cd27ce5b4bd07850c4b4dbd1877d3f45be7", - "sha256:086f92daf51a032d062ec5f58af5ca6a44d082c35299c96376a41cbb33034675", - "sha256:099ebd2c37ac74cce10a3527d2b49af80243e2a4fa39e7bce41617fbc35fa3c1", - "sha256:0c7ebbbde809ff4e970824b2b6cb7e4222be6b95a296e46c03cf050878fc1785", - "sha256:102e487eeb82afac440581e5d7f8f44560b36cf0bdd11abc51a46c1cd88914d4", - "sha256:11691cf4dc5b94236ccc609b70fec991234e7ef8d4c02dd0c9668d1e486f5abf", - "sha256:11a67c0d562e07067c4e86bffc1553f2cf5b664d6111c894671b2b8712f3aba5", - "sha256:12de6add4038df8f72fac606dff775791a60f113a725c960f2bab01d8b8e6b15", - "sha256:13487abd2f761d4be7c8ff9080de2671e53fff69711d46de703c310c4c9317ca", - "sha256:15b09b06dae900777833fe7fc4b4aa426556ce95847a3e8d7548e2d19e34edb8", - "sha256:1c182cb873bc91b411e184dab7a2b664d4fea2743df0e4d57402f7f3fa644bac", - "sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8", - "sha256:28d490af82bc6b7ce53ff31337a18a10498303fe66f701ab65ef27e143c3b0ef", - "sha256:2e5d962cf7e1d426aa0e528a7e198658cdc8aa4fe87f781d039ad75dcd52c516", - "sha256:2ed076098b171573161eb146afcb9129b5ff63308960aeca4b676d9d3c35e700", - "sha256:2f2f69dca064926e79997f45b2f34e202b320fd3782f17a91941f7eb85502ee2", - "sha256:31560d268ff62143e92423ef183680b9829b1b482c011713ae941997921eebc8", - "sha256:31d1e1c0dbf19ebccbfd62eff461518dcb1e307b195e93bba60c965a4dcf1ba0", - "sha256:37951ad2f4a6df6506750a23f7cbabad24c73c65f23f72e95897bb2cecbae676", - "sha256:3af642b43ce56c24d063325dd2cf20ee012d2b9ba4c3c008755a301aaea720ad", - "sha256:44db35a9e15d6fe5c40d74952e803b1d96e964f683b5a78c3cc64eb177878155", - "sha256:473d93d4450880fe278696549f2e7aed8cd23708c3c1997981464475f32137db", - "sha256:477c3ea0ba410b2b56b7efb072c36fa91b1e6fc331761798fa3f28bb224830dd", - "sha256:4a4a4e30bf1edcad13fb0804300557aedd07a92cabc74382fdd0ba6ca2661091", - "sha256:4aed991a28ea3ce320dc8ce655875e1e00a11bdd29fe9444dd4f88c30d558602", - "sha256:51467000f3647d519272392f484126aa716f747859794ac9924a7aafa86cd411", - "sha256:55c3d1072704d27401c92339144d199d9de7b52627f724a949fc7d5fc56d8b93", - "sha256:589c72667a5febd36f1315aa6e5f56dd4aa4862df295cb51c769d16142ddd7cd", - "sha256:5bfde62d1d2641a1f5173b8c8c2d96ceb4854f54a44c23102e2ccc7e02f003ec", - "sha256:5c23b1ad869653bc818e972b7a3a79852d0e494e9ab7e1a701a3decc49c20d51", - "sha256:61bfc23df345d8c9716d03717c2ed5e27374e0fe6f659ea64edcd27b4b044cf7", - "sha256:6ae828d3a003f03ae31915c31fa684b9890ea44c9c989056fea96e3d12a9fa17", - "sha256:6c7cefb4b0640703eb1069835c02486669312bf2f12b48a748e0a7756d0de33d", - "sha256:6d69f36d445c45cda7b3b26afef2fc34ef5ac0cdc75584a87ef307ee3c8c6d00", - "sha256:6f0d5f33feb5f69ddd57a4a4bd3d56c719a141080b445cbf18f238973c5c9923", - "sha256:6f8b01295e26c68b3a1b90efb7a89029110d3a4139270b24fda961893216c440", - "sha256:713ac174a629d39b7c6a3aa757b337599798da4c1157114a314e4e391cd28e32", - "sha256:718626a174e7e467f0558954f94af117b7d4695d48eb980146016afa4b580b2e", - "sha256:7187a76598bdb895af0adbd2fb7474d7f6025d170bc0a1130242da817ce9e7d1", - "sha256:71927042ed6365a09a98a6377501af5c9f0a4d38083652bcd2281a06a5976724", - "sha256:7d08744e9bae2ca9c382581f7dce1273fe3c9bae94ff572c3626e8da5b193c6a", - "sha256:7dadf3c307b31e0e61689cbf9e06be7a867c563d5a63ce9dca578f956609abf8", - "sha256:81e3d8c34c623ca4e36c46524a3530e99c0bc95ed068fd6e9b55cb721d408fb2", - "sha256:844a9b460871ee0a0b0b68a64890dae9c415e513db0f4a7e3cab41a0f2fedf33", - "sha256:8b7ef7cbd4fec9a1e811a5de813311ed4f7ac7d93e0fda233c9b3e1428f7dd7b", - "sha256:97ef77eb6b044134c0b3a96e16abcb05ecce892965a2124c566af0fd60f717e2", - "sha256:99b5eeae8e019e7aad8af8bb314fb908dd2e028b3cdaad87ec05095394cce632", - "sha256:a25fa703a527158aaf10dafd956f7d42ac6d30ec80e9a70846253dd13e2f067b", - "sha256:a2f635ce61a89c5732537a7896b6319a8fcfa23ba09bec36e1b1ac0ab31270d2", - "sha256:a79004bb58748f31ae1cbe9fa891054baaa46fb106c2dc7af9f8e3304dc30316", - "sha256:a996d01ca39b8dfe77440f3cd600825d05841088fd6bc0144cc6c2ec14cc5f74", - "sha256:b0e20cddbd676ab8a64c774fefa0ad787cc506afd844de95da56060348021e96", - "sha256:b6613280ccedf24354406caf785db748bebbddcf31408b20c0b48cb86af76866", - "sha256:b9d00268fcb9f66fbcc7cd9fe423741d90c75ee029a1d15c09b22d23253c0a44", - "sha256:bb01ba6b0d3f6c68b89fce7305080145d4877ad3acaed424bae4d4ee75faa950", - "sha256:c2aef4703f1f2ddc6df17519885dbfa3514929149d3ff900b73f45998f2532fa", - "sha256:c34dc4958b232ef6188c4318cb7b2c2d80521c9a56c52449f8f93ab7bc2a8a1c", - "sha256:c3630c3ef435c0a7c549ba170a0633a56e92629aeed0e707fec832dee313fb7a", - "sha256:c3d6a4d0619e09dcd61021debf7059955c2004fa29f48788a3dfaf9c9901a7cd", - "sha256:d15367ce87c8e9e09b0f989bfd72dc641bcd04ba091c68cd305312d00962addd", - "sha256:d2f9b69293c33aaa53d923032fe227feac867f81682f002ce33ffae978f0a9a9", - "sha256:e999f2d0e12eea01caeecb17b653f3713d758f6dcc770417cf29ef08d3931421", - "sha256:ea302f34477fda3f85560a06d9ebdc7fa41e82420e892fc50b577e35fc6a50b2", - "sha256:eaba923151d9deea315be1f3e2b31cc39a6d1d2f682f942905951f4e40200922", - "sha256:ef9612483cb35171d51d9173647eed5d0069eaa2ee812793a75373447d487aa4", - "sha256:f5315a2eb0239185af1bddb1abf472d877fede3cc8d143c6cddad37678293237", - "sha256:fa0ffcace9b3aa34d205d8130f7873fcfefcb6a4dd3dd705b0dab69af6712642", - "sha256:fc5471e1a54de15ef71c1bc6ebe80d4dc681ea600e68bfd1cbce40427f0b7578" + "sha256:00c92fcfc255bcc3f831df6210358b8e179153353feadf060e8264eb62ce458c", + "sha256:0303a95d2fda431d80b24b6c8e1e588e4625806304d805527788094decc902df", + "sha256:07f4acf59e3d88c229c8d726cd3ac8d92457f20c8b2ac25afad22c9d9e0a198d", + "sha256:0cf569a3eb1f74553623867526d59969a5f3f66c759f4acf0b3530c985095e77", + "sha256:0f15ca09841d43c32577d47e458370c94c7b123bc746722d7bf738132f929f5d", + "sha256:12c9b8d5e4c410bc9c5d781491a695b07857671d631ca921f0effa53dbbe9082", + "sha256:1743e84dd0c04cefce8df0866780eae991a2cfe36ac4bef1e04aef640c3dfb8a", + "sha256:1815bd39628afa7085bad883b8cad84dbdab84a273ba1a5bf571177ae267011d", + "sha256:1909936256b296505bae30e092c8487e4b14c89748612d87fc301bd1b08401c3", + "sha256:198a22d959f969bdcf92145f25c07bb5a7f65dc05c3735047447aa53d38142df", + "sha256:1ea45264d399f82da4048e724afdf5f10318d62ad89fb9dc911eafd66e3d79b3", + "sha256:244c4d488eb3a2abe008bc614de4ce3a34abd027e518a595f8e794747f23d516", + "sha256:25703823f9f96c85a7f97a6fd487beec576395c9447a4146feb08e422fcfc9c2", + "sha256:2775ed7b86e47084b5df0e7e64f79fc9900ef6c3d7e247a8ea2c8a7e0763b68a", + "sha256:2f077cc6cfbf05c2e8ef817dbbceb754a578db5aa449763f328cc6816b639632", + "sha256:2f2ecb6a3dd0cf78da60750ef521cd5f16e72e599232b7d11e7e14182f674f53", + "sha256:37307e2177a286482a1e9c86626c333e2b0f434d6afeef4d12e48be582f476ce", + "sha256:3893de9760c03032d2e5593e23fcc34a8be995a8311f64435d8413f08248929c", + "sha256:3dbe4ebcc68a7a7e841f187b08e67d49af5535065c67ecb9ee2c82a186cb40c3", + "sha256:4036577d5226a98c68292d6a7aab08c7143e0a827ed0a0beba769c3340305bff", + "sha256:409b43ceed9dcc52150813cb695130519dc2876d98f941ce6d30a5bc4ff80451", + "sha256:42fff01edf90358ef4e0a6edd235759e4f9344a6a6ba60b0d948e95d4aa5adf5", + "sha256:46a649d6c8cc0d59d9d8afc8aa6328d349f0cf6e579006523ef97fea03f72b8a", + "sha256:48cf475d3c621f9437220571acfca1317899868412d27760b54a3a7ae7c84530", + "sha256:498e62d934f80dab3384abfc1003013229e4c82d9eb904c51e5f6cea26ec56b7", + "sha256:4b0a6f5bcbe580cb156ef9bc2d59821889b141d894cbad2e7e352b2e75fb4bcc", + "sha256:4eb2befcf4e57c5e2218ff3e50b73b4b1bd56685ce275c45905d4687653dad90", + "sha256:51e962768a4111fb06dfa58f1a16e9ff299465df11756c416cd75ab4c9b42962", + "sha256:542eb584021cc99057b1f39f4b8bd5d25ae554ca21afdfc098bd60f91509640c", + "sha256:599aa2ce967bea2580588833bf08d2df5930cd2ccb618e8d96dd67dbe063b692", + "sha256:5e94500d9653e85bfce5d604e99f71407e4104ad4943caddef379b6cc4d6e07e", + "sha256:61fe1eb4156edd858d2a45a76472b67d82629d4eee0770b30aaf6f9bccfc664f", + "sha256:64004b0f1174c80674de4660b4655cf47333c9bb70ef64fbe5f5befbe75a83de", + "sha256:6660b33e100b4efbc2ed1b0765b97d126c80c56f5b82bd9865d938cc4a29f4a1", + "sha256:66da9965d78206444640fb34364677564b77286463d6aa461a9ae67e09479366", + "sha256:6a25d945fc6225b1bf7628229a40b1cf00f0a122843dafafdd09c9a921f6e5f4", + "sha256:6aca9a0f7444c79f517cd1e089942885833bd00509e8ee2b1431d05e2080b781", + "sha256:6bbc14a195fb1cf2da16017d2201edf770ab66b806537ef95101ca31a2141230", + "sha256:6c987fc1646c8272c4d76b0361fdec957b3e4082ed8fc9f5143ebdfda4f265c3", + "sha256:6f70c2bb17ec72839dffd7b023450a0ed17f73426e2f1f0833f024d78a64c6d7", + "sha256:7138f023e38cd108084b1ee8455be14a8e88a51f50510b482624bf204eb6ac44", + "sha256:756ad558853e637237490f2d203dccc9f93779fd2708b66a5948a7d785aacce3", + "sha256:772e948d02592bca1f551878b68b7e6cedaad471d2887701d524d390b56a01af", + "sha256:793a0bcbc3ea851fda46d72245d2f53f59c9a38bba480b83788b61afbb803725", + "sha256:79c1924b54c44a7dc6b7e866363d06faa6f03f490275d572b76536491004ea1a", + "sha256:7d9f33cbe36eda9ae33e169c27b33dcfd3791972809018309ead35e0997024b7", + "sha256:811a0d8ecf4053224cd54765654f5952e59983cfb07f8f6ee913330a2b4196b0", + "sha256:8151006ae30614e5c75e2ff05cdb51242214aadda0ae28c7c449007e28362651", + "sha256:866fe95c3c4f82ae155271b4fb6a7a9352fcaf6d6f7e02e05074a3c08a1dbd25", + "sha256:88bb9378ff3ff76a8fef3714976827ddb66fe397cadb64ba9bee5d954bfdf887", + "sha256:8a70e88ca8d890056e52a0b41bef755e232df3a0800ff9fdcefea1755cf23dc3", + "sha256:8e3cec205409e011ae872cbedd19891135ffdc1832ed353c8af4cef4b1947054", + "sha256:8ebb1274e8e5950eea209cb3b674612442aa68daac57c97872865bdf63449286", + "sha256:8eea173d8fe9f04f86f1f8d711dd23c0310cf55f979b1e7b949fe15ba776e018", + "sha256:92f5f3e78a6014b3060112be7253b3baefbbccf2147e5f8df1b3fa163a74d9d6", + "sha256:938c6f4236f053802c7b862ca95ea8c516052a08a4f369de7d4a06fd6a38d6fb", + "sha256:9bbcac98836b6393b1ed568845335bd3a1106077c8e32a615e3259a73665f449", + "sha256:9cb8203740284d385869381a461fb1ae487c166cb669fd3002f44fd44bb7f187", + "sha256:9d04aa8efff6ce4b22ec526cb63091f610a3f1823e22cf60b5fef88ac8177db0", + "sha256:9d09035bbc722f9ac8057c53f0d984f5b3bd4f3fb9ff74f7603fc3bbd783489a", + "sha256:9ebe11ebaf1b44e841bb6f0cf79f16c5c8b2d98e0df7c8d5ecb4bdb77faa9d60", + "sha256:a0aa70f48dc5e9adfa38a1a5c8e3aac20efca7370143ac94f3cef7c068c6cf27", + "sha256:a33758b5dbff2eb56270d441222e527d6e0e96b3886a4d42c9cfcdccc6730baa", + "sha256:ae3a20fc2f3cccdd2d2f319d0198040a778fbda51ff6cece9a1dbaa67cdd11ab", + "sha256:aec83bdeb4b0a2f90b4bc07b9b7339b37c39535b8dd01397e0d2a22baae86b42", + "sha256:b66b45409b7014ba1c4f0d23cf2d7a93ca8045be35660dc04828a1615fd805c6", + "sha256:b797d5ca7ae816f3b7020fae479573efaed4b5be730dfa6c0b8f1d25d4ec6207", + "sha256:b94ec6e2389a0bce9e1393322f6efc928fa9f6f138656f8333eaa625ac62077a", + "sha256:baa71fddadf208c2dae2092c229d928cb4d3fc12c769876a54b8ed53e081fe06", + "sha256:c0563bf4e2069da4d3a6183acdb2f8f69e6d3d2cc794afb6b001f47d89b10618", + "sha256:d17bdab6cbfca083c386da5a580c6650221024fcfed6bcccf5cce7d8219f2d49", + "sha256:d31e9422387b77a49fc01e966e128ea06688ef23495f6a999843f75ee2f481be", + "sha256:d38df4ac8a8d1bd2c1b77ea3de8645091d669ccf8a3f327f586b0f868c409800", + "sha256:d3cc1a1b215b8efa3cfe45aedb8afc6b46476df2f37a089894b0fd3f82262f8f", + "sha256:d831eec202a3a6b976195235b68e3f8a5f9a8e36dc329b7dd864da236ff3c434", + "sha256:d9dcf718c36dbec176a3c9f3d829ddbfe5aa4a405d7fc45be6a339319ff1bd90", + "sha256:dd90aa4ba84ceef1031e468b561ff53b68ecb5bea0f44f13ff930a29037ce880", + "sha256:dde54b9d20376f132020726156e4d8a2054714edd86709608d710f950e169621", + "sha256:ddf9a5eaaae83db1b9ad8c147833c1b9e9c17fd2886c0d7fd58b92212c1d73a7", + "sha256:e8d51a0d9c85819085b614e81da980bec5ef95cb5fae934ff0cd480d9f1ad954", + "sha256:e989dca3eeaf28e15e80084bd55b7872b8c9c79b59748a332a6d32026783bb93", + "sha256:e99cc2845ad4a88ddc44473d6222ef624c0424383f4d7369b37c94f93fee8004", + "sha256:e9e6c0ed1378cf0a6d77cd60f550eb8d57e21c13edb5e1f44b9707fd9937c2ce", + "sha256:efdf06265e2b560b1202626c83b35eed5bd30ed81a4493f73d30ebb1bc04ce8d", + "sha256:f7dcf4f9bc71b4ebac120a569bfe1604f1664da59cfa0abd85e15fabc4c3e7dc", + "sha256:f82f0110136281bdd1886529ad9cd9e76c6e03a2841ed923a3db94e9a19ad710", + "sha256:fbb89011e236e15899df0b49432bb50c7f3d89c9f1875c0c2b5bafaf9d5c2daa" ], "markers": "python_version >= '3.6'", - "version": "==3.8.1" + "version": "==3.8.2" }, "aiosignal": { "hashes": [ @@ -119,18 +134,18 @@ }, "attrs": { "hashes": [ - "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", - "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" ], - "markers": "python_version >= '3.5'", - "version": "==22.1.0" + "markers": "python_version >= '3.7'", + "version": "==23.1.0" }, "autobahn": { "hashes": [ - "sha256:8b462ea2e6aad6b4dc0ed45fb800b6cbfeb0325e7fe6983907f122f2be4a1fe9" + "sha256:c5ef8ca7422015a1af774a883b8aef73d4954c9fcd182c9b5244e08e973f7c3a" ], "markers": "python_version >= '3.7'", - "version": "==22.7.1" + "version": "==23.1.2" }, "automat": { "hashes": [ @@ -139,90 +154,119 @@ ], "version": "==22.10.0" }, - "base58": { - "hashes": [ - "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2", - "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c" + "backports.zoneinfo": { + "hashes": [ + "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", + "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", + "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", + "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", + "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", + "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", + "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", + "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", + "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", + "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", + "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", + "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", + "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", + "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", + "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", + "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" ], - "markers": "python_version >= '3.5'", - "version": "==2.1.1" + "markers": "python_version >= '3.6'", + "version": "==0.2.1" }, "bitarray": { "hashes": [ - "sha256:035d3e5ab3c1afa2cd88bbc33af595b4875a24b0d037dfef907b41bc4b0dbe2b", - "sha256:0399886ca8ead7d0f16f94545bda800467d6d9c63fbd4866ee7ede7981166ba8", - "sha256:049e8f017b5b6d1763ababa156ca5cbdea8a01e20a1e80525b0fbe9fb839d695", - "sha256:076a72531bcca99114036c3714bac8124f5529b60fb6a6986067c6f345238c76", - "sha256:0b756e5c771cdceb17622b6a0678fa78364e329d875de73a4f26bbacab8915a8", - "sha256:11996c4da9c1ca9f97143e939af75c5b24ad0fdc2fa13aeb0007ebfa3c602caf", - "sha256:119d503edf09bef37f2d0dc3b4a23c36c3c1e88e17701ab71388eb4780c046c7", - "sha256:12c96dedd6e4584fecc2bf5fbffe1c635bd516eee7ade7b839c35aeba84336b4", - "sha256:1479f533eaff4080078b6e5d06b467868bd6edd73bb6651a295bf662d40afa62", - "sha256:15d2a1c060a11fc5508715fef6177937614f9354dd3afe6a00e261775f8b0e8f", - "sha256:1d0a2d896bcbcb5f32f60571ebd48349ec322dee5e137b342483108c5cbd0f03", - "sha256:24331bd2f52cd5410e48c132f486ed02a4ca3b96133fb26e3a8f50a57c354be6", - "sha256:2cfe1661b614314d67e6884e5e19e36957ff6faea5fcea7f25840dff95288248", - "sha256:346d2c5452cc024c41d267ba99e48d38783c1706c50c4632a4484cc57b152d0e", - "sha256:36802129a3115023700c07725d981c74e23b0914551898f788e5a41aed2d63bf", - "sha256:3f238127789c993de937178c3ff836d0fad4f2da08af9f579668873ac1332a42", - "sha256:42a071c9db755f267e5d3b9909ea8c22fb071d27860dd940facfacffbde79de8", - "sha256:4d42fee0add2114e572b0cd6edefc4c52207874f58b70043f82faa8bb7141620", - "sha256:4ffc076a0e22cda949ccd062f37ecc3dc53856c6e8bdfe07e1e81c411cf31621", - "sha256:5276c7247d350819d1dae385d8f78ebfb44ee90ff11a775f981d45cb366573e5", - "sha256:565c4334cb410f5eb62280dcfb3a52629e60ce430f31dfa4bbef92ec80de4890", - "sha256:56d3f16dd807b1c56732a244ce071c135ee973d3edc9929418c1b24c5439a0fd", - "sha256:5a0bb91363041b45523e5bcbc4153a5e1eb1ddb21e46fe1910340c0d095e1a8e", - "sha256:5bd315ac63b62de5eefbfa07969162ffbda8e535c3b7b3d41b565d2a88817b71", - "sha256:5f5df0377f3e7f1366e506c5295f08d3f8761e4a6381918931fc1d9594aa435e", - "sha256:6071d12043300e50a4b7ba9caeeca92aac567bb4ac4a227709e3c77a3d788587", - "sha256:67c5822f4bb6a419bc2f2dba9fa07b5646f0cda930bafa9e1130af6822e4bdf3", - "sha256:6c3d0a4a6061adc3d3128e1e1146940d17df8cbfe3d77cb66a1df69ddcdf27d5", - "sha256:6c46c2ba24a517f391c3ab9e7a214185f95146d0b664b4b0463ab31e5387669f", - "sha256:6d8ba8065d1b60da24d94078249cbf24a02d869d7dc9eba12db1fb513a375c79", - "sha256:6fa63a86aad0f45a27c7c5a27cd9b787fe9b1aed431f97f49ee8b834fa0780a0", - "sha256:7126563c86f6b60d87414124f035ff0d29de02ad9e46ea085de2c772b0be1331", - "sha256:71cc3d1da4f682f27728745f21ed3447ee8f6a0019932126c422dd91278eb414", - "sha256:742d43cbbc7267caae6379e2156a1fd8532332920a3d919b68c2982d439a98ba", - "sha256:763cac57692d07aa950b92c20f55ef66801955b71b4a1f4f48d5422d748c6dda", - "sha256:76c4e3261d6370383b02018cb964b5d9260e3c62dea31949910e9cc3a1c802d2", - "sha256:7ae3b8b48167579066a17c5ba1631d089f931f4eae8b4359ad123807d5e75c51", - "sha256:7f369872d551708d608e50a9ab8748d3d4f32a697dc5c2c37ff16cb8d7060210", - "sha256:874a222ece2100b3a3a8f08c57da3267a4e2219d26474a46937552992fcec771", - "sha256:878f16daa9c2062e4d29c1928b6f3eb50911726ad6d2006918a29ca6b38b5080", - "sha256:8c811e59c86ce0a8515daf47db9c2484fd42e51bdb44581d7bcc9caad6c9a7a1", - "sha256:97609495479c5214c7b57173c17206ebb056507a8d26eebc17942d62f8f25944", - "sha256:985a937218aa3d1ac7013174bfcbb1cb2f3157e17c6e349e83386f33459be1c0", - "sha256:a239313e75da37d1f6548d666d4dd8554c4a92dabed15741612855d186e86e72", - "sha256:b080eb25811db46306dfce58b4760df32f40bcf5551ebba3b7c8d3ec90d9b988", - "sha256:b0cfca1b5a57b540f4761b57de485196218733153c430d58f9e048e325c98b47", - "sha256:b0e4a6f5360e5f6c3a2b250c9e9cd539a9aabf0465dbedbaf364203e74ff101b", - "sha256:b849a6cdd46608e7cc108c75e1265304e79488480a822bae7471e628f971a6f0", - "sha256:bfda0af4072df6e932ec510b72c461e1ec0ad0820a76df588cdfebf5a07f5b5d", - "sha256:c19e900b6f9df13c7f406f827c5643f83c0839a58d007b35a4d7df827601f740", - "sha256:c24d4a1b5baa46920b801aa55c0e0a640c6e7683a73a941302e102e2bd11a830", - "sha256:c774328057a4b1fc48bee2dd5a60ee1e8e0ec112d29c4e6b9c550e1686b6db5c", - "sha256:d34673ebaf562347d004a465e16e2930c6568d196bb79d67fc6358f1213a1ac7", - "sha256:d523ffef1927cb686ad787b25b2e98a5bd53e3c40673c394f07bf9b281e69796", - "sha256:d53520b54206d8569b81eee56ccd9477af2f1b3ca355df9c48ee615a11e1a637", - "sha256:d697cc38cb6fa9bae3b994dd3ce68552ffe69c453a3b6fd6a4f94bb8a8bfd70b", - "sha256:d7bec01818c3a9d185f929cd36a82cc7acf13905920f7f595942105c5eef2300", - "sha256:e6a4a4bf6fbc42b2674023ca58a47c86ee55c023a8af85420f266e86b10e7065", - "sha256:e6bd32e492cdc740ec36b6725457685c9f2aa012dd8cbdae1643fed2b6821895", - "sha256:e76642232db8330589ed1ac1cec0e9c3814c708521c336a5c79d39a5d8d8c206", - "sha256:e7ba4c964a36fe198a8c4b5d08924709d4ed0337b65ae222b6503ed3442a46e8", - "sha256:ec18a0b97ea6b912ea57dc00a3f8f3ce515d774d00951d30e2ae243589d3d021", - "sha256:ecce266e24b21615a3ed234869be84bef492f6a34bb650d0e25dc3662c59bce4", - "sha256:f0302605b3bbc439083a400cf57d7464f1ac098c722309a03abaa7d97cd420b5", - "sha256:f253b9bdf5abd039741a9594a681453c973b09dcb7edac9105961838675b7c6b", - "sha256:f263b18fdb8bf42cd7cf9849d5863847d215024c68fe74cf33bcd82641d4376a", - "sha256:f37b5282b029d9f51454f8c580eb6a24e5dc140ef5866290afb20e607d2dce5f", - "sha256:f4849709571b1a53669798d23cc8430e677dcf0eea88610a0412e1911233899a", - "sha256:f853589426920d9bb3683f6b6cd11ce48d9d06a62c0b98ea4b82ebd8db3bddec", - "sha256:f9c492644f70f80f8266748c18309a0d73c22c47903f4b62f3fb772a15a8fd5f", - "sha256:fc635b27939969d53cac53e8b8f860ea69fc98cc9867cac17dd193f41dc2a57f", - "sha256:febaf00e498230ce2e75dac910056f0e3a91c8631b7ceb6385bb39d448960bc5" - ], - "version": "==2.6.0" + "sha256:00a6fc4355bd4e6ead54d05187dc4ea39f0af439b336ae113f0194673ed730ae", + "sha256:00e93f70cbcbeabd1e79accf1b6f5b2424cd40556e7877f618549523d0031c98", + "sha256:01f8d02c3eae82c98d4259777cb2f042a0b3989d7dceeb37c643cb94b91d5a42", + "sha256:029c724bf38c6616b90b1c423b846b63f8d607ed5a23d270e3862696d88a5392", + "sha256:057f9c53a34e42deed6e8813a82b9c85924f4728be28e3b9b65144569ac5a387", + "sha256:088e6e9ea7f0eaf8b672679a68096dbc0a7a7b7a4ed567860f7362e1588370a6", + "sha256:0b84fd9dbf999cbca1090a7703aa1404cd01af4035c6ba3adf69d41280611fb6", + "sha256:0d1f49cc51919d6fa0f7eebd073d2c620b80079aa537d084a7fafb46a35c7a4d", + "sha256:0fe747a134f7f5bc0877eee58090ae7e7f23628eeb459f681ade65719c3f246a", + "sha256:102db74ee82ec5774aba01481e73eedaebd27ba167344a81d3b42e6fbf9ffb77", + "sha256:1048a29b3d72b1821a3ae9e8d64e71ed96c53a1a36b1da6db02091a424a8f795", + "sha256:10dc358fe29d7a4c5be78ab2fb5aa50cb8066babd23e0b5589eb68e26afe58d8", + "sha256:122cd70ee0de2cc9d94da8b8ebcb7dca12b9f4d3beefb94c11e110e1d87503bb", + "sha256:1289f408a8b5c87cdb4fd7975d4021c6e61209ccb956d0411e72bf43c7f78463", + "sha256:1362e9fb78ca72aa52ec1f1fbd62872801302001b0156ed2a1e707850cd30ffd", + "sha256:1502660ab489b1f18c3493c766252cd5d24bc1cbf4bdf3594e0a30de142ed453", + "sha256:16345146b61e93ca20679c83537ccf7245f78b17035f5b1a436fd2b75da04c5e", + "sha256:16cb00911584a6e9ca0f42c305714898120dc6bfbbec90dacedeed4690331a47", + "sha256:1af9b720a048c69e999094e2310138b7cfca5471a9d2c1dbe4b53dd10e516720", + "sha256:1e1553933f4533040491f4e4499bcbbfcee42c4056f56d7e18010e779daab33d", + "sha256:23b7bada6d6b62cba08f4a1b8a95da2d8592aae1db3c167dcb52abcba0a7bef5", + "sha256:27524bc92fdeb464a5057a4677a35f482cf30be2e920bd1d11c46de533cafda6", + "sha256:2c1b2c91bf991b5c641faee78dd5a751dff6155ec51c7a6c7f922dc85431898e", + "sha256:2cdf5700537e5aa4ec9f4a0b498b8d5b03b9859d503e01ea17a6a134a838aa30", + "sha256:302149aaff75939beb8af7f32ac9bf922480033a24fb54f4ebc0c9dc175247c4", + "sha256:305e6f7441c007f296644ba3899c0306ce9fd7a482dbbc06b6e7b7bd6e0ddabc", + "sha256:31e60d8341c3189aa156ca8cb2f6370b29d79cf132e3d091714b0a5a9097eb69", + "sha256:3cf37431de779b29e5c0d8e36868f77f6df53c3c19c20e8404137e257dc80040", + "sha256:3fb6a952796d16c3a309d866eef56a8f4e5591d112c22446e67d33ecb096b44b", + "sha256:433f91c8ab8338662aaa86b0677e6c15c35f8f7b65d4c43d7d1647a8198bc0b0", + "sha256:4abe2f829f6f2d330bccf1bcde2192264ab9a15d6d00e507265f46dc66557014", + "sha256:4b2d150a81a981537801ac7d4f4f5d082c48343612a21f4e2c4cd2e887973bd5", + "sha256:4b84230624d15868e407ba8b66df54fc69ee6a9e9cb6d51eb264b8f2614596f1", + "sha256:50d5e2c026b3e3d145f64c457338ea99edcbdd302fdcbd96418251ac51a98a59", + "sha256:5df10eb9b794932b0cf806f412d1c6d04fb7655ca7ae5caf6354b9edc380a5f7", + "sha256:699b0134e87c0c4e3b224d879d218c4385a06e6b72df73b4c9c9d549155fb837", + "sha256:6d19c34a2121eccfeb642d4ad71163bd3342a8f3a99e6724fe824bdfbc0a5b65", + "sha256:72fd7f6f940bc42914c86700591ccfd1daeff0e414cefcbd7843117df2fac4e9", + "sha256:748847e58c45a37f23db1f53a6dc16ae32aa80ee504653d79336830de1a79ed7", + "sha256:757a08bf0aed5a650a399f8c66bcba00c210bce34408b6d7b09b4837bee8f4da", + "sha256:7659bdfe7716b14a39007e31e957fa64d7f0d9e40a1dbd024bd81b972d76bffb", + "sha256:76bbbb9ceebb9cbb2b14369b3681fecab226792b339f612e79f6575ca31fed45", + "sha256:7776c070943f45cd8303543a6625cf82f2e000ef9c885d52d7828be099e52f42", + "sha256:78378d8dacbe1f4f263347f42ec0a41cc2097cd671c6ac30a65a838284a5e141", + "sha256:7a8995737fae8de03b31ed83acf4f4326a55b217022009d18be19ff87fc9010e", + "sha256:7d571056115bbdc18f199a9ee4c2a1b5884f5e63a3c05fe43d2fc7fc67320515", + "sha256:7f6540b45b2230442f7a0614745131e0a6f28251f5d33ac19d0ed61d80db7153", + "sha256:8591ad5768860ad186dc94fd58b2932604a7639b57eefbbff2b4865af3407691", + "sha256:860edf8533223d82bd6201894bcaf540f828f49075f363390eecf04b12fb94cb", + "sha256:86e9c48ffeddb0f943e87ab65e1e95dccc9b44ef3761af3bf9642973ab7646d2", + "sha256:87851a82bdf849e3c40ff6d8af5f734634e17f52a8f7f7e74486c2f8ce717578", + "sha256:87897ec0e4876c9f2c1ae313519de0ed2ad8041a4d2210a083f9b4a239add2e3", + "sha256:888df211aafe5fad41c0792a686d95c8ba37345d5037f437aa3c09608f9c3b56", + "sha256:8ab6770833976448a9a973bc0df63adedc4c30de4774cec5a9928fc496423ebb", + "sha256:8abd23f94cdcce971d932a5f0a066d40fbc61901fd087aa70d32cccd1793bd20", + "sha256:8b2f31a4cc28aef27355ab896e4b4cc2da2204b2b7adb674d8be7fefa0c93868", + "sha256:8b8fd92c8026e4ba6874e94f538890e35bef2a3a18ea54e3663c578b7916ade1", + "sha256:8becbb9649fd29ee577f9f0405ce2fba5cf9fa2c290c9b044bc235c04473f213", + "sha256:91f43f6b6c9129a56d3e2dccb8b88ffce0e4f4893dd9d69d285676bdf5b9ca14", + "sha256:979d42e0b2c3113526f9716a461e08671788a23ce7e3b5cd090ce3e6a6762641", + "sha256:980f6564218f853a9341fb045446539d4153338926ed2fb222e86dc9b2ae9b8f", + "sha256:99c9345c417a9cff98f9f6e59b0350dcc10c2e0e1ea66acf7946de1cd60541fa", + "sha256:9a544f99c24b6f658907eb9edf290a9c54f4106738b2ab84cd19dc6013cc3abf", + "sha256:9ee181cc00aaba38d9812f4df4e7d828105b6dde3b068cd2c43f1d8f395e0046", + "sha256:a1d439c98e65ab8e5fbcc2b242a16e7a3f076974bff78185ff42ba2d4c220032", + "sha256:a5fc2512bdf5289a1412c936c65d17881d2b46edb0036c63a8d5605dc8d398a3", + "sha256:a69c99274aee2ffdc7f1cfd34044ccb7155790d6f5217d677ea46a6ddead6dd2", + "sha256:b43d56c7c96f5a055f4051be426496db2a616840645d0ab3733d5ceacb2f701b", + "sha256:b508e1bba4ec68fd0ef28505e2dad2f56de7df710c8334c97036705a562cb908", + "sha256:b5df624ee8a4098c3b1149f4817f2a4a0121c4920e1c114af324bc52d6659e2b", + "sha256:bd7f4b2df89bf4e298756c0be0be67fb84d6aa49bda60d46805d43f0e643abd5", + "sha256:c3956ae54285ab30d802756144887e30e013f81c9f03e5ffff9daa46d8ca0154", + "sha256:c531532c21bc1063e65957a1a85a2d13601ec21801f70821c89d9339b16ebc78", + "sha256:cb1d60ed709989e34e7158d97fdb077a2f2dfc505998a84161a70f81a6101172", + "sha256:cb46c3a4002c8322dd0e1b4b53f8a647dcb0f199f5c7a1fc03d3880c3eabbd2c", + "sha256:cb9a8ee23416bd0cfd457118978bc2f6f02c20b95336db486887f670bf92c2b7", + "sha256:d089b1d0b157c9a484f8f7475eecea813d0dc3818adc5bf352903da14fe88fc3", + "sha256:d3b5abb73c45d40d27f9795dac9d6eb1515729c13f93dd67df2be07be6549990", + "sha256:d63f20299441e32171f08fc62f7ea7e401cc12a96f67a36ab2d76439ecfcb118", + "sha256:da1570f301abdfda68f4fdb40c4d3f09af4bb6e4550b4fa5395db0d142b680bc", + "sha256:e2a0313657e6656efca2148cfc91c50fdafca6f811b6c7d0906e6ba57134e560", + "sha256:e4b7fdb9772e087174f446655bbc497a1600b5758f279c6d44fcf344c13d5c8a", + "sha256:ea33ed09157e032f0a7a2627ef87f156e9927697f59b55961439d34bf45af23a", + "sha256:f64abe9301b918d2c352e42198cea0196f3639bc1ad23a4a9d8ae97f66068901", + "sha256:f71256a32609b036adad932e1228b66a6b4e2cae6be397e588ddc0babd9a78b9", + "sha256:fb3f003dee96dbf24a6df71443557f249b17b20083c189995302b14eb01530bf", + "sha256:fe80c23409efb41b86efb5e45f334420a9b5b7828f5b3d08b5ff28f03a024d9e" + ], + "version": "==2.7.3" }, "bytestring-splitter": { "hashes": [ @@ -320,7 +364,7 @@ "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2.1.1" }, "click": { @@ -356,133 +400,140 @@ }, "cryptography": { "hashes": [ - "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd", - "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db", - "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290", - "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744", - "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb", - "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d", - "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70", - "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b", - "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876", - "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083", - "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6", - "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1", - "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00", - "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b", - "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b", - "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285", - "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9", - "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0", - "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d", - "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2", - "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8", - "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee", - "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b", - "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7", - "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353", - "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c" + "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", + "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", + "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", + "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", + "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", + "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", + "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", + "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", + "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", + "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", + "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", + "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", + "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", + "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", + "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", + "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", + "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", + "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", + "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" ], "markers": "python_version >= '3.6'", - "version": "==38.0.4" + "version": "==40.0.2" }, "cytoolz": { "hashes": [ - "sha256:02583c9fd4668f9e343ad4fc0e0f9651b1a0c16fe92bd208d07fd07de90fdc99", - "sha256:02dc4565a8d27c9f3e87b715c0a300890e17c94ba1294af61c4ba97aa8482b22", - "sha256:09f5652caeac85e3735bd5aaed49ebf4eeb7c0f15cb9b7c4a5fb6f45308dc2fd", - "sha256:09fac69cebcb79a6ed75565fe2de9511be6e3d93f30dad115832cc1a3933b6ce", - "sha256:0c9fe89548b1dc7c8b3160758d192791b32bd42b1c244a20809a1053a9d74428", - "sha256:0f94b4a3500345de5853d1896b7e770ce4a6577a431f43ff7d8f05f9051aeb7d", - "sha256:12d3d11ceb0fce8be5463f1e363366888c4b71e68fb2f5d536e4790b933cfd7e", - "sha256:16748ea2b40c5978190d9acf9aa8fbacbfb440964c1035dc16cb14dbd557edb5", - "sha256:1744217505b835fcf55d82d67addd0d361791c4fd6a2f485f034b343ffc7edb3", - "sha256:1a79658fd264c5f82ea1b5cb45cf3899afabd9ec3e58c333bea042a2b4a94134", - "sha256:1c22255e7458feb6f43d99c9578396e91d5934757c552128f6afd3b093b41c00", - "sha256:1cf9ae77eed57924becd3ab65ae24487d7b1f9823d3e685d796e58f57424f82a", - "sha256:21986f4a970c03ca84806b3a08e89386ac4aeb54c9b79d6a7268e83225331a87", - "sha256:231d87ffb5fc468989e35336a2f8da1c9b8d97cfd9300cf2df32e953e4d20cae", - "sha256:25c037a7b4f49730ccc295a03cd2217ba67ff43ac0918299f5f368271433ff0f", - "sha256:274bc965cd93d6fa0bfe6f770cf6549bbe58d7b0a48dd6893d3f2c4b495d7f95", - "sha256:2bd1c692ab706acb46cfebe7105945b07f7274598097e32c8979d3b22ae62cc6", - "sha256:2d29cf7a44a8abaeb00537e3bad7abf823fce194fe707c366f81020d384e22f7", - "sha256:2ee9ca2cfc939607926096c7cc6f298cee125f8ca53a4f46745f8dfbb7fb7ab1", - "sha256:336551092eb1cfc2ad5878cc08ef290f744843f84c1dda06f9e4a84d2c440b73", - "sha256:337c9a3ce2929c6361bcc1b304ce81ed675078a34c203dbb7c3e154f7ed1cca8", - "sha256:38e3386f63ebaea46a4ee0bfefc9a38590c3b78ab86439766b5225443468a76b", - "sha256:3a5408a74df84e84aa1c86a2f9f2ffaed51a55f34bbad5b8fae547cb9167e977", - "sha256:3e8335998e21205574fc7d8d17844a9cc0dd4cbb25bb7716d90683a935d2c879", - "sha256:46b9f4af719b113c01a4144c52fc4b929f98a47017a5408e3910050f4641126b", - "sha256:4b8b1d9764d08782caa8ba0e91d76b95b973a82f4ce2a3f9c7e726bfeaddbdfa", - "sha256:59263f296e043d4210dd34f91e6f11c4b20e6195976da23170d5ad056030258a", - "sha256:5b7079b3197256ac6bf73f8b9484d514fac68a36d05513b9e5247354d6fc2885", - "sha256:68336dfbe00efebbb1d02b8aa00b570dceec5d03fbd818c620aa246a8f5e5409", - "sha256:69c04ae878d5bcde5462e7290f950bfce11fd139ec4b481687983326658e6dbe", - "sha256:6aade6ebb4507330b0540af58dc2804415945611e90c70bb97360973e487c48a", - "sha256:6f87472837c26b3bc91f9767c7adcfb935d0c097937c6744250672cd8c36019d", - "sha256:6fa49cfaa0eedad59d8357a482bd10e2cc2a12ad9f41aae53427e82d3eba068a", - "sha256:7244fb0d0b87499becc29051b82925e0daf3838e6c352e6b2d62e0f969b090af", - "sha256:798dff7a40adbb3dfa2d50499c2038779061ebc37eccedaf28fa296cb517b84e", - "sha256:79b46cda959f026bd9fc33b4046294b32bd5e7664a4cf607179f80ac93844e7f", - "sha256:7fe93ffde090e2867f8ce4369d0c1abf5651817a74a3d0a4da2b1ffd412603ff", - "sha256:8060be3b1fa24a4e3b165ce3c0ee6048f5e181289af57dbd9e3c4d4b8545dd78", - "sha256:8237612fed78d4580e94141a74ac0977f5a9614dd7fa8f3d2fcb30e6d04e73aa", - "sha256:886b3bf8fa99510836107097a5e5a2bd81631d3795dedc5684e25bef6538ac39", - "sha256:8c0101bb2b2bcc0de2e2eb288a132c261e5fa883b1423799b47d4f0cfd879cd6", - "sha256:8f40897f6f341e03a945759fcdb2208dc7c64dc312386d3088c47b78fca2a3b2", - "sha256:94b067c88de0eaca174211c8422b3f72cbfb63b101a0eeb528c4f21282ca0afe", - "sha256:9ac7758c5c5a66664285831261a9af8e0af504026e0987cd01535045945df6e1", - "sha256:9dd7dbdfc24ed309af96be170c9030f43713950afab2b4bed1d372a91b37cbb0", - "sha256:9e32292721f16516a574891a1af6760cba37a0f426a2b2cea6f9d560131a76ea", - "sha256:9ecdd6e2be8d59b76c2bd3e2d832e7b3d5b2535c418b13cfa85e3b17de985199", - "sha256:a15157f4280f6e5d7c2d0892847a6c4dffbd2c5cefccaf1ac1f1c6c3d2cf9936", - "sha256:a2cca43caea857e761cc458ffb4f7af397a13824c5e71341ca08035ff5ff0b27", - "sha256:a4acf6cb20f01a5eb5b6d459e08fb92aacfb4de8bc97e25437c1a3e71860b452", - "sha256:a8e69c9f3a32e0f9331cf6707a0f159c6dec0ff2a9f41507f6b2d06cd423f0d0", - "sha256:a8feb4d056c22983723278160aff8a28c507b0e942768f4e856539a60e7bb874", - "sha256:ae403cac13c2b9a2a92e56468ca1f822899b64d75d5be8ca802f1c14870d9133", - "sha256:ae7f417bb2b4e3906e525b3dbe944791dfa9248faea719c7a9c200aa1a019a4e", - "sha256:b05dc257996c0accf6f877b1f212f74dc134b39c46baac09e1894d9d9c970b6a", - "sha256:b716f66b5ee72dbf9a001316ffe72afe0bb8f6ce84e341aec64291c0ff16b9f4", - "sha256:bb0fc2ed8efa89f31ffa99246b1d434ff3db2b7b7e35147486172da849c8024a", - "sha256:c105b05f85e03fbcd60244375968e62e44fe798c15a3531c922d531018d22412", - "sha256:c4ff74cb0e1a50de7f59e54a156dfd734b6593008f6f804d0726a73b89d170cd", - "sha256:c818a382b828e960fbbedbc85663414edbbba816c2bf8c1bb5651305d79bdb97", - "sha256:c9f8c9b3cfa20b4ce6a89b7e2e7ffda76bdd81e95b7d20bbb2c47c2b31e72622", - "sha256:cb072fa81caab93a5892c4b69dfe0d48f52026a7fe83ba2567020a7995a456e7", - "sha256:d035805dcdefcdfe64d97d6e1e7603798588d5e1ae08e61a5dae3258c3cb407a", - "sha256:d212296e996a70db8d9e1c0622bc8aefa732eb0416b5441624d0fd5b853ea391", - "sha256:d511dd49eb1263ccb4e5f84ae1478dc2824d66b813cdf700e1ba593faa256ade", - "sha256:d61bc1713662e7d9aa3e298dad790dfd027c5c0f1342c36be8401aebe3d3d453", - "sha256:db619f17705067f1f112d3e84a0904b2f04117e50cefc4016f435ff0dc59bc4e", - "sha256:dc8df9adfca0da9956589f53764d459389ce86d824663c7217422232f1dfbc9d", - "sha256:dd840adfe027d379e7aede973bc0e193e6eef9b33d46d1d42826e26db9b37d7e", - "sha256:deb8550f487de756f1c24c56fa2c8451a53c0346868c13899c6b3a39b1f3d2c3", - "sha256:e17516a102731bcf86446ce148127a8cd2887cf27ac388990cd63881115b4fdc", - "sha256:ed8771e36430fb0e4398030569bdab1419e4e74f7bcd51ea57239aa95441983a", - "sha256:edf460dc6bed081f274cd3d8ae162dd7e382014161d65edcdec832035d93901b", - "sha256:ee1fe1a3d0c8c456c3fbf62f28d178f870d14302fcd1edbc240b717ae3ab08de", - "sha256:ee92dadb312e657b9b666a0385fafc6dad073d8a0fbef5cea09e21011554206a", - "sha256:ef4a496a3175aec595ae24ad03e0bb2fe76401f8f79e7ef3d344533ba990ec0e", - "sha256:f1f5c1ef04240b323b9e6b87d4b1d7f14b735e284a33b18a509537a10f62715c", - "sha256:f24e70d29223cde8ce3f5aefa7fd06bda12ae4386dcfbc726773e95b099cde0d", - "sha256:f26079bc2d0b7aa1a185516ac9f7cda0d7932da6c60589bfed4079e3a5369e83", - "sha256:f5784adcdb285e70b61efc1a369cd61c6b7f1e0b5d521651f93cde09549681f5", - "sha256:f71b49a41826a8e7fd464d6991134a6d022a666be4e76d517850abbea561c909", - "sha256:f909760f89a54d860cf960b4cd828f9f6301fb104cd0de5b15b16822c9c4828b", - "sha256:f959c1319b7e6ed3367b0f5a54a7b9c59063bd053c74278b27999db013e568df", - "sha256:fa5ded9f811c36668239adb4806fca1244b06add4d64af31119c279aab1ef8a6" - ], - "markers": "implementation_name == 'cpython'", - "version": "==0.12.0" + "sha256:02975e2b1e61e47e9afa311f4c1783d155136fad37c54a1cebfe991c5a0798a1", + "sha256:03ab22c9aeb1535f8647d23b6520b0c3d41aaa18d04ef42b352dde1931f2e2b1", + "sha256:061387aa39b9c1576c25d0c59142513c09e77a2a07bd5d6211a43c7a758b6f45", + "sha256:06d38a40fe153f23cda0e823413fe9d9ebee89dd461827285316eff929fb121e", + "sha256:0d474dacbafbdbb44c7de986bbf71ff56ae62df0d52ab3b6fa966784dc88737a", + "sha256:117871f036926e42d3abcee587eafa9dc7383f1064ac53a806d33e76604de311", + "sha256:14f4dbc3f0ec8f6fc68865489af21dcf042ff007d2737c27bfd73296f15db544", + "sha256:1a1eae39656a1685e8b3f433eecfd72015ce5c1d7519e9c8f9402153c68331bb", + "sha256:1b6761791973b1e839b8309d5853b40eeb413368e31beaf5f2b6ed44c6fc7cf0", + "sha256:1be368623e46ad3c1ce807e7a436acb119c26001507b31f92ceb21b86e08c386", + "sha256:1c29dd04e282ddfd45b457e3551075beec9128aa9271245e58ce924bf6e055f8", + "sha256:23c3f57c48eb939d2986eba4aeaeedf930ebf94d58c91a42d4e0fc45ed5427dc", + "sha256:25ff13c468c06da9ef26651dc389e7e8bb7af548f8c1dfb96305f57f18d398a8", + "sha256:2a48940ff0449ffcf690310bf9228bb57885f7571406ed2fe05c98e299987195", + "sha256:2b245b824f4705aef0e4a03fafef3ad6cb59ef43cc564cdbf683ee28dfc11ad5", + "sha256:2ec296f01c29c809698eaf677211b6255691295c2b35caab2131e1e7eaadfbac", + "sha256:2eed428b5e68c28abf2c71195e799850e040d67a27c05f7785319c611665b86a", + "sha256:2f32452e833f0605b871626e6c61b71b0cba24233aad0e04accc3240497d4995", + "sha256:3032c0ba42dee5836d6b57a72a569b65df2c29e8ed266cb900d569003cf933a9", + "sha256:30936ae8fa68b6a1ac8ad6c4bacb5a8a00d51bc6c89f9614a1557b0105d09f8a", + "sha256:31131b54a0c72efc0eb432dc66df546c6a54f2a7d396c9a34cf65ac1c26b1df8", + "sha256:35fae4eaa0eaf9072a5fe2d244a79e65baae4e5ddbe9cc629c5037af800213a2", + "sha256:37320669c364f7d370392af33cc1034b4563da66c22cd3261e3530f4d30dbe4b", + "sha256:37c53f456a1c84566a7d911eec57c4c6280b915ab0600e7671582793cc2769fe", + "sha256:3c9a16a5b4f54d5c0a131f56b0ca65998a9a74958b5b36840c280edba4f8b907", + "sha256:3cb95d23defb2322cddf70efb4af6dac191d95edaa343e8c1f58f1afa4f92ecd", + "sha256:3d6d0b0075731832343eb88229cea4bf39e96f3fc7acbc449aadbdfec2842703", + "sha256:421b224dc4157a0d66625acb5798cf50858cfa06a5232d39a8bd6cf1fa88aca3", + "sha256:4284120c978fb7039901bf6e66832cb3e82ac1b2a107512e735bdb04fd5533ed", + "sha256:42c9e5cd2a48a257b1f2402334b48122501f249b8dcf77082f569f2680f185eb", + "sha256:4534cbfad73cdb1a6dad495530d4186d57d73089c01e9cb0558caab50e46cb3b", + "sha256:48bc2f30d1b2646d675bb8e7778ab59379bf9edc59fe06fb0e7f85ba1271bf44", + "sha256:49911cb533c96d275e31e7eaeb0742ac3f7afe386a1d8c40937814d75039a0f7", + "sha256:499af2aff04f65b4c23de1df08e1d1484a93b23ddaaa0163e44b5070b68356eb", + "sha256:4a0055943074c6c85b77fcc3f42f7c54010a3478daa2ed9d6243d0411c84a4d3", + "sha256:4d700e011156ff112966c6d77faaae125fcaf538f4cec2b9ce8957de82858f0f", + "sha256:50db41e875e36aec11881b8b12bc69c6f4836b7dd9e88a9e5bbf26c2cb3ba6cd", + "sha256:5158ae6d8dd112d003f677039a3613ca7d2592bfe35d7accf23684edb961fc26", + "sha256:56e1ebf6eb4438b8c45cbe7e7b22fc65df0c9efa97a70d3bf2f51e08b19756a5", + "sha256:59641eb1f41cb688b3cb2f98c9003c493a5024325f76b5c02333d08dd972127c", + "sha256:5af43ca7026ead3dd08b261e4f7163cd2cf3ceaa74fa5a81f7b7ea5d445e41d6", + "sha256:5c59bb4ca88e1c69931468bf21f91c8f64d8bf1999eb163b7a2df336f60c304a", + "sha256:633f19d1990b1cf9c67dce9c28bf8b5a18e42785d15548607a100e1236384d5d", + "sha256:6716855f9c669c9e25a185d88e0f169839bf8553d16496796325acd114607c11", + "sha256:6805b007af3557ee6c20dab491b6e55a8177f5b6845d9e6c653374d540366ba7", + "sha256:695dd8231e4f1bfb9a2363775a6e4e56ad9d2058058f817203a49614f4bfe33b", + "sha256:6fa7009c843667868aa8bdb3d68e5ef3d6356dd418b17ed5ca4e1340e82483a5", + "sha256:794cce219bbcb2f36ca220f27d5afd64eaa854e04901bd6f240be156a578b607", + "sha256:7b60caf0fa5f1b49f1062f7dc0f66c7b23e2736bad50fa8296bfb845995e3051", + "sha256:7e903df991f0957e2b271a37bb25d28e0d260c52825ae67507d15ca55a935961", + "sha256:7eb9e6fa8a82c3d2f519f7d3942898a97792e3895569e9501b9431048289b82f", + "sha256:816c2038008ebf50d81171ddfae377f1af9e71d504ec609469dcb0906bfcf2ae", + "sha256:849f461bffa1e7700ccfcb5186df29cd4cdcc9efdb7199cb8b5681dc37045d72", + "sha256:8506d1863f30d26f577c4ed59d2cfd03d2f39569f9cbaa02a764a9de73d312d5", + "sha256:867bebe6be30ee36a836f9b835790762a74f46be8cc339ea57b68dcecdbc1133", + "sha256:97a24c0d0806fcf9a6e75fc18aeb95adc37eb0baf6451f10a2de23ffd815329d", + "sha256:980e7eb7205e01816a92f3290cfc80507957e64656b9271a0dfebb85fe3718c0", + "sha256:9bae431a5985cdb2014be09d37206c288e0d063940cf9539e9769bd2ec26b220", + "sha256:9bebe58f7a160db7838eb70990c704db4bdc2d58bd364290fd69be0587be8bac", + "sha256:9e324a94856d88ecf10f34c102d0ded67d7c3cf644153d77e34a29720ce6aa47", + "sha256:a6e63fc67b23830947b51e0a488992e3c904fce825ead565f3904dcf621d05f7", + "sha256:a72440305f634604827f96810e4469877b89f5c060d6852267650a49b0e3768c", + "sha256:a734511144309ea6e105406633affb74e303a3df07d8a3954f9b01946e27ecb1", + "sha256:a816bff6bf424753e1ac2441902ceaf37ae6718b745a53f6aa1a60c617fb4f5f", + "sha256:a8a7a325b8fe885a6dd91093616c703134f2dacbd869bc519970df3849c2a15b", + "sha256:aa61e3da751a2dfe95aeca603f3ef510071a136ba9905f61ae6cb5d0696271ad", + "sha256:ac5895d5f78dbd8646fe37266655ba4995f9cfec38a86595282fee69e41787da", + "sha256:ac6784cc43aec51a86cf9058a2a343084f8cf46a9281bea5762bfa608127c53b", + "sha256:b1bd8017ef0da935a20106272c5f5ff6b1114add1ccb09cfed1ff7ec5cc01c6d", + "sha256:b2ac288f27a2689d9e39f4cf4df5437a8eb038eaae515169586c77f9f8fb343a", + "sha256:b30cd083ef8af4ba66d9fe5cc75c653ede3f2655f97a032db1a14cc8a006719c", + "sha256:b46ebc463bb45f278a2b94e630061c26e10077cb68d4c93583d8f4199699a5ef", + "sha256:b575393dd431b8e211de35bd593d831dac870172b16e2b7934f3566b8fc89377", + "sha256:b6569f6038133909cd658dbdcc6fc955f791dc47a7f5b55d2066f742253dcbfe", + "sha256:b8b8f88251b84b3877254cdd59c86a1dc6b2b39a03c6c9c067d344ef879562e0", + "sha256:b8eceaa12b7f152b046b67cb053ec2b5b00f73593983de69bc5e63a8aca4a7a8", + "sha256:ba74c239fc6cb6e962eabc420967c7565f3f363b776c89b3df5234caecf1f463", + "sha256:be5a454a95797343d0fb1ed02caecae73a023b1393c112951c84f17ec9f4076c", + "sha256:bef934bd3e024d512c6c0ad1c66eb173f61d9ccb4dbca8d75f727a5604f7c2f6", + "sha256:c1964dcb5f250fd13fac210944b20810d61ef4094a17fbbe502ab7a7eaeeace7", + "sha256:c34e69be4429633fc614febe3127fa03aa418a1abb9252f29d9ba5b3394573a5", + "sha256:c576bd63495150385b8d05eaae775387f378be2fd9805d3ffb4d17c87271fbad", + "sha256:cb8b10405960a8e6801a4702af98ea640130ec6ecfc1208195762de3f5503ba9", + "sha256:cc3645cf6b9246cb8e179db2803e4f0d148211d2a2cf22d5c9b5219111cd91a0", + "sha256:cd35c0be4c46274129dd1678bb911dd4e93d23968b26f4e39cd55bc7cb3b1bac", + "sha256:d540e9c34a61b53b6a374ea108794a48388178f7889d772e364cdbd6df37774c", + "sha256:d72415b0110f7958dd3a5ee98a70166f47bd42ede85e3535669c794d06f57406", + "sha256:dbae37d48ef5a0ab90cfaf2b9312d96f034b1c828208a9cbe25377a1b19ba129", + "sha256:e1c5434db53f3a94a37ad8aedb231901e001995d899af6ed1165f3d27fa04a6a", + "sha256:e75e287787e6adafed9d8c3d3e7647c0b5eb460221f9f92d7dfe48b45ba77c0d", + "sha256:e797c4afb1b7962d3205b1959e1051f7e6bfbba29da44042a9efc2391f1feb38", + "sha256:efd1b2da3ee577fcfa723a214f73186aef9674dd5b28242d90443c7a82722b0f", + "sha256:f5b43ce952a5a31441556c55f5f5f5a8e62c28581a0ff2a2c31c04ef992d73bd", + "sha256:f7194a22a4a24f3561cb6ad1cca9c9b2f2cf34cc8d4bce6d6a24c80960323fa8", + "sha256:f8101ab6de5aa0b26a2b5032bc488d430010c91863e701812d65836b03a12f61", + "sha256:fc33909397481c90de3cec831bfb88d97e220dc91939d996920202f184b4648e", + "sha256:fcc378fa97f02fbcef090b3611305425d72bd1c0afdd13ef4a82dc67d40638b6", + "sha256:ff478682e8ee6dbaa37201bb71bf4a6eee744006ab000e8f5cea05066fc7c845" + ], + "markers": "python_version >= '3.6'", + "version": "==0.12.1" }, "dateparser": { "hashes": [ - "sha256:4431159799b63d8acec5d7d844c5e06edf3d1b0eb2bda6d4cac87134ddddd01c", - "sha256:73ec6e44a133c54076ecf9f9dc0fbe3dd4831f154f977ff06f53114d57c5425e" + "sha256:070b29b5bbf4b1ec2cd51c96ea040dc68a614de703910a91ad1abba18f9f379f", + "sha256:86b8b7517efcc558f085a142cdb7620f0921543fcabdb538c8a4c4001d8178e3" ], "markers": "python_version >= '3.7'", - "version": "==1.1.4" + "version": "==1.1.8" }, "eip712-structs": { "hashes": [ @@ -492,45 +543,42 @@ }, "eth-abi": { "hashes": [ - "sha256:63d16f1f60870afc974cb0a3325fb275fa97822be1723b8878598df25eea8096", - "sha256:c3872e3ac1e9ef3f8c6599aaca4ee536d536eefca63a6892ab937f0560edb656" + "sha256:6949baba61a2c453f0719309ca145e8876a1cbae7ba377c991e67240c13ec7fc", + "sha256:79d258669f3505319e53638d644a75e1c816db552a1ab1927c3063763cc41031" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==3.0.1" + "version": "==4.0.0" }, "eth-account": { "hashes": [ - "sha256:61360e9e514e09e49929ed365ca0e1656758ecbd11248c629ad85b4335c2661a", - "sha256:f4d339f031348ba4de2bdd1fa9872019183a7252117f65b6e8019961d5c09ca8" + "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", + "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" ], "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==0.7.0" + "version": "==0.8.0" }, "eth-bloom": { "hashes": [ - "sha256:5d6d28fa60ee1e25436c45b9593798d7e193224b364ea1a212050055dfa1942c", - "sha256:688317306d87b823da63d24e1ad706defadbd865887ed4bddf7fbd0410b2093c" + "sha256:73576828dff7566b9216403e0898966912f370bae5734241dd3f50ce5664a825", + "sha256:cc86ab9670577996f7fcb8445b7a164ecd211ac91d9c4c2b5a47678623419927" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==1.0.4" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.0.0" }, "eth-hash": { - "extras": [ - "pycryptodome" - ], "hashes": [ - "sha256:3c884e4f788b38cc92cff05c4e43bc6b82686066f04ecfae0e11cdcbe5a283bd", - "sha256:8cde211519ff1a98b46e9057cb909f12ab62e263eb30a0a94e2f7e1f46ac67a0" + "sha256:4d992e885f3ae3901abbe98bd776ba62d0f6335f98c6e9fc60a39b9d114dfb5a", + "sha256:9805075f653e114a31a99678e93b257fb4082337696f4eff7b4371fe65158409" ], - "markers": "python_version >= '3.5' and python_version < '4'", - "version": "==0.3.3" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.5.1" }, "eth-keyfile": { "hashes": [ - "sha256:7a874b179771827ffc7e38403ec412b8b3ff1a8c5cc945169609e799fadc7000", - "sha256:d30597cdecb8ccd3b56bb275cd86fcdc7a279f86eafa92ddc49f66512f0bff67" + "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c", + "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560" ], - "version": "==0.6.0" + "version": "==0.6.1" }, "eth-keys": { "hashes": [ @@ -549,19 +597,19 @@ }, "eth-tester": { "hashes": [ - "sha256:751c7991fd40db6610836aafe34c0d4c1ba152cc955e453612c1f4d520ac5f9e", - "sha256:dc9210e22f488c539c8ca80262616b4af6d60d6f28150cd70080e7233ff79856" + "sha256:44a21e8c9c2fa98a5723e3bcd63c174bc2e92cbadd894b75ccae34cea0245e6c", + "sha256:c13252513f2ec7db536a3300e5bc5715a954c683d23cd7fe478192634e2fa26c" ], - "markers": "python_full_version >= '3.6.8' and python_version < '4'", - "version": "==0.8.0b1" + "markers": "python_version < '4' and python_full_version >= '3.6.8'", + "version": "==0.8.0b3" }, "eth-typing": { "hashes": [ - "sha256:177e2070da9bf557fe0fd46ee467a7be2d0b6476aa4dc18680603e7da1fc5690", - "sha256:2d7540c1c65c0e686c1dc357b8376a53caf4e1693724a90191ad133be568841d" + "sha256:323111b3b76c8ceaff01619367aa52806f0264ca0ec1a70d4b9a42e44360f554", + "sha256:e9535e9d524d4c7a0cbd3d9832093cc5001a3e31869e72645674d24c6376d196" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==3.2.0" + "markers": "python_version < '4' and python_full_version >= '3.7.2'", + "version": "==3.3.0" }, "eth-utils": { "hashes": [ @@ -571,13 +619,21 @@ "markers": "python_version >= '3.7' and python_version < '4'", "version": "==2.1.0" }, + "ferveo": { + "hashes": [ + "sha256:624ccfabfd29301a17a0f3822207b31246b69c7ed56b833b8604ceb0c187eaa8", + "sha256:e2c05fbd973f6d71914aadd93f2675d7c45377fe9bdf2c1005e3917d2762d3bf" + ], + "markers": "python_version >= '3.7'", + "version": "==0.1.8" + }, "flask": { "hashes": [ - "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b", - "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526" + "sha256:58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf", + "sha256:edee9b0a7ff26621bd5a8c10ff484ae28737a2410d99b0bb9a6850c7fb977aa0" ], "markers": "python_version >= '3.7'", - "version": "==2.2.2" + "version": "==2.2.5" }, "flask-cors": { "hashes": [ @@ -684,11 +740,11 @@ }, "humanize": { "hashes": [ - "sha256:8830ebf2d65d0395c1bd4c79189ad71e023f277c2c7ae00f263124432e6f2ffa", - "sha256:efb2584565cc86b7ea87a977a15066de34cdedaf341b11c851cfcfd2b964779c" + "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50", + "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916" ], "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "version": "==4.6.0" }, "hyperlink": { "hashes": [ @@ -707,11 +763,19 @@ }, "importlib-metadata": { "hashes": [ - "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b", - "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313" + "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed", + "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705" + ], + "markers": "python_version >= '3.7'", + "version": "==6.6.0" + }, + "importlib-resources": { + "hashes": [ + "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", + "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a" ], - "markers": "python_version < '3.10'", - "version": "==5.1.0" + "markers": "python_version >= '3.7'", + "version": "==5.12.0" }, "incremental": { "hashes": [ @@ -720,14 +784,6 @@ ], "version": "==22.10.0" }, - "ipfshttpclient": { - "hashes": [ - "sha256:0d80e95ee60b02c7d414e79bf81a36fc3c8fbab74265475c52f70b2620812135", - "sha256:ce6bac0e3963c4ced74d7eb6978125362bb05bbe219088ca48f369ce14d3cc39" - ], - "markers": "python_full_version >= '3.6.2' and python_full_version not in '3.7.0, 3.7.1'", - "version": "==0.8.0a2" - }, "itsdangerous": { "hashes": [ "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", @@ -746,11 +802,19 @@ }, "jsonschema": { "hashes": [ - "sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3", - "sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7" + "sha256:4b88fe4edfd5ddc3364fca04b1554d4dd5bc67d2eb73c8795ab2d9e46a032643", + "sha256:b75063d9d6a5f5023c3d9bb89863a9cc1aaf34ccbd4dcf58ee5c5f23c1871b2a" ], - "markers": "python_version >= '3.7'", - "version": "==4.17.1" + "markers": "python_version >= '3.8'", + "version": "==4.18.0a6" + }, + "jsonschema-specifications": { + "hashes": [ + "sha256:1f84ccccce27abf263904363aa59171e9f889c152965f9e71bc05dfc520502fb", + "sha256:a743d6acd3d6ce0aa4d691b001be145eb8d0075d5beb3ce77c4e17cb13ebf158" + ], + "markers": "python_version >= '3.8'", + "version": "==2023.3.6" }, "lru-dict": { "hashes": [ @@ -815,49 +879,59 @@ }, "markupsafe": { "hashes": [ - "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", - "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", - "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", - "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", - "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", - "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", - "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", - "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", - "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", - "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", - "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", - "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", - "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", - "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", - "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", - "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", - "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", - "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", - "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", - "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", - "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", - "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", - "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", - "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", - "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", - "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", - "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", - "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", - "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", - "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", - "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", - "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", - "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", - "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", - "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", - "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", - "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", - "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", - "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", - "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" + "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", + "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", + "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", + "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", + "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", + "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", + "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", + "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", + "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", + "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", + "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", + "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", + "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", + "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", + "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", + "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", + "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", + "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", + "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", + "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", + "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", + "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", + "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", + "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", + "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", + "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", + "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", + "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", + "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", + "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", + "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", + "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", + "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", + "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", + "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", + "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", + "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", + "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", + "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", + "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", + "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", + "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", + "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", + "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", + "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", + "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", + "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", + "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", + "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", + "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" ], "markers": "python_version >= '3.7'", - "version": "==2.1.1" + "version": "==2.1.2" }, "marshmallow": { "hashes": [ @@ -884,60 +958,71 @@ }, "msgpack": { "hashes": [ - "sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467", - "sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae", - "sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92", - "sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef", - "sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624", - "sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227", - "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88", - "sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9", - "sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8", - "sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd", - "sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6", - "sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55", - "sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e", - "sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2", - "sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44", - "sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6", - "sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9", - "sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab", - "sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae", - "sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa", - "sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9", - "sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e", - "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250", - "sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce", - "sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075", - "sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236", - "sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae", - "sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e", - "sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f", - "sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08", - "sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6", - "sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d", - "sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43", - "sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1", - "sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6", - "sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0", - "sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c", - "sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff", - "sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db", - "sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243", - "sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661", - "sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba", - "sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e", - "sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb", - "sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52", - "sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6", - "sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1", - "sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f", - "sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da", - "sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f", - "sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c", - "sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8" - ], - "version": "==1.0.4" + "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164", + "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b", + "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c", + "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf", + "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd", + "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d", + "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c", + "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a", + "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e", + "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd", + "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025", + "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5", + "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705", + "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a", + "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d", + "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb", + "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11", + "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f", + "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c", + "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d", + "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea", + "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba", + "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87", + "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a", + "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c", + "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080", + "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198", + "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9", + "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a", + "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b", + "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f", + "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437", + "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f", + "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7", + "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2", + "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0", + "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48", + "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898", + "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0", + "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57", + "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8", + "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282", + "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1", + "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82", + "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc", + "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb", + "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6", + "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7", + "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9", + "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c", + "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1", + "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed", + "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c", + "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c", + "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77", + "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81", + "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a", + "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3", + "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086", + "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9", + "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f", + "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b", + "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d" + ], + "version": "==1.0.5" }, "msgpack-python": { "hashes": [ @@ -945,188 +1030,210 @@ ], "version": "==0.5.6" }, - "multiaddr": { - "hashes": [ - "sha256:30b2695189edc3d5b90f1c303abb8f02d963a3a4edf2e7178b975eb417ab0ecf", - "sha256:5c0f862cbcf19aada2a899f80ef896ddb2e85614e0c8f04dd287c06c69dac95b" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.0.9" - }, "multidict": { "hashes": [ - "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60", - "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c", - "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672", - "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51", - "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032", - "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2", - "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b", - "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80", - "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88", - "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a", - "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d", - "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389", - "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c", - "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9", - "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c", - "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516", - "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b", - "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43", - "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee", - "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227", - "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d", - "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae", - "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7", - "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4", - "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9", - "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f", - "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013", - "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9", - "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e", - "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693", - "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a", - "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15", - "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb", - "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96", - "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87", - "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376", - "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658", - "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0", - "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071", - "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360", - "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc", - "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3", - "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba", - "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8", - "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9", - "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2", - "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3", - "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68", - "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8", - "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d", - "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49", - "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608", - "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57", - "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86", - "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20", - "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293", - "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849", - "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937", - "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d" - ], - "markers": "python_version >= '3.7'", - "version": "==6.0.2" - }, - "mypy-extensions": { - "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" + "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b", + "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031", + "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0", + "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce", + "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda", + "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858", + "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5", + "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8", + "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22", + "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac", + "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e", + "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6", + "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5", + "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0", + "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11", + "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a", + "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55", + "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341", + "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b", + "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704", + "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b", + "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1", + "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621", + "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d", + "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5", + "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7", + "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac", + "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d", + "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef", + "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0", + "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f", + "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02", + "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b", + "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37", + "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23", + "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d", + "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065", + "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86", + "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6", + "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded", + "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4", + "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7", + "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a", + "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17", + "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3", + "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21", + "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24", + "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940", + "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac", + "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c", + "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422", + "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628", + "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0", + "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf", + "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e", + "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677", + "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f", + "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c", + "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4", + "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b", + "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747", + "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0", + "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01", + "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8", + "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9", + "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64", + "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d", + "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0", + "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52", + "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1", + "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae", + "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d" ], - "version": "==0.4.3" + "markers": "python_version >= '3.6'", + "version": "==5.2.0" }, - "netaddr": { + "mypy-extensions": { "hashes": [ - "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac", - "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243" + "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd" ], - "version": "==0.8.0" + "markers": "python_version >= '2.7'", + "version": "==0.4.4" }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "9ed0186060fa59da827b2e49f70530ce65745054" + "ref": "20d750a1c6869beee8a6d137cea7e3c7d3e1f108" }, "nucypher-core": { "hashes": [ - "sha256:0bcfb9bec7cef486aaf8b980f628561eb57a675ca192f2832e70bb6b2fa17cdf", - "sha256:0bdef5106c42310dae46444256cf6f031759df2e8b7f18560f059e3a4bd469a9", - "sha256:100873b3eaa29e4392b0f6c35ddcf2465f554483a54b2f36cbfe3b345a445ed9", - "sha256:1879b053ee5b02ea2379518d3a6062706ac3a33f758757e35a2d5a2621b8af2c", - "sha256:1c4261c4f096bfb27da99da52d75312565d57caa298788f28d6945adbea7fb0e", - "sha256:281fff3bb92a0a222e6cf7d3c0622ba1bf57961997886e98a03a26e9ebb59dcb", - "sha256:3cc809505645663306cbaa9f37668822b32a8bcddcc2744c748a2736cfda17db", - "sha256:3d390d6c0ecd118b1d3cd1fa7f2cdc3669f7700a3c8593013cb1e799ac9e79b3", - "sha256:5d8428198e8307678bb8d79c8d0a0df8bfb2df784fa33ee0e29d2a3cae1a163d", - "sha256:8cfb67b509e0a2860f9209bd7945c40540de8b84f0f693129d53cc710ba9cfb1", - "sha256:9317e020880ba4a66759c5ecdef9a4d16d1eb25e16761afa5d91a80616108c8a", - "sha256:9dfb766534da38df4290c35be0d76e3ed61a5968f7af31b2e3d3c69cbf74be16", - "sha256:cfc6458f27dead92c9d2c7a75a55ebf05ce6019c49e3163204c4e9601f231c87", - "sha256:d2eb7a8bb8d9ecbd68735b2a504a1b3d15e702c275515d8266a36c925e954ae0", - "sha256:df1b8807415bbcb8b839b954046f486c8e7b03d8f86647e456de7ca5a2f86cc4", - "sha256:ef6e1c10d2faeb6c26829a5f6e5a49b720d73950bd4cc9866fef19b950148c75" - ], - "version": "==0.4.1" + "sha256:010acfa1b5db8672ecab6d423f115d1f26c893a9d46cab21be5858e07cedb97b", + "sha256:2edf1ff64f4c26be39939271b0c49f0e6dca007f568be4e2364631e9b731f69b", + "sha256:338d909da9ee7ae194b13ba771ff607ce36d0660d365e6dd9368343da3871fbc", + "sha256:514e7c861b05adc50a7bd748ea952df5870b1dfca77cfc2e5763bc0662f0ce59", + "sha256:52bfe3ed2bdd53cae0a88299b4e64510223e6debc5ca51989c5b8f93c9d40598", + "sha256:610ce729317c5c8817f60943660f4dd8464ac64adb95ea808c009c8ef92fc43f", + "sha256:679169a79e1ebd51bb2f7db50feef60522b658237b925660e97b83bc5cb31897", + "sha256:682c01979482a74186ef7fff2f9a717f319099e9d29874713f4f989658739cd6", + "sha256:79524ea772f608438d3a755980a79301717ad33fb1fca7c5e0d51a950faa53f0", + "sha256:9a3e08b62dcc5a943c6a08775a4597da80fd4be9fc380adb84d48a96cee7f59e", + "sha256:d0208752ecd41b69f8b494d8f515c2bf67be53179e1b75cd1770e15be9431194", + "sha256:d216c5bdb811c707c2c80cc66912373e5cb09eb148509d4a0fe8d080a78aab08", + "sha256:dbb9372629f3f5a9a19084c1f9b24814c6b055ffcbde0f0fcbbc7b488d1064f5", + "sha256:dc4e9c23dbca27cfbd8eac2796776ece4c4320a8efd174997ea0efdc3fb12c55", + "sha256:e63d7f4a25f6475c97e80f9e32c9c5056c8e5f51a3b1af1db73e8f2b0978d13b", + "sha256:e8007b202704512678f16d225789d843535b38cf5bcda2442c1510eb7e16e4cc" + ], + "version": "==0.7.0" }, "packaging": { "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" ], - "markers": "python_version >= '3.6'", - "version": "==21.3" + "markers": "python_version >= '3.7'", + "version": "==23.1" }, "parsimonious": { "hashes": [ - "sha256:3add338892d580e0cb3b1a39e4a1b427ff9f687858fdd61097053742391a9f6b" + "sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1" ], - "version": "==0.8.1" + "version": "==0.9.0" }, "pendulum": { "hashes": [ - "sha256:0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394", - "sha256:1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b", - "sha256:29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a", - "sha256:2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087", - "sha256:318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739", - "sha256:33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269", - "sha256:3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0", - "sha256:4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5", - "sha256:7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be", - "sha256:94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7", - "sha256:9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3", - "sha256:b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207", - "sha256:b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe", - "sha256:c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360", - "sha256:c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0", - "sha256:db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b", - "sha256:de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052", - "sha256:e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002", - "sha256:f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116", - "sha256:f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db", - "sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b" + "sha256:075de865e31876d39831f5ce224849b4ced217b0368d58ab1a155622494031b8", + "sha256:0814e93270e5370ee2b5342ce4e91c4162d06b122de81fac88f92e5d8504f9e5", + "sha256:0876f05544a08a73df5c68d6adfe86b080bac91ba95c5c65396fb92b6d3b8dea", + "sha256:096d2b20fcf0f9f3bb31a04c6ecff9cb4fd7ea5755b47c32fc454854a5b56320", + "sha256:0b4055f1ae554a74dce460af10deabcd3b1e1470e9c7b6644cecf3ff79498780", + "sha256:236cd4ab81b5753780e75a4aecbcdc86b8c28a0ad03b00496bea5ac4ad3fa93f", + "sha256:27df9ea0030f51213e17b97874b06af873441644f14de1b112c80e079b86ee92", + "sha256:2c94b376f5c0f4ddcdcf020a95993fe0c6cdb115fc065956ad975934215e842b", + "sha256:2cf23d1955af25b2bc76c1ab16ac5e71817729c7fa489264fccaeab7d72cce18", + "sha256:367dd5735120060abfc636a7d72040d6d38cd4d7052f9206eecaa0eef5fdf8c0", + "sha256:3be6b9500863ec9502609ede68172d4831e4254df72d8bd76b523c4f7c198068", + "sha256:46947e8455833d8e166f732d7faecabbf45b81bf42443829fd267622d2ab21ea", + "sha256:476b9112a340c2c38f6a880c76b75c5aabc9131d5a7f2a9b5a1c950a77fb802d", + "sha256:4cfc02645b6afb9a2781f52eb35de912f75fc4d6bb502b856697d522d9158d2a", + "sha256:4d2d891ad280e8cad1174bbe06e15ad3c1110880cf1db3fc1bb4359c44ab137e", + "sha256:4e5eef051882aa0330c146321ea542797f817376cbc001356a7c98126532dc60", + "sha256:5025d9fb9ddbdfdfae60194bb7d6be3bfea2f2361f098687637712e33c359153", + "sha256:5125077b639167aa386a67f87cb6e0717864be10ea019fbff8ee0125fdb55ede", + "sha256:51baeb11abdfa4ac33c229f7488948ae2fcefcd229479c4c1a3a10fb63167535", + "sha256:59fc9f4fff307dcb5e348793161683ea3b78efe431058984265a872544be887e", + "sha256:669007b0f75e609e2794bc4e71ae47b8def25ca1cddba115216ff2b458675b71", + "sha256:6988901ac209d5fcd50da5e853273dd05d973b23c6f72a4a154039316d6b114f", + "sha256:6b332eb3b0084b7d87566ed858e1f27532495be6b509907d47ed2d22e155ffe4", + "sha256:6f6b4d0c75b0e9372320ae501f7f27c44c47b8ebc2b732884be811459bbcda28", + "sha256:833d7e344469625f30a1b5e883f2c8af99b0e35bbae82fb21a6e9ac6094576c6", + "sha256:836180c9800a2246005eef378850d8af8a66cfab06d80c10bafedefc94def872", + "sha256:8ba87243c01e51ebcad88b370f33ab6f09704c6015083f9238198ce1e1bff46c", + "sha256:9512f85d02727db3600e601757e6e96428c5a35e35e60bbce0e11346998e3b9d", + "sha256:9e803c0f383a23bae88e7578ef9dcee987e7ef824c5891af82142e8d7e9b0b9a", + "sha256:a34d2c33ce5da7b17c0d04144979af4631dee77d4437a1fd74d9668f6d1831cd", + "sha256:a45b94dc7d115b56f90490fc3960c579a3d8f73731a37fb0d25f00550faa374e", + "sha256:aadbfa235875b98ef7769843b5d3174e418500a20004663cb1fe341433793899", + "sha256:b05eb3cce1ff9a7d63e82887a4f9538d4aa543e7c94b5e33f15caee89c680938", + "sha256:b558fabaa96d20541ea3c88fcfbd25e8440def6f23ae49d649600228887970f6", + "sha256:bd244c062c25ac3fc484813e76c75f05373170786c4e34c2e42f57277335b919", + "sha256:bd8e55be4b3596fd29f1567b4b49ed8a536f3aadcc4a3f7f96073e00ebadefd7", + "sha256:cb830c7aac70b380ed829e52c825d4854bea2d970179abd12eb6c363d48b758c", + "sha256:cdd95883421ae159d4b9f7343efb8252c7be39af753cabb331a20c8b351830bd", + "sha256:d08d408a3654f9b4ad2db8d76a5863a29a5fcf2c81bcaf3a89545e7ac041319b", + "sha256:e26a422d7e987690207d2e73a5febec3c08bee722ebe69ae52352eb60459d086", + "sha256:e611af03dae4a78debdfcfc2435c61734af761d185dccfbd14fd67a770d03457", + "sha256:ebc402a51dcbed5d335779b3947b17f0f9178fb8d9c01ed5fb80e9efcf18c8a8", + "sha256:ec4fc633c850aef300e58b55fffbd9b0156ffe120653f051d25dceda022f4a73", + "sha256:f15c13e938879595f9e1a5b533f5d47206977d4e811adf4b91e5512b742970e8", + "sha256:f5f69fe307e36cb434d999b82870b2be416eced3a0046eef85e8e43952b881b9", + "sha256:f81f45d0d554d33134c2e9aa91e9bf26dbae23d5689daba44a75fd780a711ff9", + "sha256:feaa3aa442d585dde0e8a0b3c6930e9e7cb56d85f6c759e8c2581a0dece69882", + "sha256:ffaf7daead2a86f3f48da7fc0fe1c2f4f3be665245804e988b07aba79f4ef41c" + ], + "markers": "python_version >= '3.7' and python_version < '4.0'", + "version": "==3.0.0a1" + }, + "pkgutil-resolve-name": { + "hashes": [ + "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", + "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.1.2" + "markers": "python_version >= '3.6'", + "version": "==1.3.10" }, "protobuf": { "hashes": [ - "sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf", - "sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f", - "sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f", - "sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7", - "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996", - "sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067", - "sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c", - "sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7", - "sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9", - "sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c", - "sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739", - "sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91", - "sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c", - "sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153", - "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9", - "sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388", - "sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e", - "sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab", - "sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde", - "sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531", - "sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8", - "sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7", - "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20", - "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3" - ], - "markers": "python_version >= '3.7'", - "version": "==3.20.1" + "sha256:0a3d1a3f746cc5209163bab06f4f56b77fb9d523beedd42e04e6334bb653fd84", + "sha256:139682756712146b24fb276c800dc7d05057136b331b66cd2a31f68e55dbac6f", + "sha256:33673619f4f28b04f4e99b578ceb99b335b31ee5f5a2cc513a9d32284ff8d956", + "sha256:3979ea994d7bf9fcbc7541b7cf2331c0850896d20db099d9d22cc6f01627ee68", + "sha256:499e5884e71719de45baeec980ea2c46a4fabe83a240363ea3272507f4819771", + "sha256:6d7c54c6686462f06b0f19d5c4cc1ce86be247493b89ed6cdb37f7b5f02f26ee", + "sha256:87af9d12258b4f3602dc26417db9dc89204d029647d5cf0de7d9d819fbd5b35c", + "sha256:a24d1498edef52e4a17f67b7640e1973f9affc168f15fe6d9eff4cb1ede785ea", + "sha256:a49938ad67a8652d64b662be6841e29764cd44d6db7e0be2f8c9d7a68c53b129", + "sha256:ba9e9279844e49a734accb0696f929615c59226176d585a341ccc51e85431e39", + "sha256:be3791a2694b96008334e8072845eaf5c7d4bce4564cf126ecbc34d3bf5abcdc", + "sha256:cf6904fabb6ef00c8bd0b666b196584af333442b05c044c492a09f743d31db6f", + "sha256:e7e5bca11a5ff3bc4919aaf80bc83781b6ea093b77f60743f766f1af2aec68e4" + ], + "markers": "python_version >= '3.7'", + "version": "==4.23.0rc2" }, "py-ecc": { "hashes": [ @@ -1138,46 +1245,26 @@ }, "py-evm": { "hashes": [ - "sha256:2fd960df8b2dad195eb9d732e4fcaca52bb56d4e9862ba76f0a9c50aa0a21952", - "sha256:d02b1a18c0162849991c25e46181e50233b0de5298b53f6da22c32b12a79f42a" + "sha256:2539de6d05c67fa146eacee973812c20b7574f9a741d70fc7b904199f90065d7", + "sha256:42e375ee5a9fcfffa2be804d951b0c46b028a9a1fe1f3ce34d279003dc0677a5" ], - "version": "==0.6.1a1" + "version": "==0.6.1a2" }, "pyasn1": { "hashes": [ - "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", - "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", - "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", - "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", - "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", - "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", - "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", - "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", - "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", - "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", - "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" - ], - "version": "==0.4.8" + "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57", + "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==0.5.0" }, "pyasn1-modules": { "hashes": [ - "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", - "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", - "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", - "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", - "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", - "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", - "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", - "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", - "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", - "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", - "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", - "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", - "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" - ], - "version": "==0.2.8" + "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c", + "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==0.3.0" }, "pychalk": { "hashes": [ @@ -1194,34 +1281,42 @@ }, "pycryptodome": { "hashes": [ - "sha256:0198fe96c22f7bc31e7a7c27a26b2cec5af3cf6075d577295f4850856c77af32", - "sha256:0e45d2d852a66ecfb904f090c3f87dc0dfb89a499570abad8590f10d9cffb350", - "sha256:1047ac2b9847ae84ea454e6e20db7dcb755a81c1b1631a879213d2b0ad835ff2", - "sha256:13b3e610a2f8938c61a90b20625069ab7a77ccea20d65a9a0f926cc0cc1314b1", - "sha256:1fc16c80a5da8231fd1f953a7b8dfeb415f68120248e8d68383c5c2c4b18708c", - "sha256:265bfcbbf20d58e6871ce695a7a08aac9b41a0553060d9c05363abd6f3391bdd", - "sha256:2bf2a270906a02b7b255e1a0d7b3aea4f06b3983c51ddec1673c380e0dff5b30", - "sha256:47c71a0347847b747ba1349767b16cde049bc36f21654eb09cc82306ef5fdcf8", - "sha256:48d99869d58f3979d72f6fa0c50f48d16f14973bc4a3adb0ce3b8325fdd7e223", - "sha256:4d950ed2a887905b3fa709b86be5a163e26e1b174703ed59d34eb6832f213222", - "sha256:54d807314c66785c69cd25425933d4bd4c23547a593cdcf49d962fa3e0081336", - "sha256:58172080cbfaee724067a3c017add6a1a3cc167bbc8478dc5f2e5f45fa658763", - "sha256:5df582f2112dd72331de7e567837e136a9629181a8ab69ef8949e4bc294a0b99", - "sha256:6016269bb56caf0327f6d42e7bad1247e08b78407446dff562240c65f85d5a5e", - "sha256:63165fbdc247450017eb9ef04cfe15cb3a72ca48ffcc3a3b75b08c0340bf3647", - "sha256:69adf32522b75968e1cbf25b5d83e87c04cd9a55610ce1e4a19012e58e7e4023", - "sha256:856ebf822d08d754af62c22e2b93626509a72773214f92db1551e2b68d9e2a1b", - "sha256:95069fd9e2813668a2713a1efcc65cc26d2c7e741401ac46628f1ec957511f1b", - "sha256:b12a88566a98617b1a34b4e5a805dff2da98d83fc74262aff3c3d724d0f525d6", - "sha256:c69e19afc734b2a17b9d78b7bcb544aabd5a52ff628e14283b6e9404d27d0517", - "sha256:c82e3bc1e70dde153b0956bffe20a15715a1fe3e00bc23e88d6973eda4505944", - "sha256:d1daec4d31bb00918e4e178297ac6ca6f86ec4c851ba584770533ece554d29e2", - "sha256:d67a2d2fe344953e4572a7d30668cceb516b04287b8638170d562065e53ee2e0", - "sha256:dab9359cc295160ba96738ba4912c675181c84bfdf413e5c0621cf00b7deeeaa", - "sha256:e061311b02cefb17ea93d4a5eb1ad36dca4792037078b43e15a653a0a4478ead", - "sha256:e750a21d8a265b1f9bfb1a28822995ea33511ba7db5e2b55f41fb30781d0d073" - ], - "version": "==3.16.0" + "sha256:04779cc588ad8f13c80a060b0b1c9d1c203d051d8a43879117fe6b8aaf1cd3fa", + "sha256:121d61663267f73692e8bde5ec0d23c9146465a0d75cad75c34f75c752527b01", + "sha256:1a30f51b990994491cec2d7d237924e5b6bd0d445da9337d77de384ad7f254f9", + "sha256:2c5631204ebcc7ae33d11c43037b2dafe25e2ab9c1de6448eb6502ac69c19a56", + "sha256:333306eaea01fde50a73c4619e25631e56c4c61bd0fb0a2346479e67e3d3a820", + "sha256:38bbd6717eac084408b4094174c0805bdbaba1f57fc250fd0309ae5ec9ed7e09", + "sha256:3a232474cd89d3f51e4295abe248a8b95d0332d153bf46444e415409070aae1e", + "sha256:4992ec965606054e8326e83db1c8654f0549cdb26fce1898dc1a20bc7684ec1c", + "sha256:53068e33c74f3b93a8158dacaa5d0f82d254a81b1002e0cd342be89fcb3433eb", + "sha256:5587803d5b66dfd99e7caa31ed91fba0fdee3661c5d93684028ad6653fce725f", + "sha256:5a790bc045003d89d42e3b9cb3cc938c8561a57a88aaa5691512e8540d1ae79c", + "sha256:74794a2e2896cd0cf56fdc9db61ef755fa812b4a4900fa46c49045663a92b8d0", + "sha256:80ea8333b6a5f2d9e856ff2293dba2e3e661197f90bf0f4d5a82a0a6bc83a626", + "sha256:8198f2b04c39d817b206ebe0db25a6653bb5f463c2319d6f6d9a80d012ac1e37", + "sha256:87e2ca3aa557781447428c4b6c8c937f10ff215202ab40ece5c13a82555c10d6", + "sha256:909e36a43fe4a8a3163e9c7fc103867825d14a2ecb852a63d3905250b308a4e5", + "sha256:9453b4e21e752df8737fdffac619e93c9f0ec55ead9a45df782055eb95ef37d9", + "sha256:9ec565e89a6b400eca814f28d78a9ef3f15aea1df74d95b28b7720739b28f37f", + "sha256:a3228728a3808bc9f18c1797ec1179a0efb5068c817b2ffcf6bcd012494dffb2", + "sha256:a74f45aee8c5cc4d533e585e0e596e9f78521e1543a302870a27b0ae2106381e", + "sha256:afbcdb0eda20a0e1d44e3a1ad6d4ec3c959210f4b48cabc0e387a282f4c7deb8", + "sha256:ba2d4fcb844c6ba5df4bbfee9352ad5352c5ae939ac450e06cdceff653280450", + "sha256:bce2e2d8e82fcf972005652371a3e8731956a0c1fbb719cc897943b3695ad91b", + "sha256:c133f6721fba313722a018392a91e3c69d3706ae723484841752559e71d69dc6", + "sha256:ca1ceb6303be1282148f04ac21cebeebdb4152590842159877778f9cf1634f09", + "sha256:d086d46774e27b280e4cece8ab3d87299cf0d39063f00f1e9290d096adc5662a", + "sha256:dc22cc00f804485a3c2a7e2010d9f14a705555f67020eb083e833cabd5bd82e4", + "sha256:e1819b67bcf6ca48341e9b03c2e45b1c891fa8eb1a8458482d14c2805c9616f2", + "sha256:e7debd9c439e7b84f53be3cf4ba8b75b3d0b6e6015212355d6daf44ac672e210", + "sha256:f44c0d28716d950135ff21505f2c764498eda9d8806b7c78764165848aa419bc", + "sha256:f68d6c8ea2974a571cacb7014dbaada21063a0375318d88ac1f9300bc81e93c3", + "sha256:f812d58c5af06d939b2baccdda614a3ffd80531a26e5faca2c9f8b1770b2b7af", + "sha256:f8e550caf52472ae9126953415e4fc554ab53049a5691c45b8816895c632e4d7" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.17" }, "pyethash": { "hashes": [ @@ -1247,47 +1342,11 @@ }, "pyopenssl": { "hashes": [ - "sha256:7a83b7b272dd595222d672f5ce29aa030f1fb837630ef229f62e72e395ce8968", - "sha256:b28437c9773bb6c6958628cf9c3bebe585de661dba6f63df17111966363dd15e" + "sha256:841498b9bec61623b1b6c47ebbc02367c07d60e0e195f19790817f10cc8db0b7", + "sha256:9e0c526404a210df9d2b18cd33364beadb0dc858a739b885677bc65e105d4a4c" ], "markers": "python_version >= '3.6'", - "version": "==22.1.0" - }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, - "pyrsistent": { - "hashes": [ - "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed", - "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb", - "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a", - "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95", - "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712", - "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73", - "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41", - "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b", - "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78", - "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab", - "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308", - "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425", - "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2", - "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e", - "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6", - "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2", - "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a", - "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291", - "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584", - "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a", - "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0", - "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770" - ], - "markers": "python_version >= '3.7'", - "version": "==0.19.2" + "version": "==23.1.1" }, "pysha3": { "hashes": [ @@ -1320,133 +1379,125 @@ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.2" }, "pytz": { "hashes": [ - "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427", - "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2" + "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", + "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" ], - "version": "==2022.6" + "version": "==2023.3" }, - "pytz-deprecation-shim": { + "referencing": { "hashes": [ - "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6", - "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d" + "sha256:3c963366bc94261bec1a4bd5917a05fee800c1e87995add5edba21abfa253c7d", + "sha256:8c1886f14748c22c9fdc0e302add12f99ad93cada04ce818d47641dc06637a36" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.1.0.post0" - }, - "pytzdata": { - "hashes": [ - "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540", - "sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2020.1" + "markers": "python_version >= '3.8'", + "version": "==0.28.0" }, "regex": { "hashes": [ - "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad", - "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4", - "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd", - "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc", - "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d", - "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066", - "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec", - "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9", - "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e", - "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8", - "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e", - "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783", - "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6", - "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1", - "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c", - "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4", - "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1", - "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1", - "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7", - "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8", - "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe", - "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d", - "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b", - "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8", - "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c", - "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af", - "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49", - "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714", - "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542", - "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318", - "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e", - "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5", - "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc", - "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144", - "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453", - "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5", - "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61", - "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11", - "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a", - "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54", - "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73", - "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc", - "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347", - "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c", - "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66", - "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c", - "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93", - "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443", - "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc", - "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1", - "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892", - "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8", - "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001", - "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa", - "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90", - "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c", - "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0", - "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692", - "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4", - "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5", - "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690", - "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83", - "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66", - "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f", - "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f", - "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4", - "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee", - "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81", - "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95", - "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9", - "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff", - "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e", - "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5", - "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6", - "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7", - "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1", - "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394", - "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6", - "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742", - "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57", - "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b", - "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7", - "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b", - "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244", - "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af", - "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185", - "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8", - "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5" + "sha256:00f6f26e748c797a041ab6957f4cacc66a7fbd5dc5f627760985f5c5b7de2af6", + "sha256:0130a2fdd6f033c3e3710d0b950cc6abd3133c5af88c40c78e77641cb6f6cf8a", + "sha256:027d4962340dbd84979fd1c40bfd7ca8362030abfbbff25f1327bbf4867f047c", + "sha256:037f4be6a240a11a6d3397e932ef5d3ec5855858910792a0ab7d351bd0333533", + "sha256:04a825fd9f5931263eccd0cbdbf171a9792fa1bf2642ca62800b57689ca1b660", + "sha256:06fe9870165d4975a8a3e27a83919b9014b35dd2ee7061a5f2be8e579294cedc", + "sha256:0a664857dd9b1076942c4d73c54a031066ee0ae88a438e7a1e0e79c1c5ddf47a", + "sha256:0c731522eaf74166066fcf91fe7fe3c3617cc5e8df0c150132282d0dd5225afc", + "sha256:0d5a0edefdf800aeef6cf559af75e614fb2eb2d0388f0b132af805fdefcf8ec6", + "sha256:0eee66c4ce6ced2e9d5d4497a569bab6257a6d118eb43dd57cceb61ba00b62d8", + "sha256:12be293d718e05f7304f715980b1a25b16e34a1ff2121740592559d066f91e67", + "sha256:1ad00c9aae6090d052c0ee16a2737a7154031793e6c7b58a629eed8d8aa77e31", + "sha256:1d98e4748a60c9902ad504e862756c43cc707404fc3025f82ef5bbe50bee3b9e", + "sha256:1dc5e9a847613679ac8bd0386a0e54f2958441a0fcc123778637e433041aa763", + "sha256:1ef51012493837263236781ac9598f059dc4e5a4d72627bd3ac85cbd5d1b0ee1", + "sha256:2095acff95df0bf6ec3dee672a03d3d78606b4ca419d53fbd606c559cebedf45", + "sha256:21b653c1538cbbc1c58f6d6f3ccb4a5ce56491f0ab370ec057c1c64a152eb48c", + "sha256:24db1c0fc20850db47977824a99fdae81d6764adaf8192dd874185d9e7166dbb", + "sha256:2762750332f57820c0f38ade87ce4ebe671b178892faed0112f574f0b42801cf", + "sha256:336fb3f585e239362d4f26dd6f904b15d91febfc980f47ed706858f5cee20ce6", + "sha256:3633a07ffeabc14f3cd531f11794bb603267d86e4109cb811a34aee020622d3f", + "sha256:376fa2ef6a02a004b6fe4ebaa5ba370e7532ec6915efd12e33aa434517f8bbee", + "sha256:3965a9ab13f1bf3e4af021c7dbe9678dd9f8dc5cc9097b3d3cbbf3ad00574b5d", + "sha256:3d8cc797f87c07372e7d300198e1423c2b7bd35b68f375cc6700e26158940c9a", + "sha256:460672c6ec94997755bd37b00302853b9d85a5a433121c198359958e8c10ced5", + "sha256:49a77f0b62a4122cf578d1194658973c435e6d2a9611013be11b6750056a5930", + "sha256:4c2ae89c92a04b057b412f88a3359e77600ce966a740e2da212667ce795e1bdc", + "sha256:50e00ab84396bfbeb1bede61eff6641f957b6532e74e02be480d71914e20e2ac", + "sha256:5a7ab3440f0c653dee8b42af858da6e07615c64ba86a6b3509a0ecf44eabdb11", + "sha256:5a98814d42282153c30d674ee34ea114a03ea8d32fd5d9b924d46fbeb2c7eb15", + "sha256:5cc67b3562aada6682ae45f2ea40819baa6bffe38155883100f8779c22c8c087", + "sha256:5d321dd059fd00482537aaba919e29189ea4ab6a03528881267982bb7707f610", + "sha256:5f82d4e0725788787216c9ae53116e6e477b2d97f29ec1e5086f5afbab5716b0", + "sha256:5fda1fc36dd923aee070d7aab3a85b448c8b62930900c615bb67db829281103b", + "sha256:63a92f28a3f285dae06aae83227cb66cc87256db040aaf26c1c48ae5221eccde", + "sha256:6469c2baf450fd1e648752b113a1fc1d67dfbad359f6171be954bacf7b09d126", + "sha256:6686256d1d435ed782ff12ef11e074705911a40d3907b986e53ca9a996e88489", + "sha256:6ccd0d7557c4e76303a6429ec9de55cd87334809cda66c0f101831e2ce9073c1", + "sha256:6f02105d4a511f550dcd63f750937d1607a1f6dc253c798c4adf36aba89215a3", + "sha256:70bd0c121b3c4e641e5c4e633c4581059acad774a1a62bcb15fea3470c2a61cc", + "sha256:770f825c7751ce43aae2088fee94f2e60f95e181223642a0bb35cbaeea92001c", + "sha256:77b3333a6cd1161b81bcf018a9bdb3cc567074a913aa69b98b9c8c79be28565c", + "sha256:797bab57e1317c940030f3c15d48c01e1f16d12ba0f6a807ee0bebdc1cfe3f2d", + "sha256:8418b0ee315555ca9786daab00ec8aaf47dfb2698a5be689676e83e88b949f22", + "sha256:861ed1249302664f96b2e968216486a02af0a143e0f3cc6fd92b78f11aa18579", + "sha256:89f54d4bbd452a5ee01dc31ec918f7b1f32483f13d3598af1acf5ea82ad82ad3", + "sha256:8c704e7062c59d2f7e2eebda2c0c0b69bd807ca6579c3a21fc4b1d8505cfc090", + "sha256:8d5bc5035989852a4ae7dacf8dc99db7c4f21c852486777a98b8efe37af4d8d7", + "sha256:91f47522688955cb33190f8354ccaa1cc058d05e73f99afe9ace40db36c159e8", + "sha256:9322797fddd51ec0312a8b649d9a3ebfabf4826a204ef8e1cc11801013005323", + "sha256:953ba37dd83c424c2cf699c64a8477645fc7c7403ffd2eb1417189eddbbfb4a7", + "sha256:97fd2885df308edcdf96baa632192a4291f3ed5b072c0bc3f29dc1e6de40ffa4", + "sha256:99780a0880d3dab2bb6f863492d38ab90ffdc9daf4fbefb505524f6f3a1c9dbe", + "sha256:9b887d87188489859411d0c7e741f7dfe8a3ca5946b0db8b3c9e5daecc089b62", + "sha256:9e1b4b0b4baff934ef3c0ac56578a6b773f7f90ad1db3ff843ee40d83bdae09f", + "sha256:a419384c6c80d58532016c3cf6a3aca009bfb7661f33e119ba7f77ec0e28222a", + "sha256:aa92f9ad481108a7e4c5a5234608f7c718f8b67003ce4719a4d2735d82b54167", + "sha256:ac402ac165f42f41b3aef9e8a9c6fb204dac31faad65b3b0ae6bff4bc9d0dad2", + "sha256:ad84e1d4be3504e7dcd6370b3e847eaf05d5d35cb0818d0bd2d1a26b58c0abd2", + "sha256:b132e4507c6404faece005329de7b2b97653ddfeeaf84f058fe820791160dcda", + "sha256:b365b8fa0d5fd0208db5b0e94582edb796dde07d1f99c5a9c1ff6be172c374ee", + "sha256:b48820071a49b68ca8734e8b2bd1f26632512154816b261b614e62cc724d9f8a", + "sha256:b7eb07d60c385aec906b82d48447907a2bbf454d0e9ead62168de111accabaf8", + "sha256:b87d38717ed855583ae1693f6095fc9c06b7dde4ddec782b41aa92931dd60e7c", + "sha256:bda905e040e6c2875a7dde9652a9e0c426aaac6058568cc064f8128b061439ee", + "sha256:c10b1388106447db0cdb8e340d06fa2d49b822368a049c36928d3c24296c2e37", + "sha256:c1155571edd498b6274f969517db6781500fbb24fc91ff740ea5a37c4735b3ba", + "sha256:c1fa9651141caaafa0d6048695a4a04bc4bf39c75f250a36b1a05c9588a403a9", + "sha256:c300461ed8159f61d979971ba51f1acd1e6f9907d86888e9275165e06ea90f06", + "sha256:c40f7e8c02b287550166a3e36dbb89f9387db86a71101f6242668e3ef979cd2a", + "sha256:c455d886838dd5a248e7f06e5573275fc854febd206eb937cf632082a06a939f", + "sha256:cb22580ce5e2eee138a78df40444151ff51c91acd11be546216a046677c75593", + "sha256:ccd0c918971f79bd9a883f13f91343dd2eaefbafd4344aadfe5134a65fb821c3", + "sha256:d0ac14c36d91b191d1cb073fb5ac49937d88a5c8b051ced3875321a525202c34", + "sha256:d28933aa1242814ed737b569b2baf96e4d236c52be454b5dc17afd36bf893c12", + "sha256:db5d5c9c7bbcf9cbc541f8adba8c92a7a7abd0de4f0343da4e96fb78ffe9d1a1", + "sha256:dbc47670e0424a566084e15af9a253b85f90fa26e60fa07e1b10c90df4c8fd07", + "sha256:dbcb49036a6a6065035ac2acc1ad6a918f9e09ef2d0f9392dc90b8756f789f95", + "sha256:e708e69c4d3bc41df29efb94aadc5578c841b2cd02f8cbb1bcfbf280f2801238", + "sha256:e87450db3c444f41e3ac6a09b7a10ddfe54fa1e98bf60ee299fe6d11097540cd", + "sha256:ea2d66c1fd898d81b8ce0f95afab9ba0ab522cf08810f11fa28ad958706cd2b2", + "sha256:eaff21326bc5d9be0c2f400931d39274105bd5d06650f0b0215392d1b050d404", + "sha256:ebf0776fdc7a5e0ac11b6db2d69ac77479411b627a96119ffa4427ba32f3bb66", + "sha256:f2bc7249840faacfff6196e5b5ffeb3fdaf078986521a1cda34e9be5607e773b", + "sha256:f3e20cf2575b1330687d3dd6242f82278b3bdc09a9f36cc7ac4d45b7dd63c1f5", + "sha256:f576b8dec95456ba0157943a57f5f88c076cf96cc363ef1bf5027c2976fd487a", + "sha256:fbc5b23b569d96b8c831574c93098b68c6d7ff2509f31268c968152ca4f2ecd0", + "sha256:ff8fef88029d0420315935041db517855ea022889fa8d54959943e39fffebf59" ], "markers": "python_version >= '3.6'", - "version": "==2022.10.31" + "version": "==2023.5.4" }, "requests": { "hashes": [ - "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983", - "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349" + "sha256:e8f3c9be120d3333921d213eef078af392fba3933ab7ed2d1cba3b56f2568c3b", + "sha256:f2e34a75f4749019bb0e3effb66683630e4ffeaf75819fb51bebef1bf5aef059" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.28.1" + "markers": "python_version >= '3.7'", + "version": "==2.29.0" }, "rlp": { "hashes": [ @@ -1455,6 +1506,35 @@ ], "version": "==3.0.0" }, + "rpds-py": { + "hashes": [ + "sha256:014828cd68b4cdee84ab66adaf5bfe1f137656a7a588c31fdca04ba0768ef62d", + "sha256:025b8101dbf39d77cf41ac3c737e4c713e0b2728a516443b382e66b9d492ff98", + "sha256:038249d2bbaf91aa65c4108a40ee076f657654261b1a246ab99726710bfb77de", + "sha256:0bcb162f5549408125ec986bfed1a66f2036ac2910d3fb0a6afda0f97bc6ea15", + "sha256:1b6db70c2ab847229fa9cff3a5eb641c33ab3f981ee8b99d326a7deb8989e4ce", + "sha256:2a5c672b1cd382973bf414518ddc9d743d06bcee751fa65256d84ba412192b0b", + "sha256:311a57cc972481bd220af28cf4309141c680a356b2359f163daac030d0c2318d", + "sha256:33a2a15b641bc17bc6574f9600976374a085ff81ac8dddd4bde6c451e9e9e58d", + "sha256:34007442d36980c4aab3f4044c1fd05a736c8ae09d47b8a42112deab5d6b5a10", + "sha256:453e62d679d8de32c5e00ba27f8c8c45a456e5d6db6fa6f67fdd3e12f1658833", + "sha256:5eda3aba0cd291de9d4bb138db45814bac24bc4c07e0f38b0544374b6104c488", + "sha256:68e8f2cedc65198248a14d716125016fd0816f63f216a82c2209a0686d5447cf", + "sha256:6d1d4078d60ca47f0eb6bdddbf79f00a72d41ee3148aba1dcf9b980f73a8d26e", + "sha256:858604fe5d7eb50e91b1096bcbcb421f2cb3101454244afda92b4d768d0cb4ce", + "sha256:98b54a47e670093b8bf7d1a0222d0af26dac19314a0e79ac478e447357396a2d", + "sha256:c38d17af73aa03686d701686628e37c114a459650233c0d5f0492dad3a76e3e0", + "sha256:c7bd3a381c4a5fe7e0fc4dff554bd1ce2b0be12ba0193c176c291b7dc1e8bea0", + "sha256:cbdc8ab6108b8bb260ee68fb2de83fb1c481d3a77355156049a8a49ea47eacf6", + "sha256:cc6ff891c3814d8cd92549cb385353a922518d433aaf1d2d0d99e98e59915370", + "sha256:d940b5644f14e49b1c6e7902b9ec8a0c7584109fbf380fa18115831a641927c8", + "sha256:e16c02923726307d960e908b61d4d833939f322877d2957c001fca23b644914e", + "sha256:f53f65cf56bb60355681431d04bc04dbe709452dd85eebf537035dc145bd36c9", + "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5" + ], + "markers": "python_version >= '3.8'", + "version": "==0.7.1" + }, "semantic-version": { "hashes": [ "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", @@ -1470,12 +1550,20 @@ ], "version": "==21.1.0" }, + "setuptools": { + "hashes": [ + "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b", + "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990" + ], + "markers": "python_version >= '3.7'", + "version": "==67.7.2" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, "snaptime": { @@ -1499,6 +1587,65 @@ "markers": "python_version >= '3.7'", "version": "==0.9.0" }, + "time-machine": { + "hashes": [ + "sha256:010a58a8de1120308befae19e6c9de2ef5ca5206635cea33cb264998725cc027", + "sha256:0b9c36240876622b7f2f9e11bf72f100857c0a1e1a59af2da3d5067efea62c37", + "sha256:1d0ab46ce8a60baf9d86525694bf698fed9efefd22b8cbe1ca3e74abbb3239e1", + "sha256:2f080f6f7ca8cfca43bc5639288aebd0a273b4b5bd0acff609c2318728b13a18", + "sha256:359c806e5b9a7a3c73dbb808d19dca297f5504a5eefdc5d031db8d918f43e364", + "sha256:36dde844d28549929fab171d683c28a8db1c206547bcf6b7aca77319847d2046", + "sha256:372a97da01db89533d2f4ce50bbd908e5c56df7b8cfd6a005b177d0b14dc2938", + "sha256:3ce445775fcf7cb4040cfdba4b7c4888e7fd98bbcccfe1dc3fa8a798ed1f1d24", + "sha256:3ff5148e2e73392db8418a1fe2f0b06f4a0e76772933502fb61e4c3000b5324e", + "sha256:49df5eea2160068e5b2bf28c22fc4c5aea00862ad88ddc3b62fc0f0683e97538", + "sha256:4b55654aaeaba380fcd6c004b8ada2978fdd4ece1e61e6b9717c6d4cc7fbbcd9", + "sha256:4f3755d9342ca1f1019418db52072272dfd75eb818fa4726fa8aabe208b38c26", + "sha256:5657e0e6077cf15b37f0d8cf78e868113bbb3ecccc60064c40fe52d8166ca8b1", + "sha256:60222d43f6e93a926adc36ed37a54bc8e4d0d8d1c4d449096afcfe85086129c2", + "sha256:6211beee9f5dace08b1bbbb1fb09e34a69c52d87eea676729f14c8660481dff6", + "sha256:6463e302c96eb8c691c4340e281bd54327a213b924fa189aea81accf7e7f78df", + "sha256:68ec8b83197db32c7a12da5f6b83c91271af3ed7f5dc122d2900a8de01dff9f0", + "sha256:69898aed9b2315a90f5855343d9aa34d05fa06032e2e3bb14f2528941ec89dc1", + "sha256:6b632d60aa0883dc7292ac3d32050604d26ec2bbd5c4d42fb0de3b4ef17343e2", + "sha256:728263611d7940fda34d21573bd2b3f1491bdb52dbf75c5fe6c226dfe4655201", + "sha256:748d701228e646c224f2adfa6a11b986cd4aa90f1b8c13ef4534a3919c796bc0", + "sha256:8367fd03f2d7349c7fc20f14de186974eaca2502c64b948212de663742c8fd11", + "sha256:8670cb5cfda99f483d60de6ce56ceb0ec5d359193e79e4688e1c3c9db3937383", + "sha256:8830510adbf0a231184da277db9de1d55ef93ed228a575d217aaee295505abf1", + "sha256:8976b7b1f7de13598b655d459f5640f90f3cd587283e1b914a22e45946c5485b", + "sha256:8bcc86b5a07ea9745f26dfad958dde0a4f56748c2ae0c9a96200a334d1b55055", + "sha256:8e2a90b8300812d8d774f2d2fc216fec3c7d94132ac589e062489c395061f16c", + "sha256:8e797e5a2a99d1b237183e52251abfc1ad85c376278b39d1aca76a451a97861a", + "sha256:948ca690f9770ad4a93fa183061c11346505598f5f0b721965bc85ec83bb103d", + "sha256:9ba5fc2655749066d68986de8368984dad4082db2fbeade78f40506dc5b65672", + "sha256:9ee553f7732fa51e019e3329a6984593184c4e0410af1e73d91ce38a5d4b34ab", + "sha256:a2cf80e5deaaa68c6cefb25303a4c870490b4e7591ed8e2435a65728920bc097", + "sha256:ae4e3f02ab5dabb35adca606237c7e1a515c86d69c0b7092bbe0e1cfe5cffc61", + "sha256:b16a2129f9146faa080bfd1b53447761f7386ec5c72890c827a65f33ab200336", + "sha256:b32addbf56639a9a8261fb62f8ea83473447671c83ca2c017ab1eabf4841157f", + "sha256:b8faff03231ee55d5a216ce3e9171c5205459f866f54d4b5ee8aa1d860e4ce11", + "sha256:bb15b2b79b00d3f6cf7d62096f5e782fa740ecedfe0540c09f1d1e4d3d7b81ba", + "sha256:bdbe785e046d124f73cca603ee37d5fae0b15dc4c13702488ad19de56aae08ba", + "sha256:bfa82614a98ecee70272bb6038d210b2ad7b2a6b8a678b400c34bdaf776802a7", + "sha256:c01dbc3671d0649023daf623e952f9f0b4d904d57ab546d6d35a4aeb14915e8d", + "sha256:c5dbc8b87cdc7be070a499f2bd1cd405c7f647abeb3447dfd397639df040bc64", + "sha256:cb51432652ad663b4cbd631c73c90f9e94f463382b86c0b6b854173700512a70", + "sha256:cc6bf01211b5ea40f633d5502c5aa495b415ebaff66e041820997dae70a508e1", + "sha256:d329578abe47ce95baa015ef3825acebb1b73b5fa6f818fdf2d4685a00ca457f", + "sha256:d4380bd6697cc7db3c9e6843f24779ac0550affa9d9a8e5f9e5d5cc139cb6583", + "sha256:d79d374e32488c76cdb06fbdd4464083aeaa715ddca3e864bac7c7760eb03729", + "sha256:eaf334477bc0a9283d5150a56be8670a07295ef676e5b5a7f086952929d1a56b", + "sha256:f6e79643368828d4651146a486be5a662846ac223ab5e2c73ddd519acfcc243c", + "sha256:f92d5d2eb119a6518755c4c9170112094c706d1c604460f50afc1308eeb97f0e", + "sha256:f97ed8bc5b517844a71030f74e9561de92f4902c306e6ccc8331a5b0c8dd0e00", + "sha256:fcdef7687aed5c4331c9808f4a414a41987441c3e7a2ba554e4dccfa4218e788", + "sha256:fd72c0b2e7443fff6e4481991742b72c17f73735e5fdd176406ca48df187a5c9", + "sha256:fe013942ab7f3241fcbe66ee43222d47f499d1e0cb69e913791c52e638ddd7f0" + ], + "markers": "python_version >= '3.7'", + "version": "==2.9.0" + }, "toolz": { "hashes": [ "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f", @@ -1509,11 +1656,11 @@ }, "trie": { "hashes": [ - "sha256:8bfc6b82979b7caa6f020a89c9142c7522f017788240487d1c941b0ad82e7132", - "sha256:edef6b392f49f80be31c167236c6569aa07d7926138d5fe23d327d65d62b7201" + "sha256:0729a159ddef4bfa4c05478017b93a7a1af4e65e8a7b7628676bad13199ffe39", + "sha256:e3f3691e1d48006b466c9b4cd0ee586c32e0f54d13b2497f263688188c77b0fe" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==2.0.2" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.1.0" }, "twisted": { "hashes": [ @@ -1525,366 +1672,393 @@ }, "txaio": { "hashes": [ - "sha256:2e4582b70f04b2345908254684a984206c0d9b50e3074a24a4c55aba21d24d01", - "sha256:41223af4a9d5726e645a8ee82480f413e5e300dd257db94bc38ae12ea48fb2e5" + "sha256:aaea42f8aad50e0ecfb976130ada140797e9dcb85fad2cf72b0f37f8cefcb490", + "sha256:f9a9216e976e5e3246dfd112ad7ad55ca915606b60b84a757ac769bd404ff704" ], - "markers": "python_version >= '3.6'", - "version": "==22.2.1" + "markers": "python_version >= '3.7'", + "version": "==23.1.1" }, "typing-extensions": { "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb", + "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4" ], "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "version": "==4.5.0" }, "tzdata": { "hashes": [ - "sha256:04a680bdc5b15750c39c12a448885a51134a27ec9af83667663f0b3a1bf3f342", - "sha256:91f11db4503385928c15598c98573e3af07e7229181bee5375bd30f1695ddcae" + "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a", + "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda" ], - "markers": "python_version >= '3.6'", - "version": "==2022.6" + "markers": "python_version >= '2'", + "version": "==2023.3" }, "tzlocal": { "hashes": [ - "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745", - "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7" + "sha256:407e15ad8fa5b05a66b8f65505b23f0dbd4ee96b343c6da4393e9c60f55d591c", + "sha256:59a6c67af3fb05b6359768cecfacc2c0df368c36b671d18d1e021a5aa70b5f8c" ], - "markers": "python_version >= '3.6'", - "version": "==4.2" + "markers": "python_version >= '3.7'", + "version": "==5.0b2" }, "urllib3": { "hashes": [ - "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", - "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" + "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", + "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.13" - }, - "varint": { - "hashes": [ - "sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5" - ], - "version": "==1.0.2" + "version": "==1.26.15" }, "watchdog": { "hashes": [ - "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412", - "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654", - "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306", - "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33", - "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd", - "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7", - "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892", - "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609", - "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6", - "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1", - "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591", - "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d", - "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d", - "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c", - "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3", - "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39", - "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213", - "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330", - "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428", - "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1", - "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846", - "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153", - "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3", - "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9", - "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658" + "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190", + "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43", + "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d", + "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256", + "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd", + "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96", + "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5", + "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad", + "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42", + "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225", + "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb", + "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc", + "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79", + "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf", + "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44", + "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc", + "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131", + "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c", + "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565", + "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab", + "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed", + "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16", + "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf", + "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375", + "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697", + "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906", + "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b", + "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f" ], "markers": "python_version >= '3.6'", - "version": "==2.1.9" + "version": "==2.3.1" }, "web3": { "hashes": [ - "sha256:1674301b261da529ee6537b970d1a01a1e6d22328b246c16636263f96c2b6df2", - "sha256:df74801cb4dff45b175227feb3126ac77480c801ac6412d471520abecf2c8c00" + "sha256:7695ee81162c644de0dfd0f5372f96a73be557b46365d218f581ca10197c6389", + "sha256:ca860ad23b1f71384620659f17a374e5850ab3c1bb928a09f0103ee25e3d4c1b" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.0.0b6" + "version": "==6.2.0" }, "websockets": { "hashes": [ - "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41", - "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96", - "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4", - "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72", - "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576", - "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63", - "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b", - "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d", - "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032", - "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393", - "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50", - "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631", - "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f", - "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c", - "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6", - "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4", - "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6", - "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0", - "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8", - "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112", - "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94", - "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4", - "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb", - "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331", - "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c", - "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c", - "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193", - "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b", - "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b", - "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038", - "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089", - "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa", - "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9", - "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56", - "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4", - "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179", - "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c", - "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882", - "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28", - "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1", - "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a", - "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033", - "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1", - "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13", - "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8", - "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c", - "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74", - "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab", - "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3", - "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588", - "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485", - "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342", - "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48", - "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf", - "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0", - "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a", - "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea", - "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf", - "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8", - "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df", - "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc", - "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f", - "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269", - "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3", - "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c", - "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46", - "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f", - "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106", - "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f" - ], - "markers": "python_version >= '3.7'", - "version": "==10.4" + "sha256:0fb4480556825e4e6bf2eebdbeb130d9474c62705100c90e59f2f56459ddab42", + "sha256:13bd5bebcd16a4b5e403061b8b9dcc5c77e7a71e3c57e072d8dff23e33f70fba", + "sha256:143782041e95b63083b02107f31cda999f392903ae331de1307441f3a4557d51", + "sha256:1b52def56d2a26e0e9c464f90cadb7e628e04f67b0ff3a76a4d9a18dfc35e3dd", + "sha256:1df2413266bf48430ef2a752c49b93086c6bf192d708e4a9920544c74cd2baa6", + "sha256:2174a75d579d811279855df5824676d851a69f52852edb0e7551e0eeac6f59a4", + "sha256:220d5b93764dd70d7617f1663da64256df7e7ea31fc66bc52c0e3750ee134ae3", + "sha256:232b6ba974f5d09b1b747ac232f3a3d8f86de401d7b565e837cc86988edf37ac", + "sha256:25aae96c1060e85836552a113495db6d857400288161299d77b7b20f2ac569f2", + "sha256:25e265686ea385f22a00cc2b719b880797cd1bb53b46dbde969e554fb458bfde", + "sha256:2abeeae63154b7f63d9f764685b2d299e9141171b8b896688bd8baec6b3e2303", + "sha256:2acdc82099999e44fa7bd8c886f03c70a22b1d53ae74252f389be30d64fd6004", + "sha256:2eb042734e710d39e9bc58deab23a65bd2750e161436101488f8af92f183c239", + "sha256:3178d965ec204773ab67985a09f5696ca6c3869afeed0bb51703ea404a24e975", + "sha256:320ddceefd2364d4afe6576195201a3632a6f2e6d207b0c01333e965b22dbc84", + "sha256:34a6f8996964ccaa40da42ee36aa1572adcb1e213665e24aa2f1037da6080909", + "sha256:3565a8f8c7bdde7c29ebe46146bd191290413ee6f8e94cf350609720c075b0a1", + "sha256:392d409178db1e46d1055e51cc850136d302434e12d412a555e5291ab810f622", + "sha256:3a09cce3dacb6ad638fdfa3154d9e54a98efe7c8f68f000e55ca9c716496ca67", + "sha256:3a2100b02d1aaf66dc48ff1b2a72f34f6ebc575a02bc0350cc8e9fbb35940166", + "sha256:3b87cd302f08ea9e74fdc080470eddbed1e165113c1823fb3ee6328bc40ca1d3", + "sha256:3e79065ff6549dd3c765e7916067e12a9c91df2affea0ac51bcd302aaf7ad207", + "sha256:3ffe251a31f37e65b9b9aca5d2d67fd091c234e530f13d9dce4a67959d5a3fba", + "sha256:46388a050d9e40316e58a3f0838c63caacb72f94129eb621a659a6e49bad27ce", + "sha256:46dda4bc2030c335abe192b94e98686615f9274f6b56f32f2dd661fb303d9d12", + "sha256:4c54086b2d2aec3c3cb887ad97e9c02c6be9f1d48381c7419a4aa932d31661e4", + "sha256:5004c087d17251938a52cce21b3dbdabeecbbe432ce3f5bbbf15d8692c36eac9", + "sha256:502683c5dedfc94b9f0f6790efb26aa0591526e8403ad443dce922cd6c0ec83b", + "sha256:518ed6782d9916c5721ebd61bb7651d244178b74399028302c8617d0620af291", + "sha256:580cc95c58118f8c39106be71e24d0b7e1ad11a155f40a2ee687f99b3e5e432e", + "sha256:58477b041099bb504e1a5ddd8aa86302ed1d5c6995bdd3db2b3084ef0135d277", + "sha256:5875f623a10b9ba154cb61967f940ab469039f0b5e61c80dd153a65f024d9fb7", + "sha256:5c7de298371d913824f71b30f7685bb07ad13969c79679cca5b1f7f94fec012f", + "sha256:634239bc844131863762865b75211a913c536817c0da27f691400d49d256df1d", + "sha256:6d872c972c87c393e6a49c1afbdc596432df8c06d0ff7cd05aa18e885e7cfb7c", + "sha256:752fbf420c71416fb1472fec1b4cb8631c1aa2be7149e0a5ba7e5771d75d2bb9", + "sha256:7742cd4524622cc7aa71734b51294644492a961243c4fe67874971c4d3045982", + "sha256:808b8a33c961bbd6d33c55908f7c137569b09ea7dd024bce969969aa04ecf07c", + "sha256:87c69f50281126dcdaccd64d951fb57fbce272578d24efc59bce72cf264725d0", + "sha256:8df63dcd955eb6b2e371d95aacf8b7c535e482192cff1b6ce927d8f43fb4f552", + "sha256:8f24cd758cbe1607a91b720537685b64e4d39415649cac9177cd1257317cf30c", + "sha256:8f392587eb2767afa8a34e909f2fec779f90b630622adc95d8b5e26ea8823cb8", + "sha256:954eb789c960fa5daaed3cfe336abc066941a5d456ff6be8f0e03dd89886bb4c", + "sha256:955fcdb304833df2e172ce2492b7b47b4aab5dcc035a10e093d911a1916f2c87", + "sha256:95c09427c1c57206fe04277bf871b396476d5a8857fa1b99703283ee497c7a5d", + "sha256:a4fe2442091ff71dee0769a10449420fd5d3b606c590f78dd2b97d94b7455640", + "sha256:aa7b33c1fb2f7b7b9820f93a5d61ffd47f5a91711bc5fa4583bbe0c0601ec0b2", + "sha256:adf6385f677ed2e0b021845b36f55c43f171dab3a9ee0ace94da67302f1bc364", + "sha256:b1a69701eb98ed83dd099de4a686dc892c413d974fa31602bc00aca7cb988ac9", + "sha256:b2a573c8d71b7af937852b61e7ccb37151d719974146b5dc734aad350ef55a02", + "sha256:b444366b605d2885f0034dd889faf91b4b47668dd125591e2c64bfde611ac7e1", + "sha256:b985ba2b9e972cf99ddffc07df1a314b893095f62c75bc7c5354a9c4647c6503", + "sha256:c78ca3037a954a4209b9f900e0eabbc471fb4ebe96914016281df2c974a93e3e", + "sha256:ca9b2dced5cbbc5094678cc1ec62160f7b0fe4defd601cd28a36fde7ee71bbb5", + "sha256:cb46d2c7631b2e6f10f7c8bac7854f7c5e5288f024f1c137d4633c79ead1e3c0", + "sha256:ce69f5c742eefd039dce8622e99d811ef2135b69d10f9aa79fbf2fdcc1e56cd7", + "sha256:cf45d273202b0c1cec0f03a7972c655b93611f2e996669667414557230a87b88", + "sha256:d1881518b488a920434a271a6e8a5c9481a67c4f6352ebbdd249b789c0467ddc", + "sha256:d3cc3e48b6c9f7df8c3798004b9c4b92abca09eeea5e1b0a39698f05b7a33b9d", + "sha256:d6b2bfa1d884c254b841b0ff79373b6b80779088df6704f034858e4d705a4802", + "sha256:d70a438ef2a22a581d65ad7648e949d4ccd20e3c8ed7a90bbc46df4e60320891", + "sha256:daa1e8ea47507555ed7a34f8b49398d33dff5b8548eae3de1dc0ef0607273a33", + "sha256:dca9708eea9f9ed300394d4775beb2667288e998eb6f542cdb6c02027430c599", + "sha256:dd906b0cdc417ea7a5f13bb3c6ca3b5fd563338dc596996cb0fdd7872d691c0a", + "sha256:e0eeeea3b01c97fd3b5049a46c908823f68b59bf0e18d79b231d8d6764bc81ee", + "sha256:e37a76ccd483a6457580077d43bc3dfe1fd784ecb2151fcb9d1c73f424deaeba", + "sha256:e8b967a4849db6b567dec3f7dd5d97b15ce653e3497b8ce0814e470d5e074750", + "sha256:ec00401846569aaf018700249996143f567d50050c5b7b650148989f956547af", + "sha256:ede13a6998ba2568b21825809d96e69a38dc43184bdeebbde3699c8baa21d015", + "sha256:f97e03d4d5a4f0dca739ea274be9092822f7430b77d25aa02da6775e490f6846" + ], + "markers": "python_version >= '3.7'", + "version": "==11.0.2" }, "werkzeug": { "hashes": [ - "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f", - "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5" + "sha256:4866679a0722de00796a74086238bb3b98d90f423f05de039abb09315487254a", + "sha256:a987caf1092edc7523edb139edb20c70571c4a8d5eed02e0b547b4739174d091" ], - "markers": "python_version >= '3.7'", - "version": "==2.2.2" + "markers": "python_version >= '3.8'", + "version": "==2.3.3" }, "yarl": { "hashes": [ - "sha256:076eede537ab978b605f41db79a56cad2e7efeea2aa6e0fa8f05a26c24a034fb", - "sha256:07b21e274de4c637f3e3b7104694e53260b5fc10d51fb3ec5fed1da8e0f754e3", - "sha256:0ab5a138211c1c366404d912824bdcf5545ccba5b3ff52c42c4af4cbdc2c5035", - "sha256:0c03f456522d1ec815893d85fccb5def01ffaa74c1b16ff30f8aaa03eb21e453", - "sha256:12768232751689c1a89b0376a96a32bc7633c08da45ad985d0c49ede691f5c0d", - "sha256:19cd801d6f983918a3f3a39f3a45b553c015c5aac92ccd1fac619bd74beece4a", - "sha256:1ca7e596c55bd675432b11320b4eacc62310c2145d6801a1f8e9ad160685a231", - "sha256:1e4808f996ca39a6463f45182e2af2fae55e2560be586d447ce8016f389f626f", - "sha256:205904cffd69ae972a1707a1bd3ea7cded594b1d773a0ce66714edf17833cdae", - "sha256:20df6ff4089bc86e4a66e3b1380460f864df3dd9dccaf88d6b3385d24405893b", - "sha256:21ac44b763e0eec15746a3d440f5e09ad2ecc8b5f6dcd3ea8cb4773d6d4703e3", - "sha256:29e256649f42771829974e742061c3501cc50cf16e63f91ed8d1bf98242e5507", - "sha256:2d800b9c2eaf0684c08be5f50e52bfa2aa920e7163c2ea43f4f431e829b4f0fd", - "sha256:2d93a049d29df172f48bcb09acf9226318e712ce67374f893b460b42cc1380ae", - "sha256:31a9a04ecccd6b03e2b0e12e82131f1488dea5555a13a4d32f064e22a6003cfe", - "sha256:3d1a50e461615747dd93c099f297c1994d472b0f4d2db8a64e55b1edf704ec1c", - "sha256:449c957ffc6bc2309e1fbe67ab7d2c1efca89d3f4912baeb8ead207bb3cc1cd4", - "sha256:4a88510731cd8d4befaba5fbd734a7dd914de5ab8132a5b3dde0bbd6c9476c64", - "sha256:4c322cbaa4ed78a8aac89b2174a6df398faf50e5fc12c4c191c40c59d5e28357", - "sha256:5395da939ffa959974577eff2cbfc24b004a2fb6c346918f39966a5786874e54", - "sha256:5587bba41399854703212b87071c6d8638fa6e61656385875f8c6dff92b2e461", - "sha256:56c11efb0a89700987d05597b08a1efcd78d74c52febe530126785e1b1a285f4", - "sha256:5999c4662631cb798496535afbd837a102859568adc67d75d2045e31ec3ac497", - "sha256:59ddd85a1214862ce7c7c66457f05543b6a275b70a65de366030d56159a979f0", - "sha256:6347f1a58e658b97b0a0d1ff7658a03cb79bdbda0331603bed24dd7054a6dea1", - "sha256:6628d750041550c5d9da50bb40b5cf28a2e63b9388bac10fedd4f19236ef4957", - "sha256:6afb336e23a793cd3b6476c30f030a0d4c7539cd81649683b5e0c1b0ab0bf350", - "sha256:6c8148e0b52bf9535c40c48faebb00cb294ee577ca069d21bd5c48d302a83780", - "sha256:76577f13333b4fe345c3704811ac7509b31499132ff0181f25ee26619de2c843", - "sha256:7c0da7e44d0c9108d8b98469338705e07f4bb7dab96dbd8fa4e91b337db42548", - "sha256:7de89c8456525650ffa2bb56a3eee6af891e98f498babd43ae307bd42dca98f6", - "sha256:7ec362167e2c9fd178f82f252b6d97669d7245695dc057ee182118042026da40", - "sha256:7fce6cbc6c170ede0221cc8c91b285f7f3c8b9fe28283b51885ff621bbe0f8ee", - "sha256:85cba594433915d5c9a0d14b24cfba0339f57a2fff203a5d4fd070e593307d0b", - "sha256:8b0af1cf36b93cee99a31a545fe91d08223e64390c5ecc5e94c39511832a4bb6", - "sha256:9130ddf1ae9978abe63808b6b60a897e41fccb834408cde79522feb37fb72fb0", - "sha256:99449cd5366fe4608e7226c6cae80873296dfa0cde45d9b498fefa1de315a09e", - "sha256:9de955d98e02fab288c7718662afb33aab64212ecb368c5dc866d9a57bf48880", - "sha256:a0fb2cb4204ddb456a8e32381f9a90000429489a25f64e817e6ff94879d432fc", - "sha256:a165442348c211b5dea67c0206fc61366212d7082ba8118c8c5c1c853ea4d82e", - "sha256:ab2a60d57ca88e1d4ca34a10e9fb4ab2ac5ad315543351de3a612bbb0560bead", - "sha256:abc06b97407868ef38f3d172762f4069323de52f2b70d133d096a48d72215d28", - "sha256:af887845b8c2e060eb5605ff72b6f2dd2aab7a761379373fd89d314f4752abbf", - "sha256:b19255dde4b4f4c32e012038f2c169bb72e7f081552bea4641cab4d88bc409dd", - "sha256:b3ded839a5c5608eec8b6f9ae9a62cb22cd037ea97c627f38ae0841a48f09eae", - "sha256:c1445a0c562ed561d06d8cbc5c8916c6008a31c60bc3655cdd2de1d3bf5174a0", - "sha256:d0272228fabe78ce00a3365ffffd6f643f57a91043e119c289aaba202f4095b0", - "sha256:d0b51530877d3ad7a8d47b2fff0c8df3b8f3b8deddf057379ba50b13df2a5eae", - "sha256:d0f77539733e0ec2475ddcd4e26777d08996f8cd55d2aef82ec4d3896687abda", - "sha256:d2b8f245dad9e331540c350285910b20dd913dc86d4ee410c11d48523c4fd546", - "sha256:dd032e8422a52e5a4860e062eb84ac94ea08861d334a4bcaf142a63ce8ad4802", - "sha256:de49d77e968de6626ba7ef4472323f9d2e5a56c1d85b7c0e2a190b2173d3b9be", - "sha256:de839c3a1826a909fdbfe05f6fe2167c4ab033f1133757b5936efe2f84904c07", - "sha256:e80ed5a9939ceb6fda42811542f31c8602be336b1fb977bccb012e83da7e4936", - "sha256:ea30a42dc94d42f2ba4d0f7c0ffb4f4f9baa1b23045910c0c32df9c9902cb272", - "sha256:ea513a25976d21733bff523e0ca836ef1679630ef4ad22d46987d04b372d57fc", - "sha256:ed19b74e81b10b592084a5ad1e70f845f0aacb57577018d31de064e71ffa267a", - "sha256:f5af52738e225fcc526ae64071b7e5342abe03f42e0e8918227b38c9aa711e28", - "sha256:fae37373155f5ef9b403ab48af5136ae9851151f7aacd9926251ab26b953118b" - ], - "markers": "python_version >= '3.7'", - "version": "==1.8.1" + "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", + "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", + "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", + "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", + "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", + "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", + "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", + "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", + "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", + "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", + "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", + "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", + "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", + "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", + "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", + "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", + "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", + "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", + "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", + "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", + "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", + "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", + "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", + "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", + "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", + "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", + "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", + "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", + "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", + "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", + "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", + "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", + "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", + "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", + "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", + "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", + "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", + "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", + "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", + "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", + "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", + "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", + "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", + "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", + "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", + "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", + "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", + "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", + "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", + "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", + "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", + "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", + "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", + "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", + "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", + "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", + "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", + "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", + "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", + "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", + "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", + "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", + "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", + "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", + "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", + "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", + "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", + "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", + "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", + "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", + "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", + "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", + "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", + "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" + ], + "markers": "python_version >= '3.7'", + "version": "==1.9.2" }, "zipp": { "hashes": [ - "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa", - "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766" + "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", + "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" ], "markers": "python_version >= '3.7'", - "version": "==3.11.0" + "version": "==3.15.0" }, "zope.interface": { "hashes": [ - "sha256:008b0b65c05993bb08912f644d140530e775cf1c62a072bf9340c2249e613c32", - "sha256:0217a9615531c83aeedb12e126611b1b1a3175013bbafe57c702ce40000eb9a0", - "sha256:0fb497c6b088818e3395e302e426850f8236d8d9f4ef5b2836feae812a8f699c", - "sha256:17ebf6e0b1d07ed009738016abf0d0a0f80388e009d0ac6e0ead26fc162b3b9c", - "sha256:311196634bb9333aa06f00fc94f59d3a9fddd2305c2c425d86e406ddc6f2260d", - "sha256:3218ab1a7748327e08ef83cca63eea7cf20ea7e2ebcb2522072896e5e2fceedf", - "sha256:404d1e284eda9e233c90128697c71acffd55e183d70628aa0bbb0e7a3084ed8b", - "sha256:4087e253bd3bbbc3e615ecd0b6dd03c4e6a1e46d152d3be6d2ad08fbad742dcc", - "sha256:40f4065745e2c2fa0dff0e7ccd7c166a8ac9748974f960cd39f63d2c19f9231f", - "sha256:5334e2ef60d3d9439c08baedaf8b84dc9bb9522d0dacbc10572ef5609ef8db6d", - "sha256:604cdba8f1983d0ab78edc29aa71c8df0ada06fb147cea436dc37093a0100a4e", - "sha256:6373d7eb813a143cb7795d3e42bd8ed857c82a90571567e681e1b3841a390d16", - "sha256:655796a906fa3ca67273011c9805c1e1baa047781fca80feeb710328cdbed87f", - "sha256:65c3c06afee96c654e590e046c4a24559e65b0a87dbff256cd4bd6f77e1a33f9", - "sha256:696f3d5493eae7359887da55c2afa05acc3db5fc625c49529e84bd9992313296", - "sha256:6e972493cdfe4ad0411fd9abfab7d4d800a7317a93928217f1a5de2bb0f0d87a", - "sha256:7579960be23d1fddecb53898035a0d112ac858c3554018ce615cefc03024e46d", - "sha256:765d703096ca47aa5d93044bf701b00bbce4d903a95b41fff7c3796e747b1f1d", - "sha256:7e66f60b0067a10dd289b29dceabd3d0e6d68be1504fc9d0bc209cf07f56d189", - "sha256:8a2ffadefd0e7206adc86e492ccc60395f7edb5680adedf17a7ee4205c530df4", - "sha256:959697ef2757406bff71467a09d940ca364e724c534efbf3786e86eee8591452", - "sha256:9d783213fab61832dbb10d385a319cb0e45451088abd45f95b5bb88ed0acca1a", - "sha256:a16025df73d24795a0bde05504911d306307c24a64187752685ff6ea23897cb0", - "sha256:a2ad597c8c9e038a5912ac3cf166f82926feff2f6e0dabdab956768de0a258f5", - "sha256:bfee1f3ff62143819499e348f5b8a7f3aa0259f9aca5e0ddae7391d059dce671", - "sha256:d169ccd0756c15bbb2f1acc012f5aab279dffc334d733ca0d9362c5beaebe88e", - "sha256:d514c269d1f9f5cd05ddfed15298d6c418129f3f064765295659798349c43e6f", - "sha256:d692374b578360d36568dd05efb8a5a67ab6d1878c29c582e37ddba80e66c396", - "sha256:dbaeb9cf0ea0b3bc4b36fae54a016933d64c6d52a94810a63c00f440ecb37dd7", - "sha256:dc26c8d44472e035d59d6f1177eb712888447f5799743da9c398b0339ed90b1b", - "sha256:e1574980b48c8c74f83578d1e77e701f8439a5d93f36a5a0af31337467c08fcf", - "sha256:e74a578172525c20d7223eac5f8ad187f10940dac06e40113d62f14f3adb1e8f", - "sha256:e945de62917acbf853ab968d8916290548df18dd62c739d862f359ecd25842a6", - "sha256:f0980d44b8aded808bec5059018d64692f0127f10510eca71f2f0ace8fb11188", - "sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7", - "sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b" + "sha256:0326cc72f232167498eb4814232c960881bd8eb5e1f7e92ed07ea7afbf21dbb0", + "sha256:04ab70d12e46f54f2c614e9ca12f3d29de41101f05563f7c9bd3351fcf6d85c3", + "sha256:090cc8c625f1853cfcaa46e333e151210565a4e1379a6f509069b53389b1ec23", + "sha256:167ea1a5c28aad2fa7fb0ca8761229bf54766ab6e696c80e592ee8c936ab1776", + "sha256:1ad9d87bee6c49bb00d75ad854288e41a4acbe3b7d3576faeb1662d2f0e48e00", + "sha256:2900750bc08e1adc14799eecf3afb6bcfa93d334e32407273af051b0e1bf198b", + "sha256:2cd536f007e875d330e7e3f80204cede6d4dad7d5cdc7019d77b11b501e3b132", + "sha256:39273357177f1566134c18f6a26076e5b1938292fe5994f5197a0ed2374882b4", + "sha256:415526873ad6ccea853801dbfe6074dbd5e16487854b17c343d9fc7f095bb483", + "sha256:48299561fe59dfbb4430b6bf0a2f3a3cbfc8bc25e03f8861a3a57222b57a9512", + "sha256:4a208684351acf68357ab17aacaa3bbdd293aa039b73a891c281c4df63c625e2", + "sha256:4c518a72e10103b1d74f616a6145711a002601665c147e264e9e9e0823f339b1", + "sha256:57e981db978a12f4612c599ebbb68ff2dbd81a4617186a12f5c727e686e31461", + "sha256:58ce64e3227ac6fd54c9053e0f452bfba4f3f1ca3d4387f34ee1476d17244fe5", + "sha256:636d9860d05c8faa563d88196c264824aacb6253e7f3cb43d8fc983e5402a2cd", + "sha256:6ed7d7a3d2c45921ad08c709a3130ecf580341de0a675d9e19dccf3917e7f8c4", + "sha256:7371e15df1aaffb076c2a886b2a2932dac171d45581b4fa0be2ced477e480777", + "sha256:77f1f29759014732e3b7addfcfaf14c73a0f325af9d628d5f811d4e58043b3c3", + "sha256:88ac8670b5f4dd1b743a04558cf4ad3e581a2c21f42ffaa190a3676e5e22e3b7", + "sha256:976d7b50221f3cd1b2c8cfda0e1f3e371950124f288b5f97a0b28ffda4f56844", + "sha256:98586b7a16add0503b8851e848bd06e8b4b5d9ead825b28ab93a982c3e0a76ee", + "sha256:9970222b1ad15636422e9cc95ae0dfbbe5ca4127a94027c94dbdb2b1ee6ee618", + "sha256:9c98ca179a060ce48564407179839390acd804f0a70a9954a30a605b5b251540", + "sha256:abc4dd63500f34d8f11fee7f5967f8d56856964c8530d468ab53bb72ceee4712", + "sha256:b42d6d6de23d3a287342b286864b4bef371fa4fe0409fda79a1eaec01af2b1cf", + "sha256:b6cd75530f51179a4165ee1bccff1a690ea64e001e02e1317dc177dee15ba13f", + "sha256:c1c4ff056cdabe871ff89bedab16b4123098af1af8ddbb20bf43bcd8fe6474fe", + "sha256:cb7d92c6579bdcbe18933b8b914d2141760efa47ea586a4b9206320ec00bd587", + "sha256:d711955d9f183d78a1937f69d11329bafa40741c0d6f97d3a210fe21fd666508", + "sha256:db0ca240b647388754ad4c9cee053a9bd731f933943c5cadaf2195ce3b953652", + "sha256:ed58ffd21752f9b92258284d59d8218dfb0bf0fcb41c75ffa4c1317fdf58bb39", + "sha256:f16319abdd98f728acca7e27750495d7ddbbb566a595f44f52f70852c93a69c7", + "sha256:f4f97f40bd9d9dca64fa68e0329db3269d6cb97e207946c5ccdfa865a6d32b9b", + "sha256:f73552012b31af214e8f0e7b6e43066c968f189d2e2f005e271e3308ee6fa3f2", + "sha256:fca350cadf205ff20700b10075a894a2e1cdf201321f1d5d25950b43013a4148" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.5.2" + "markers": "python_version >= '3.7'", + "version": "==6.1a2" } }, "develop": { "aiohttp": { "hashes": [ - "sha256:01d7bdb774a9acc838e6b8f1d114f45303841b89b95984cbb7d80ea41172a9e3", - "sha256:03a6d5349c9ee8f79ab3ff3694d6ce1cfc3ced1c9d36200cb8f08ba06bd3b782", - "sha256:04d48b8ce6ab3cf2097b1855e1505181bdd05586ca275f2505514a6e274e8e75", - "sha256:0770e2806a30e744b4e21c9d73b7bee18a1cfa3c47991ee2e5a65b887c49d5cf", - "sha256:07b05cd3305e8a73112103c834e91cd27ce5b4bd07850c4b4dbd1877d3f45be7", - "sha256:086f92daf51a032d062ec5f58af5ca6a44d082c35299c96376a41cbb33034675", - "sha256:099ebd2c37ac74cce10a3527d2b49af80243e2a4fa39e7bce41617fbc35fa3c1", - "sha256:0c7ebbbde809ff4e970824b2b6cb7e4222be6b95a296e46c03cf050878fc1785", - "sha256:102e487eeb82afac440581e5d7f8f44560b36cf0bdd11abc51a46c1cd88914d4", - "sha256:11691cf4dc5b94236ccc609b70fec991234e7ef8d4c02dd0c9668d1e486f5abf", - "sha256:11a67c0d562e07067c4e86bffc1553f2cf5b664d6111c894671b2b8712f3aba5", - "sha256:12de6add4038df8f72fac606dff775791a60f113a725c960f2bab01d8b8e6b15", - "sha256:13487abd2f761d4be7c8ff9080de2671e53fff69711d46de703c310c4c9317ca", - "sha256:15b09b06dae900777833fe7fc4b4aa426556ce95847a3e8d7548e2d19e34edb8", - "sha256:1c182cb873bc91b411e184dab7a2b664d4fea2743df0e4d57402f7f3fa644bac", - "sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8", - "sha256:28d490af82bc6b7ce53ff31337a18a10498303fe66f701ab65ef27e143c3b0ef", - "sha256:2e5d962cf7e1d426aa0e528a7e198658cdc8aa4fe87f781d039ad75dcd52c516", - "sha256:2ed076098b171573161eb146afcb9129b5ff63308960aeca4b676d9d3c35e700", - "sha256:2f2f69dca064926e79997f45b2f34e202b320fd3782f17a91941f7eb85502ee2", - "sha256:31560d268ff62143e92423ef183680b9829b1b482c011713ae941997921eebc8", - "sha256:31d1e1c0dbf19ebccbfd62eff461518dcb1e307b195e93bba60c965a4dcf1ba0", - "sha256:37951ad2f4a6df6506750a23f7cbabad24c73c65f23f72e95897bb2cecbae676", - "sha256:3af642b43ce56c24d063325dd2cf20ee012d2b9ba4c3c008755a301aaea720ad", - "sha256:44db35a9e15d6fe5c40d74952e803b1d96e964f683b5a78c3cc64eb177878155", - "sha256:473d93d4450880fe278696549f2e7aed8cd23708c3c1997981464475f32137db", - "sha256:477c3ea0ba410b2b56b7efb072c36fa91b1e6fc331761798fa3f28bb224830dd", - "sha256:4a4a4e30bf1edcad13fb0804300557aedd07a92cabc74382fdd0ba6ca2661091", - "sha256:4aed991a28ea3ce320dc8ce655875e1e00a11bdd29fe9444dd4f88c30d558602", - "sha256:51467000f3647d519272392f484126aa716f747859794ac9924a7aafa86cd411", - "sha256:55c3d1072704d27401c92339144d199d9de7b52627f724a949fc7d5fc56d8b93", - "sha256:589c72667a5febd36f1315aa6e5f56dd4aa4862df295cb51c769d16142ddd7cd", - "sha256:5bfde62d1d2641a1f5173b8c8c2d96ceb4854f54a44c23102e2ccc7e02f003ec", - "sha256:5c23b1ad869653bc818e972b7a3a79852d0e494e9ab7e1a701a3decc49c20d51", - "sha256:61bfc23df345d8c9716d03717c2ed5e27374e0fe6f659ea64edcd27b4b044cf7", - "sha256:6ae828d3a003f03ae31915c31fa684b9890ea44c9c989056fea96e3d12a9fa17", - "sha256:6c7cefb4b0640703eb1069835c02486669312bf2f12b48a748e0a7756d0de33d", - "sha256:6d69f36d445c45cda7b3b26afef2fc34ef5ac0cdc75584a87ef307ee3c8c6d00", - "sha256:6f0d5f33feb5f69ddd57a4a4bd3d56c719a141080b445cbf18f238973c5c9923", - "sha256:6f8b01295e26c68b3a1b90efb7a89029110d3a4139270b24fda961893216c440", - "sha256:713ac174a629d39b7c6a3aa757b337599798da4c1157114a314e4e391cd28e32", - "sha256:718626a174e7e467f0558954f94af117b7d4695d48eb980146016afa4b580b2e", - "sha256:7187a76598bdb895af0adbd2fb7474d7f6025d170bc0a1130242da817ce9e7d1", - "sha256:71927042ed6365a09a98a6377501af5c9f0a4d38083652bcd2281a06a5976724", - "sha256:7d08744e9bae2ca9c382581f7dce1273fe3c9bae94ff572c3626e8da5b193c6a", - "sha256:7dadf3c307b31e0e61689cbf9e06be7a867c563d5a63ce9dca578f956609abf8", - "sha256:81e3d8c34c623ca4e36c46524a3530e99c0bc95ed068fd6e9b55cb721d408fb2", - "sha256:844a9b460871ee0a0b0b68a64890dae9c415e513db0f4a7e3cab41a0f2fedf33", - "sha256:8b7ef7cbd4fec9a1e811a5de813311ed4f7ac7d93e0fda233c9b3e1428f7dd7b", - "sha256:97ef77eb6b044134c0b3a96e16abcb05ecce892965a2124c566af0fd60f717e2", - "sha256:99b5eeae8e019e7aad8af8bb314fb908dd2e028b3cdaad87ec05095394cce632", - "sha256:a25fa703a527158aaf10dafd956f7d42ac6d30ec80e9a70846253dd13e2f067b", - "sha256:a2f635ce61a89c5732537a7896b6319a8fcfa23ba09bec36e1b1ac0ab31270d2", - "sha256:a79004bb58748f31ae1cbe9fa891054baaa46fb106c2dc7af9f8e3304dc30316", - "sha256:a996d01ca39b8dfe77440f3cd600825d05841088fd6bc0144cc6c2ec14cc5f74", - "sha256:b0e20cddbd676ab8a64c774fefa0ad787cc506afd844de95da56060348021e96", - "sha256:b6613280ccedf24354406caf785db748bebbddcf31408b20c0b48cb86af76866", - "sha256:b9d00268fcb9f66fbcc7cd9fe423741d90c75ee029a1d15c09b22d23253c0a44", - "sha256:bb01ba6b0d3f6c68b89fce7305080145d4877ad3acaed424bae4d4ee75faa950", - "sha256:c2aef4703f1f2ddc6df17519885dbfa3514929149d3ff900b73f45998f2532fa", - "sha256:c34dc4958b232ef6188c4318cb7b2c2d80521c9a56c52449f8f93ab7bc2a8a1c", - "sha256:c3630c3ef435c0a7c549ba170a0633a56e92629aeed0e707fec832dee313fb7a", - "sha256:c3d6a4d0619e09dcd61021debf7059955c2004fa29f48788a3dfaf9c9901a7cd", - "sha256:d15367ce87c8e9e09b0f989bfd72dc641bcd04ba091c68cd305312d00962addd", - "sha256:d2f9b69293c33aaa53d923032fe227feac867f81682f002ce33ffae978f0a9a9", - "sha256:e999f2d0e12eea01caeecb17b653f3713d758f6dcc770417cf29ef08d3931421", - "sha256:ea302f34477fda3f85560a06d9ebdc7fa41e82420e892fc50b577e35fc6a50b2", - "sha256:eaba923151d9deea315be1f3e2b31cc39a6d1d2f682f942905951f4e40200922", - "sha256:ef9612483cb35171d51d9173647eed5d0069eaa2ee812793a75373447d487aa4", - "sha256:f5315a2eb0239185af1bddb1abf472d877fede3cc8d143c6cddad37678293237", - "sha256:fa0ffcace9b3aa34d205d8130f7873fcfefcb6a4dd3dd705b0dab69af6712642", - "sha256:fc5471e1a54de15ef71c1bc6ebe80d4dc681ea600e68bfd1cbce40427f0b7578" + "sha256:00c92fcfc255bcc3f831df6210358b8e179153353feadf060e8264eb62ce458c", + "sha256:0303a95d2fda431d80b24b6c8e1e588e4625806304d805527788094decc902df", + "sha256:07f4acf59e3d88c229c8d726cd3ac8d92457f20c8b2ac25afad22c9d9e0a198d", + "sha256:0cf569a3eb1f74553623867526d59969a5f3f66c759f4acf0b3530c985095e77", + "sha256:0f15ca09841d43c32577d47e458370c94c7b123bc746722d7bf738132f929f5d", + "sha256:12c9b8d5e4c410bc9c5d781491a695b07857671d631ca921f0effa53dbbe9082", + "sha256:1743e84dd0c04cefce8df0866780eae991a2cfe36ac4bef1e04aef640c3dfb8a", + "sha256:1815bd39628afa7085bad883b8cad84dbdab84a273ba1a5bf571177ae267011d", + "sha256:1909936256b296505bae30e092c8487e4b14c89748612d87fc301bd1b08401c3", + "sha256:198a22d959f969bdcf92145f25c07bb5a7f65dc05c3735047447aa53d38142df", + "sha256:1ea45264d399f82da4048e724afdf5f10318d62ad89fb9dc911eafd66e3d79b3", + "sha256:244c4d488eb3a2abe008bc614de4ce3a34abd027e518a595f8e794747f23d516", + "sha256:25703823f9f96c85a7f97a6fd487beec576395c9447a4146feb08e422fcfc9c2", + "sha256:2775ed7b86e47084b5df0e7e64f79fc9900ef6c3d7e247a8ea2c8a7e0763b68a", + "sha256:2f077cc6cfbf05c2e8ef817dbbceb754a578db5aa449763f328cc6816b639632", + "sha256:2f2ecb6a3dd0cf78da60750ef521cd5f16e72e599232b7d11e7e14182f674f53", + "sha256:37307e2177a286482a1e9c86626c333e2b0f434d6afeef4d12e48be582f476ce", + "sha256:3893de9760c03032d2e5593e23fcc34a8be995a8311f64435d8413f08248929c", + "sha256:3dbe4ebcc68a7a7e841f187b08e67d49af5535065c67ecb9ee2c82a186cb40c3", + "sha256:4036577d5226a98c68292d6a7aab08c7143e0a827ed0a0beba769c3340305bff", + "sha256:409b43ceed9dcc52150813cb695130519dc2876d98f941ce6d30a5bc4ff80451", + "sha256:42fff01edf90358ef4e0a6edd235759e4f9344a6a6ba60b0d948e95d4aa5adf5", + "sha256:46a649d6c8cc0d59d9d8afc8aa6328d349f0cf6e579006523ef97fea03f72b8a", + "sha256:48cf475d3c621f9437220571acfca1317899868412d27760b54a3a7ae7c84530", + "sha256:498e62d934f80dab3384abfc1003013229e4c82d9eb904c51e5f6cea26ec56b7", + "sha256:4b0a6f5bcbe580cb156ef9bc2d59821889b141d894cbad2e7e352b2e75fb4bcc", + "sha256:4eb2befcf4e57c5e2218ff3e50b73b4b1bd56685ce275c45905d4687653dad90", + "sha256:51e962768a4111fb06dfa58f1a16e9ff299465df11756c416cd75ab4c9b42962", + "sha256:542eb584021cc99057b1f39f4b8bd5d25ae554ca21afdfc098bd60f91509640c", + "sha256:599aa2ce967bea2580588833bf08d2df5930cd2ccb618e8d96dd67dbe063b692", + "sha256:5e94500d9653e85bfce5d604e99f71407e4104ad4943caddef379b6cc4d6e07e", + "sha256:61fe1eb4156edd858d2a45a76472b67d82629d4eee0770b30aaf6f9bccfc664f", + "sha256:64004b0f1174c80674de4660b4655cf47333c9bb70ef64fbe5f5befbe75a83de", + "sha256:6660b33e100b4efbc2ed1b0765b97d126c80c56f5b82bd9865d938cc4a29f4a1", + "sha256:66da9965d78206444640fb34364677564b77286463d6aa461a9ae67e09479366", + "sha256:6a25d945fc6225b1bf7628229a40b1cf00f0a122843dafafdd09c9a921f6e5f4", + "sha256:6aca9a0f7444c79f517cd1e089942885833bd00509e8ee2b1431d05e2080b781", + "sha256:6bbc14a195fb1cf2da16017d2201edf770ab66b806537ef95101ca31a2141230", + "sha256:6c987fc1646c8272c4d76b0361fdec957b3e4082ed8fc9f5143ebdfda4f265c3", + "sha256:6f70c2bb17ec72839dffd7b023450a0ed17f73426e2f1f0833f024d78a64c6d7", + "sha256:7138f023e38cd108084b1ee8455be14a8e88a51f50510b482624bf204eb6ac44", + "sha256:756ad558853e637237490f2d203dccc9f93779fd2708b66a5948a7d785aacce3", + "sha256:772e948d02592bca1f551878b68b7e6cedaad471d2887701d524d390b56a01af", + "sha256:793a0bcbc3ea851fda46d72245d2f53f59c9a38bba480b83788b61afbb803725", + "sha256:79c1924b54c44a7dc6b7e866363d06faa6f03f490275d572b76536491004ea1a", + "sha256:7d9f33cbe36eda9ae33e169c27b33dcfd3791972809018309ead35e0997024b7", + "sha256:811a0d8ecf4053224cd54765654f5952e59983cfb07f8f6ee913330a2b4196b0", + "sha256:8151006ae30614e5c75e2ff05cdb51242214aadda0ae28c7c449007e28362651", + "sha256:866fe95c3c4f82ae155271b4fb6a7a9352fcaf6d6f7e02e05074a3c08a1dbd25", + "sha256:88bb9378ff3ff76a8fef3714976827ddb66fe397cadb64ba9bee5d954bfdf887", + "sha256:8a70e88ca8d890056e52a0b41bef755e232df3a0800ff9fdcefea1755cf23dc3", + "sha256:8e3cec205409e011ae872cbedd19891135ffdc1832ed353c8af4cef4b1947054", + "sha256:8ebb1274e8e5950eea209cb3b674612442aa68daac57c97872865bdf63449286", + "sha256:8eea173d8fe9f04f86f1f8d711dd23c0310cf55f979b1e7b949fe15ba776e018", + "sha256:92f5f3e78a6014b3060112be7253b3baefbbccf2147e5f8df1b3fa163a74d9d6", + "sha256:938c6f4236f053802c7b862ca95ea8c516052a08a4f369de7d4a06fd6a38d6fb", + "sha256:9bbcac98836b6393b1ed568845335bd3a1106077c8e32a615e3259a73665f449", + "sha256:9cb8203740284d385869381a461fb1ae487c166cb669fd3002f44fd44bb7f187", + "sha256:9d04aa8efff6ce4b22ec526cb63091f610a3f1823e22cf60b5fef88ac8177db0", + "sha256:9d09035bbc722f9ac8057c53f0d984f5b3bd4f3fb9ff74f7603fc3bbd783489a", + "sha256:9ebe11ebaf1b44e841bb6f0cf79f16c5c8b2d98e0df7c8d5ecb4bdb77faa9d60", + "sha256:a0aa70f48dc5e9adfa38a1a5c8e3aac20efca7370143ac94f3cef7c068c6cf27", + "sha256:a33758b5dbff2eb56270d441222e527d6e0e96b3886a4d42c9cfcdccc6730baa", + "sha256:ae3a20fc2f3cccdd2d2f319d0198040a778fbda51ff6cece9a1dbaa67cdd11ab", + "sha256:aec83bdeb4b0a2f90b4bc07b9b7339b37c39535b8dd01397e0d2a22baae86b42", + "sha256:b66b45409b7014ba1c4f0d23cf2d7a93ca8045be35660dc04828a1615fd805c6", + "sha256:b797d5ca7ae816f3b7020fae479573efaed4b5be730dfa6c0b8f1d25d4ec6207", + "sha256:b94ec6e2389a0bce9e1393322f6efc928fa9f6f138656f8333eaa625ac62077a", + "sha256:baa71fddadf208c2dae2092c229d928cb4d3fc12c769876a54b8ed53e081fe06", + "sha256:c0563bf4e2069da4d3a6183acdb2f8f69e6d3d2cc794afb6b001f47d89b10618", + "sha256:d17bdab6cbfca083c386da5a580c6650221024fcfed6bcccf5cce7d8219f2d49", + "sha256:d31e9422387b77a49fc01e966e128ea06688ef23495f6a999843f75ee2f481be", + "sha256:d38df4ac8a8d1bd2c1b77ea3de8645091d669ccf8a3f327f586b0f868c409800", + "sha256:d3cc1a1b215b8efa3cfe45aedb8afc6b46476df2f37a089894b0fd3f82262f8f", + "sha256:d831eec202a3a6b976195235b68e3f8a5f9a8e36dc329b7dd864da236ff3c434", + "sha256:d9dcf718c36dbec176a3c9f3d829ddbfe5aa4a405d7fc45be6a339319ff1bd90", + "sha256:dd90aa4ba84ceef1031e468b561ff53b68ecb5bea0f44f13ff930a29037ce880", + "sha256:dde54b9d20376f132020726156e4d8a2054714edd86709608d710f950e169621", + "sha256:ddf9a5eaaae83db1b9ad8c147833c1b9e9c17fd2886c0d7fd58b92212c1d73a7", + "sha256:e8d51a0d9c85819085b614e81da980bec5ef95cb5fae934ff0cd480d9f1ad954", + "sha256:e989dca3eeaf28e15e80084bd55b7872b8c9c79b59748a332a6d32026783bb93", + "sha256:e99cc2845ad4a88ddc44473d6222ef624c0424383f4d7369b37c94f93fee8004", + "sha256:e9e6c0ed1378cf0a6d77cd60f550eb8d57e21c13edb5e1f44b9707fd9937c2ce", + "sha256:efdf06265e2b560b1202626c83b35eed5bd30ed81a4493f73d30ebb1bc04ce8d", + "sha256:f7dcf4f9bc71b4ebac120a569bfe1604f1664da59cfa0abd85e15fabc4c3e7dc", + "sha256:f82f0110136281bdd1886529ad9cd9e76c6e03a2841ed923a3db94e9a19ad710", + "sha256:fbb89011e236e15899df0b49432bb50c7f3d89c9f1875c0c2b5bafaf9d5c2daa" ], "markers": "python_version >= '3.6'", - "version": "==3.8.1" + "version": "==3.8.2" }, "aiosignal": { "hashes": [ @@ -1894,6 +2068,14 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, + "ape-solidity": { + "hashes": [ + "sha256:bee73a005ec3b8af6673352d5abbaeb5ba3c01333a0947c9ff2d26016e4cc979", + "sha256:c051a129c9016d0e03d83a36bef689be45b36908fbd70b224196688142a64308" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.6.3" + }, "appdirs": { "hashes": [ "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", @@ -1901,6 +2083,21 @@ ], "version": "==1.4.4" }, + "appnope": { + "hashes": [ + "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", + "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" + ], + "markers": "sys_platform == 'darwin'", + "version": "==0.1.3" + }, + "asttokens": { + "hashes": [ + "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3", + "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c" + ], + "version": "==2.2.1" + }, "async-timeout": { "hashes": [ "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15", @@ -1911,18 +2108,18 @@ }, "attrs": { "hashes": [ - "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", - "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" ], - "markers": "python_version >= '3.5'", - "version": "==22.1.0" + "markers": "python_version >= '3.7'", + "version": "==23.1.0" }, "autobahn": { "hashes": [ - "sha256:8b462ea2e6aad6b4dc0ed45fb800b6cbfeb0325e7fe6983907f122f2be4a1fe9" + "sha256:c5ef8ca7422015a1af774a883b8aef73d4954c9fcd182c9b5244e08e973f7c3a" ], "markers": "python_version >= '3.7'", - "version": "==22.7.1" + "version": "==23.1.2" }, "automat": { "hashes": [ @@ -1931,90 +2128,134 @@ ], "version": "==22.10.0" }, + "backcall": { + "hashes": [ + "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", + "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" + ], + "version": "==0.2.0" + }, + "backports.zoneinfo": { + "hashes": [ + "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", + "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", + "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", + "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", + "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", + "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", + "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", + "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", + "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", + "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", + "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", + "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", + "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", + "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", + "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", + "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" + ], + "markers": "python_version >= '3.6'", + "version": "==0.2.1" + }, "base58": { "hashes": [ - "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2", - "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c" + "sha256:1e42993c0628ed4f898c03b522b26af78fb05115732549b21a028bc4633d19ab", + "sha256:6aa0553e477478993588303c54659d15e3c17ae062508c854a8b752d07c716bd", + "sha256:9a793c599979c497800eb414c852b80866f28daaed5494703fc129592cc83e60" ], - "markers": "python_version >= '3.5'", - "version": "==2.1.1" + "version": "==1.0.3" }, "bitarray": { "hashes": [ - "sha256:035d3e5ab3c1afa2cd88bbc33af595b4875a24b0d037dfef907b41bc4b0dbe2b", - "sha256:0399886ca8ead7d0f16f94545bda800467d6d9c63fbd4866ee7ede7981166ba8", - "sha256:049e8f017b5b6d1763ababa156ca5cbdea8a01e20a1e80525b0fbe9fb839d695", - "sha256:076a72531bcca99114036c3714bac8124f5529b60fb6a6986067c6f345238c76", - "sha256:0b756e5c771cdceb17622b6a0678fa78364e329d875de73a4f26bbacab8915a8", - "sha256:11996c4da9c1ca9f97143e939af75c5b24ad0fdc2fa13aeb0007ebfa3c602caf", - "sha256:119d503edf09bef37f2d0dc3b4a23c36c3c1e88e17701ab71388eb4780c046c7", - "sha256:12c96dedd6e4584fecc2bf5fbffe1c635bd516eee7ade7b839c35aeba84336b4", - "sha256:1479f533eaff4080078b6e5d06b467868bd6edd73bb6651a295bf662d40afa62", - "sha256:15d2a1c060a11fc5508715fef6177937614f9354dd3afe6a00e261775f8b0e8f", - "sha256:1d0a2d896bcbcb5f32f60571ebd48349ec322dee5e137b342483108c5cbd0f03", - "sha256:24331bd2f52cd5410e48c132f486ed02a4ca3b96133fb26e3a8f50a57c354be6", - "sha256:2cfe1661b614314d67e6884e5e19e36957ff6faea5fcea7f25840dff95288248", - "sha256:346d2c5452cc024c41d267ba99e48d38783c1706c50c4632a4484cc57b152d0e", - "sha256:36802129a3115023700c07725d981c74e23b0914551898f788e5a41aed2d63bf", - "sha256:3f238127789c993de937178c3ff836d0fad4f2da08af9f579668873ac1332a42", - "sha256:42a071c9db755f267e5d3b9909ea8c22fb071d27860dd940facfacffbde79de8", - "sha256:4d42fee0add2114e572b0cd6edefc4c52207874f58b70043f82faa8bb7141620", - "sha256:4ffc076a0e22cda949ccd062f37ecc3dc53856c6e8bdfe07e1e81c411cf31621", - "sha256:5276c7247d350819d1dae385d8f78ebfb44ee90ff11a775f981d45cb366573e5", - "sha256:565c4334cb410f5eb62280dcfb3a52629e60ce430f31dfa4bbef92ec80de4890", - "sha256:56d3f16dd807b1c56732a244ce071c135ee973d3edc9929418c1b24c5439a0fd", - "sha256:5a0bb91363041b45523e5bcbc4153a5e1eb1ddb21e46fe1910340c0d095e1a8e", - "sha256:5bd315ac63b62de5eefbfa07969162ffbda8e535c3b7b3d41b565d2a88817b71", - "sha256:5f5df0377f3e7f1366e506c5295f08d3f8761e4a6381918931fc1d9594aa435e", - "sha256:6071d12043300e50a4b7ba9caeeca92aac567bb4ac4a227709e3c77a3d788587", - "sha256:67c5822f4bb6a419bc2f2dba9fa07b5646f0cda930bafa9e1130af6822e4bdf3", - "sha256:6c3d0a4a6061adc3d3128e1e1146940d17df8cbfe3d77cb66a1df69ddcdf27d5", - "sha256:6c46c2ba24a517f391c3ab9e7a214185f95146d0b664b4b0463ab31e5387669f", - "sha256:6d8ba8065d1b60da24d94078249cbf24a02d869d7dc9eba12db1fb513a375c79", - "sha256:6fa63a86aad0f45a27c7c5a27cd9b787fe9b1aed431f97f49ee8b834fa0780a0", - "sha256:7126563c86f6b60d87414124f035ff0d29de02ad9e46ea085de2c772b0be1331", - "sha256:71cc3d1da4f682f27728745f21ed3447ee8f6a0019932126c422dd91278eb414", - "sha256:742d43cbbc7267caae6379e2156a1fd8532332920a3d919b68c2982d439a98ba", - "sha256:763cac57692d07aa950b92c20f55ef66801955b71b4a1f4f48d5422d748c6dda", - "sha256:76c4e3261d6370383b02018cb964b5d9260e3c62dea31949910e9cc3a1c802d2", - "sha256:7ae3b8b48167579066a17c5ba1631d089f931f4eae8b4359ad123807d5e75c51", - "sha256:7f369872d551708d608e50a9ab8748d3d4f32a697dc5c2c37ff16cb8d7060210", - "sha256:874a222ece2100b3a3a8f08c57da3267a4e2219d26474a46937552992fcec771", - "sha256:878f16daa9c2062e4d29c1928b6f3eb50911726ad6d2006918a29ca6b38b5080", - "sha256:8c811e59c86ce0a8515daf47db9c2484fd42e51bdb44581d7bcc9caad6c9a7a1", - "sha256:97609495479c5214c7b57173c17206ebb056507a8d26eebc17942d62f8f25944", - "sha256:985a937218aa3d1ac7013174bfcbb1cb2f3157e17c6e349e83386f33459be1c0", - "sha256:a239313e75da37d1f6548d666d4dd8554c4a92dabed15741612855d186e86e72", - "sha256:b080eb25811db46306dfce58b4760df32f40bcf5551ebba3b7c8d3ec90d9b988", - "sha256:b0cfca1b5a57b540f4761b57de485196218733153c430d58f9e048e325c98b47", - "sha256:b0e4a6f5360e5f6c3a2b250c9e9cd539a9aabf0465dbedbaf364203e74ff101b", - "sha256:b849a6cdd46608e7cc108c75e1265304e79488480a822bae7471e628f971a6f0", - "sha256:bfda0af4072df6e932ec510b72c461e1ec0ad0820a76df588cdfebf5a07f5b5d", - "sha256:c19e900b6f9df13c7f406f827c5643f83c0839a58d007b35a4d7df827601f740", - "sha256:c24d4a1b5baa46920b801aa55c0e0a640c6e7683a73a941302e102e2bd11a830", - "sha256:c774328057a4b1fc48bee2dd5a60ee1e8e0ec112d29c4e6b9c550e1686b6db5c", - "sha256:d34673ebaf562347d004a465e16e2930c6568d196bb79d67fc6358f1213a1ac7", - "sha256:d523ffef1927cb686ad787b25b2e98a5bd53e3c40673c394f07bf9b281e69796", - "sha256:d53520b54206d8569b81eee56ccd9477af2f1b3ca355df9c48ee615a11e1a637", - "sha256:d697cc38cb6fa9bae3b994dd3ce68552ffe69c453a3b6fd6a4f94bb8a8bfd70b", - "sha256:d7bec01818c3a9d185f929cd36a82cc7acf13905920f7f595942105c5eef2300", - "sha256:e6a4a4bf6fbc42b2674023ca58a47c86ee55c023a8af85420f266e86b10e7065", - "sha256:e6bd32e492cdc740ec36b6725457685c9f2aa012dd8cbdae1643fed2b6821895", - "sha256:e76642232db8330589ed1ac1cec0e9c3814c708521c336a5c79d39a5d8d8c206", - "sha256:e7ba4c964a36fe198a8c4b5d08924709d4ed0337b65ae222b6503ed3442a46e8", - "sha256:ec18a0b97ea6b912ea57dc00a3f8f3ce515d774d00951d30e2ae243589d3d021", - "sha256:ecce266e24b21615a3ed234869be84bef492f6a34bb650d0e25dc3662c59bce4", - "sha256:f0302605b3bbc439083a400cf57d7464f1ac098c722309a03abaa7d97cd420b5", - "sha256:f253b9bdf5abd039741a9594a681453c973b09dcb7edac9105961838675b7c6b", - "sha256:f263b18fdb8bf42cd7cf9849d5863847d215024c68fe74cf33bcd82641d4376a", - "sha256:f37b5282b029d9f51454f8c580eb6a24e5dc140ef5866290afb20e607d2dce5f", - "sha256:f4849709571b1a53669798d23cc8430e677dcf0eea88610a0412e1911233899a", - "sha256:f853589426920d9bb3683f6b6cd11ce48d9d06a62c0b98ea4b82ebd8db3bddec", - "sha256:f9c492644f70f80f8266748c18309a0d73c22c47903f4b62f3fb772a15a8fd5f", - "sha256:fc635b27939969d53cac53e8b8f860ea69fc98cc9867cac17dd193f41dc2a57f", - "sha256:febaf00e498230ce2e75dac910056f0e3a91c8631b7ceb6385bb39d448960bc5" - ], - "version": "==2.6.0" + "sha256:00a6fc4355bd4e6ead54d05187dc4ea39f0af439b336ae113f0194673ed730ae", + "sha256:00e93f70cbcbeabd1e79accf1b6f5b2424cd40556e7877f618549523d0031c98", + "sha256:01f8d02c3eae82c98d4259777cb2f042a0b3989d7dceeb37c643cb94b91d5a42", + "sha256:029c724bf38c6616b90b1c423b846b63f8d607ed5a23d270e3862696d88a5392", + "sha256:057f9c53a34e42deed6e8813a82b9c85924f4728be28e3b9b65144569ac5a387", + "sha256:088e6e9ea7f0eaf8b672679a68096dbc0a7a7b7a4ed567860f7362e1588370a6", + "sha256:0b84fd9dbf999cbca1090a7703aa1404cd01af4035c6ba3adf69d41280611fb6", + "sha256:0d1f49cc51919d6fa0f7eebd073d2c620b80079aa537d084a7fafb46a35c7a4d", + "sha256:0fe747a134f7f5bc0877eee58090ae7e7f23628eeb459f681ade65719c3f246a", + "sha256:102db74ee82ec5774aba01481e73eedaebd27ba167344a81d3b42e6fbf9ffb77", + "sha256:1048a29b3d72b1821a3ae9e8d64e71ed96c53a1a36b1da6db02091a424a8f795", + "sha256:10dc358fe29d7a4c5be78ab2fb5aa50cb8066babd23e0b5589eb68e26afe58d8", + "sha256:122cd70ee0de2cc9d94da8b8ebcb7dca12b9f4d3beefb94c11e110e1d87503bb", + "sha256:1289f408a8b5c87cdb4fd7975d4021c6e61209ccb956d0411e72bf43c7f78463", + "sha256:1362e9fb78ca72aa52ec1f1fbd62872801302001b0156ed2a1e707850cd30ffd", + "sha256:1502660ab489b1f18c3493c766252cd5d24bc1cbf4bdf3594e0a30de142ed453", + "sha256:16345146b61e93ca20679c83537ccf7245f78b17035f5b1a436fd2b75da04c5e", + "sha256:16cb00911584a6e9ca0f42c305714898120dc6bfbbec90dacedeed4690331a47", + "sha256:1af9b720a048c69e999094e2310138b7cfca5471a9d2c1dbe4b53dd10e516720", + "sha256:1e1553933f4533040491f4e4499bcbbfcee42c4056f56d7e18010e779daab33d", + "sha256:23b7bada6d6b62cba08f4a1b8a95da2d8592aae1db3c167dcb52abcba0a7bef5", + "sha256:27524bc92fdeb464a5057a4677a35f482cf30be2e920bd1d11c46de533cafda6", + "sha256:2c1b2c91bf991b5c641faee78dd5a751dff6155ec51c7a6c7f922dc85431898e", + "sha256:2cdf5700537e5aa4ec9f4a0b498b8d5b03b9859d503e01ea17a6a134a838aa30", + "sha256:302149aaff75939beb8af7f32ac9bf922480033a24fb54f4ebc0c9dc175247c4", + "sha256:305e6f7441c007f296644ba3899c0306ce9fd7a482dbbc06b6e7b7bd6e0ddabc", + "sha256:31e60d8341c3189aa156ca8cb2f6370b29d79cf132e3d091714b0a5a9097eb69", + "sha256:3cf37431de779b29e5c0d8e36868f77f6df53c3c19c20e8404137e257dc80040", + "sha256:3fb6a952796d16c3a309d866eef56a8f4e5591d112c22446e67d33ecb096b44b", + "sha256:433f91c8ab8338662aaa86b0677e6c15c35f8f7b65d4c43d7d1647a8198bc0b0", + "sha256:4abe2f829f6f2d330bccf1bcde2192264ab9a15d6d00e507265f46dc66557014", + "sha256:4b2d150a81a981537801ac7d4f4f5d082c48343612a21f4e2c4cd2e887973bd5", + "sha256:4b84230624d15868e407ba8b66df54fc69ee6a9e9cb6d51eb264b8f2614596f1", + "sha256:50d5e2c026b3e3d145f64c457338ea99edcbdd302fdcbd96418251ac51a98a59", + "sha256:5df10eb9b794932b0cf806f412d1c6d04fb7655ca7ae5caf6354b9edc380a5f7", + "sha256:699b0134e87c0c4e3b224d879d218c4385a06e6b72df73b4c9c9d549155fb837", + "sha256:6d19c34a2121eccfeb642d4ad71163bd3342a8f3a99e6724fe824bdfbc0a5b65", + "sha256:72fd7f6f940bc42914c86700591ccfd1daeff0e414cefcbd7843117df2fac4e9", + "sha256:748847e58c45a37f23db1f53a6dc16ae32aa80ee504653d79336830de1a79ed7", + "sha256:757a08bf0aed5a650a399f8c66bcba00c210bce34408b6d7b09b4837bee8f4da", + "sha256:7659bdfe7716b14a39007e31e957fa64d7f0d9e40a1dbd024bd81b972d76bffb", + "sha256:76bbbb9ceebb9cbb2b14369b3681fecab226792b339f612e79f6575ca31fed45", + "sha256:7776c070943f45cd8303543a6625cf82f2e000ef9c885d52d7828be099e52f42", + "sha256:78378d8dacbe1f4f263347f42ec0a41cc2097cd671c6ac30a65a838284a5e141", + "sha256:7a8995737fae8de03b31ed83acf4f4326a55b217022009d18be19ff87fc9010e", + "sha256:7d571056115bbdc18f199a9ee4c2a1b5884f5e63a3c05fe43d2fc7fc67320515", + "sha256:7f6540b45b2230442f7a0614745131e0a6f28251f5d33ac19d0ed61d80db7153", + "sha256:8591ad5768860ad186dc94fd58b2932604a7639b57eefbbff2b4865af3407691", + "sha256:860edf8533223d82bd6201894bcaf540f828f49075f363390eecf04b12fb94cb", + "sha256:86e9c48ffeddb0f943e87ab65e1e95dccc9b44ef3761af3bf9642973ab7646d2", + "sha256:87851a82bdf849e3c40ff6d8af5f734634e17f52a8f7f7e74486c2f8ce717578", + "sha256:87897ec0e4876c9f2c1ae313519de0ed2ad8041a4d2210a083f9b4a239add2e3", + "sha256:888df211aafe5fad41c0792a686d95c8ba37345d5037f437aa3c09608f9c3b56", + "sha256:8ab6770833976448a9a973bc0df63adedc4c30de4774cec5a9928fc496423ebb", + "sha256:8abd23f94cdcce971d932a5f0a066d40fbc61901fd087aa70d32cccd1793bd20", + "sha256:8b2f31a4cc28aef27355ab896e4b4cc2da2204b2b7adb674d8be7fefa0c93868", + "sha256:8b8fd92c8026e4ba6874e94f538890e35bef2a3a18ea54e3663c578b7916ade1", + "sha256:8becbb9649fd29ee577f9f0405ce2fba5cf9fa2c290c9b044bc235c04473f213", + "sha256:91f43f6b6c9129a56d3e2dccb8b88ffce0e4f4893dd9d69d285676bdf5b9ca14", + "sha256:979d42e0b2c3113526f9716a461e08671788a23ce7e3b5cd090ce3e6a6762641", + "sha256:980f6564218f853a9341fb045446539d4153338926ed2fb222e86dc9b2ae9b8f", + "sha256:99c9345c417a9cff98f9f6e59b0350dcc10c2e0e1ea66acf7946de1cd60541fa", + "sha256:9a544f99c24b6f658907eb9edf290a9c54f4106738b2ab84cd19dc6013cc3abf", + "sha256:9ee181cc00aaba38d9812f4df4e7d828105b6dde3b068cd2c43f1d8f395e0046", + "sha256:a1d439c98e65ab8e5fbcc2b242a16e7a3f076974bff78185ff42ba2d4c220032", + "sha256:a5fc2512bdf5289a1412c936c65d17881d2b46edb0036c63a8d5605dc8d398a3", + "sha256:a69c99274aee2ffdc7f1cfd34044ccb7155790d6f5217d677ea46a6ddead6dd2", + "sha256:b43d56c7c96f5a055f4051be426496db2a616840645d0ab3733d5ceacb2f701b", + "sha256:b508e1bba4ec68fd0ef28505e2dad2f56de7df710c8334c97036705a562cb908", + "sha256:b5df624ee8a4098c3b1149f4817f2a4a0121c4920e1c114af324bc52d6659e2b", + "sha256:bd7f4b2df89bf4e298756c0be0be67fb84d6aa49bda60d46805d43f0e643abd5", + "sha256:c3956ae54285ab30d802756144887e30e013f81c9f03e5ffff9daa46d8ca0154", + "sha256:c531532c21bc1063e65957a1a85a2d13601ec21801f70821c89d9339b16ebc78", + "sha256:cb1d60ed709989e34e7158d97fdb077a2f2dfc505998a84161a70f81a6101172", + "sha256:cb46c3a4002c8322dd0e1b4b53f8a647dcb0f199f5c7a1fc03d3880c3eabbd2c", + "sha256:cb9a8ee23416bd0cfd457118978bc2f6f02c20b95336db486887f670bf92c2b7", + "sha256:d089b1d0b157c9a484f8f7475eecea813d0dc3818adc5bf352903da14fe88fc3", + "sha256:d3b5abb73c45d40d27f9795dac9d6eb1515729c13f93dd67df2be07be6549990", + "sha256:d63f20299441e32171f08fc62f7ea7e401cc12a96f67a36ab2d76439ecfcb118", + "sha256:da1570f301abdfda68f4fdb40c4d3f09af4bb6e4550b4fa5395db0d142b680bc", + "sha256:e2a0313657e6656efca2148cfc91c50fdafca6f811b6c7d0906e6ba57134e560", + "sha256:e4b7fdb9772e087174f446655bbc497a1600b5758f279c6d44fcf344c13d5c8a", + "sha256:ea33ed09157e032f0a7a2627ef87f156e9927697f59b55961439d34bf45af23a", + "sha256:f64abe9301b918d2c352e42198cea0196f3639bc1ad23a4a9d8ae97f66068901", + "sha256:f71256a32609b036adad932e1228b66a6b4e2cae6be397e588ddc0babd9a78b9", + "sha256:fb3f003dee96dbf24a6df71443557f249b17b20083c189995302b14eb01530bf", + "sha256:fe80c23409efb41b86efb5e45f334420a9b5b7828f5b3d08b5ff28f03a024d9e" + ], + "version": "==2.7.3" }, "bytestring-splitter": { "hashes": [ @@ -2112,6 +2353,7 @@ "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426", "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736" ], + "markers": "python_full_version >= '3.6.1'", "version": "==3.3.1" }, "charset-normalizer": { @@ -2119,7 +2361,7 @@ "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2.1.1" }, "click": { @@ -2138,6 +2380,13 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", "version": "==0.4.6" }, + "commonmark": { + "hashes": [ + "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", + "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" + ], + "version": "==0.9.1" + }, "constant-sorrow": { "hashes": [ "sha256:11028645c2b136ab1197869c42ba93e33a558d093ceff887b4384ef967106147", @@ -2154,9 +2403,6 @@ "version": "==15.1.0" }, "coverage": { - "extras": [ - "toml" - ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -2214,141 +2460,165 @@ }, "cryptography": { "hashes": [ - "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd", - "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db", - "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290", - "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744", - "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb", - "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d", - "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70", - "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b", - "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876", - "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083", - "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6", - "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1", - "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00", - "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b", - "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b", - "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285", - "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9", - "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0", - "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d", - "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2", - "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8", - "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee", - "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b", - "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7", - "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353", - "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c" + "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", + "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", + "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", + "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", + "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", + "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", + "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", + "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", + "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", + "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", + "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", + "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", + "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", + "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", + "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", + "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", + "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", + "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", + "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" ], "markers": "python_version >= '3.6'", - "version": "==38.0.4" + "version": "==40.0.2" }, "cytoolz": { "hashes": [ - "sha256:02583c9fd4668f9e343ad4fc0e0f9651b1a0c16fe92bd208d07fd07de90fdc99", - "sha256:02dc4565a8d27c9f3e87b715c0a300890e17c94ba1294af61c4ba97aa8482b22", - "sha256:09f5652caeac85e3735bd5aaed49ebf4eeb7c0f15cb9b7c4a5fb6f45308dc2fd", - "sha256:09fac69cebcb79a6ed75565fe2de9511be6e3d93f30dad115832cc1a3933b6ce", - "sha256:0c9fe89548b1dc7c8b3160758d192791b32bd42b1c244a20809a1053a9d74428", - "sha256:0f94b4a3500345de5853d1896b7e770ce4a6577a431f43ff7d8f05f9051aeb7d", - "sha256:12d3d11ceb0fce8be5463f1e363366888c4b71e68fb2f5d536e4790b933cfd7e", - "sha256:16748ea2b40c5978190d9acf9aa8fbacbfb440964c1035dc16cb14dbd557edb5", - "sha256:1744217505b835fcf55d82d67addd0d361791c4fd6a2f485f034b343ffc7edb3", - "sha256:1a79658fd264c5f82ea1b5cb45cf3899afabd9ec3e58c333bea042a2b4a94134", - "sha256:1c22255e7458feb6f43d99c9578396e91d5934757c552128f6afd3b093b41c00", - "sha256:1cf9ae77eed57924becd3ab65ae24487d7b1f9823d3e685d796e58f57424f82a", - "sha256:21986f4a970c03ca84806b3a08e89386ac4aeb54c9b79d6a7268e83225331a87", - "sha256:231d87ffb5fc468989e35336a2f8da1c9b8d97cfd9300cf2df32e953e4d20cae", - "sha256:25c037a7b4f49730ccc295a03cd2217ba67ff43ac0918299f5f368271433ff0f", - "sha256:274bc965cd93d6fa0bfe6f770cf6549bbe58d7b0a48dd6893d3f2c4b495d7f95", - "sha256:2bd1c692ab706acb46cfebe7105945b07f7274598097e32c8979d3b22ae62cc6", - "sha256:2d29cf7a44a8abaeb00537e3bad7abf823fce194fe707c366f81020d384e22f7", - "sha256:2ee9ca2cfc939607926096c7cc6f298cee125f8ca53a4f46745f8dfbb7fb7ab1", - "sha256:336551092eb1cfc2ad5878cc08ef290f744843f84c1dda06f9e4a84d2c440b73", - "sha256:337c9a3ce2929c6361bcc1b304ce81ed675078a34c203dbb7c3e154f7ed1cca8", - "sha256:38e3386f63ebaea46a4ee0bfefc9a38590c3b78ab86439766b5225443468a76b", - "sha256:3a5408a74df84e84aa1c86a2f9f2ffaed51a55f34bbad5b8fae547cb9167e977", - "sha256:3e8335998e21205574fc7d8d17844a9cc0dd4cbb25bb7716d90683a935d2c879", - "sha256:46b9f4af719b113c01a4144c52fc4b929f98a47017a5408e3910050f4641126b", - "sha256:4b8b1d9764d08782caa8ba0e91d76b95b973a82f4ce2a3f9c7e726bfeaddbdfa", - "sha256:59263f296e043d4210dd34f91e6f11c4b20e6195976da23170d5ad056030258a", - "sha256:5b7079b3197256ac6bf73f8b9484d514fac68a36d05513b9e5247354d6fc2885", - "sha256:68336dfbe00efebbb1d02b8aa00b570dceec5d03fbd818c620aa246a8f5e5409", - "sha256:69c04ae878d5bcde5462e7290f950bfce11fd139ec4b481687983326658e6dbe", - "sha256:6aade6ebb4507330b0540af58dc2804415945611e90c70bb97360973e487c48a", - "sha256:6f87472837c26b3bc91f9767c7adcfb935d0c097937c6744250672cd8c36019d", - "sha256:6fa49cfaa0eedad59d8357a482bd10e2cc2a12ad9f41aae53427e82d3eba068a", - "sha256:7244fb0d0b87499becc29051b82925e0daf3838e6c352e6b2d62e0f969b090af", - "sha256:798dff7a40adbb3dfa2d50499c2038779061ebc37eccedaf28fa296cb517b84e", - "sha256:79b46cda959f026bd9fc33b4046294b32bd5e7664a4cf607179f80ac93844e7f", - "sha256:7fe93ffde090e2867f8ce4369d0c1abf5651817a74a3d0a4da2b1ffd412603ff", - "sha256:8060be3b1fa24a4e3b165ce3c0ee6048f5e181289af57dbd9e3c4d4b8545dd78", - "sha256:8237612fed78d4580e94141a74ac0977f5a9614dd7fa8f3d2fcb30e6d04e73aa", - "sha256:886b3bf8fa99510836107097a5e5a2bd81631d3795dedc5684e25bef6538ac39", - "sha256:8c0101bb2b2bcc0de2e2eb288a132c261e5fa883b1423799b47d4f0cfd879cd6", - "sha256:8f40897f6f341e03a945759fcdb2208dc7c64dc312386d3088c47b78fca2a3b2", - "sha256:94b067c88de0eaca174211c8422b3f72cbfb63b101a0eeb528c4f21282ca0afe", - "sha256:9ac7758c5c5a66664285831261a9af8e0af504026e0987cd01535045945df6e1", - "sha256:9dd7dbdfc24ed309af96be170c9030f43713950afab2b4bed1d372a91b37cbb0", - "sha256:9e32292721f16516a574891a1af6760cba37a0f426a2b2cea6f9d560131a76ea", - "sha256:9ecdd6e2be8d59b76c2bd3e2d832e7b3d5b2535c418b13cfa85e3b17de985199", - "sha256:a15157f4280f6e5d7c2d0892847a6c4dffbd2c5cefccaf1ac1f1c6c3d2cf9936", - "sha256:a2cca43caea857e761cc458ffb4f7af397a13824c5e71341ca08035ff5ff0b27", - "sha256:a4acf6cb20f01a5eb5b6d459e08fb92aacfb4de8bc97e25437c1a3e71860b452", - "sha256:a8e69c9f3a32e0f9331cf6707a0f159c6dec0ff2a9f41507f6b2d06cd423f0d0", - "sha256:a8feb4d056c22983723278160aff8a28c507b0e942768f4e856539a60e7bb874", - "sha256:ae403cac13c2b9a2a92e56468ca1f822899b64d75d5be8ca802f1c14870d9133", - "sha256:ae7f417bb2b4e3906e525b3dbe944791dfa9248faea719c7a9c200aa1a019a4e", - "sha256:b05dc257996c0accf6f877b1f212f74dc134b39c46baac09e1894d9d9c970b6a", - "sha256:b716f66b5ee72dbf9a001316ffe72afe0bb8f6ce84e341aec64291c0ff16b9f4", - "sha256:bb0fc2ed8efa89f31ffa99246b1d434ff3db2b7b7e35147486172da849c8024a", - "sha256:c105b05f85e03fbcd60244375968e62e44fe798c15a3531c922d531018d22412", - "sha256:c4ff74cb0e1a50de7f59e54a156dfd734b6593008f6f804d0726a73b89d170cd", - "sha256:c818a382b828e960fbbedbc85663414edbbba816c2bf8c1bb5651305d79bdb97", - "sha256:c9f8c9b3cfa20b4ce6a89b7e2e7ffda76bdd81e95b7d20bbb2c47c2b31e72622", - "sha256:cb072fa81caab93a5892c4b69dfe0d48f52026a7fe83ba2567020a7995a456e7", - "sha256:d035805dcdefcdfe64d97d6e1e7603798588d5e1ae08e61a5dae3258c3cb407a", - "sha256:d212296e996a70db8d9e1c0622bc8aefa732eb0416b5441624d0fd5b853ea391", - "sha256:d511dd49eb1263ccb4e5f84ae1478dc2824d66b813cdf700e1ba593faa256ade", - "sha256:d61bc1713662e7d9aa3e298dad790dfd027c5c0f1342c36be8401aebe3d3d453", - "sha256:db619f17705067f1f112d3e84a0904b2f04117e50cefc4016f435ff0dc59bc4e", - "sha256:dc8df9adfca0da9956589f53764d459389ce86d824663c7217422232f1dfbc9d", - "sha256:dd840adfe027d379e7aede973bc0e193e6eef9b33d46d1d42826e26db9b37d7e", - "sha256:deb8550f487de756f1c24c56fa2c8451a53c0346868c13899c6b3a39b1f3d2c3", - "sha256:e17516a102731bcf86446ce148127a8cd2887cf27ac388990cd63881115b4fdc", - "sha256:ed8771e36430fb0e4398030569bdab1419e4e74f7bcd51ea57239aa95441983a", - "sha256:edf460dc6bed081f274cd3d8ae162dd7e382014161d65edcdec832035d93901b", - "sha256:ee1fe1a3d0c8c456c3fbf62f28d178f870d14302fcd1edbc240b717ae3ab08de", - "sha256:ee92dadb312e657b9b666a0385fafc6dad073d8a0fbef5cea09e21011554206a", - "sha256:ef4a496a3175aec595ae24ad03e0bb2fe76401f8f79e7ef3d344533ba990ec0e", - "sha256:f1f5c1ef04240b323b9e6b87d4b1d7f14b735e284a33b18a509537a10f62715c", - "sha256:f24e70d29223cde8ce3f5aefa7fd06bda12ae4386dcfbc726773e95b099cde0d", - "sha256:f26079bc2d0b7aa1a185516ac9f7cda0d7932da6c60589bfed4079e3a5369e83", - "sha256:f5784adcdb285e70b61efc1a369cd61c6b7f1e0b5d521651f93cde09549681f5", - "sha256:f71b49a41826a8e7fd464d6991134a6d022a666be4e76d517850abbea561c909", - "sha256:f909760f89a54d860cf960b4cd828f9f6301fb104cd0de5b15b16822c9c4828b", - "sha256:f959c1319b7e6ed3367b0f5a54a7b9c59063bd053c74278b27999db013e568df", - "sha256:fa5ded9f811c36668239adb4806fca1244b06add4d64af31119c279aab1ef8a6" - ], - "markers": "implementation_name == 'cpython'", - "version": "==0.12.0" + "sha256:02975e2b1e61e47e9afa311f4c1783d155136fad37c54a1cebfe991c5a0798a1", + "sha256:03ab22c9aeb1535f8647d23b6520b0c3d41aaa18d04ef42b352dde1931f2e2b1", + "sha256:061387aa39b9c1576c25d0c59142513c09e77a2a07bd5d6211a43c7a758b6f45", + "sha256:06d38a40fe153f23cda0e823413fe9d9ebee89dd461827285316eff929fb121e", + "sha256:0d474dacbafbdbb44c7de986bbf71ff56ae62df0d52ab3b6fa966784dc88737a", + "sha256:117871f036926e42d3abcee587eafa9dc7383f1064ac53a806d33e76604de311", + "sha256:14f4dbc3f0ec8f6fc68865489af21dcf042ff007d2737c27bfd73296f15db544", + "sha256:1a1eae39656a1685e8b3f433eecfd72015ce5c1d7519e9c8f9402153c68331bb", + "sha256:1b6761791973b1e839b8309d5853b40eeb413368e31beaf5f2b6ed44c6fc7cf0", + "sha256:1be368623e46ad3c1ce807e7a436acb119c26001507b31f92ceb21b86e08c386", + "sha256:1c29dd04e282ddfd45b457e3551075beec9128aa9271245e58ce924bf6e055f8", + "sha256:23c3f57c48eb939d2986eba4aeaeedf930ebf94d58c91a42d4e0fc45ed5427dc", + "sha256:25ff13c468c06da9ef26651dc389e7e8bb7af548f8c1dfb96305f57f18d398a8", + "sha256:2a48940ff0449ffcf690310bf9228bb57885f7571406ed2fe05c98e299987195", + "sha256:2b245b824f4705aef0e4a03fafef3ad6cb59ef43cc564cdbf683ee28dfc11ad5", + "sha256:2ec296f01c29c809698eaf677211b6255691295c2b35caab2131e1e7eaadfbac", + "sha256:2eed428b5e68c28abf2c71195e799850e040d67a27c05f7785319c611665b86a", + "sha256:2f32452e833f0605b871626e6c61b71b0cba24233aad0e04accc3240497d4995", + "sha256:3032c0ba42dee5836d6b57a72a569b65df2c29e8ed266cb900d569003cf933a9", + "sha256:30936ae8fa68b6a1ac8ad6c4bacb5a8a00d51bc6c89f9614a1557b0105d09f8a", + "sha256:31131b54a0c72efc0eb432dc66df546c6a54f2a7d396c9a34cf65ac1c26b1df8", + "sha256:35fae4eaa0eaf9072a5fe2d244a79e65baae4e5ddbe9cc629c5037af800213a2", + "sha256:37320669c364f7d370392af33cc1034b4563da66c22cd3261e3530f4d30dbe4b", + "sha256:37c53f456a1c84566a7d911eec57c4c6280b915ab0600e7671582793cc2769fe", + "sha256:3c9a16a5b4f54d5c0a131f56b0ca65998a9a74958b5b36840c280edba4f8b907", + "sha256:3cb95d23defb2322cddf70efb4af6dac191d95edaa343e8c1f58f1afa4f92ecd", + "sha256:3d6d0b0075731832343eb88229cea4bf39e96f3fc7acbc449aadbdfec2842703", + "sha256:421b224dc4157a0d66625acb5798cf50858cfa06a5232d39a8bd6cf1fa88aca3", + "sha256:4284120c978fb7039901bf6e66832cb3e82ac1b2a107512e735bdb04fd5533ed", + "sha256:42c9e5cd2a48a257b1f2402334b48122501f249b8dcf77082f569f2680f185eb", + "sha256:4534cbfad73cdb1a6dad495530d4186d57d73089c01e9cb0558caab50e46cb3b", + "sha256:48bc2f30d1b2646d675bb8e7778ab59379bf9edc59fe06fb0e7f85ba1271bf44", + "sha256:49911cb533c96d275e31e7eaeb0742ac3f7afe386a1d8c40937814d75039a0f7", + "sha256:499af2aff04f65b4c23de1df08e1d1484a93b23ddaaa0163e44b5070b68356eb", + "sha256:4a0055943074c6c85b77fcc3f42f7c54010a3478daa2ed9d6243d0411c84a4d3", + "sha256:4d700e011156ff112966c6d77faaae125fcaf538f4cec2b9ce8957de82858f0f", + "sha256:50db41e875e36aec11881b8b12bc69c6f4836b7dd9e88a9e5bbf26c2cb3ba6cd", + "sha256:5158ae6d8dd112d003f677039a3613ca7d2592bfe35d7accf23684edb961fc26", + "sha256:56e1ebf6eb4438b8c45cbe7e7b22fc65df0c9efa97a70d3bf2f51e08b19756a5", + "sha256:59641eb1f41cb688b3cb2f98c9003c493a5024325f76b5c02333d08dd972127c", + "sha256:5af43ca7026ead3dd08b261e4f7163cd2cf3ceaa74fa5a81f7b7ea5d445e41d6", + "sha256:5c59bb4ca88e1c69931468bf21f91c8f64d8bf1999eb163b7a2df336f60c304a", + "sha256:633f19d1990b1cf9c67dce9c28bf8b5a18e42785d15548607a100e1236384d5d", + "sha256:6716855f9c669c9e25a185d88e0f169839bf8553d16496796325acd114607c11", + "sha256:6805b007af3557ee6c20dab491b6e55a8177f5b6845d9e6c653374d540366ba7", + "sha256:695dd8231e4f1bfb9a2363775a6e4e56ad9d2058058f817203a49614f4bfe33b", + "sha256:6fa7009c843667868aa8bdb3d68e5ef3d6356dd418b17ed5ca4e1340e82483a5", + "sha256:794cce219bbcb2f36ca220f27d5afd64eaa854e04901bd6f240be156a578b607", + "sha256:7b60caf0fa5f1b49f1062f7dc0f66c7b23e2736bad50fa8296bfb845995e3051", + "sha256:7e903df991f0957e2b271a37bb25d28e0d260c52825ae67507d15ca55a935961", + "sha256:7eb9e6fa8a82c3d2f519f7d3942898a97792e3895569e9501b9431048289b82f", + "sha256:816c2038008ebf50d81171ddfae377f1af9e71d504ec609469dcb0906bfcf2ae", + "sha256:849f461bffa1e7700ccfcb5186df29cd4cdcc9efdb7199cb8b5681dc37045d72", + "sha256:8506d1863f30d26f577c4ed59d2cfd03d2f39569f9cbaa02a764a9de73d312d5", + "sha256:867bebe6be30ee36a836f9b835790762a74f46be8cc339ea57b68dcecdbc1133", + "sha256:97a24c0d0806fcf9a6e75fc18aeb95adc37eb0baf6451f10a2de23ffd815329d", + "sha256:980e7eb7205e01816a92f3290cfc80507957e64656b9271a0dfebb85fe3718c0", + "sha256:9bae431a5985cdb2014be09d37206c288e0d063940cf9539e9769bd2ec26b220", + "sha256:9bebe58f7a160db7838eb70990c704db4bdc2d58bd364290fd69be0587be8bac", + "sha256:9e324a94856d88ecf10f34c102d0ded67d7c3cf644153d77e34a29720ce6aa47", + "sha256:a6e63fc67b23830947b51e0a488992e3c904fce825ead565f3904dcf621d05f7", + "sha256:a72440305f634604827f96810e4469877b89f5c060d6852267650a49b0e3768c", + "sha256:a734511144309ea6e105406633affb74e303a3df07d8a3954f9b01946e27ecb1", + "sha256:a816bff6bf424753e1ac2441902ceaf37ae6718b745a53f6aa1a60c617fb4f5f", + "sha256:a8a7a325b8fe885a6dd91093616c703134f2dacbd869bc519970df3849c2a15b", + "sha256:aa61e3da751a2dfe95aeca603f3ef510071a136ba9905f61ae6cb5d0696271ad", + "sha256:ac5895d5f78dbd8646fe37266655ba4995f9cfec38a86595282fee69e41787da", + "sha256:ac6784cc43aec51a86cf9058a2a343084f8cf46a9281bea5762bfa608127c53b", + "sha256:b1bd8017ef0da935a20106272c5f5ff6b1114add1ccb09cfed1ff7ec5cc01c6d", + "sha256:b2ac288f27a2689d9e39f4cf4df5437a8eb038eaae515169586c77f9f8fb343a", + "sha256:b30cd083ef8af4ba66d9fe5cc75c653ede3f2655f97a032db1a14cc8a006719c", + "sha256:b46ebc463bb45f278a2b94e630061c26e10077cb68d4c93583d8f4199699a5ef", + "sha256:b575393dd431b8e211de35bd593d831dac870172b16e2b7934f3566b8fc89377", + "sha256:b6569f6038133909cd658dbdcc6fc955f791dc47a7f5b55d2066f742253dcbfe", + "sha256:b8b8f88251b84b3877254cdd59c86a1dc6b2b39a03c6c9c067d344ef879562e0", + "sha256:b8eceaa12b7f152b046b67cb053ec2b5b00f73593983de69bc5e63a8aca4a7a8", + "sha256:ba74c239fc6cb6e962eabc420967c7565f3f363b776c89b3df5234caecf1f463", + "sha256:be5a454a95797343d0fb1ed02caecae73a023b1393c112951c84f17ec9f4076c", + "sha256:bef934bd3e024d512c6c0ad1c66eb173f61d9ccb4dbca8d75f727a5604f7c2f6", + "sha256:c1964dcb5f250fd13fac210944b20810d61ef4094a17fbbe502ab7a7eaeeace7", + "sha256:c34e69be4429633fc614febe3127fa03aa418a1abb9252f29d9ba5b3394573a5", + "sha256:c576bd63495150385b8d05eaae775387f378be2fd9805d3ffb4d17c87271fbad", + "sha256:cb8b10405960a8e6801a4702af98ea640130ec6ecfc1208195762de3f5503ba9", + "sha256:cc3645cf6b9246cb8e179db2803e4f0d148211d2a2cf22d5c9b5219111cd91a0", + "sha256:cd35c0be4c46274129dd1678bb911dd4e93d23968b26f4e39cd55bc7cb3b1bac", + "sha256:d540e9c34a61b53b6a374ea108794a48388178f7889d772e364cdbd6df37774c", + "sha256:d72415b0110f7958dd3a5ee98a70166f47bd42ede85e3535669c794d06f57406", + "sha256:dbae37d48ef5a0ab90cfaf2b9312d96f034b1c828208a9cbe25377a1b19ba129", + "sha256:e1c5434db53f3a94a37ad8aedb231901e001995d899af6ed1165f3d27fa04a6a", + "sha256:e75e287787e6adafed9d8c3d3e7647c0b5eb460221f9f92d7dfe48b45ba77c0d", + "sha256:e797c4afb1b7962d3205b1959e1051f7e6bfbba29da44042a9efc2391f1feb38", + "sha256:efd1b2da3ee577fcfa723a214f73186aef9674dd5b28242d90443c7a82722b0f", + "sha256:f5b43ce952a5a31441556c55f5f5f5a8e62c28581a0ff2a2c31c04ef992d73bd", + "sha256:f7194a22a4a24f3561cb6ad1cca9c9b2f2cf34cc8d4bce6d6a24c80960323fa8", + "sha256:f8101ab6de5aa0b26a2b5032bc488d430010c91863e701812d65836b03a12f61", + "sha256:fc33909397481c90de3cec831bfb88d97e220dc91939d996920202f184b4648e", + "sha256:fcc378fa97f02fbcef090b3611305425d72bd1c0afdd13ef4a82dc67d40638b6", + "sha256:ff478682e8ee6dbaa37201bb71bf4a6eee744006ab000e8f5cea05066fc7c845" + ], + "markers": "python_version >= '3.6'", + "version": "==0.12.1" + }, + "dataclassy": { + "hashes": [ + "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", + "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" + ], + "markers": "python_version >= '3.6'", + "version": "==0.11.1" }, "dateparser": { "hashes": [ - "sha256:4431159799b63d8acec5d7d844c5e06edf3d1b0eb2bda6d4cac87134ddddd01c", - "sha256:73ec6e44a133c54076ecf9f9dc0fbe3dd4831f154f977ff06f53114d57c5425e" + "sha256:070b29b5bbf4b1ec2cd51c96ea040dc68a614de703910a91ad1abba18f9f379f", + "sha256:86b8b7517efcc558f085a142cdb7620f0921543fcabdb538c8a4c4001d8178e3" ], "markers": "python_version >= '3.7'", - "version": "==1.1.4" + "version": "==1.1.8" }, "decorator": { "hashes": [ "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" ], + "markers": "python_version >= '3.5'", "version": "==5.1.1" }, + "deprecated": { + "hashes": [ + "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d", + "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.2.13" + }, "distlib": { "hashes": [ "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46", @@ -2356,6 +2626,14 @@ ], "version": "==0.3.6" }, + "eip712": { + "hashes": [ + "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", + "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.2.1" + }, "eip712-structs": { "hashes": [ "sha256:b24400aef07b4d0287fb9bf8ce02b0abbe80c476d1b67222a7c5158df3a3e38d" @@ -2364,45 +2642,50 @@ }, "eth-abi": { "hashes": [ - "sha256:63d16f1f60870afc974cb0a3325fb275fa97822be1723b8878598df25eea8096", - "sha256:c3872e3ac1e9ef3f8c6599aaca4ee536d536eefca63a6892ab937f0560edb656" + "sha256:6949baba61a2c453f0719309ca145e8876a1cbae7ba377c991e67240c13ec7fc", + "sha256:79d258669f3505319e53638d644a75e1c816db552a1ab1927c3063763cc41031" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==3.0.1" + "version": "==4.0.0" }, "eth-account": { "hashes": [ - "sha256:61360e9e514e09e49929ed365ca0e1656758ecbd11248c629ad85b4335c2661a", - "sha256:f4d339f031348ba4de2bdd1fa9872019183a7252117f65b6e8019961d5c09ca8" + "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", + "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" ], "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==0.7.0" + "version": "==0.8.0" + }, + "eth-ape": { + "hashes": [ + "sha256:7f085d8f2bb8cd627ed73696f6fd4f694246a87e67e94055bf2f9408e5aaccf2", + "sha256:dfb0944e8c601fb78689ec26666b2a07311a5a466362d9fa7eeecf6d75eb86ef" + ], + "markers": "python_version < '3.11' and python_version >= '3.8'", + "version": "==0.6.8" }, "eth-bloom": { "hashes": [ - "sha256:5d6d28fa60ee1e25436c45b9593798d7e193224b364ea1a212050055dfa1942c", - "sha256:688317306d87b823da63d24e1ad706defadbd865887ed4bddf7fbd0410b2093c" + "sha256:73576828dff7566b9216403e0898966912f370bae5734241dd3f50ce5664a825", + "sha256:cc86ab9670577996f7fcb8445b7a164ecd211ac91d9c4c2b5a47678623419927" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==1.0.4" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.0.0" }, "eth-hash": { - "extras": [ - "pycryptodome" - ], "hashes": [ - "sha256:3c884e4f788b38cc92cff05c4e43bc6b82686066f04ecfae0e11cdcbe5a283bd", - "sha256:8cde211519ff1a98b46e9057cb909f12ab62e263eb30a0a94e2f7e1f46ac67a0" + "sha256:4d992e885f3ae3901abbe98bd776ba62d0f6335f98c6e9fc60a39b9d114dfb5a", + "sha256:9805075f653e114a31a99678e93b257fb4082337696f4eff7b4371fe65158409" ], - "markers": "python_version >= '3.5' and python_version < '4'", - "version": "==0.3.3" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.5.1" }, "eth-keyfile": { "hashes": [ - "sha256:7a874b179771827ffc7e38403ec412b8b3ff1a8c5cc945169609e799fadc7000", - "sha256:d30597cdecb8ccd3b56bb275cd86fcdc7a279f86eafa92ddc49f66512f0bff67" + "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c", + "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560" ], - "version": "==0.6.0" + "version": "==0.6.1" }, "eth-keys": { "hashes": [ @@ -2421,19 +2704,19 @@ }, "eth-tester": { "hashes": [ - "sha256:751c7991fd40db6610836aafe34c0d4c1ba152cc955e453612c1f4d520ac5f9e", - "sha256:dc9210e22f488c539c8ca80262616b4af6d60d6f28150cd70080e7233ff79856" + "sha256:44a21e8c9c2fa98a5723e3bcd63c174bc2e92cbadd894b75ccae34cea0245e6c", + "sha256:c13252513f2ec7db536a3300e5bc5715a954c683d23cd7fe478192634e2fa26c" ], - "markers": "python_full_version >= '3.6.8' and python_version < '4'", - "version": "==0.8.0b1" + "markers": "python_version < '4' and python_full_version >= '3.6.8'", + "version": "==0.8.0b3" }, "eth-typing": { "hashes": [ - "sha256:177e2070da9bf557fe0fd46ee467a7be2d0b6476aa4dc18680603e7da1fc5690", - "sha256:2d7540c1c65c0e686c1dc357b8376a53caf4e1693724a90191ad133be568841d" + "sha256:323111b3b76c8ceaff01619367aa52806f0264ca0ec1a70d4b9a42e44360f554", + "sha256:e9535e9d524d4c7a0cbd3d9832093cc5001a3e31869e72645674d24c6376d196" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==3.2.0" + "markers": "python_version < '4' and python_full_version >= '3.7.2'", + "version": "==3.3.0" }, "eth-utils": { "hashes": [ @@ -2443,27 +2726,60 @@ "markers": "python_version >= '3.7' and python_version < '4'", "version": "==2.1.0" }, + "ethpm-types": { + "hashes": [ + "sha256:8923693a673862d74ab0ac0f0bd1072e4017e27262f189ec9b9b2007db53360b", + "sha256:b48a83bc4b21ef066ed4f405a357ec2770ab171eed233c25804aec423d798703" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.4.5" + }, + "evm-trace": { + "hashes": [ + "sha256:15ca3d09f1e3d507467c9ddaa6694d11a3e50448183686d62ba433a6816b8d7c", + "sha256:91248145bcc12c4f388a89afc35099a4bec019969228fc175a39815107e2eaf6" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.1.0a18" + }, "exceptiongroup": { "hashes": [ - "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828", - "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec" + "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e", + "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785" + ], + "markers": "python_version >= '3.7'", + "version": "==1.1.1" + }, + "executing": { + "hashes": [ + "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", + "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" ], - "version": "==1.0.4" + "version": "==1.2.0" + }, + "ferveo": { + "hashes": [ + "sha256:624ccfabfd29301a17a0f3822207b31246b69c7ed56b833b8604ceb0c187eaa8", + "sha256:e2c05fbd973f6d71914aadd93f2675d7c45377fe9bdf2c1005e3917d2762d3bf" + ], + "markers": "python_version >= '3.7'", + "version": "==0.1.8" }, "filelock": { "hashes": [ - "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc", - "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4" + "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9", + "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718" ], - "version": "==3.8.0" + "markers": "python_version >= '3.7'", + "version": "==3.12.0" }, "flask": { "hashes": [ - "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b", - "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526" + "sha256:58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf", + "sha256:edee9b0a7ff26621bd5a8c10ff484ae28737a2410d99b0bb9a6850c7fb977aa0" ], "markers": "python_version >= '3.7'", - "version": "==2.2.2" + "version": "==2.2.5" }, "frozenlist": { "hashes": [ @@ -2547,68 +2863,69 @@ }, "greenlet": { "hashes": [ - "sha256:0109af1138afbfb8ae647e31a2b1ab030f58b21dd8528c27beaeb0093b7938a9", - "sha256:0459d94f73265744fee4c2d5ec44c6f34aa8a31017e6e9de770f7bcf29710be9", - "sha256:04957dc96669be041e0c260964cfef4c77287f07c40452e61abe19d647505581", - "sha256:0722c9be0797f544a3ed212569ca3fe3d9d1a1b13942d10dd6f0e8601e484d26", - "sha256:097e3dae69321e9100202fc62977f687454cd0ea147d0fd5a766e57450c569fd", - "sha256:0b493db84d124805865adc587532ebad30efa68f79ad68f11b336e0a51ec86c2", - "sha256:13ba6e8e326e2116c954074c994da14954982ba2795aebb881c07ac5d093a58a", - "sha256:13ebf93c343dd8bd010cd98e617cb4c1c1f352a0cf2524c82d3814154116aa82", - "sha256:1407fe45246632d0ffb7a3f4a520ba4e6051fc2cbd61ba1f806900c27f47706a", - "sha256:1bf633a50cc93ed17e494015897361010fc08700d92676c87931d3ea464123ce", - "sha256:2d0bac0385d2b43a7bd1d651621a4e0f1380abc63d6fb1012213a401cbd5bf8f", - "sha256:3001d00eba6bbf084ae60ec7f4bb8ed375748f53aeaefaf2a37d9f0370558524", - "sha256:356e4519d4dfa766d50ecc498544b44c0249b6de66426041d7f8b751de4d6b48", - "sha256:38255a3f1e8942573b067510f9611fc9e38196077b0c8eb7a8c795e105f9ce77", - "sha256:3d75b8d013086b08e801fbbb896f7d5c9e6ccd44f13a9241d2bf7c0df9eda928", - "sha256:41b825d65f31e394b523c84db84f9383a2f7eefc13d987f308f4663794d2687e", - "sha256:42e602564460da0e8ee67cb6d7236363ee5e131aa15943b6670e44e5c2ed0f67", - "sha256:4aeaebcd91d9fee9aa768c1b39cb12214b30bf36d2b7370505a9f2165fedd8d9", - "sha256:4c8b1c43e75c42a6cafcc71defa9e01ead39ae80bd733a2608b297412beede68", - "sha256:4d37990425b4687ade27810e3b1a1c37825d242ebc275066cfee8cb6b8829ccd", - "sha256:4f09b0010e55bec3239278f642a8a506b91034f03a4fb28289a7d448a67f1515", - "sha256:505138d4fa69462447a562a7c2ef723c6025ba12ac04478bc1ce2fcc279a2db5", - "sha256:5067920de254f1a2dee8d3d9d7e4e03718e8fd2d2d9db962c8c9fa781ae82a39", - "sha256:56961cfca7da2fdd178f95ca407fa330c64f33289e1804b592a77d5593d9bd94", - "sha256:5a8e05057fab2a365c81abc696cb753da7549d20266e8511eb6c9d9f72fe3e92", - "sha256:659f167f419a4609bc0516fb18ea69ed39dbb25594934bd2dd4d0401660e8a1e", - "sha256:662e8f7cad915ba75d8017b3e601afc01ef20deeeabf281bd00369de196d7726", - "sha256:6f61d71bbc9b4a3de768371b210d906726535d6ca43506737682caa754b956cd", - "sha256:72b00a8e7c25dcea5946692a2485b1a0c0661ed93ecfedfa9b6687bd89a24ef5", - "sha256:811e1d37d60b47cb8126e0a929b58c046251f28117cb16fcd371eed61f66b764", - "sha256:81b0ea3715bf6a848d6f7149d25bf018fd24554a4be01fcbbe3fdc78e890b955", - "sha256:88c8d517e78acdf7df8a2134a3c4b964415b575d2840a2746ddb1cc6175f8608", - "sha256:8dca09dedf1bd8684767bc736cc20c97c29bc0c04c413e3276e0962cd7aeb148", - "sha256:974a39bdb8c90a85982cdb78a103a32e0b1be986d411303064b28a80611f6e51", - "sha256:9e112e03d37987d7b90c1e98ba5e1b59e1645226d78d73282f45b326f7bddcb9", - "sha256:9e9744c657d896c7b580455e739899e492a4a452e2dd4d2b3e459f6b244a638d", - "sha256:9ed358312e63bf683b9ef22c8e442ef6c5c02973f0c2a939ec1d7b50c974015c", - "sha256:9f2c221eecb7ead00b8e3ddb913c67f75cba078fd1d326053225a3f59d850d72", - "sha256:a20d33124935d27b80e6fdacbd34205732660e0a1d35d8b10b3328179a2b51a1", - "sha256:a4c0757db9bd08470ff8277791795e70d0bf035a011a528ee9a5ce9454b6cba2", - "sha256:afe07421c969e259e9403c3bb658968702bc3b78ec0b6fde3ae1e73440529c23", - "sha256:b1992ba9d4780d9af9726bbcef6a1db12d9ab1ccc35e5773685a24b7fb2758eb", - "sha256:b23d2a46d53210b498e5b701a1913697671988f4bf8e10f935433f6e7c332fb6", - "sha256:b5e83e4de81dcc9425598d9469a624826a0b1211380ac444c7c791d4a2137c19", - "sha256:be35822f35f99dcc48152c9839d0171a06186f2d71ef76dc57fa556cc9bf6b45", - "sha256:be9e0fb2ada7e5124f5282d6381903183ecc73ea019568d6d63d33f25b2a9000", - "sha256:c140e7eb5ce47249668056edf3b7e9900c6a2e22fb0eaf0513f18a1b2c14e1da", - "sha256:c6a08799e9e88052221adca55741bf106ec7ea0710bca635c208b751f0d5b617", - "sha256:cb242fc2cda5a307a7698c93173d3627a2a90d00507bccf5bc228851e8304963", - "sha256:cce1e90dd302f45716a7715517c6aa0468af0bf38e814ad4eab58e88fc09f7f7", - "sha256:cd4ccc364cf75d1422e66e247e52a93da6a9b73cefa8cad696f3cbbb75af179d", - "sha256:d21681f09e297a5adaa73060737e3aa1279a13ecdcfcc6ef66c292cb25125b2d", - "sha256:d38ffd0e81ba8ef347d2be0772e899c289b59ff150ebbbbe05dc61b1246eb4e0", - "sha256:d566b82e92ff2e09dd6342df7e0eb4ff6275a3f08db284888dcd98134dbd4243", - "sha256:d5b0ff9878333823226d270417f24f4d06f235cb3e54d1103b71ea537a6a86ce", - "sha256:d6ee1aa7ab36475035eb48c01efae87d37936a8173fc4d7b10bb02c2d75dd8f6", - "sha256:db38f80540083ea33bdab614a9d28bcec4b54daa5aff1668d7827a9fc769ae0a", - "sha256:ea688d11707d30e212e0110a1aac7f7f3f542a259235d396f88be68b649e47d1", - "sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f", - "sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd" + "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a", + "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a", + "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43", + "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33", + "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8", + "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088", + "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca", + "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343", + "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645", + "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db", + "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df", + "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3", + "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86", + "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2", + "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a", + "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf", + "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7", + "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394", + "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40", + "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3", + "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6", + "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74", + "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0", + "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3", + "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91", + "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5", + "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9", + "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8", + "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b", + "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6", + "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb", + "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73", + "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b", + "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df", + "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9", + "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f", + "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0", + "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857", + "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a", + "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249", + "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30", + "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292", + "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b", + "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d", + "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b", + "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c", + "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca", + "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7", + "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75", + "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae", + "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b", + "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470", + "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564", + "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9", + "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099", + "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0", + "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5", + "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19", + "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1", + "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526" ], - "version": "==2.0.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==2.0.2" }, "hendrix": { "hashes": [ @@ -2627,11 +2944,11 @@ }, "humanize": { "hashes": [ - "sha256:8830ebf2d65d0395c1bd4c79189ad71e023f277c2c7ae00f263124432e6f2ffa", - "sha256:efb2584565cc86b7ea87a977a15066de34cdedaf341b11c851cfcfd2b964779c" + "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50", + "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916" ], "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "version": "==4.6.0" }, "hyperlink": { "hashes": [ @@ -2642,17 +2959,19 @@ }, "hypothesis": { "hashes": [ - "sha256:8738b9b38c2b2c214d965b07f29312047b970541d848cb97d2a58f79fd61fbe6", - "sha256:b5747497b2b352335e4dc51f1b113cfc90c49ffd174f2036f173edf8799e123a" + "sha256:7940ae975ab48f86d36cedfd0eeccb8e37e99746785f7d6bb17b4a8ec4ec07a8", + "sha256:f67e4925e26cbee4561b492e3845f68559b8a51b08cfaef9b6cf6f6c40c5e091" ], - "version": "==6.58.1" + "markers": "python_version >= '3.7'", + "version": "==6.75.1" }, "identify": { "hashes": [ - "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f", - "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d" + "sha256:17d9351c028a781456965e781ed2a435755cac655df1ebd930f7186b54399312", + "sha256:50b01b9d5f73c6b53e5fa2caf9f543d3e657a9d0bbdeb203ebb8d45960ba7433" ], - "version": "==2.5.9" + "markers": "python_version >= '3.7'", + "version": "==2.5.23" }, "idna": { "hashes": [ @@ -2662,13 +2981,104 @@ "markers": "python_version >= '3.5'", "version": "==3.4" }, + "ijson": { + "hashes": [ + "sha256:00594ed3ef2218fee8c652d9e7f862fb39f8251b67c6379ef12f7e044bf6bbf3", + "sha256:03dfd4c8ed19e704d04b0ad4f34f598dc569fd3f73089f80eed698e7f6069233", + "sha256:09fe3a53e00c59de33b825ba8d6d39f544a7d7180983cd3d6bd2c3794ae35442", + "sha256:0eb838b4e4360e65c00aa13c78b35afc2477759d423b602b60335af5bed3de5b", + "sha256:11bb84a53c37e227e733c6dffad2037391cf0b3474bff78596dc4373b02008a0", + "sha256:11dfd64633fe1382c4237477ac3836f682ca17e25e0d0799e84737795b0611df", + "sha256:1302dc6490da7d44c3a76a5f0b87d8bec9f918454c6d6e6bf4ed922e47da58bb", + "sha256:13f2939db983327dd0492f6c1c0e77be3f2cbf9b620c92c7547d1d2cd6ef0486", + "sha256:158494bfe89ccb32618d0e53b471364080ceb975462ec464d9f9f37d9832b653", + "sha256:183841b8d033ca95457f61fb0719185dc7f51a616070bdf1dcaf03473bed05b2", + "sha256:1a75cfb34217b41136b714985be645f12269e4345da35d7b48aabd317c82fd10", + "sha256:1d64ffaab1d006a4fa9584a4c723e95cc9609bf6c3365478e250cd0bffaaadf3", + "sha256:25919b444426f58dcc62f763d1c6be6297f309da85ecab55f51da6ca86fc9fdf", + "sha256:26b57838e712b8852c40ec6d74c6de8bb226446440e1af1354c077a6f81b9142", + "sha256:27409ba44cfd006901971063d37699f72e092b5efaa1586288b5067d80c6b5bd", + "sha256:2d50b2ad9c6c51ca160aa60de7f4dacd1357c38d0e503f51aed95c1c1945ff53", + "sha256:2f204f6d4cedeb28326c230a0b046968b5263c234c65a5b18cee22865800fff7", + "sha256:2f9d449f86f8971c24609e319811f7f3b6b734f0218c4a0e799debe19300d15b", + "sha256:3b21b1ecd20ed2f918f6f99cdfa68284a416c0f015ffa64b68fa933df1b24d40", + "sha256:3ccc4d4b947549f9c431651c02b95ef571412c78f88ded198612a41d5c5701a0", + "sha256:41e955e173f77f54337fecaaa58a35c464b75e232b1f939b282497134a4d4f0e", + "sha256:424232c2bf3e8181f1b572db92c179c2376b57eba9fc8931453fba975f48cb80", + "sha256:434e57e7ec5c334ccb0e67bb4d9e60c264dcb2a3843713dbeb12cb19fe42a668", + "sha256:47a56e3628c227081a2aa58569cbf2af378bad8af648aa904080e87cd6644cfb", + "sha256:4d4e143908f47307042c9678803d27706e0e2099d0a6c1988c6cae1da07760bf", + "sha256:4e7c4fdc7d24747c8cc7d528c145afda4de23210bf4054bd98cd63bf07e4882d", + "sha256:51c1db80d7791fb761ad9a6c70f521acd2c4b0e5afa2fe0d813beb2140d16c37", + "sha256:5242cb2313ba3ece307b426efa56424ac13cc291c36f292b501d412a98ad0703", + "sha256:535665a77408b6bea56eb828806fae125846dff2e2e0ed4cb2e0a8e36244d753", + "sha256:535a59d61b9aef6fc2a3d01564c1151e38e5a44b92cd6583cb4e8ccf0f58043f", + "sha256:53f1a13eb99ab514c562869513172135d4b55a914b344e6518ba09ad3ef1e503", + "sha256:5418066666b25b05f2b8ae2698408daa0afa68f07b0b217f2ab24465b7e9cbd9", + "sha256:56500dac8f52989ef7c0075257a8b471cbea8ef77f1044822742b3cbf2246e8b", + "sha256:5809752045ef74c26adf159ed03df7fb7e7a8d656992fd7562663ed47d6d39d9", + "sha256:5c93ae4d49d8cf8accfedc8a8e7815851f56ceb6e399b0c186754a68fed22844", + "sha256:5d365df54d18076f1d5f2ffb1eef2ac7f0d067789838f13d393b5586fbb77b02", + "sha256:6def9ac8d73b76cb02e9e9837763f27f71e5e67ec0afae5f1f4cf8f61c39b1ac", + "sha256:6ee9537e8a8aa15dd2d0912737aeb6265e781e74f7f7cad8165048fcb5f39230", + "sha256:6eed1ddd3147de49226db4f213851cf7860493a7b6c7bd5e62516941c007094c", + "sha256:6fd55f7a46429de95383fc0d0158c1bfb798e976d59d52830337343c2d9bda5c", + "sha256:775444a3b647350158d0b3c6c39c88b4a0995643a076cb104bf25042c9aedcf8", + "sha256:79b94662c2e9d366ab362c2c5858097eae0da100dea0dfd340db09ab28c8d5e8", + "sha256:7e0d1713a9074a7677eb8e43f424b731589d1c689d4676e2f57a5ce59d089e89", + "sha256:80a5bd7e9923cab200701f67ad2372104328b99ddf249dbbe8834102c852d316", + "sha256:830de03f391f7e72b8587bb178c22d534da31153e9ee4234d54ef82cde5ace5e", + "sha256:84eed88177f6c243c52b280cb094f751de600d98d2221e0dec331920894889ec", + "sha256:8f20072376e338af0e51ccecb02335b4e242d55a9218a640f545be7fc64cca99", + "sha256:93aaec00cbde65c192f15c21f3ee44d2ab0c11eb1a35020b5c4c2676f7fe01d0", + "sha256:9829a17f6f78d7f4d0aeff28c126926a1e5f86828ebb60d6a0acfa0d08457f9f", + "sha256:986a0347fe19e5117a5241276b72add570839e5bcdc7a6dac4b538c5928eeff5", + "sha256:992e9e68003df32e2aa0f31eb82c0a94f21286203ab2f2b2c666410e17b59d2f", + "sha256:9ecbf85a6d73fc72f6534c38f7d92ed15d212e29e0dbe9810a465d61c8a66d23", + "sha256:a340413a9bf307fafd99254a4dd4ac6c567b91a205bf896dde18888315fd7fcd", + "sha256:a4465c90b25ca7903410fabe4145e7b45493295cc3b84ec1216653fbe9021276", + "sha256:a7698bc480df76073067017f73ba4139dbaae20f7a6c9a0c7855b9c5e9a62124", + "sha256:a8af68fe579f6f0b9a8b3f033d10caacfed6a4b89b8c7a1d9478a8f5d8aba4a1", + "sha256:a8c84dff2d60ae06d5280ec87cd63050bbd74a90c02bfc7c390c803cfc8ac8fc", + "sha256:b3456cd5b16ec9db3ef23dd27f37bf5a14f765e8272e9af3e3de9ee9a4cba867", + "sha256:b3bdd2e12d9b9a18713dd6f3c5ef3734fdab25b79b177054ba9e35ecc746cb6e", + "sha256:b3c6cf18b61b94db9590f86af0dd60edbccb36e151643152b8688066f677fbc9", + "sha256:b3e8d46c1004afcf2bf513a8fb575ee2ec3d8009a2668566b5926a2dcf7f1a45", + "sha256:bced6cd5b09d4d002dda9f37292dd58d26eb1c4d0d179b820d3708d776300bb4", + "sha256:bed8dcb7dbfdb98e647ad47676045e0891f610d38095dcfdae468e1e1efb2766", + "sha256:c85892d68895ba7a0b16a0e6b7d9f9a0e30e86f2b1e0f6986243473ba8735432", + "sha256:c8646eb81eec559d7d8b1e51a5087299d06ecab3bc7da54c01f7df94350df135", + "sha256:cd0450e76b9c629b7f86e7d5b91b7cc9c281dd719630160a992b19a856f7bdbd", + "sha256:ce4be2beece2629bd24bcab147741d1532bd5ed40fb52f2b4fcde5c5bf606df0", + "sha256:d3e255ef05b434f20fc9d4b18ea15733d1038bec3e4960d772b06216fa79e82d", + "sha256:dcec67fc15e5978ad286e8cc2a3f9347076e28e0e01673b5ace18c73da64e3ff", + "sha256:e97e6e07851cefe7baa41f1ebf5c0899d2d00d94bfef59825752e4c784bebbe8", + "sha256:eb167ee21d9c413d6b0ab65ec12f3e7ea0122879da8b3569fa1063526f9f03a8", + "sha256:efee1e9b4f691e1086730f3010e31c55625bc2e0f7db292a38a2cdf2774c2e13", + "sha256:f349bee14d0a4a72ba41e1b1cce52af324ebf704f5066c09e3dd04cfa6f545f0", + "sha256:f470f3d750e00df86e03254fdcb422d2f726f4fb3a0d8eeee35e81343985e58a", + "sha256:f6464242f7895268d3086d7829ef031b05c77870dad1e13e51ef79d0a9cfe029", + "sha256:f6785ba0f65eb64b1ce3b7fcfec101085faf98f4e77b234f14287fd4138ffb25", + "sha256:fd218b338ac68213c997d4c88437c0e726f16d301616bf837e1468901934042c", + "sha256:fe7f414edd69dd9199b0dfffa0ada22f23d8009e10fe2a719e0993b7dcc2e6e2" + ], + "version": "==3.2.0.post0" + }, "importlib-metadata": { "hashes": [ - "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b", - "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313" + "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed", + "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705" ], - "markers": "python_version < '3.10'", - "version": "==5.1.0" + "markers": "python_version >= '3.7'", + "version": "==6.6.0" + }, + "importlib-resources": { + "hashes": [ + "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", + "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a" + ], + "markers": "python_version >= '3.7'", + "version": "==5.12.0" }, "incremental": { "hashes": [ @@ -2679,18 +3089,19 @@ }, "iniconfig": { "hashes": [ - "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", - "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" ], - "version": "==1.1.1" + "markers": "python_version >= '3.7'", + "version": "==2.0.0" }, - "ipfshttpclient": { + "ipython": { "hashes": [ - "sha256:0d80e95ee60b02c7d414e79bf81a36fc3c8fbab74265475c52f70b2620812135", - "sha256:ce6bac0e3963c4ced74d7eb6978125362bb05bbe219088ca48f369ce14d3cc39" + "sha256:2442915417763b62181009259782975fa50bb5eedb97ae97fb614204bf6ecc21", + "sha256:e3015a1a4aa09b3984fb81b9cef4f0772af5a549878b81efb094cda8bb121993" ], - "markers": "python_full_version >= '3.6.2' and python_full_version not in '3.7.0, 3.7.1'", - "version": "==0.8.0a2" + "markers": "python_version >= '3.8'", + "version": "==8.12.1" }, "itsdangerous": { "hashes": [ @@ -2700,6 +3111,14 @@ "markers": "python_version >= '3.7'", "version": "==2.1.2" }, + "jedi": { + "hashes": [ + "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e", + "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612" + ], + "markers": "python_version >= '3.6'", + "version": "==0.18.2" + }, "jinja2": { "hashes": [ "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", @@ -2710,11 +3129,19 @@ }, "jsonschema": { "hashes": [ - "sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3", - "sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7" + "sha256:4b88fe4edfd5ddc3364fca04b1554d4dd5bc67d2eb73c8795ab2d9e46a032643", + "sha256:b75063d9d6a5f5023c3d9bb89863a9cc1aaf34ccbd4dcf58ee5c5f23c1871b2a" ], - "markers": "python_version >= '3.7'", - "version": "==4.17.1" + "markers": "python_version >= '3.8'", + "version": "==4.18.0a6" + }, + "jsonschema-specifications": { + "hashes": [ + "sha256:1f84ccccce27abf263904363aa59171e9f889c152965f9e71bc05dfc520502fb", + "sha256:a743d6acd3d6ce0aa4d691b001be145eb8d0075d5beb3ce77c4e17cb13ebf158" + ], + "markers": "python_version >= '3.8'", + "version": "==2023.3.6" }, "lru-dict": { "hashes": [ @@ -2779,49 +3206,59 @@ }, "markupsafe": { "hashes": [ - "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", - "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", - "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", - "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", - "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", - "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", - "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", - "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", - "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", - "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", - "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", - "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", - "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", - "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", - "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", - "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", - "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", - "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", - "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", - "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", - "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", - "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", - "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", - "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", - "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", - "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", - "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", - "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", - "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", - "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", - "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", - "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", - "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", - "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", - "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", - "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", - "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", - "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", - "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", - "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" + "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", + "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", + "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", + "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", + "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", + "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", + "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", + "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", + "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", + "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", + "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", + "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", + "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", + "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", + "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", + "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", + "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", + "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", + "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", + "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", + "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", + "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", + "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", + "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", + "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", + "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", + "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", + "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", + "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", + "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", + "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", + "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", + "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", + "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", + "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", + "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", + "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", + "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", + "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", + "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", + "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", + "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", + "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", + "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", + "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", + "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", + "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", + "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", + "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", + "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" ], "markers": "python_version >= '3.7'", - "version": "==2.1.1" + "version": "==2.1.2" }, "marshmallow": { "hashes": [ @@ -2831,6 +3268,14 @@ "markers": "python_version >= '3.7'", "version": "==3.19.0" }, + "matplotlib-inline": { + "hashes": [ + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" + ], + "markers": "python_version >= '3.5'", + "version": "==0.1.6" + }, "maya": { "hashes": [ "sha256:7f53e06d5a123613dce7c270cbc647643a6942590dba7a19ec36194d0338c3f4", @@ -2846,62 +3291,79 @@ "markers": "python_version >= '3.5'", "version": "==0.20" }, + "morphys": { + "hashes": [ + "sha256:76d6dbaa4d65f597e59d332c81da786d83e4669387b9b2a750cfec74e7beec20" + ], + "version": "==1.0" + }, "msgpack": { "hashes": [ - "sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467", - "sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae", - "sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92", - "sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef", - "sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624", - "sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227", - "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88", - "sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9", - "sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8", - "sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd", - "sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6", - "sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55", - "sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e", - "sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2", - "sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44", - "sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6", - "sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9", - "sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab", - "sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae", - "sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa", - "sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9", - "sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e", - "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250", - "sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce", - "sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075", - "sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236", - "sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae", - "sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e", - "sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f", - "sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08", - "sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6", - "sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d", - "sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43", - "sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1", - "sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6", - "sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0", - "sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c", - "sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff", - "sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db", - "sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243", - "sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661", - "sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba", - "sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e", - "sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb", - "sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52", - "sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6", - "sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1", - "sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f", - "sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da", - "sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f", - "sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c", - "sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8" - ], - "version": "==1.0.4" + "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164", + "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b", + "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c", + "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf", + "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd", + "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d", + "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c", + "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a", + "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e", + "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd", + "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025", + "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5", + "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705", + "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a", + "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d", + "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb", + "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11", + "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f", + "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c", + "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d", + "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea", + "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba", + "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87", + "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a", + "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c", + "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080", + "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198", + "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9", + "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a", + "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b", + "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f", + "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437", + "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f", + "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7", + "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2", + "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0", + "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48", + "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898", + "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0", + "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57", + "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8", + "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282", + "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1", + "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82", + "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc", + "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb", + "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6", + "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7", + "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9", + "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c", + "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1", + "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed", + "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c", + "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c", + "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77", + "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81", + "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a", + "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3", + "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086", + "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9", + "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f", + "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b", + "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d" + ], + "version": "==1.0.5" }, "msgpack-python": { "hashes": [ @@ -2909,268 +3371,412 @@ ], "version": "==0.5.6" }, - "multiaddr": { - "hashes": [ - "sha256:30b2695189edc3d5b90f1c303abb8f02d963a3a4edf2e7178b975eb417ab0ecf", - "sha256:5c0f862cbcf19aada2a899f80ef896ddb2e85614e0c8f04dd287c06c69dac95b" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.0.9" + "msgspec": { + "hashes": [ + "sha256:03ddc8c518afbea4fb89afb587d77f11d00909f003966d437f31fb8fffdfac28", + "sha256:1c8f7e631fad9d5a33fcfb0f2a27eb86dc0390e91d6b51c95a604b7ccbc264f1", + "sha256:1fc99f0929fa91cc53fa35f59be366d67f116c2b7f0f3b29dc60e3179f6fb205", + "sha256:2039451b22813af2fd5cbe99eaecfc318d64fcee5af0ce5b3d5cce12427d24cd", + "sha256:26bcb3a69b348be2757ab19e86038e586920522a99d49d358c12890fbcfb6aa8", + "sha256:3288b65ee7c78d08f32003a8b5ca72fff12c6a7400bd35f9d65630c9d58efce2", + "sha256:4f13e47803aedbb32c9375317fedbd20af3397dc024d311eebdc635c07f6f908", + "sha256:57a79cfa306fda2c66f4fc7eb72836c0f78fd9a6d748d028960b387797f0381b", + "sha256:580464c7ca5c47a1422973c853301bbfd3d1a4184bdb6bddb73b5df094d8fc55", + "sha256:587371a65798a0f0182d0a7a4b7c4b87a5f46e25e8821c6474b3f717dcfcad14", + "sha256:59491de3566c7789bdb0a152f305e150a6ba3e825af471680b05a029a664a89a", + "sha256:78361dadef4b993b8c4a887d3d267b89b0ea0846259eadf2fe993659e4dbf9c8", + "sha256:7e50885274e2041e49ec5d7cce8e59768f599c27dfb4c046edaf9ab25b1fddc2", + "sha256:87c4cd1bb197be11f89ad779038c8989d6ffcb8b360705107f034e4d2783c0a6", + "sha256:8927efaf506e5a8f9ffe76602e08d30a80c19b38d50a7e783887c317573ecd80", + "sha256:8b8a766b9f3e7f87946965a8ffc6e72f7a3ec8d031b3168df16762bfd3d03205", + "sha256:8ed61cad6b20f0218a8d239294c4b30b4e82854871ba0434cf0d54497043bffe", + "sha256:907ed4305a97b50248e6b86e79ddc8edcf9b718eab0c93a6b46d673c5edbe3a4", + "sha256:94fc3d9a8835f18c18b48fdf49f7d445184061bfbc457a6623a4eb1f74ebe806", + "sha256:a0a3908309581e4e632457fac1938fec7fd84121396ddab6ddca37784e6db068", + "sha256:a12e704786256431d559c2027d6135a64f2339f009118d97906709cd8409e7ac", + "sha256:b965c14851f146537f1b732cd2ed16c38e0c59662f23b72d396aee21e81aed4f", + "sha256:d03861f0d271b696faefb1a885ea0c7dc7db70baaa05c7f18086f2b9085d1cb8", + "sha256:d469aede5d986223d6ec9a8d0713156f96fd6b427b12e14f81d26627a47687b9", + "sha256:d85e9bfd1441216010c084626d968e96a3d88d762959c5eb430de62076cd7fe9", + "sha256:decd1d2015d340ebfd58f29ed2916e118ca255b6a94fc1787a236a2654dfd8ff", + "sha256:eee59e73982ca0d730f8d4e8fb5f01da9fa466490dea43ea1bcfa23b8a8bbc0d", + "sha256:f97006b9c9e24e9677fb84f43586fb4d03a72eb426199656a1c24775c62b9fe4", + "sha256:ff7c987330e2be62eb8811bc2da33507e8edeb761f4fd343f2fa5fdafce4f989" + ], + "markers": "python_version >= '3.8'", + "version": "==0.14.2" }, "multidict": { "hashes": [ - "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60", - "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c", - "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672", - "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51", - "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032", - "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2", - "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b", - "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80", - "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88", - "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a", - "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d", - "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389", - "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c", - "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9", - "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c", - "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516", - "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b", - "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43", - "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee", - "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227", - "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d", - "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae", - "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7", - "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4", - "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9", - "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f", - "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013", - "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9", - "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e", - "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693", - "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a", - "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15", - "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb", - "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96", - "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87", - "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376", - "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658", - "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0", - "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071", - "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360", - "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc", - "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3", - "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba", - "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8", - "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9", - "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2", - "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3", - "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68", - "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8", - "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d", - "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49", - "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608", - "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57", - "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86", - "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20", - "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293", - "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849", - "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937", - "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d" - ], - "markers": "python_version >= '3.7'", - "version": "==6.0.2" - }, - "mypy": { - "hashes": [ - "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d", - "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6", - "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf", - "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f", - "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813", - "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33", - "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad", - "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05", - "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297", - "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06", - "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd", - "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243", - "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305", - "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476", - "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711", - "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70", - "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5", - "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461", - "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab", - "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c", - "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d", - "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135", - "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93", - "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648", - "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a", - "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb", - "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3", - "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372", - "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb", - "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef" + "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b", + "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031", + "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0", + "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce", + "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda", + "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858", + "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5", + "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8", + "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22", + "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac", + "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e", + "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6", + "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5", + "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0", + "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11", + "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a", + "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55", + "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341", + "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b", + "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704", + "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b", + "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1", + "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621", + "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d", + "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5", + "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7", + "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac", + "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d", + "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef", + "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0", + "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f", + "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02", + "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b", + "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37", + "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23", + "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d", + "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065", + "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86", + "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6", + "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded", + "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4", + "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7", + "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a", + "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17", + "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3", + "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21", + "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24", + "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940", + "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac", + "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c", + "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422", + "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628", + "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0", + "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf", + "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e", + "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677", + "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f", + "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c", + "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4", + "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b", + "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747", + "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0", + "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01", + "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8", + "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9", + "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64", + "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d", + "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0", + "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52", + "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1", + "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae", + "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d" ], - "index": "pypi", - "version": "==0.991" + "markers": "python_version >= '3.6'", + "version": "==5.2.0" }, "mypy-extensions": { "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" + "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd" ], - "version": "==0.4.3" - }, - "netaddr": { - "hashes": [ - "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac", - "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243" - ], - "version": "==0.8.0" + "markers": "python_version >= '2.7'", + "version": "==0.4.4" }, "nodeenv": { "hashes": [ "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e", "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", "version": "==1.7.0" }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "9ed0186060fa59da827b2e49f70530ce65745054" + "ref": "20d750a1c6869beee8a6d137cea7e3c7d3e1f108" }, "nucypher-core": { "hashes": [ - "sha256:0bcfb9bec7cef486aaf8b980f628561eb57a675ca192f2832e70bb6b2fa17cdf", - "sha256:0bdef5106c42310dae46444256cf6f031759df2e8b7f18560f059e3a4bd469a9", - "sha256:100873b3eaa29e4392b0f6c35ddcf2465f554483a54b2f36cbfe3b345a445ed9", - "sha256:1879b053ee5b02ea2379518d3a6062706ac3a33f758757e35a2d5a2621b8af2c", - "sha256:1c4261c4f096bfb27da99da52d75312565d57caa298788f28d6945adbea7fb0e", - "sha256:281fff3bb92a0a222e6cf7d3c0622ba1bf57961997886e98a03a26e9ebb59dcb", - "sha256:3cc809505645663306cbaa9f37668822b32a8bcddcc2744c748a2736cfda17db", - "sha256:3d390d6c0ecd118b1d3cd1fa7f2cdc3669f7700a3c8593013cb1e799ac9e79b3", - "sha256:5d8428198e8307678bb8d79c8d0a0df8bfb2df784fa33ee0e29d2a3cae1a163d", - "sha256:8cfb67b509e0a2860f9209bd7945c40540de8b84f0f693129d53cc710ba9cfb1", - "sha256:9317e020880ba4a66759c5ecdef9a4d16d1eb25e16761afa5d91a80616108c8a", - "sha256:9dfb766534da38df4290c35be0d76e3ed61a5968f7af31b2e3d3c69cbf74be16", - "sha256:cfc6458f27dead92c9d2c7a75a55ebf05ce6019c49e3163204c4e9601f231c87", - "sha256:d2eb7a8bb8d9ecbd68735b2a504a1b3d15e702c275515d8266a36c925e954ae0", - "sha256:df1b8807415bbcb8b839b954046f486c8e7b03d8f86647e456de7ca5a2f86cc4", - "sha256:ef6e1c10d2faeb6c26829a5f6e5a49b720d73950bd4cc9866fef19b950148c75" - ], - "version": "==0.4.1" + "sha256:010acfa1b5db8672ecab6d423f115d1f26c893a9d46cab21be5858e07cedb97b", + "sha256:2edf1ff64f4c26be39939271b0c49f0e6dca007f568be4e2364631e9b731f69b", + "sha256:338d909da9ee7ae194b13ba771ff607ce36d0660d365e6dd9368343da3871fbc", + "sha256:514e7c861b05adc50a7bd748ea952df5870b1dfca77cfc2e5763bc0662f0ce59", + "sha256:52bfe3ed2bdd53cae0a88299b4e64510223e6debc5ca51989c5b8f93c9d40598", + "sha256:610ce729317c5c8817f60943660f4dd8464ac64adb95ea808c009c8ef92fc43f", + "sha256:679169a79e1ebd51bb2f7db50feef60522b658237b925660e97b83bc5cb31897", + "sha256:682c01979482a74186ef7fff2f9a717f319099e9d29874713f4f989658739cd6", + "sha256:79524ea772f608438d3a755980a79301717ad33fb1fca7c5e0d51a950faa53f0", + "sha256:9a3e08b62dcc5a943c6a08775a4597da80fd4be9fc380adb84d48a96cee7f59e", + "sha256:d0208752ecd41b69f8b494d8f515c2bf67be53179e1b75cd1770e15be9431194", + "sha256:d216c5bdb811c707c2c80cc66912373e5cb09eb148509d4a0fe8d080a78aab08", + "sha256:dbb9372629f3f5a9a19084c1f9b24814c6b055ffcbde0f0fcbbc7b488d1064f5", + "sha256:dc4e9c23dbca27cfbd8eac2796776ece4c4320a8efd174997ea0efdc3fb12c55", + "sha256:e63d7f4a25f6475c97e80f9e32c9c5056c8e5f51a3b1af1db73e8f2b0978d13b", + "sha256:e8007b202704512678f16d225789d843535b38cf5bcda2442c1510eb7e16e4cc" + ], + "version": "==0.7.0" + }, + "numpy": { + "hashes": [ + "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187", + "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812", + "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7", + "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4", + "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6", + "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0", + "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4", + "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570", + "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4", + "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f", + "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80", + "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289", + "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385", + "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078", + "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c", + "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463", + "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3", + "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950", + "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155", + "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7", + "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c", + "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096", + "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17", + "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf", + "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4", + "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02", + "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c", + "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b" + ], + "markers": "python_version >= '3.8'", + "version": "==1.24.3" }, "packaging": { "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" ], - "markers": "python_version >= '3.6'", - "version": "==21.3" + "markers": "python_version >= '3.7'", + "version": "==23.1" + }, + "pandas": { + "hashes": [ + "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813", + "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792", + "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406", + "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373", + "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328", + "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996", + "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf", + "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6", + "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7", + "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc", + "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1", + "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23", + "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a", + "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51", + "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572", + "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31", + "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5", + "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a", + "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003", + "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d", + "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354", + "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee", + "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa", + "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0", + "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9", + "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", + "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.3" }, "parsimonious": { "hashes": [ - "sha256:3add338892d580e0cb3b1a39e4a1b427ff9f687858fdd61097053742391a9f6b" + "sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1" ], - "version": "==0.8.1" + "version": "==0.9.0" + }, + "parso": { + "hashes": [ + "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", + "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" + ], + "markers": "python_version >= '3.6'", + "version": "==0.8.3" }, "pendulum": { "hashes": [ - "sha256:0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394", - "sha256:1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b", - "sha256:29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a", - "sha256:2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087", - "sha256:318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739", - "sha256:33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269", - "sha256:3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0", - "sha256:4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5", - "sha256:7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be", - "sha256:94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7", - "sha256:9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3", - "sha256:b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207", - "sha256:b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe", - "sha256:c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360", - "sha256:c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0", - "sha256:db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b", - "sha256:de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052", - "sha256:e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002", - "sha256:f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116", - "sha256:f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db", - "sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b" + "sha256:075de865e31876d39831f5ce224849b4ced217b0368d58ab1a155622494031b8", + "sha256:0814e93270e5370ee2b5342ce4e91c4162d06b122de81fac88f92e5d8504f9e5", + "sha256:0876f05544a08a73df5c68d6adfe86b080bac91ba95c5c65396fb92b6d3b8dea", + "sha256:096d2b20fcf0f9f3bb31a04c6ecff9cb4fd7ea5755b47c32fc454854a5b56320", + "sha256:0b4055f1ae554a74dce460af10deabcd3b1e1470e9c7b6644cecf3ff79498780", + "sha256:236cd4ab81b5753780e75a4aecbcdc86b8c28a0ad03b00496bea5ac4ad3fa93f", + "sha256:27df9ea0030f51213e17b97874b06af873441644f14de1b112c80e079b86ee92", + "sha256:2c94b376f5c0f4ddcdcf020a95993fe0c6cdb115fc065956ad975934215e842b", + "sha256:2cf23d1955af25b2bc76c1ab16ac5e71817729c7fa489264fccaeab7d72cce18", + "sha256:367dd5735120060abfc636a7d72040d6d38cd4d7052f9206eecaa0eef5fdf8c0", + "sha256:3be6b9500863ec9502609ede68172d4831e4254df72d8bd76b523c4f7c198068", + "sha256:46947e8455833d8e166f732d7faecabbf45b81bf42443829fd267622d2ab21ea", + "sha256:476b9112a340c2c38f6a880c76b75c5aabc9131d5a7f2a9b5a1c950a77fb802d", + "sha256:4cfc02645b6afb9a2781f52eb35de912f75fc4d6bb502b856697d522d9158d2a", + "sha256:4d2d891ad280e8cad1174bbe06e15ad3c1110880cf1db3fc1bb4359c44ab137e", + "sha256:4e5eef051882aa0330c146321ea542797f817376cbc001356a7c98126532dc60", + "sha256:5025d9fb9ddbdfdfae60194bb7d6be3bfea2f2361f098687637712e33c359153", + "sha256:5125077b639167aa386a67f87cb6e0717864be10ea019fbff8ee0125fdb55ede", + "sha256:51baeb11abdfa4ac33c229f7488948ae2fcefcd229479c4c1a3a10fb63167535", + "sha256:59fc9f4fff307dcb5e348793161683ea3b78efe431058984265a872544be887e", + "sha256:669007b0f75e609e2794bc4e71ae47b8def25ca1cddba115216ff2b458675b71", + "sha256:6988901ac209d5fcd50da5e853273dd05d973b23c6f72a4a154039316d6b114f", + "sha256:6b332eb3b0084b7d87566ed858e1f27532495be6b509907d47ed2d22e155ffe4", + "sha256:6f6b4d0c75b0e9372320ae501f7f27c44c47b8ebc2b732884be811459bbcda28", + "sha256:833d7e344469625f30a1b5e883f2c8af99b0e35bbae82fb21a6e9ac6094576c6", + "sha256:836180c9800a2246005eef378850d8af8a66cfab06d80c10bafedefc94def872", + "sha256:8ba87243c01e51ebcad88b370f33ab6f09704c6015083f9238198ce1e1bff46c", + "sha256:9512f85d02727db3600e601757e6e96428c5a35e35e60bbce0e11346998e3b9d", + "sha256:9e803c0f383a23bae88e7578ef9dcee987e7ef824c5891af82142e8d7e9b0b9a", + "sha256:a34d2c33ce5da7b17c0d04144979af4631dee77d4437a1fd74d9668f6d1831cd", + "sha256:a45b94dc7d115b56f90490fc3960c579a3d8f73731a37fb0d25f00550faa374e", + "sha256:aadbfa235875b98ef7769843b5d3174e418500a20004663cb1fe341433793899", + "sha256:b05eb3cce1ff9a7d63e82887a4f9538d4aa543e7c94b5e33f15caee89c680938", + "sha256:b558fabaa96d20541ea3c88fcfbd25e8440def6f23ae49d649600228887970f6", + "sha256:bd244c062c25ac3fc484813e76c75f05373170786c4e34c2e42f57277335b919", + "sha256:bd8e55be4b3596fd29f1567b4b49ed8a536f3aadcc4a3f7f96073e00ebadefd7", + "sha256:cb830c7aac70b380ed829e52c825d4854bea2d970179abd12eb6c363d48b758c", + "sha256:cdd95883421ae159d4b9f7343efb8252c7be39af753cabb331a20c8b351830bd", + "sha256:d08d408a3654f9b4ad2db8d76a5863a29a5fcf2c81bcaf3a89545e7ac041319b", + "sha256:e26a422d7e987690207d2e73a5febec3c08bee722ebe69ae52352eb60459d086", + "sha256:e611af03dae4a78debdfcfc2435c61734af761d185dccfbd14fd67a770d03457", + "sha256:ebc402a51dcbed5d335779b3947b17f0f9178fb8d9c01ed5fb80e9efcf18c8a8", + "sha256:ec4fc633c850aef300e58b55fffbd9b0156ffe120653f051d25dceda022f4a73", + "sha256:f15c13e938879595f9e1a5b533f5d47206977d4e811adf4b91e5512b742970e8", + "sha256:f5f69fe307e36cb434d999b82870b2be416eced3a0046eef85e8e43952b881b9", + "sha256:f81f45d0d554d33134c2e9aa91e9bf26dbae23d5689daba44a75fd780a711ff9", + "sha256:feaa3aa442d585dde0e8a0b3c6930e9e7cb56d85f6c759e8c2581a0dece69882", + "sha256:ffaf7daead2a86f3f48da7fc0fe1c2f4f3be665245804e988b07aba79f4ef41c" + ], + "markers": "python_version >= '3.7' and python_version < '4.0'", + "version": "==3.0.0a1" + }, + "pexpect": { + "hashes": [ + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + ], + "version": "==4.8.0" + }, + "pickleshare": { + "hashes": [ + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" + ], + "version": "==0.7.5" + }, + "pkgutil-resolve-name": { + "hashes": [ + "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", + "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.1.2" + "markers": "python_version >= '3.6'", + "version": "==1.3.10" }, "platformdirs": { "hashes": [ - "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7", - "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10" + "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4", + "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335" ], - "version": "==2.5.4" + "markers": "python_version >= '3.7'", + "version": "==3.5.0" }, "pluggy": { "hashes": [ "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" ], + "markers": "python_version >= '3.6'", "version": "==1.0.0" }, "pre-commit": { "hashes": [ - "sha256:51a5ba7c480ae8072ecdb6933df22d2f812dc897d5fe848778116129a681aac7", - "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959" + "sha256:218e9e3f7f7f3271ebc355a15598a4d3893ad9fc7b57fe446db75644543323b9", + "sha256:733f78c9a056cdd169baa6cd4272d51ecfda95346ef8a89bf93712706021b907" ], "index": "pypi", - "version": "==2.20.0" + "version": "==3.3.1" }, "prometheus-client": { "hashes": [ - "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1", - "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2" + "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab", + "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48" ], - "version": "==0.15.0" + "markers": "python_version >= '3.6'", + "version": "==0.16.0" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b", + "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.0.38" }, "protobuf": { "hashes": [ - "sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf", - "sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f", - "sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f", - "sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7", - "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996", - "sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067", - "sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c", - "sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7", - "sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9", - "sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c", - "sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739", - "sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91", - "sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c", - "sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153", - "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9", - "sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388", - "sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e", - "sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab", - "sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde", - "sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531", - "sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8", - "sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7", - "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20", - "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3" - ], - "markers": "python_version >= '3.7'", - "version": "==3.20.1" + "sha256:0a3d1a3f746cc5209163bab06f4f56b77fb9d523beedd42e04e6334bb653fd84", + "sha256:139682756712146b24fb276c800dc7d05057136b331b66cd2a31f68e55dbac6f", + "sha256:33673619f4f28b04f4e99b578ceb99b335b31ee5f5a2cc513a9d32284ff8d956", + "sha256:3979ea994d7bf9fcbc7541b7cf2331c0850896d20db099d9d22cc6f01627ee68", + "sha256:499e5884e71719de45baeec980ea2c46a4fabe83a240363ea3272507f4819771", + "sha256:6d7c54c6686462f06b0f19d5c4cc1ce86be247493b89ed6cdb37f7b5f02f26ee", + "sha256:87af9d12258b4f3602dc26417db9dc89204d029647d5cf0de7d9d819fbd5b35c", + "sha256:a24d1498edef52e4a17f67b7640e1973f9affc168f15fe6d9eff4cb1ede785ea", + "sha256:a49938ad67a8652d64b662be6841e29764cd44d6db7e0be2f8c9d7a68c53b129", + "sha256:ba9e9279844e49a734accb0696f929615c59226176d585a341ccc51e85431e39", + "sha256:be3791a2694b96008334e8072845eaf5c7d4bce4564cf126ecbc34d3bf5abcdc", + "sha256:cf6904fabb6ef00c8bd0b666b196584af333442b05c044c492a09f743d31db6f", + "sha256:e7e5bca11a5ff3bc4919aaf80bc83781b6ea093b77f60743f766f1af2aec68e4" + ], + "markers": "python_version >= '3.7'", + "version": "==4.23.0rc2" + }, + "ptyprocess": { + "hashes": [ + "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", + "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" + ], + "version": "==0.7.0" + }, + "pure-eval": { + "hashes": [ + "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", + "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" + ], + "version": "==0.2.2" }, "py": { "hashes": [ "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.11.0" }, + "py-cid": { + "hashes": [ + "sha256:22f432cc6fb68d12a9c35dbdc92c95484fc49e31dfcb9e0efb0082233c5394e3", + "sha256:7c48a6ee0bc50fd114d4b24849cd689a31d3ad5bdf8fa073bf68f846fd58c5da" + ], + "version": "==0.3.0" + }, "py-ecc": { "hashes": [ "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", @@ -3181,54 +3787,63 @@ }, "py-evm": { "hashes": [ - "sha256:2fd960df8b2dad195eb9d732e4fcaca52bb56d4e9862ba76f0a9c50aa0a21952", - "sha256:d02b1a18c0162849991c25e46181e50233b0de5298b53f6da22c32b12a79f42a" + "sha256:2539de6d05c67fa146eacee973812c20b7574f9a741d70fc7b904199f90065d7", + "sha256:42e375ee5a9fcfffa2be804d951b0c46b028a9a1fe1f3ce34d279003dc0677a5" + ], + "version": "==0.6.1a2" + }, + "py-geth": { + "hashes": [ + "sha256:584ba92f227249c65f102f5734e48fc80e48702889e16623d5db2b43ba69a11c", + "sha256:9faca7562912fd1d43ac829b5f19f2055cd94ea49c4532b50699d74d7b8a1782" + ], + "markers": "python_version >= '3'", + "version": "==3.12.0" + }, + "py-multibase": { + "hashes": [ + "sha256:2677c1fafcc0ae15ddb9c7f444c5becc2530b3889124fd4fa2959ddfefb8c15b", + "sha256:d28a20efcbb61eec28f55827a0bf329c7cea80fffd933aecaea6ae8431267fe4" + ], + "version": "==1.0.3" + }, + "py-multicodec": { + "hashes": [ + "sha256:55b6bb53088a63e56c434cb11b29795e8805652bac43d50a8f2a9bcf5ca84e1f", + "sha256:83021ffe8c0e272d19b5b86bc5b39efa67c8e9f4735ce6cafdbc1ace767ec647" ], - "version": "==0.6.1a1" + "version": "==0.2.1" + }, + "py-multihash": { + "hashes": [ + "sha256:a0602c99093587dfbf1634e2e8c7726de39374b0d68587a36093b4c237af6969", + "sha256:f0ade4de820afdc4b4aaa40464ec86c9da5cae3a4578cda2daab4b0eb7e5b18d" + ], + "version": "==0.2.3" }, "py-solc-x": { "hashes": [ - "sha256:24b96e20d725e256cc6b03ec2bde040321d1c2cc83ddff5d51f8b52d226e6f3e", - "sha256:73a80a590609ba746609c365fb738b7b33695f6afaff80bb79cca70d596e18c0" + "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", + "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" ], - "index": "pypi", - "version": "==0.10.1" + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==1.1.1" }, "pyasn1": { "hashes": [ - "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", - "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", - "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", - "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", - "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", - "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", - "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", - "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", - "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", - "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", - "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" - ], - "version": "==0.4.8" + "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57", + "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==0.5.0" }, "pyasn1-modules": { "hashes": [ - "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", - "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", - "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", - "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", - "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", - "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", - "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", - "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", - "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", - "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", - "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", - "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", - "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" - ], - "version": "==0.2.8" + "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c", + "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==0.3.0" }, "pychalk": { "hashes": [ @@ -3245,34 +3860,84 @@ }, "pycryptodome": { "hashes": [ - "sha256:0198fe96c22f7bc31e7a7c27a26b2cec5af3cf6075d577295f4850856c77af32", - "sha256:0e45d2d852a66ecfb904f090c3f87dc0dfb89a499570abad8590f10d9cffb350", - "sha256:1047ac2b9847ae84ea454e6e20db7dcb755a81c1b1631a879213d2b0ad835ff2", - "sha256:13b3e610a2f8938c61a90b20625069ab7a77ccea20d65a9a0f926cc0cc1314b1", - "sha256:1fc16c80a5da8231fd1f953a7b8dfeb415f68120248e8d68383c5c2c4b18708c", - "sha256:265bfcbbf20d58e6871ce695a7a08aac9b41a0553060d9c05363abd6f3391bdd", - "sha256:2bf2a270906a02b7b255e1a0d7b3aea4f06b3983c51ddec1673c380e0dff5b30", - "sha256:47c71a0347847b747ba1349767b16cde049bc36f21654eb09cc82306ef5fdcf8", - "sha256:48d99869d58f3979d72f6fa0c50f48d16f14973bc4a3adb0ce3b8325fdd7e223", - "sha256:4d950ed2a887905b3fa709b86be5a163e26e1b174703ed59d34eb6832f213222", - "sha256:54d807314c66785c69cd25425933d4bd4c23547a593cdcf49d962fa3e0081336", - "sha256:58172080cbfaee724067a3c017add6a1a3cc167bbc8478dc5f2e5f45fa658763", - "sha256:5df582f2112dd72331de7e567837e136a9629181a8ab69ef8949e4bc294a0b99", - "sha256:6016269bb56caf0327f6d42e7bad1247e08b78407446dff562240c65f85d5a5e", - "sha256:63165fbdc247450017eb9ef04cfe15cb3a72ca48ffcc3a3b75b08c0340bf3647", - "sha256:69adf32522b75968e1cbf25b5d83e87c04cd9a55610ce1e4a19012e58e7e4023", - "sha256:856ebf822d08d754af62c22e2b93626509a72773214f92db1551e2b68d9e2a1b", - "sha256:95069fd9e2813668a2713a1efcc65cc26d2c7e741401ac46628f1ec957511f1b", - "sha256:b12a88566a98617b1a34b4e5a805dff2da98d83fc74262aff3c3d724d0f525d6", - "sha256:c69e19afc734b2a17b9d78b7bcb544aabd5a52ff628e14283b6e9404d27d0517", - "sha256:c82e3bc1e70dde153b0956bffe20a15715a1fe3e00bc23e88d6973eda4505944", - "sha256:d1daec4d31bb00918e4e178297ac6ca6f86ec4c851ba584770533ece554d29e2", - "sha256:d67a2d2fe344953e4572a7d30668cceb516b04287b8638170d562065e53ee2e0", - "sha256:dab9359cc295160ba96738ba4912c675181c84bfdf413e5c0621cf00b7deeeaa", - "sha256:e061311b02cefb17ea93d4a5eb1ad36dca4792037078b43e15a653a0a4478ead", - "sha256:e750a21d8a265b1f9bfb1a28822995ea33511ba7db5e2b55f41fb30781d0d073" - ], - "version": "==3.16.0" + "sha256:04779cc588ad8f13c80a060b0b1c9d1c203d051d8a43879117fe6b8aaf1cd3fa", + "sha256:121d61663267f73692e8bde5ec0d23c9146465a0d75cad75c34f75c752527b01", + "sha256:1a30f51b990994491cec2d7d237924e5b6bd0d445da9337d77de384ad7f254f9", + "sha256:2c5631204ebcc7ae33d11c43037b2dafe25e2ab9c1de6448eb6502ac69c19a56", + "sha256:333306eaea01fde50a73c4619e25631e56c4c61bd0fb0a2346479e67e3d3a820", + "sha256:38bbd6717eac084408b4094174c0805bdbaba1f57fc250fd0309ae5ec9ed7e09", + "sha256:3a232474cd89d3f51e4295abe248a8b95d0332d153bf46444e415409070aae1e", + "sha256:4992ec965606054e8326e83db1c8654f0549cdb26fce1898dc1a20bc7684ec1c", + "sha256:53068e33c74f3b93a8158dacaa5d0f82d254a81b1002e0cd342be89fcb3433eb", + "sha256:5587803d5b66dfd99e7caa31ed91fba0fdee3661c5d93684028ad6653fce725f", + "sha256:5a790bc045003d89d42e3b9cb3cc938c8561a57a88aaa5691512e8540d1ae79c", + "sha256:74794a2e2896cd0cf56fdc9db61ef755fa812b4a4900fa46c49045663a92b8d0", + "sha256:80ea8333b6a5f2d9e856ff2293dba2e3e661197f90bf0f4d5a82a0a6bc83a626", + "sha256:8198f2b04c39d817b206ebe0db25a6653bb5f463c2319d6f6d9a80d012ac1e37", + "sha256:87e2ca3aa557781447428c4b6c8c937f10ff215202ab40ece5c13a82555c10d6", + "sha256:909e36a43fe4a8a3163e9c7fc103867825d14a2ecb852a63d3905250b308a4e5", + "sha256:9453b4e21e752df8737fdffac619e93c9f0ec55ead9a45df782055eb95ef37d9", + "sha256:9ec565e89a6b400eca814f28d78a9ef3f15aea1df74d95b28b7720739b28f37f", + "sha256:a3228728a3808bc9f18c1797ec1179a0efb5068c817b2ffcf6bcd012494dffb2", + "sha256:a74f45aee8c5cc4d533e585e0e596e9f78521e1543a302870a27b0ae2106381e", + "sha256:afbcdb0eda20a0e1d44e3a1ad6d4ec3c959210f4b48cabc0e387a282f4c7deb8", + "sha256:ba2d4fcb844c6ba5df4bbfee9352ad5352c5ae939ac450e06cdceff653280450", + "sha256:bce2e2d8e82fcf972005652371a3e8731956a0c1fbb719cc897943b3695ad91b", + "sha256:c133f6721fba313722a018392a91e3c69d3706ae723484841752559e71d69dc6", + "sha256:ca1ceb6303be1282148f04ac21cebeebdb4152590842159877778f9cf1634f09", + "sha256:d086d46774e27b280e4cece8ab3d87299cf0d39063f00f1e9290d096adc5662a", + "sha256:dc22cc00f804485a3c2a7e2010d9f14a705555f67020eb083e833cabd5bd82e4", + "sha256:e1819b67bcf6ca48341e9b03c2e45b1c891fa8eb1a8458482d14c2805c9616f2", + "sha256:e7debd9c439e7b84f53be3cf4ba8b75b3d0b6e6015212355d6daf44ac672e210", + "sha256:f44c0d28716d950135ff21505f2c764498eda9d8806b7c78764165848aa419bc", + "sha256:f68d6c8ea2974a571cacb7014dbaada21063a0375318d88ac1f9300bc81e93c3", + "sha256:f812d58c5af06d939b2baccdda614a3ffd80531a26e5faca2c9f8b1770b2b7af", + "sha256:f8e550caf52472ae9126953415e4fc554ab53049a5691c45b8816895c632e4d7" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.17" + }, + "pydantic": { + "hashes": [ + "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e", + "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6", + "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd", + "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca", + "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b", + "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a", + "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245", + "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d", + "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee", + "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1", + "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3", + "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d", + "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5", + "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914", + "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd", + "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1", + "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e", + "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e", + "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a", + "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd", + "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f", + "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209", + "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d", + "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a", + "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143", + "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918", + "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52", + "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e", + "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f", + "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e", + "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb", + "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe", + "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe", + "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d", + "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209", + "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af" + ], + "markers": "python_version >= '3.7'", + "version": "==1.10.7" }, "pyethash": { "hashes": [ @@ -3280,13 +3945,32 @@ ], "version": "==0.1.27" }, - "pyflakes": { + "pygithub": { "hashes": [ - "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf", - "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd" + "sha256:4e7fe9c3ec30d5fde5b4fbb97f18821c9dbf372bf6df337fe66f6689a65e0a83", + "sha256:7d528b4ad92bc13122129fafd444ce3d04c47d2d801f6446b6e6ee2d410235b3" ], - "index": "pypi", - "version": "==3.0.1" + "markers": "python_version >= '3.7'", + "version": "==1.58.1" + }, + "pygments": { + "hashes": [ + "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c", + "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1" + ], + "markers": "python_version >= '3.7'", + "version": "==2.15.1" + }, + "pyjwt": { + "extras": [ + "crypto" + ], + "hashes": [ + "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd", + "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14" + ], + "markers": "python_version >= '3.7'", + "version": "==2.6.0" }, "pynacl": { "hashes": [ @@ -3306,47 +3990,11 @@ }, "pyopenssl": { "hashes": [ - "sha256:7a83b7b272dd595222d672f5ce29aa030f1fb837630ef229f62e72e395ce8968", - "sha256:b28437c9773bb6c6958628cf9c3bebe585de661dba6f63df17111966363dd15e" + "sha256:841498b9bec61623b1b6c47ebbc02367c07d60e0e195f19790817f10cc8db0b7", + "sha256:9e0c526404a210df9d2b18cd33364beadb0dc858a739b885677bc65e105d4a4c" ], "markers": "python_version >= '3.6'", - "version": "==22.1.0" - }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, - "pyrsistent": { - "hashes": [ - "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed", - "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb", - "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a", - "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95", - "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712", - "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73", - "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41", - "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b", - "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78", - "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab", - "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308", - "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425", - "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2", - "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e", - "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6", - "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2", - "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a", - "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291", - "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584", - "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a", - "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0", - "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770" - ], - "markers": "python_version >= '3.7'", - "version": "==0.19.2" + "version": "==23.1.1" }, "pysha3": { "hashes": [ @@ -3403,6 +4051,7 @@ "sha256:c07ca07404c612f8abbe22294b23c368e2e5104b521c1790195561f37e1ac3d9", "sha256:f6f50101443ce70ad325ceb4473c4255e9d74e3c7cd0ef827309dfa4c0d975c6" ], + "markers": "python_version >= '3.6'", "version": "==2.1.0" }, "pytest-twisted": { @@ -3410,38 +4059,29 @@ "sha256:1b63b73182bd1b995f30826a1d870c9ac0d08244ab0c871eb8bd0c8243acfb3d", "sha256:209bf5a6452cfbfb61de8f015902c14ec8126400911507074bb2ee4ce8dfe313" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.14.0" }, + "python-baseconv": { + "hashes": [ + "sha256:0539f8bd0464013b05ad62e0a1673f0ac9086c76b43ebf9f833053527cd9931b" + ], + "version": "==1.2.2" + }, "python-dateutil": { "hashes": [ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.2" }, "pytz": { "hashes": [ - "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427", - "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2" - ], - "version": "==2022.6" - }, - "pytz-deprecation-shim": { - "hashes": [ - "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6", - "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.1.0.post0" - }, - "pytzdata": { - "hashes": [ - "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540", - "sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f" + "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", + "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2020.1" + "version": "==2023.3" }, "pyyaml": { "hashes": [ @@ -3486,109 +4126,126 @@ "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" ], + "markers": "python_version >= '3.6'", "version": "==6.0" }, + "referencing": { + "hashes": [ + "sha256:3c963366bc94261bec1a4bd5917a05fee800c1e87995add5edba21abfa253c7d", + "sha256:8c1886f14748c22c9fdc0e302add12f99ad93cada04ce818d47641dc06637a36" + ], + "markers": "python_version >= '3.8'", + "version": "==0.28.0" + }, "regex": { "hashes": [ - "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad", - "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4", - "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd", - "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc", - "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d", - "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066", - "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec", - "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9", - "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e", - "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8", - "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e", - "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783", - "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6", - "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1", - "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c", - "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4", - "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1", - "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1", - "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7", - "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8", - "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe", - "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d", - "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b", - "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8", - "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c", - "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af", - "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49", - "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714", - "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542", - "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318", - "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e", - "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5", - "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc", - "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144", - "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453", - "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5", - "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61", - "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11", - "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a", - "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54", - "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73", - "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc", - "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347", - "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c", - "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66", - "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c", - "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93", - "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443", - "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc", - "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1", - "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892", - "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8", - "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001", - "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa", - "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90", - "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c", - "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0", - "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692", - "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4", - "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5", - "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690", - "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83", - "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66", - "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f", - "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f", - "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4", - "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee", - "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81", - "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95", - "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9", - "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff", - "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e", - "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5", - "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6", - "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7", - "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1", - "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394", - "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6", - "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742", - "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57", - "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b", - "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7", - "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b", - "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244", - "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af", - "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185", - "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8", - "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5" + "sha256:00f6f26e748c797a041ab6957f4cacc66a7fbd5dc5f627760985f5c5b7de2af6", + "sha256:0130a2fdd6f033c3e3710d0b950cc6abd3133c5af88c40c78e77641cb6f6cf8a", + "sha256:027d4962340dbd84979fd1c40bfd7ca8362030abfbbff25f1327bbf4867f047c", + "sha256:037f4be6a240a11a6d3397e932ef5d3ec5855858910792a0ab7d351bd0333533", + "sha256:04a825fd9f5931263eccd0cbdbf171a9792fa1bf2642ca62800b57689ca1b660", + "sha256:06fe9870165d4975a8a3e27a83919b9014b35dd2ee7061a5f2be8e579294cedc", + "sha256:0a664857dd9b1076942c4d73c54a031066ee0ae88a438e7a1e0e79c1c5ddf47a", + "sha256:0c731522eaf74166066fcf91fe7fe3c3617cc5e8df0c150132282d0dd5225afc", + "sha256:0d5a0edefdf800aeef6cf559af75e614fb2eb2d0388f0b132af805fdefcf8ec6", + "sha256:0eee66c4ce6ced2e9d5d4497a569bab6257a6d118eb43dd57cceb61ba00b62d8", + "sha256:12be293d718e05f7304f715980b1a25b16e34a1ff2121740592559d066f91e67", + "sha256:1ad00c9aae6090d052c0ee16a2737a7154031793e6c7b58a629eed8d8aa77e31", + "sha256:1d98e4748a60c9902ad504e862756c43cc707404fc3025f82ef5bbe50bee3b9e", + "sha256:1dc5e9a847613679ac8bd0386a0e54f2958441a0fcc123778637e433041aa763", + "sha256:1ef51012493837263236781ac9598f059dc4e5a4d72627bd3ac85cbd5d1b0ee1", + "sha256:2095acff95df0bf6ec3dee672a03d3d78606b4ca419d53fbd606c559cebedf45", + "sha256:21b653c1538cbbc1c58f6d6f3ccb4a5ce56491f0ab370ec057c1c64a152eb48c", + "sha256:24db1c0fc20850db47977824a99fdae81d6764adaf8192dd874185d9e7166dbb", + "sha256:2762750332f57820c0f38ade87ce4ebe671b178892faed0112f574f0b42801cf", + "sha256:336fb3f585e239362d4f26dd6f904b15d91febfc980f47ed706858f5cee20ce6", + "sha256:3633a07ffeabc14f3cd531f11794bb603267d86e4109cb811a34aee020622d3f", + "sha256:376fa2ef6a02a004b6fe4ebaa5ba370e7532ec6915efd12e33aa434517f8bbee", + "sha256:3965a9ab13f1bf3e4af021c7dbe9678dd9f8dc5cc9097b3d3cbbf3ad00574b5d", + "sha256:3d8cc797f87c07372e7d300198e1423c2b7bd35b68f375cc6700e26158940c9a", + "sha256:460672c6ec94997755bd37b00302853b9d85a5a433121c198359958e8c10ced5", + "sha256:49a77f0b62a4122cf578d1194658973c435e6d2a9611013be11b6750056a5930", + "sha256:4c2ae89c92a04b057b412f88a3359e77600ce966a740e2da212667ce795e1bdc", + "sha256:50e00ab84396bfbeb1bede61eff6641f957b6532e74e02be480d71914e20e2ac", + "sha256:5a7ab3440f0c653dee8b42af858da6e07615c64ba86a6b3509a0ecf44eabdb11", + "sha256:5a98814d42282153c30d674ee34ea114a03ea8d32fd5d9b924d46fbeb2c7eb15", + "sha256:5cc67b3562aada6682ae45f2ea40819baa6bffe38155883100f8779c22c8c087", + "sha256:5d321dd059fd00482537aaba919e29189ea4ab6a03528881267982bb7707f610", + "sha256:5f82d4e0725788787216c9ae53116e6e477b2d97f29ec1e5086f5afbab5716b0", + "sha256:5fda1fc36dd923aee070d7aab3a85b448c8b62930900c615bb67db829281103b", + "sha256:63a92f28a3f285dae06aae83227cb66cc87256db040aaf26c1c48ae5221eccde", + "sha256:6469c2baf450fd1e648752b113a1fc1d67dfbad359f6171be954bacf7b09d126", + "sha256:6686256d1d435ed782ff12ef11e074705911a40d3907b986e53ca9a996e88489", + "sha256:6ccd0d7557c4e76303a6429ec9de55cd87334809cda66c0f101831e2ce9073c1", + "sha256:6f02105d4a511f550dcd63f750937d1607a1f6dc253c798c4adf36aba89215a3", + "sha256:70bd0c121b3c4e641e5c4e633c4581059acad774a1a62bcb15fea3470c2a61cc", + "sha256:770f825c7751ce43aae2088fee94f2e60f95e181223642a0bb35cbaeea92001c", + "sha256:77b3333a6cd1161b81bcf018a9bdb3cc567074a913aa69b98b9c8c79be28565c", + "sha256:797bab57e1317c940030f3c15d48c01e1f16d12ba0f6a807ee0bebdc1cfe3f2d", + "sha256:8418b0ee315555ca9786daab00ec8aaf47dfb2698a5be689676e83e88b949f22", + "sha256:861ed1249302664f96b2e968216486a02af0a143e0f3cc6fd92b78f11aa18579", + "sha256:89f54d4bbd452a5ee01dc31ec918f7b1f32483f13d3598af1acf5ea82ad82ad3", + "sha256:8c704e7062c59d2f7e2eebda2c0c0b69bd807ca6579c3a21fc4b1d8505cfc090", + "sha256:8d5bc5035989852a4ae7dacf8dc99db7c4f21c852486777a98b8efe37af4d8d7", + "sha256:91f47522688955cb33190f8354ccaa1cc058d05e73f99afe9ace40db36c159e8", + "sha256:9322797fddd51ec0312a8b649d9a3ebfabf4826a204ef8e1cc11801013005323", + "sha256:953ba37dd83c424c2cf699c64a8477645fc7c7403ffd2eb1417189eddbbfb4a7", + "sha256:97fd2885df308edcdf96baa632192a4291f3ed5b072c0bc3f29dc1e6de40ffa4", + "sha256:99780a0880d3dab2bb6f863492d38ab90ffdc9daf4fbefb505524f6f3a1c9dbe", + "sha256:9b887d87188489859411d0c7e741f7dfe8a3ca5946b0db8b3c9e5daecc089b62", + "sha256:9e1b4b0b4baff934ef3c0ac56578a6b773f7f90ad1db3ff843ee40d83bdae09f", + "sha256:a419384c6c80d58532016c3cf6a3aca009bfb7661f33e119ba7f77ec0e28222a", + "sha256:aa92f9ad481108a7e4c5a5234608f7c718f8b67003ce4719a4d2735d82b54167", + "sha256:ac402ac165f42f41b3aef9e8a9c6fb204dac31faad65b3b0ae6bff4bc9d0dad2", + "sha256:ad84e1d4be3504e7dcd6370b3e847eaf05d5d35cb0818d0bd2d1a26b58c0abd2", + "sha256:b132e4507c6404faece005329de7b2b97653ddfeeaf84f058fe820791160dcda", + "sha256:b365b8fa0d5fd0208db5b0e94582edb796dde07d1f99c5a9c1ff6be172c374ee", + "sha256:b48820071a49b68ca8734e8b2bd1f26632512154816b261b614e62cc724d9f8a", + "sha256:b7eb07d60c385aec906b82d48447907a2bbf454d0e9ead62168de111accabaf8", + "sha256:b87d38717ed855583ae1693f6095fc9c06b7dde4ddec782b41aa92931dd60e7c", + "sha256:bda905e040e6c2875a7dde9652a9e0c426aaac6058568cc064f8128b061439ee", + "sha256:c10b1388106447db0cdb8e340d06fa2d49b822368a049c36928d3c24296c2e37", + "sha256:c1155571edd498b6274f969517db6781500fbb24fc91ff740ea5a37c4735b3ba", + "sha256:c1fa9651141caaafa0d6048695a4a04bc4bf39c75f250a36b1a05c9588a403a9", + "sha256:c300461ed8159f61d979971ba51f1acd1e6f9907d86888e9275165e06ea90f06", + "sha256:c40f7e8c02b287550166a3e36dbb89f9387db86a71101f6242668e3ef979cd2a", + "sha256:c455d886838dd5a248e7f06e5573275fc854febd206eb937cf632082a06a939f", + "sha256:cb22580ce5e2eee138a78df40444151ff51c91acd11be546216a046677c75593", + "sha256:ccd0c918971f79bd9a883f13f91343dd2eaefbafd4344aadfe5134a65fb821c3", + "sha256:d0ac14c36d91b191d1cb073fb5ac49937d88a5c8b051ced3875321a525202c34", + "sha256:d28933aa1242814ed737b569b2baf96e4d236c52be454b5dc17afd36bf893c12", + "sha256:db5d5c9c7bbcf9cbc541f8adba8c92a7a7abd0de4f0343da4e96fb78ffe9d1a1", + "sha256:dbc47670e0424a566084e15af9a253b85f90fa26e60fa07e1b10c90df4c8fd07", + "sha256:dbcb49036a6a6065035ac2acc1ad6a918f9e09ef2d0f9392dc90b8756f789f95", + "sha256:e708e69c4d3bc41df29efb94aadc5578c841b2cd02f8cbb1bcfbf280f2801238", + "sha256:e87450db3c444f41e3ac6a09b7a10ddfe54fa1e98bf60ee299fe6d11097540cd", + "sha256:ea2d66c1fd898d81b8ce0f95afab9ba0ab522cf08810f11fa28ad958706cd2b2", + "sha256:eaff21326bc5d9be0c2f400931d39274105bd5d06650f0b0215392d1b050d404", + "sha256:ebf0776fdc7a5e0ac11b6db2d69ac77479411b627a96119ffa4427ba32f3bb66", + "sha256:f2bc7249840faacfff6196e5b5ffeb3fdaf078986521a1cda34e9be5607e773b", + "sha256:f3e20cf2575b1330687d3dd6242f82278b3bdc09a9f36cc7ac4d45b7dd63c1f5", + "sha256:f576b8dec95456ba0157943a57f5f88c076cf96cc363ef1bf5027c2976fd487a", + "sha256:fbc5b23b569d96b8c831574c93098b68c6d7ff2509f31268c968152ca4f2ecd0", + "sha256:ff8fef88029d0420315935041db517855ea022889fa8d54959943e39fffebf59" ], "markers": "python_version >= '3.6'", - "version": "==2022.10.31" + "version": "==2023.5.4" }, "requests": { "hashes": [ - "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983", - "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349" + "sha256:e8f3c9be120d3333921d213eef078af392fba3933ab7ed2d1cba3b56f2568c3b", + "sha256:f2e34a75f4749019bb0e3effb66683630e4ffeaf75819fb51bebef1bf5aef059" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.28.1" + "markers": "python_version >= '3.7'", + "version": "==2.29.0" + }, + "rich": { + "hashes": [ + "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", + "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" + ], + "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", + "version": "==12.6.0" }, "rlp": { "hashes": [ @@ -3597,6 +4254,35 @@ ], "version": "==3.0.0" }, + "rpds-py": { + "hashes": [ + "sha256:014828cd68b4cdee84ab66adaf5bfe1f137656a7a588c31fdca04ba0768ef62d", + "sha256:025b8101dbf39d77cf41ac3c737e4c713e0b2728a516443b382e66b9d492ff98", + "sha256:038249d2bbaf91aa65c4108a40ee076f657654261b1a246ab99726710bfb77de", + "sha256:0bcb162f5549408125ec986bfed1a66f2036ac2910d3fb0a6afda0f97bc6ea15", + "sha256:1b6db70c2ab847229fa9cff3a5eb641c33ab3f981ee8b99d326a7deb8989e4ce", + "sha256:2a5c672b1cd382973bf414518ddc9d743d06bcee751fa65256d84ba412192b0b", + "sha256:311a57cc972481bd220af28cf4309141c680a356b2359f163daac030d0c2318d", + "sha256:33a2a15b641bc17bc6574f9600976374a085ff81ac8dddd4bde6c451e9e9e58d", + "sha256:34007442d36980c4aab3f4044c1fd05a736c8ae09d47b8a42112deab5d6b5a10", + "sha256:453e62d679d8de32c5e00ba27f8c8c45a456e5d6db6fa6f67fdd3e12f1658833", + "sha256:5eda3aba0cd291de9d4bb138db45814bac24bc4c07e0f38b0544374b6104c488", + "sha256:68e8f2cedc65198248a14d716125016fd0816f63f216a82c2209a0686d5447cf", + "sha256:6d1d4078d60ca47f0eb6bdddbf79f00a72d41ee3148aba1dcf9b980f73a8d26e", + "sha256:858604fe5d7eb50e91b1096bcbcb421f2cb3101454244afda92b4d768d0cb4ce", + "sha256:98b54a47e670093b8bf7d1a0222d0af26dac19314a0e79ac478e447357396a2d", + "sha256:c38d17af73aa03686d701686628e37c114a459650233c0d5f0492dad3a76e3e0", + "sha256:c7bd3a381c4a5fe7e0fc4dff554bd1ce2b0be12ba0193c176c291b7dc1e8bea0", + "sha256:cbdc8ab6108b8bb260ee68fb2de83fb1c481d3a77355156049a8a49ea47eacf6", + "sha256:cc6ff891c3814d8cd92549cb385353a922518d433aaf1d2d0d99e98e59915370", + "sha256:d940b5644f14e49b1c6e7902b9ec8a0c7584109fbf380fa18115831a641927c8", + "sha256:e16c02923726307d960e908b61d4d833939f322877d2957c001fca23b644914e", + "sha256:f53f65cf56bb60355681431d04bc04dbe709452dd85eebf537035dc145bd36c9", + "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5" + ], + "markers": "python_version >= '3.8'", + "version": "==0.7.1" + }, "semantic-version": { "hashes": [ "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", @@ -3607,10 +4293,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:5bbe4b72de22f9ac1e67f2a4e6efe8fbd595bb59b7b223443f50fe5802a5551c", - "sha256:9f0b960694e2d8bb04db4ba6ac2a645040caef4e762c65937998ff06064f10d6" + "sha256:827fac0ed1c7921bd198727128a8aa890ad66242598aa18f4cdfa3e46bdd9a60", + "sha256:eb37b55ddfbbaf523dc91e59673caf10ab25e36cd4350ae71d19daa9c86506c7" ], - "version": "==1.12.1" + "version": "==1.22.0" }, "service-identity": { "hashes": [ @@ -3619,12 +4305,20 @@ ], "version": "==21.1.0" }, + "setuptools": { + "hashes": [ + "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b", + "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990" + ], + "markers": "python_version >= '3.7'", + "version": "==67.7.2" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, "snaptime": { @@ -3640,6 +4334,60 @@ ], "version": "==2.4.0" }, + "sqlalchemy": { + "hashes": [ + "sha256:03206576ca53f55b9de6e890273e498f4b2e6e687a9db9859bdcd21df5a63e53", + "sha256:09205893a84b6bedae0453d3f384f5d2a6499b6e45ad977549894cdcd85d8f1c", + "sha256:0e5501c78b5ab917f0f0f75ce7f0018f683a0a76e95f30e6561bf61c9ff69d43", + "sha256:10f1ff0ebe21d2cea89ead231ba3ecf75678463ab85f19ce2ce91207620737f3", + "sha256:1fac17c866111283cbcdb7024d646abb71fdd95f3ce975cf3710258bc55742fd", + "sha256:297b752d4f30350b64175bbbd57dc94c061a35f5d1dba088d0a367dbbebabc94", + "sha256:2a3101252f3de9a18561c1fb0a68b1ee465485990aba458d4510f214bd5a582c", + "sha256:32762dba51b663609757f861584a722093487f53737e76474cc6e190904dc31b", + "sha256:369f6564e68a9c60f0b9dde121def491e651a4ba8dcdd652a93f1cd5977cd85c", + "sha256:3745dee26a7ee012598577ad3b8f6e6cd50a49b2afa0cde9db668da6bf2c2319", + "sha256:3c053c3f4c4e45d4c8b27977647566c140d6de3f61a4e2acb92ea24cf9911c7f", + "sha256:4ad525b9dd17b478a2ed8580d7f2bc46b0f5889153c6b1c099729583e395b4b9", + "sha256:53b2c8adbcbb59732fb21a024aaa261983655845d86e3fc26a5676cec0ebaa09", + "sha256:5d709f43caee115b03b707b8cbbcb8b303045dd7cdc825b6d29857d71f3425ae", + "sha256:5e9d390727c11b9a7e583bf6770de36895c0936bddb98ae93ae99282e6428d5f", + "sha256:6b1fa0ffc378a7061c452cb4a1f804fad1b3b8aa8d0552725531d27941b2e3ed", + "sha256:6e1d50592cb24d1947c374c666add65ded7c181ec98a89ed17abbe9b8b2e2ff4", + "sha256:77a06b0983faf9aa48ee6219d41ade39dee16ce90857cc181dbcf6918acd234d", + "sha256:7eb25b981cbc9e7df9f56ad7ec4c6d77323090ca4b7147fcdc09d66535377759", + "sha256:85b0efe1c71459ba435a6593f54a0e39334b16ba383e8010fdb9d0127ca51ba8", + "sha256:87b2c2d13c3d1384859b60eabb3139e169ce68ada1d2963dbd0c7af797f16efe", + "sha256:8aad66215a3817a7a1d535769773333250de2653c89b53f7e2d42b677d398027", + "sha256:91f4b1bdc987ef85fe3a0ce5d26ac72ff8f60207b08272aa2a65494836391d69", + "sha256:978bee4ecbcdadf087220618409fb9be9509458df479528b70308f0599c7c519", + "sha256:9fe98e9d26778d7711ceee2c671741b4f54c74677668481d733d6f70747d7690", + "sha256:a022c588c0f413f8cddf9fcc597dbf317efeac4186d8bff9aa7f3219258348b0", + "sha256:a4709457f1c317e347051498b91fa2b86c4bcdebf93c84e6d121a4fc8a397307", + "sha256:aec5fb36b53125554ecc2285526eb5cc31b21f6cb059993c1c5ca831959de052", + "sha256:b6ceca432ce88ad12aab5b5896c343a1993c90b325d9193dcd055e73e18a0439", + "sha256:b76c2fde827522e21922418325c1b95c2d795cdecfb4bc261e4d37965199ee7f", + "sha256:bddfc5bd1dee5db0fddc9dab26f800c283f3243e7281bbf107200fed30125f9c", + "sha256:bf83700faa9642388fbd3167db3f6cbb2e88cc8367b8c22204f3f408ee782d25", + "sha256:c5268ec05c21e2ecf5bca09314bcaadfec01f02163088cd602db4379862958dd", + "sha256:d9796d5c13b2b7f05084d0ce52528cf919f9bde9e0f10672a6393a4490415695", + "sha256:dc67efd00ce7f428a446ce012673c03c63c5abb5dec3f33750087b8bdc173bf0", + "sha256:dfd6385b662aea83e63dd4db5fe116eb11914022deb1745f0b57fa8470c18ffe", + "sha256:e495ad05a13171fbb5d72fe5993469c8bceac42bcf6b8f9f117a518ee7fbc353", + "sha256:e752c34f7a2057ebe82c856698b9f277c633d4aad006bddf7af74598567c8931", + "sha256:f0843132168b44ca33c5e5a2046c954775dde8c580ce27f5cf2e134d0d9919e4", + "sha256:f30c5608c64fc9c1fa9a16277eb4784f782362566fe40ff8d283358c8f2c5fe0", + "sha256:f6ebadefc4331dda83c22519e1ea1e61104df6eb38abbb80ab91b0a8527a5c19" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.12" + }, + "stack-data": { + "hashes": [ + "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", + "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" + ], + "version": "==0.6.2" + }, "tabulate": { "hashes": [ "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", @@ -3648,11 +4396,71 @@ "markers": "python_version >= '3.7'", "version": "==0.9.0" }, + "time-machine": { + "hashes": [ + "sha256:010a58a8de1120308befae19e6c9de2ef5ca5206635cea33cb264998725cc027", + "sha256:0b9c36240876622b7f2f9e11bf72f100857c0a1e1a59af2da3d5067efea62c37", + "sha256:1d0ab46ce8a60baf9d86525694bf698fed9efefd22b8cbe1ca3e74abbb3239e1", + "sha256:2f080f6f7ca8cfca43bc5639288aebd0a273b4b5bd0acff609c2318728b13a18", + "sha256:359c806e5b9a7a3c73dbb808d19dca297f5504a5eefdc5d031db8d918f43e364", + "sha256:36dde844d28549929fab171d683c28a8db1c206547bcf6b7aca77319847d2046", + "sha256:372a97da01db89533d2f4ce50bbd908e5c56df7b8cfd6a005b177d0b14dc2938", + "sha256:3ce445775fcf7cb4040cfdba4b7c4888e7fd98bbcccfe1dc3fa8a798ed1f1d24", + "sha256:3ff5148e2e73392db8418a1fe2f0b06f4a0e76772933502fb61e4c3000b5324e", + "sha256:49df5eea2160068e5b2bf28c22fc4c5aea00862ad88ddc3b62fc0f0683e97538", + "sha256:4b55654aaeaba380fcd6c004b8ada2978fdd4ece1e61e6b9717c6d4cc7fbbcd9", + "sha256:4f3755d9342ca1f1019418db52072272dfd75eb818fa4726fa8aabe208b38c26", + "sha256:5657e0e6077cf15b37f0d8cf78e868113bbb3ecccc60064c40fe52d8166ca8b1", + "sha256:60222d43f6e93a926adc36ed37a54bc8e4d0d8d1c4d449096afcfe85086129c2", + "sha256:6211beee9f5dace08b1bbbb1fb09e34a69c52d87eea676729f14c8660481dff6", + "sha256:6463e302c96eb8c691c4340e281bd54327a213b924fa189aea81accf7e7f78df", + "sha256:68ec8b83197db32c7a12da5f6b83c91271af3ed7f5dc122d2900a8de01dff9f0", + "sha256:69898aed9b2315a90f5855343d9aa34d05fa06032e2e3bb14f2528941ec89dc1", + "sha256:6b632d60aa0883dc7292ac3d32050604d26ec2bbd5c4d42fb0de3b4ef17343e2", + "sha256:728263611d7940fda34d21573bd2b3f1491bdb52dbf75c5fe6c226dfe4655201", + "sha256:748d701228e646c224f2adfa6a11b986cd4aa90f1b8c13ef4534a3919c796bc0", + "sha256:8367fd03f2d7349c7fc20f14de186974eaca2502c64b948212de663742c8fd11", + "sha256:8670cb5cfda99f483d60de6ce56ceb0ec5d359193e79e4688e1c3c9db3937383", + "sha256:8830510adbf0a231184da277db9de1d55ef93ed228a575d217aaee295505abf1", + "sha256:8976b7b1f7de13598b655d459f5640f90f3cd587283e1b914a22e45946c5485b", + "sha256:8bcc86b5a07ea9745f26dfad958dde0a4f56748c2ae0c9a96200a334d1b55055", + "sha256:8e2a90b8300812d8d774f2d2fc216fec3c7d94132ac589e062489c395061f16c", + "sha256:8e797e5a2a99d1b237183e52251abfc1ad85c376278b39d1aca76a451a97861a", + "sha256:948ca690f9770ad4a93fa183061c11346505598f5f0b721965bc85ec83bb103d", + "sha256:9ba5fc2655749066d68986de8368984dad4082db2fbeade78f40506dc5b65672", + "sha256:9ee553f7732fa51e019e3329a6984593184c4e0410af1e73d91ce38a5d4b34ab", + "sha256:a2cf80e5deaaa68c6cefb25303a4c870490b4e7591ed8e2435a65728920bc097", + "sha256:ae4e3f02ab5dabb35adca606237c7e1a515c86d69c0b7092bbe0e1cfe5cffc61", + "sha256:b16a2129f9146faa080bfd1b53447761f7386ec5c72890c827a65f33ab200336", + "sha256:b32addbf56639a9a8261fb62f8ea83473447671c83ca2c017ab1eabf4841157f", + "sha256:b8faff03231ee55d5a216ce3e9171c5205459f866f54d4b5ee8aa1d860e4ce11", + "sha256:bb15b2b79b00d3f6cf7d62096f5e782fa740ecedfe0540c09f1d1e4d3d7b81ba", + "sha256:bdbe785e046d124f73cca603ee37d5fae0b15dc4c13702488ad19de56aae08ba", + "sha256:bfa82614a98ecee70272bb6038d210b2ad7b2a6b8a678b400c34bdaf776802a7", + "sha256:c01dbc3671d0649023daf623e952f9f0b4d904d57ab546d6d35a4aeb14915e8d", + "sha256:c5dbc8b87cdc7be070a499f2bd1cd405c7f647abeb3447dfd397639df040bc64", + "sha256:cb51432652ad663b4cbd631c73c90f9e94f463382b86c0b6b854173700512a70", + "sha256:cc6bf01211b5ea40f633d5502c5aa495b415ebaff66e041820997dae70a508e1", + "sha256:d329578abe47ce95baa015ef3825acebb1b73b5fa6f818fdf2d4685a00ca457f", + "sha256:d4380bd6697cc7db3c9e6843f24779ac0550affa9d9a8e5f9e5d5cc139cb6583", + "sha256:d79d374e32488c76cdb06fbdd4464083aeaa715ddca3e864bac7c7760eb03729", + "sha256:eaf334477bc0a9283d5150a56be8670a07295ef676e5b5a7f086952929d1a56b", + "sha256:f6e79643368828d4651146a486be5a662846ac223ab5e2c73ddd519acfcc243c", + "sha256:f92d5d2eb119a6518755c4c9170112094c706d1c604460f50afc1308eeb97f0e", + "sha256:f97ed8bc5b517844a71030f74e9561de92f4902c306e6ccc8331a5b0c8dd0e00", + "sha256:fcdef7687aed5c4331c9808f4a414a41987441c3e7a2ba554e4dccfa4218e788", + "sha256:fd72c0b2e7443fff6e4481991742b72c17f73735e5fdd176406ca48df187a5c9", + "sha256:fe013942ab7f3241fcbe66ee43222d47f499d1e0cb69e913791c52e638ddd7f0" + ], + "markers": "python_version >= '3.7'", + "version": "==2.9.0" + }, "toml": { "hashes": [ "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.10.2" }, "tomli": { @@ -3660,6 +4468,7 @@ "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" ], + "markers": "python_version >= '3.7'", "version": "==2.0.1" }, "toolz": { @@ -3670,13 +4479,29 @@ "markers": "python_version >= '3.5'", "version": "==0.12.0" }, + "tqdm": { + "hashes": [ + "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5", + "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671" + ], + "markers": "python_version >= '3.7'", + "version": "==4.65.0" + }, + "traitlets": { + "hashes": [ + "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", + "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" + ], + "markers": "python_version >= '3.7'", + "version": "==5.9.0" + }, "trie": { "hashes": [ - "sha256:8bfc6b82979b7caa6f020a89c9142c7522f017788240487d1c941b0ad82e7132", - "sha256:edef6b392f49f80be31c167236c6569aa07d7926138d5fe23d327d65d62b7201" + "sha256:0729a159ddef4bfa4c05478017b93a7a1af4e65e8a7b7628676bad13199ffe39", + "sha256:e3f3691e1d48006b466c9b4cd0ee586c32e0f54d13b2497f263688188c77b0fe" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==2.0.2" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.1.0" }, "twisted": { "hashes": [ @@ -3688,43 +4513,43 @@ }, "txaio": { "hashes": [ - "sha256:2e4582b70f04b2345908254684a984206c0d9b50e3074a24a4c55aba21d24d01", - "sha256:41223af4a9d5726e645a8ee82480f413e5e300dd257db94bc38ae12ea48fb2e5" + "sha256:aaea42f8aad50e0ecfb976130ada140797e9dcb85fad2cf72b0f37f8cefcb490", + "sha256:f9a9216e976e5e3246dfd112ad7ad55ca915606b60b84a757ac769bd404ff704" ], - "markers": "python_version >= '3.6'", - "version": "==22.2.1" + "markers": "python_version >= '3.7'", + "version": "==23.1.1" }, "typing-extensions": { "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb", + "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4" ], "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "version": "==4.5.0" }, "tzdata": { "hashes": [ - "sha256:04a680bdc5b15750c39c12a448885a51134a27ec9af83667663f0b3a1bf3f342", - "sha256:91f11db4503385928c15598c98573e3af07e7229181bee5375bd30f1695ddcae" + "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a", + "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda" ], - "markers": "python_version >= '3.6'", - "version": "==2022.6" + "markers": "python_version >= '2'", + "version": "==2023.3" }, "tzlocal": { "hashes": [ - "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745", - "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7" + "sha256:407e15ad8fa5b05a66b8f65505b23f0dbd4ee96b343c6da4393e9c60f55d591c", + "sha256:59a6c67af3fb05b6359768cecfacc2c0df368c36b671d18d1e021a5aa70b5f8c" ], - "markers": "python_version >= '3.6'", - "version": "==4.2" + "markers": "python_version >= '3.7'", + "version": "==5.0b2" }, "urllib3": { "hashes": [ - "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", - "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" + "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", + "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.13" + "version": "==1.26.15" }, "varint": { "hashes": [ @@ -3734,247 +4559,354 @@ }, "virtualenv": { "hashes": [ - "sha256:40a7e06a98728fd5769e1af6fd1a706005b4bb7e16176a272ed4292473180389", - "sha256:7d6a8d55b2f73b617f684ee40fd85740f062e1f2e379412cb1879c7136f05902" + "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e", + "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924" ], - "version": "==20.17.0" + "markers": "python_version >= '3.7'", + "version": "==20.23.0" }, "watchdog": { "hashes": [ - "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412", - "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654", - "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306", - "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33", - "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd", - "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7", - "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892", - "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609", - "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6", - "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1", - "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591", - "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d", - "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d", - "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c", - "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3", - "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39", - "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213", - "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330", - "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428", - "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1", - "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846", - "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153", - "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3", - "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9", - "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658" + "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190", + "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43", + "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d", + "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256", + "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd", + "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96", + "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5", + "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad", + "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42", + "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225", + "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb", + "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc", + "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79", + "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf", + "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44", + "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc", + "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131", + "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c", + "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565", + "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab", + "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed", + "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16", + "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf", + "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375", + "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697", + "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906", + "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b", + "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f" ], "markers": "python_version >= '3.6'", - "version": "==2.1.9" + "version": "==2.3.1" + }, + "wcwidth": { + "hashes": [ + "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", + "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + ], + "version": "==0.2.6" }, "web3": { "hashes": [ - "sha256:1674301b261da529ee6537b970d1a01a1e6d22328b246c16636263f96c2b6df2", - "sha256:df74801cb4dff45b175227feb3126ac77480c801ac6412d471520abecf2c8c00" + "sha256:7695ee81162c644de0dfd0f5372f96a73be557b46365d218f581ca10197c6389", + "sha256:ca860ad23b1f71384620659f17a374e5850ab3c1bb928a09f0103ee25e3d4c1b" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.0.0b6" + "version": "==6.2.0" }, "websockets": { "hashes": [ - "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41", - "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96", - "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4", - "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72", - "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576", - "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63", - "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b", - "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d", - "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032", - "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393", - "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50", - "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631", - "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f", - "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c", - "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6", - "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4", - "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6", - "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0", - "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8", - "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112", - "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94", - "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4", - "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb", - "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331", - "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c", - "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c", - "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193", - "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b", - "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b", - "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038", - "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089", - "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa", - "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9", - "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56", - "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4", - "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179", - "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c", - "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882", - "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28", - "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1", - "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a", - "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033", - "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1", - "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13", - "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8", - "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c", - "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74", - "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab", - "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3", - "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588", - "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485", - "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342", - "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48", - "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf", - "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0", - "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a", - "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea", - "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf", - "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8", - "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df", - "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc", - "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f", - "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269", - "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3", - "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c", - "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46", - "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f", - "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106", - "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f" - ], - "markers": "python_version >= '3.7'", - "version": "==10.4" + "sha256:0fb4480556825e4e6bf2eebdbeb130d9474c62705100c90e59f2f56459ddab42", + "sha256:13bd5bebcd16a4b5e403061b8b9dcc5c77e7a71e3c57e072d8dff23e33f70fba", + "sha256:143782041e95b63083b02107f31cda999f392903ae331de1307441f3a4557d51", + "sha256:1b52def56d2a26e0e9c464f90cadb7e628e04f67b0ff3a76a4d9a18dfc35e3dd", + "sha256:1df2413266bf48430ef2a752c49b93086c6bf192d708e4a9920544c74cd2baa6", + "sha256:2174a75d579d811279855df5824676d851a69f52852edb0e7551e0eeac6f59a4", + "sha256:220d5b93764dd70d7617f1663da64256df7e7ea31fc66bc52c0e3750ee134ae3", + "sha256:232b6ba974f5d09b1b747ac232f3a3d8f86de401d7b565e837cc86988edf37ac", + "sha256:25aae96c1060e85836552a113495db6d857400288161299d77b7b20f2ac569f2", + "sha256:25e265686ea385f22a00cc2b719b880797cd1bb53b46dbde969e554fb458bfde", + "sha256:2abeeae63154b7f63d9f764685b2d299e9141171b8b896688bd8baec6b3e2303", + "sha256:2acdc82099999e44fa7bd8c886f03c70a22b1d53ae74252f389be30d64fd6004", + "sha256:2eb042734e710d39e9bc58deab23a65bd2750e161436101488f8af92f183c239", + "sha256:3178d965ec204773ab67985a09f5696ca6c3869afeed0bb51703ea404a24e975", + "sha256:320ddceefd2364d4afe6576195201a3632a6f2e6d207b0c01333e965b22dbc84", + "sha256:34a6f8996964ccaa40da42ee36aa1572adcb1e213665e24aa2f1037da6080909", + "sha256:3565a8f8c7bdde7c29ebe46146bd191290413ee6f8e94cf350609720c075b0a1", + "sha256:392d409178db1e46d1055e51cc850136d302434e12d412a555e5291ab810f622", + "sha256:3a09cce3dacb6ad638fdfa3154d9e54a98efe7c8f68f000e55ca9c716496ca67", + "sha256:3a2100b02d1aaf66dc48ff1b2a72f34f6ebc575a02bc0350cc8e9fbb35940166", + "sha256:3b87cd302f08ea9e74fdc080470eddbed1e165113c1823fb3ee6328bc40ca1d3", + "sha256:3e79065ff6549dd3c765e7916067e12a9c91df2affea0ac51bcd302aaf7ad207", + "sha256:3ffe251a31f37e65b9b9aca5d2d67fd091c234e530f13d9dce4a67959d5a3fba", + "sha256:46388a050d9e40316e58a3f0838c63caacb72f94129eb621a659a6e49bad27ce", + "sha256:46dda4bc2030c335abe192b94e98686615f9274f6b56f32f2dd661fb303d9d12", + "sha256:4c54086b2d2aec3c3cb887ad97e9c02c6be9f1d48381c7419a4aa932d31661e4", + "sha256:5004c087d17251938a52cce21b3dbdabeecbbe432ce3f5bbbf15d8692c36eac9", + "sha256:502683c5dedfc94b9f0f6790efb26aa0591526e8403ad443dce922cd6c0ec83b", + "sha256:518ed6782d9916c5721ebd61bb7651d244178b74399028302c8617d0620af291", + "sha256:580cc95c58118f8c39106be71e24d0b7e1ad11a155f40a2ee687f99b3e5e432e", + "sha256:58477b041099bb504e1a5ddd8aa86302ed1d5c6995bdd3db2b3084ef0135d277", + "sha256:5875f623a10b9ba154cb61967f940ab469039f0b5e61c80dd153a65f024d9fb7", + "sha256:5c7de298371d913824f71b30f7685bb07ad13969c79679cca5b1f7f94fec012f", + "sha256:634239bc844131863762865b75211a913c536817c0da27f691400d49d256df1d", + "sha256:6d872c972c87c393e6a49c1afbdc596432df8c06d0ff7cd05aa18e885e7cfb7c", + "sha256:752fbf420c71416fb1472fec1b4cb8631c1aa2be7149e0a5ba7e5771d75d2bb9", + "sha256:7742cd4524622cc7aa71734b51294644492a961243c4fe67874971c4d3045982", + "sha256:808b8a33c961bbd6d33c55908f7c137569b09ea7dd024bce969969aa04ecf07c", + "sha256:87c69f50281126dcdaccd64d951fb57fbce272578d24efc59bce72cf264725d0", + "sha256:8df63dcd955eb6b2e371d95aacf8b7c535e482192cff1b6ce927d8f43fb4f552", + "sha256:8f24cd758cbe1607a91b720537685b64e4d39415649cac9177cd1257317cf30c", + "sha256:8f392587eb2767afa8a34e909f2fec779f90b630622adc95d8b5e26ea8823cb8", + "sha256:954eb789c960fa5daaed3cfe336abc066941a5d456ff6be8f0e03dd89886bb4c", + "sha256:955fcdb304833df2e172ce2492b7b47b4aab5dcc035a10e093d911a1916f2c87", + "sha256:95c09427c1c57206fe04277bf871b396476d5a8857fa1b99703283ee497c7a5d", + "sha256:a4fe2442091ff71dee0769a10449420fd5d3b606c590f78dd2b97d94b7455640", + "sha256:aa7b33c1fb2f7b7b9820f93a5d61ffd47f5a91711bc5fa4583bbe0c0601ec0b2", + "sha256:adf6385f677ed2e0b021845b36f55c43f171dab3a9ee0ace94da67302f1bc364", + "sha256:b1a69701eb98ed83dd099de4a686dc892c413d974fa31602bc00aca7cb988ac9", + "sha256:b2a573c8d71b7af937852b61e7ccb37151d719974146b5dc734aad350ef55a02", + "sha256:b444366b605d2885f0034dd889faf91b4b47668dd125591e2c64bfde611ac7e1", + "sha256:b985ba2b9e972cf99ddffc07df1a314b893095f62c75bc7c5354a9c4647c6503", + "sha256:c78ca3037a954a4209b9f900e0eabbc471fb4ebe96914016281df2c974a93e3e", + "sha256:ca9b2dced5cbbc5094678cc1ec62160f7b0fe4defd601cd28a36fde7ee71bbb5", + "sha256:cb46d2c7631b2e6f10f7c8bac7854f7c5e5288f024f1c137d4633c79ead1e3c0", + "sha256:ce69f5c742eefd039dce8622e99d811ef2135b69d10f9aa79fbf2fdcc1e56cd7", + "sha256:cf45d273202b0c1cec0f03a7972c655b93611f2e996669667414557230a87b88", + "sha256:d1881518b488a920434a271a6e8a5c9481a67c4f6352ebbdd249b789c0467ddc", + "sha256:d3cc3e48b6c9f7df8c3798004b9c4b92abca09eeea5e1b0a39698f05b7a33b9d", + "sha256:d6b2bfa1d884c254b841b0ff79373b6b80779088df6704f034858e4d705a4802", + "sha256:d70a438ef2a22a581d65ad7648e949d4ccd20e3c8ed7a90bbc46df4e60320891", + "sha256:daa1e8ea47507555ed7a34f8b49398d33dff5b8548eae3de1dc0ef0607273a33", + "sha256:dca9708eea9f9ed300394d4775beb2667288e998eb6f542cdb6c02027430c599", + "sha256:dd906b0cdc417ea7a5f13bb3c6ca3b5fd563338dc596996cb0fdd7872d691c0a", + "sha256:e0eeeea3b01c97fd3b5049a46c908823f68b59bf0e18d79b231d8d6764bc81ee", + "sha256:e37a76ccd483a6457580077d43bc3dfe1fd784ecb2151fcb9d1c73f424deaeba", + "sha256:e8b967a4849db6b567dec3f7dd5d97b15ce653e3497b8ce0814e470d5e074750", + "sha256:ec00401846569aaf018700249996143f567d50050c5b7b650148989f956547af", + "sha256:ede13a6998ba2568b21825809d96e69a38dc43184bdeebbde3699c8baa21d015", + "sha256:f97e03d4d5a4f0dca739ea274be9092822f7430b77d25aa02da6775e490f6846" + ], + "markers": "python_version >= '3.7'", + "version": "==11.0.2" }, "werkzeug": { "hashes": [ - "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f", - "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5" + "sha256:4866679a0722de00796a74086238bb3b98d90f423f05de039abb09315487254a", + "sha256:a987caf1092edc7523edb139edb20c70571c4a8d5eed02e0b547b4739174d091" + ], + "markers": "python_version >= '3.8'", + "version": "==2.3.3" + }, + "wrapt": { + "hashes": [ + "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", + "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", + "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", + "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", + "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", + "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", + "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", + "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", + "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", + "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", + "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", + "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", + "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", + "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", + "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", + "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", + "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", + "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", + "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", + "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", + "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", + "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", + "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", + "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", + "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", + "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", + "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", + "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", + "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", + "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", + "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", + "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", + "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", + "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", + "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", + "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", + "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", + "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", + "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", + "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", + "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", + "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", + "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", + "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", + "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", + "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", + "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", + "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", + "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", + "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", + "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", + "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", + "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", + "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", + "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", + "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", + "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", + "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", + "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", + "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", + "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", + "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", + "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", + "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", + "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", + "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", + "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", + "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", + "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", + "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", + "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", + "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", + "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", + "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", + "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" ], - "markers": "python_version >= '3.7'", - "version": "==2.2.2" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.15.0" }, "yarl": { "hashes": [ - "sha256:076eede537ab978b605f41db79a56cad2e7efeea2aa6e0fa8f05a26c24a034fb", - "sha256:07b21e274de4c637f3e3b7104694e53260b5fc10d51fb3ec5fed1da8e0f754e3", - "sha256:0ab5a138211c1c366404d912824bdcf5545ccba5b3ff52c42c4af4cbdc2c5035", - "sha256:0c03f456522d1ec815893d85fccb5def01ffaa74c1b16ff30f8aaa03eb21e453", - "sha256:12768232751689c1a89b0376a96a32bc7633c08da45ad985d0c49ede691f5c0d", - "sha256:19cd801d6f983918a3f3a39f3a45b553c015c5aac92ccd1fac619bd74beece4a", - "sha256:1ca7e596c55bd675432b11320b4eacc62310c2145d6801a1f8e9ad160685a231", - "sha256:1e4808f996ca39a6463f45182e2af2fae55e2560be586d447ce8016f389f626f", - "sha256:205904cffd69ae972a1707a1bd3ea7cded594b1d773a0ce66714edf17833cdae", - "sha256:20df6ff4089bc86e4a66e3b1380460f864df3dd9dccaf88d6b3385d24405893b", - "sha256:21ac44b763e0eec15746a3d440f5e09ad2ecc8b5f6dcd3ea8cb4773d6d4703e3", - "sha256:29e256649f42771829974e742061c3501cc50cf16e63f91ed8d1bf98242e5507", - "sha256:2d800b9c2eaf0684c08be5f50e52bfa2aa920e7163c2ea43f4f431e829b4f0fd", - "sha256:2d93a049d29df172f48bcb09acf9226318e712ce67374f893b460b42cc1380ae", - "sha256:31a9a04ecccd6b03e2b0e12e82131f1488dea5555a13a4d32f064e22a6003cfe", - "sha256:3d1a50e461615747dd93c099f297c1994d472b0f4d2db8a64e55b1edf704ec1c", - "sha256:449c957ffc6bc2309e1fbe67ab7d2c1efca89d3f4912baeb8ead207bb3cc1cd4", - "sha256:4a88510731cd8d4befaba5fbd734a7dd914de5ab8132a5b3dde0bbd6c9476c64", - "sha256:4c322cbaa4ed78a8aac89b2174a6df398faf50e5fc12c4c191c40c59d5e28357", - "sha256:5395da939ffa959974577eff2cbfc24b004a2fb6c346918f39966a5786874e54", - "sha256:5587bba41399854703212b87071c6d8638fa6e61656385875f8c6dff92b2e461", - "sha256:56c11efb0a89700987d05597b08a1efcd78d74c52febe530126785e1b1a285f4", - "sha256:5999c4662631cb798496535afbd837a102859568adc67d75d2045e31ec3ac497", - "sha256:59ddd85a1214862ce7c7c66457f05543b6a275b70a65de366030d56159a979f0", - "sha256:6347f1a58e658b97b0a0d1ff7658a03cb79bdbda0331603bed24dd7054a6dea1", - "sha256:6628d750041550c5d9da50bb40b5cf28a2e63b9388bac10fedd4f19236ef4957", - "sha256:6afb336e23a793cd3b6476c30f030a0d4c7539cd81649683b5e0c1b0ab0bf350", - "sha256:6c8148e0b52bf9535c40c48faebb00cb294ee577ca069d21bd5c48d302a83780", - "sha256:76577f13333b4fe345c3704811ac7509b31499132ff0181f25ee26619de2c843", - "sha256:7c0da7e44d0c9108d8b98469338705e07f4bb7dab96dbd8fa4e91b337db42548", - "sha256:7de89c8456525650ffa2bb56a3eee6af891e98f498babd43ae307bd42dca98f6", - "sha256:7ec362167e2c9fd178f82f252b6d97669d7245695dc057ee182118042026da40", - "sha256:7fce6cbc6c170ede0221cc8c91b285f7f3c8b9fe28283b51885ff621bbe0f8ee", - "sha256:85cba594433915d5c9a0d14b24cfba0339f57a2fff203a5d4fd070e593307d0b", - "sha256:8b0af1cf36b93cee99a31a545fe91d08223e64390c5ecc5e94c39511832a4bb6", - "sha256:9130ddf1ae9978abe63808b6b60a897e41fccb834408cde79522feb37fb72fb0", - "sha256:99449cd5366fe4608e7226c6cae80873296dfa0cde45d9b498fefa1de315a09e", - "sha256:9de955d98e02fab288c7718662afb33aab64212ecb368c5dc866d9a57bf48880", - "sha256:a0fb2cb4204ddb456a8e32381f9a90000429489a25f64e817e6ff94879d432fc", - "sha256:a165442348c211b5dea67c0206fc61366212d7082ba8118c8c5c1c853ea4d82e", - "sha256:ab2a60d57ca88e1d4ca34a10e9fb4ab2ac5ad315543351de3a612bbb0560bead", - "sha256:abc06b97407868ef38f3d172762f4069323de52f2b70d133d096a48d72215d28", - "sha256:af887845b8c2e060eb5605ff72b6f2dd2aab7a761379373fd89d314f4752abbf", - "sha256:b19255dde4b4f4c32e012038f2c169bb72e7f081552bea4641cab4d88bc409dd", - "sha256:b3ded839a5c5608eec8b6f9ae9a62cb22cd037ea97c627f38ae0841a48f09eae", - "sha256:c1445a0c562ed561d06d8cbc5c8916c6008a31c60bc3655cdd2de1d3bf5174a0", - "sha256:d0272228fabe78ce00a3365ffffd6f643f57a91043e119c289aaba202f4095b0", - "sha256:d0b51530877d3ad7a8d47b2fff0c8df3b8f3b8deddf057379ba50b13df2a5eae", - "sha256:d0f77539733e0ec2475ddcd4e26777d08996f8cd55d2aef82ec4d3896687abda", - "sha256:d2b8f245dad9e331540c350285910b20dd913dc86d4ee410c11d48523c4fd546", - "sha256:dd032e8422a52e5a4860e062eb84ac94ea08861d334a4bcaf142a63ce8ad4802", - "sha256:de49d77e968de6626ba7ef4472323f9d2e5a56c1d85b7c0e2a190b2173d3b9be", - "sha256:de839c3a1826a909fdbfe05f6fe2167c4ab033f1133757b5936efe2f84904c07", - "sha256:e80ed5a9939ceb6fda42811542f31c8602be336b1fb977bccb012e83da7e4936", - "sha256:ea30a42dc94d42f2ba4d0f7c0ffb4f4f9baa1b23045910c0c32df9c9902cb272", - "sha256:ea513a25976d21733bff523e0ca836ef1679630ef4ad22d46987d04b372d57fc", - "sha256:ed19b74e81b10b592084a5ad1e70f845f0aacb57577018d31de064e71ffa267a", - "sha256:f5af52738e225fcc526ae64071b7e5342abe03f42e0e8918227b38c9aa711e28", - "sha256:fae37373155f5ef9b403ab48af5136ae9851151f7aacd9926251ab26b953118b" - ], - "markers": "python_version >= '3.7'", - "version": "==1.8.1" + "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", + "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", + "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", + "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", + "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", + "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", + "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", + "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", + "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", + "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", + "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", + "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", + "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", + "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", + "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", + "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", + "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", + "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", + "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", + "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", + "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", + "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", + "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", + "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", + "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", + "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", + "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", + "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", + "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", + "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", + "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", + "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", + "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", + "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", + "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", + "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", + "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", + "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", + "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", + "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", + "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", + "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", + "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", + "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", + "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", + "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", + "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", + "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", + "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", + "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", + "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", + "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", + "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", + "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", + "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", + "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", + "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", + "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", + "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", + "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", + "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", + "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", + "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", + "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", + "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", + "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", + "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", + "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", + "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", + "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", + "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", + "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", + "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", + "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" + ], + "markers": "python_version >= '3.7'", + "version": "==1.9.2" }, "zipp": { "hashes": [ - "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa", - "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766" + "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", + "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" ], "markers": "python_version >= '3.7'", - "version": "==3.11.0" + "version": "==3.15.0" }, "zope.interface": { "hashes": [ - "sha256:008b0b65c05993bb08912f644d140530e775cf1c62a072bf9340c2249e613c32", - "sha256:0217a9615531c83aeedb12e126611b1b1a3175013bbafe57c702ce40000eb9a0", - "sha256:0fb497c6b088818e3395e302e426850f8236d8d9f4ef5b2836feae812a8f699c", - "sha256:17ebf6e0b1d07ed009738016abf0d0a0f80388e009d0ac6e0ead26fc162b3b9c", - "sha256:311196634bb9333aa06f00fc94f59d3a9fddd2305c2c425d86e406ddc6f2260d", - "sha256:3218ab1a7748327e08ef83cca63eea7cf20ea7e2ebcb2522072896e5e2fceedf", - "sha256:404d1e284eda9e233c90128697c71acffd55e183d70628aa0bbb0e7a3084ed8b", - "sha256:4087e253bd3bbbc3e615ecd0b6dd03c4e6a1e46d152d3be6d2ad08fbad742dcc", - "sha256:40f4065745e2c2fa0dff0e7ccd7c166a8ac9748974f960cd39f63d2c19f9231f", - "sha256:5334e2ef60d3d9439c08baedaf8b84dc9bb9522d0dacbc10572ef5609ef8db6d", - "sha256:604cdba8f1983d0ab78edc29aa71c8df0ada06fb147cea436dc37093a0100a4e", - "sha256:6373d7eb813a143cb7795d3e42bd8ed857c82a90571567e681e1b3841a390d16", - "sha256:655796a906fa3ca67273011c9805c1e1baa047781fca80feeb710328cdbed87f", - "sha256:65c3c06afee96c654e590e046c4a24559e65b0a87dbff256cd4bd6f77e1a33f9", - "sha256:696f3d5493eae7359887da55c2afa05acc3db5fc625c49529e84bd9992313296", - "sha256:6e972493cdfe4ad0411fd9abfab7d4d800a7317a93928217f1a5de2bb0f0d87a", - "sha256:7579960be23d1fddecb53898035a0d112ac858c3554018ce615cefc03024e46d", - "sha256:765d703096ca47aa5d93044bf701b00bbce4d903a95b41fff7c3796e747b1f1d", - "sha256:7e66f60b0067a10dd289b29dceabd3d0e6d68be1504fc9d0bc209cf07f56d189", - "sha256:8a2ffadefd0e7206adc86e492ccc60395f7edb5680adedf17a7ee4205c530df4", - "sha256:959697ef2757406bff71467a09d940ca364e724c534efbf3786e86eee8591452", - "sha256:9d783213fab61832dbb10d385a319cb0e45451088abd45f95b5bb88ed0acca1a", - "sha256:a16025df73d24795a0bde05504911d306307c24a64187752685ff6ea23897cb0", - "sha256:a2ad597c8c9e038a5912ac3cf166f82926feff2f6e0dabdab956768de0a258f5", - "sha256:bfee1f3ff62143819499e348f5b8a7f3aa0259f9aca5e0ddae7391d059dce671", - "sha256:d169ccd0756c15bbb2f1acc012f5aab279dffc334d733ca0d9362c5beaebe88e", - "sha256:d514c269d1f9f5cd05ddfed15298d6c418129f3f064765295659798349c43e6f", - "sha256:d692374b578360d36568dd05efb8a5a67ab6d1878c29c582e37ddba80e66c396", - "sha256:dbaeb9cf0ea0b3bc4b36fae54a016933d64c6d52a94810a63c00f440ecb37dd7", - "sha256:dc26c8d44472e035d59d6f1177eb712888447f5799743da9c398b0339ed90b1b", - "sha256:e1574980b48c8c74f83578d1e77e701f8439a5d93f36a5a0af31337467c08fcf", - "sha256:e74a578172525c20d7223eac5f8ad187f10940dac06e40113d62f14f3adb1e8f", - "sha256:e945de62917acbf853ab968d8916290548df18dd62c739d862f359ecd25842a6", - "sha256:f0980d44b8aded808bec5059018d64692f0127f10510eca71f2f0ace8fb11188", - "sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7", - "sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b" + "sha256:0326cc72f232167498eb4814232c960881bd8eb5e1f7e92ed07ea7afbf21dbb0", + "sha256:04ab70d12e46f54f2c614e9ca12f3d29de41101f05563f7c9bd3351fcf6d85c3", + "sha256:090cc8c625f1853cfcaa46e333e151210565a4e1379a6f509069b53389b1ec23", + "sha256:167ea1a5c28aad2fa7fb0ca8761229bf54766ab6e696c80e592ee8c936ab1776", + "sha256:1ad9d87bee6c49bb00d75ad854288e41a4acbe3b7d3576faeb1662d2f0e48e00", + "sha256:2900750bc08e1adc14799eecf3afb6bcfa93d334e32407273af051b0e1bf198b", + "sha256:2cd536f007e875d330e7e3f80204cede6d4dad7d5cdc7019d77b11b501e3b132", + "sha256:39273357177f1566134c18f6a26076e5b1938292fe5994f5197a0ed2374882b4", + "sha256:415526873ad6ccea853801dbfe6074dbd5e16487854b17c343d9fc7f095bb483", + "sha256:48299561fe59dfbb4430b6bf0a2f3a3cbfc8bc25e03f8861a3a57222b57a9512", + "sha256:4a208684351acf68357ab17aacaa3bbdd293aa039b73a891c281c4df63c625e2", + "sha256:4c518a72e10103b1d74f616a6145711a002601665c147e264e9e9e0823f339b1", + "sha256:57e981db978a12f4612c599ebbb68ff2dbd81a4617186a12f5c727e686e31461", + "sha256:58ce64e3227ac6fd54c9053e0f452bfba4f3f1ca3d4387f34ee1476d17244fe5", + "sha256:636d9860d05c8faa563d88196c264824aacb6253e7f3cb43d8fc983e5402a2cd", + "sha256:6ed7d7a3d2c45921ad08c709a3130ecf580341de0a675d9e19dccf3917e7f8c4", + "sha256:7371e15df1aaffb076c2a886b2a2932dac171d45581b4fa0be2ced477e480777", + "sha256:77f1f29759014732e3b7addfcfaf14c73a0f325af9d628d5f811d4e58043b3c3", + "sha256:88ac8670b5f4dd1b743a04558cf4ad3e581a2c21f42ffaa190a3676e5e22e3b7", + "sha256:976d7b50221f3cd1b2c8cfda0e1f3e371950124f288b5f97a0b28ffda4f56844", + "sha256:98586b7a16add0503b8851e848bd06e8b4b5d9ead825b28ab93a982c3e0a76ee", + "sha256:9970222b1ad15636422e9cc95ae0dfbbe5ca4127a94027c94dbdb2b1ee6ee618", + "sha256:9c98ca179a060ce48564407179839390acd804f0a70a9954a30a605b5b251540", + "sha256:abc4dd63500f34d8f11fee7f5967f8d56856964c8530d468ab53bb72ceee4712", + "sha256:b42d6d6de23d3a287342b286864b4bef371fa4fe0409fda79a1eaec01af2b1cf", + "sha256:b6cd75530f51179a4165ee1bccff1a690ea64e001e02e1317dc177dee15ba13f", + "sha256:c1c4ff056cdabe871ff89bedab16b4123098af1af8ddbb20bf43bcd8fe6474fe", + "sha256:cb7d92c6579bdcbe18933b8b914d2141760efa47ea586a4b9206320ec00bd587", + "sha256:d711955d9f183d78a1937f69d11329bafa40741c0d6f97d3a210fe21fd666508", + "sha256:db0ca240b647388754ad4c9cee053a9bd731f933943c5cadaf2195ce3b953652", + "sha256:ed58ffd21752f9b92258284d59d8218dfb0bf0fcb41c75ffa4c1317fdf58bb39", + "sha256:f16319abdd98f728acca7e27750495d7ddbbb566a595f44f52f70852c93a69c7", + "sha256:f4f97f40bd9d9dca64fa68e0329db3269d6cb97e207946c5ccdfa865a6d32b9b", + "sha256:f73552012b31af214e8f0e7b6e43066c968f189d2e2f005e271e3308ee6fa3f2", + "sha256:fca350cadf205ff20700b10075a894a2e1cdf201321f1d5d25950b43013a4148" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.5.2" + "markers": "python_version >= '3.7'", + "version": "==6.1a2" } } } diff --git a/dev-requirements.txt b/dev-requirements.txt index 3ce8290..5f6cd78 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,135 +1,178 @@ -i https://pypi.python.org/simple -aiohttp==3.8.1; python_version >= '3.6' -aiosignal==1.3.1; python_version >= '3.7' +aiohttp==3.8.2 ; python_version >= '3.6' +aiosignal==1.3.1 ; python_version >= '3.7' +ape-solidity==0.6.3 ; python_version >= '3.8' and python_version < '4' appdirs==1.4.4 -async-timeout==4.0.2; python_version >= '3.6' -attrs==22.1.0; python_version >= '3.5' -autobahn==22.7.1; python_version >= '3.7' +appnope==0.1.3 ; sys_platform == 'darwin' +asttokens==2.2.1 +async-timeout==4.0.2 ; python_version >= '3.6' +attrs==23.1.0 ; python_version >= '3.7' +autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -base58==2.1.1; python_version >= '3.5' -bitarray==2.6.0 +backcall==0.2.0 +backports.zoneinfo==0.2.1 ; python_version >= '3.6' +base58==1.0.3 +bitarray==2.7.3 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2022.12.7; python_version >= '3.6' +certifi==2022.12.7 ; python_version >= '3.6' cffi==1.15.1 -cfgv==3.3.1 -charset-normalizer==2.1.1; python_version >= '3.6' -click==8.1.3; python_version >= '3.7' -colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -constant-sorrow==0.1.0a9; python_version >= '3' +cfgv==3.3.1 ; python_full_version >= '3.6.1' +charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' +click==8.1.3 ; python_version >= '3.7' +colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +commonmark==0.9.1 +constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -coverage[toml]==6.5.0 -cryptography==38.0.4; python_version >= '3.6' -cytoolz==0.12.0; implementation_name == 'cpython' -dateparser==1.1.4; python_version >= '3.7' -decorator==5.1.1 +coverage==6.5.0 +cryptography==40.0.2 ; python_version >= '3.6' +cytoolz==0.12.1 ; python_version >= '3.6' +dataclassy==0.11.1 ; python_version >= '3.6' +dateparser==1.1.8 ; python_version >= '3.7' +decorator==5.1.1 ; python_version >= '3.5' +deprecated==1.2.13 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' distlib==0.3.6 +eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' eip712-structs==1.1.0 -eth-abi==3.0.1; python_version >= '3.7' and python_version < '4' -eth-account==0.7.0; python_version >= '3.6' and python_version < '4' -eth-bloom==1.0.4; python_version >= '3.6' and python_version < '4' -eth-hash[pycryptodome]==0.3.3; python_version >= '3.5' and python_version < '4' -eth-keyfile==0.6.0 +eth-abi==4.0.0 ; python_version >= '3.7' and python_version < '4' +eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' +eth-ape==0.6.8 ; python_version < '3.11' and python_version >= '3.8' +eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' +eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' +eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' -eth-tester==0.8.0b1; python_full_version >= '3.6.8' and python_version < '4' -eth-typing==3.2.0; python_version >= '3.6' and python_version < '4' -eth-utils==2.1.0; python_version >= '3.7' and python_version < '4' -exceptiongroup==1.0.4 -filelock==3.8.0 -flask==2.2.2; python_version >= '3.7' -frozenlist==1.3.3; python_version >= '3.7' --e git+https://github.com/nucypher/nucypher.git@9ed0186060fa59da827b2e49f70530ce65745054#egg=nucypher -greenlet==2.0.1 +eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' +eth-tester==0.8.0b3 ; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' +ethpm-types==0.4.5 ; python_version >= '3.8' and python_version < '4' +evm-trace==0.1.0a18 ; python_version >= '3.8' and python_version < '4' +exceptiongroup==1.1.1 ; python_version >= '3.7' +executing==1.2.0 +ferveo==0.1.8 ; python_version >= '3.7' +filelock==3.12.0 ; python_version >= '3.7' +flask==2.2.5 ; python_version >= '3.7' +frozenlist==1.3.3 ; python_version >= '3.7' +greenlet==2.0.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hendrix==4.0.0 -hexbytes==0.3.0; python_version >= '3.7' and python_version < '4' -humanize==4.4.0; python_version >= '3.7' +hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' +humanize==4.6.0 ; python_version >= '3.7' hyperlink==21.0.0 -hypothesis==6.58.1 -identify==2.5.9 -idna==3.4; python_version >= '3.5' -importlib-metadata==5.1.0; python_version < '3.10' +hypothesis==6.75.1 ; python_version >= '3.7' +identify==2.5.23 ; python_version >= '3.7' +idna==3.4 ; python_version >= '3.5' +ijson==3.2.0.post0 +importlib-metadata==6.6.0 ; python_version >= '3.7' +importlib-resources==5.12.0 ; python_version >= '3.7' incremental==22.10.0 -iniconfig==1.1.1 -ipfshttpclient==0.8.0a2; python_full_version >= '3.6.2' and python_full_version not in '3.7.0, 3.7.1' -itsdangerous==2.1.2; python_version >= '3.7' -jinja2==3.0.3; python_version >= '3.6' -jsonschema==4.17.1; python_version >= '3.7' +iniconfig==2.0.0 ; python_version >= '3.7' +ipython==8.12.1 ; python_version >= '3.8' +itsdangerous==2.1.2 ; python_version >= '3.7' +jedi==0.18.2 ; python_version >= '3.6' +jinja2==3.0.3 ; python_version >= '3.6' +jsonschema==4.18.0a6 ; python_version >= '3.8' +jsonschema-specifications==2023.3.6 ; python_version >= '3.8' lru-dict==1.1.8 -mako==1.2.4; python_version >= '3.7' -markupsafe==2.1.1; python_version >= '3.7' -marshmallow==3.19.0; python_version >= '3.7' +mako==1.2.4 ; python_version >= '3.7' +markupsafe==2.1.2 ; python_version >= '3.7' +marshmallow==3.19.0 ; python_version >= '3.7' +matplotlib-inline==0.1.6 ; python_version >= '3.5' maya==0.6.1 -mnemonic==0.20; python_version >= '3.5' +mnemonic==0.20 ; python_version >= '3.5' +morphys==1.0 +msgpack==1.0.5 msgpack-python==0.5.6 -msgpack==1.0.4 -multiaddr==0.0.9; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -multidict==6.0.2; python_version >= '3.7' -mypy-extensions==0.4.3 -mypy==0.991 -netaddr==0.8.0 -nodeenv==1.7.0 -nucypher-core==0.4.1 -packaging==21.3; python_version >= '3.6' -parsimonious==0.8.1 -pendulum==2.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -platformdirs==2.5.4 -pluggy==1.0.0 -pre-commit==2.20.0 -prometheus-client==0.15.0 -protobuf==3.20.1; python_version >= '3.7' -py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' -py-evm==0.6.1a1 -py-solc-x==0.10.1 -py==1.11.0 -pyasn1-modules==0.2.8 -pyasn1==0.4.8 +msgspec==0.14.2 ; python_version >= '3.8' +multidict==5.2.0 ; python_version >= '3.6' +mypy-extensions==0.4.4 ; python_version >= '2.7' +nodeenv==1.7.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +nucypher @ git+https://github.com/nucypher/nucypher.git@20d750a1c6869beee8a6d137cea7e3c7d3e1f108 +nucypher-core==0.7.0 +numpy==1.24.3 ; python_version >= '3.8' +packaging==23.1 ; python_version >= '3.7' +pandas==1.5.3 ; python_version >= '3.8' +parsimonious==0.9.0 +parso==0.8.3 ; python_version >= '3.6' +pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' +pexpect==4.8.0 +pickleshare==0.7.5 +pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' +platformdirs==3.5.0 ; python_version >= '3.7' +pluggy==1.0.0 ; python_version >= '3.6' +pre-commit==3.3.1 +prometheus-client==0.16.0 ; python_version >= '3.6' +prompt-toolkit==3.0.38 ; python_full_version >= '3.7.0' +protobuf==4.23.0rc2 ; python_version >= '3.7' +ptyprocess==0.7.0 +pure-eval==0.2.2 +py==1.11.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +py-cid==0.3.0 +py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' +py-evm==0.6.1a2 +py-geth==3.12.0 ; python_version >= '3' +py-multibase==1.0.3 +py-multicodec==0.2.1 +py-multihash==0.2.3 +py-solc-x==1.1.1 ; python_version >= '3.6' and python_version < '4' +pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.16.0 +pycryptodome==3.17 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pydantic==1.10.7 ; python_version >= '3.7' pyethash==0.1.27 -pyflakes==3.0.1 -pynacl==1.5.0; python_version >= '3.6' -pyopenssl==22.1.0; python_version >= '3.6' -pyparsing==3.0.9; python_full_version >= '3.6.8' -pyrsistent==0.19.2; python_version >= '3.7' +pygithub==1.58.1 ; python_version >= '3.7' +pygments==2.15.1 ; python_version >= '3.7' +pyjwt[crypto]==2.6.0 ; python_version >= '3.7' +pynacl==1.5.0 ; python_version >= '3.6' +pyopenssl==23.1.1 ; python_version >= '3.6' pysha3==1.0.2 +pytest==6.2.5 pytest-cov==4.0.0 pytest-mock==3.10.0 -pytest-timeout==2.1.0 -pytest-twisted==1.14.0 -pytest==6.2.5 -python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' -pytz-deprecation-shim==0.1.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pytz==2022.6 -pytzdata==2020.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -pyyaml==6.0 -regex==2022.10.31; python_version >= '3.6' -requests==2.28.1; python_version >= '3.7' and python_version < '4' +pytest-timeout==2.1.0 ; python_version >= '3.6' +pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +python-baseconv==1.2.2 +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pytz==2023.3 +pyyaml==6.0 ; python_version >= '3.6' +referencing==0.28.0 ; python_version >= '3.8' +regex==2023.5.4 ; python_version >= '3.6' +requests==2.29.0 ; python_version >= '3.7' +rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 -semantic-version==2.10.0; python_version >= '2.7' -sentry-sdk==1.12.1 +rpds-py==0.7.1 ; python_version >= '3.8' +semantic-version==2.10.0 ; python_version >= '2.7' +sentry-sdk==1.22.0 service-identity==21.1.0 -six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' +setuptools==67.7.2 ; python_version >= '3.7' +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 -tabulate==0.9.0; python_version >= '3.7' -toml==0.10.2 -tomli==2.0.1 -toolz==0.12.0; python_version >= '3.5' -trie==2.0.2; python_version >= '3.6' and python_version < '4' -twisted==22.10.0; python_full_version >= '3.7.1' -txaio==22.2.1; python_version >= '3.6' -typing-extensions==4.4.0; python_version >= '3.7' -tzdata==2022.6; python_version >= '3.6' -tzlocal==4.2; python_version >= '3.6' -urllib3==1.26.13; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +sqlalchemy==2.0.12 ; python_version >= '3.7' +stack-data==0.6.2 +tabulate==0.9.0 ; python_version >= '3.7' +time-machine==2.9.0 ; python_version >= '3.7' +toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3' +tomli==2.0.1 ; python_version >= '3.7' +toolz==0.12.0 ; python_version >= '3.5' +tqdm==4.65.0 ; python_version >= '3.7' +traitlets==5.9.0 ; python_version >= '3.7' +trie==2.1.0 ; python_version >= '3.7' and python_version < '4' +twisted==22.10.0 ; python_full_version >= '3.7.1' +txaio==23.1.1 ; python_version >= '3.7' +typing-extensions==4.5.0 ; python_version >= '3.7' +tzdata==2023.3 ; python_version >= '2' +tzlocal==5.0b2 ; python_version >= '3.7' +urllib3==1.26.15 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' varint==1.0.2 -virtualenv==20.17.0 -watchdog==2.1.9; python_version >= '3.6' -web3==6.0.0b6; python_full_version >= '3.7.2' -websockets==10.4; python_version >= '3.7' -werkzeug==2.2.2; python_version >= '3.7' -yarl==1.8.1; python_version >= '3.7' -zipp==3.11.0; python_version >= '3.7' -zope.interface==5.5.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +virtualenv==20.23.0 ; python_version >= '3.7' +watchdog==2.3.1 ; python_version >= '3.6' +wcwidth==0.2.6 +web3==6.2.0 ; python_full_version >= '3.7.2' +websockets==11.0.2 ; python_version >= '3.7' +werkzeug==2.3.3 ; python_version >= '3.8' +wrapt==1.15.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +yarl==1.9.2 ; python_version >= '3.7' +zipp==3.15.0 ; python_version >= '3.7' +zope.interface==6.1a2 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 1c3ba02..dc3fbf3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,107 +1,107 @@ -i https://pypi.python.org/simple -aiohttp==3.8.1; python_version >= '3.6' -aiosignal==1.3.1; python_version >= '3.7' +aiohttp==3.8.2 ; python_version >= '3.6' +aiosignal==1.3.1 ; python_version >= '3.7' appdirs==1.4.4 -async-timeout==4.0.2; python_version >= '3.6' -attrs==22.1.0; python_version >= '3.5' -autobahn==22.7.1; python_version >= '3.7' +async-timeout==4.0.2 ; python_version >= '3.6' +attrs==23.1.0 ; python_version >= '3.7' +autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -base58==2.1.1; python_version >= '3.5' -bitarray==2.6.0 +backports.zoneinfo==0.2.1 ; python_version >= '3.6' +bitarray==2.7.3 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2022.12.7; python_version >= '3.6' +certifi==2022.12.7 ; python_version >= '3.6' cffi==1.15.1 -charset-normalizer==2.1.1; python_version >= '3.6' -click==8.1.3; python_version >= '3.7' -colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -constant-sorrow==0.1.0a9; python_version >= '3' +charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' +click==8.1.3 ; python_version >= '3.7' +colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -cryptography==38.0.4; python_version >= '3.6' -cytoolz==0.12.0; implementation_name == 'cpython' -dateparser==1.1.4; python_version >= '3.7' +cryptography==40.0.2 ; python_version >= '3.6' +cytoolz==0.12.1 ; python_version >= '3.6' +dateparser==1.1.8 ; python_version >= '3.7' eip712-structs==1.1.0 -eth-abi==3.0.1; python_version >= '3.7' and python_version < '4' -eth-account==0.7.0; python_version >= '3.6' and python_version < '4' -eth-bloom==1.0.4; python_version >= '3.6' and python_version < '4' -eth-hash[pycryptodome]==0.3.3; python_version >= '3.5' and python_version < '4' -eth-keyfile==0.6.0 +eth-abi==4.0.0 ; python_version >= '3.7' and python_version < '4' +eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' +eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' +eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' +eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' -eth-tester==0.8.0b1; python_full_version >= '3.6.8' and python_version < '4' -eth-typing==3.2.0; python_version >= '3.6' and python_version < '4' -eth-utils==2.1.0; python_version >= '3.7' and python_version < '4' +eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' +eth-tester==0.8.0b3 ; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' +ferveo==0.1.8 ; python_version >= '3.7' +flask==2.2.5 ; python_version >= '3.7' flask-cors==3.0.10 -flask==2.2.2; python_version >= '3.7' -frozenlist==1.3.3; python_version >= '3.7' -git+https://github.com/nucypher/nucypher.git@9ed0186060fa59da827b2e49f70530ce65745054#egg=nucypher +frozenlist==1.3.3 ; python_version >= '3.7' hendrix==4.0.0 -hexbytes==0.3.0; python_version >= '3.7' and python_version < '4' -humanize==4.4.0; python_version >= '3.7' +hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' +humanize==4.6.0 ; python_version >= '3.7' hyperlink==21.0.0 -idna==3.4; python_version >= '3.5' -importlib-metadata==5.1.0; python_version < '3.10' +idna==3.4 ; python_version >= '3.5' +importlib-metadata==6.6.0 ; python_version >= '3.7' +importlib-resources==5.12.0 ; python_version >= '3.7' incremental==22.10.0 -ipfshttpclient==0.8.0a2; python_full_version >= '3.6.2' and python_full_version not in '3.7.0, 3.7.1' -itsdangerous==2.1.2; python_version >= '3.7' -jinja2==3.0.3; python_version >= '3.6' -jsonschema==4.17.1; python_version >= '3.7' +itsdangerous==2.1.2 ; python_version >= '3.7' +jinja2==3.0.3 ; python_version >= '3.6' +jsonschema==4.18.0a6 ; python_version >= '3.8' +jsonschema-specifications==2023.3.6 ; python_version >= '3.8' lru-dict==1.1.8 -mako==1.2.4; python_version >= '3.7' -markupsafe==2.1.1; python_version >= '3.7' -marshmallow==3.19.0; python_version >= '3.7' +mako==1.2.4 ; python_version >= '3.7' +markupsafe==2.1.2 ; python_version >= '3.7' +marshmallow==3.19.0 ; python_version >= '3.7' maya==0.6.1 -mnemonic==0.20; python_version >= '3.5' +mnemonic==0.20 ; python_version >= '3.5' +msgpack==1.0.5 msgpack-python==0.5.6 -msgpack==1.0.4 -multiaddr==0.0.9; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -multidict==6.0.2; python_version >= '3.7' -mypy-extensions==0.4.3 -netaddr==0.8.0 -nucypher-core==0.4.1 -packaging==21.3; python_version >= '3.6' -parsimonious==0.8.1 -pendulum==2.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -protobuf==3.20.1; python_version >= '3.7' -py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' -py-evm==0.6.1a1 -pyasn1-modules==0.2.8 -pyasn1==0.4.8 +multidict==5.2.0 ; python_version >= '3.6' +mypy-extensions==0.4.4 ; python_version >= '2.7' +nucypher @ git+https://github.com/nucypher/nucypher.git@20d750a1c6869beee8a6d137cea7e3c7d3e1f108 +nucypher-core==0.7.0 +packaging==23.1 ; python_version >= '3.7' +parsimonious==0.9.0 +pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' +pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' +protobuf==4.23.0rc2 ; python_version >= '3.7' +py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' +py-evm==0.6.1a2 +pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.16.0 +pycryptodome==3.17 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' pyethash==0.1.27 -pynacl==1.5.0; python_version >= '3.6' -pyopenssl==22.1.0; python_version >= '3.6' -pyparsing==3.0.9; python_full_version >= '3.6.8' -pyrsistent==0.19.2; python_version >= '3.7' +pynacl==1.5.0 ; python_version >= '3.6' +pyopenssl==23.1.1 ; python_version >= '3.6' pysha3==1.0.2 -python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' -pytz-deprecation-shim==0.1.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pytz==2022.6 -pytzdata==2020.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -regex==2022.10.31; python_version >= '3.6' -requests==2.28.1; python_version >= '3.7' and python_version < '4' +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pytz==2023.3 +referencing==0.28.0 ; python_version >= '3.8' +regex==2023.5.4 ; python_version >= '3.6' +requests==2.29.0 ; python_version >= '3.7' rlp==3.0.0 -semantic-version==2.10.0; python_version >= '2.7' +rpds-py==0.7.1 ; python_version >= '3.8' +semantic-version==2.10.0 ; python_version >= '2.7' service-identity==21.1.0 -six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' +setuptools==67.7.2 ; python_version >= '3.7' +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 -tabulate==0.9.0; python_version >= '3.7' -toolz==0.12.0; python_version >= '3.5' -trie==2.0.2; python_version >= '3.6' and python_version < '4' -twisted==22.10.0; python_full_version >= '3.7.1' -txaio==22.2.1; python_version >= '3.6' -typing-extensions==4.4.0; python_version >= '3.7' -tzdata==2022.6; python_version >= '3.6' -tzlocal==4.2; python_version >= '3.6' -urllib3==1.26.13; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -varint==1.0.2 -watchdog==2.1.9; python_version >= '3.6' -web3==6.0.0b6; python_full_version >= '3.7.2' -websockets==10.4; python_version >= '3.7' -werkzeug==2.2.2; python_version >= '3.7' -yarl==1.8.1; python_version >= '3.7' -zipp==3.11.0; python_version >= '3.7' -zope.interface==5.5.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +tabulate==0.9.0 ; python_version >= '3.7' +time-machine==2.9.0 ; python_version >= '3.7' +toolz==0.12.0 ; python_version >= '3.5' +trie==2.1.0 ; python_version >= '3.7' and python_version < '4' +twisted==22.10.0 ; python_full_version >= '3.7.1' +txaio==23.1.1 ; python_version >= '3.7' +typing-extensions==4.5.0 ; python_version >= '3.7' +tzdata==2023.3 ; python_version >= '2' +tzlocal==5.0b2 ; python_version >= '3.7' +urllib3==1.26.15 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +watchdog==2.3.1 ; python_version >= '3.6' +web3==6.2.0 ; python_full_version >= '3.7.2' +websockets==11.0.2 ; python_version >= '3.7' +werkzeug==2.3.3 ; python_version >= '3.8' +yarl==1.9.2 ; python_version >= '3.7' +zipp==3.15.0 ; python_version >= '3.7' +zope.interface==6.1a2 ; python_version >= '3.7' From 3a3dfe265830829df811d8806d11921c681339fe Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 11:04:47 -0400 Subject: [PATCH 002/114] Update tests to conform to changes in `nucypher` (API and testing), and `nucypher-core` (API). --- .github/workflows/tests.yml | 2 +- porter/fields/key.py | 9 +- porter/utils.py | 6 +- scripts/install_solc.py | 6 -- scripts/run_unit_tests.sh | 5 - setup.py | 1 - tests/conftest.py | 142 +++++++++++++++++++++------- tests/test_fields.py | 4 +- tests/test_porter_cli.py | 12 ++- tests/test_porter_specifications.py | 7 +- tests/test_porter_web_controller.py | 10 +- 11 files changed, 138 insertions(+), 66 deletions(-) delete mode 100644 scripts/install_solc.py delete mode 100755 scripts/run_unit_tests.sh diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5e48e60..e371ad5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10"] + python-version: ["3.8", "3.10"] steps: - uses: actions/checkout@v2 diff --git a/porter/fields/key.py b/porter/fields/key.py index a74b2e2..76cc20f 100644 --- a/porter/fields/key.py +++ b/porter/fields/key.py @@ -8,10 +8,15 @@ class Key(BaseField, fields.Field): def _serialize(self, value, attr, obj, **kwargs): - return bytes(value).hex() + if isinstance(value, PublicKey): + data = value.to_compressed_bytes() + else: + data = bytes(value) + + return data.hex() def _deserialize(self, value, attr, data, **kwargs): try: - return PublicKey.from_bytes(bytes.fromhex(value)) + return PublicKey.from_compressed_bytes(bytes.fromhex(value)) except InvalidNativeDataTypes as e: raise InvalidInputData(f"Could not convert input for {self.name} to an Umbral Key: {e}") \ No newline at end of file diff --git a/porter/utils.py b/porter/utils.py index d87769f..4906477 100644 --- a/porter/utils.py +++ b/porter/utils.py @@ -51,17 +51,17 @@ def retrieval_request_setup(enacted_policy, bob.start_learning_loop() # We can pass any number of capsules as args; here we pass just one. - enrico = Enrico(policy_encrypting_key=enacted_policy.public_key) + enrico = Enrico(encrypting_key=enacted_policy.public_key) message_kits = [] if specific_messages: for message in specific_messages: - message_kits.append(enrico.encrypt_message(message)) + message_kits.append(enrico.encrypt_for_pre(message)) else: for i in range(num_random_messages): random_message = "".join( random.choice(string.ascii_lowercase) for j in range(20) ).encode() # random message - message_kits.append(enrico.encrypt_message(random_message)) + message_kits.append(enrico.encrypt_for_pre(random_message)) encode_bytes = (lambda field, obj: field()._serialize(value=obj, attr=None, obj=None)) if encode_for_rest else (lambda field, obj: obj) diff --git a/scripts/install_solc.py b/scripts/install_solc.py deleted file mode 100644 index 563a083..0000000 --- a/scripts/install_solc.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python3 - -from solcx import install_solc -from nucypher.blockchain.eth.sol import SOLIDITY_COMPILER_VERSION - -install_solc(SOLIDITY_COMPILER_VERSION) diff --git a/scripts/run_unit_tests.sh b/scripts/run_unit_tests.sh deleted file mode 100755 index e84a379..0000000 --- a/scripts/run_unit_tests.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -set -e -pytest tests/unit -exit 0 diff --git a/setup.py b/setup.py index f7104a9..e4a7148 100644 --- a/setup.py +++ b/setup.py @@ -72,7 +72,6 @@ class PostDevelopCommand(develop): def run(self): """development setup scripts (pre-requirements)""" develop.run(self) - subprocess.call(f"scripts/install_solc.py") # diff --git a/tests/conftest.py b/tests/conftest.py index a199e8c..3c3a329 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,13 +1,24 @@ import os +from typing import Optional, Iterable import pytest from click.testing import CliRunner +from eth_typing import ChecksumAddress from eth_utils import to_checksum_address +from nucypher.blockchain.economics import EconomicsFactory, Economics +from nucypher.blockchain.eth.actors import Operator +from nucypher.blockchain.eth.agents import ContractAgency, PREApplicationAgent, \ + StakingProvidersReservoir +from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory +from nucypher.blockchain.eth.registry import InMemoryContractRegistry +from nucypher.characters.lawful import Ursula from nucypher.config.constants import TEMPORARY_DOMAIN from nucypher.crypto.powers import DecryptingPower -from nucypher.network.nodes import Learner +from nucypher.network.nodes import Learner, Teacher from nucypher.utilities.logging import GlobalLoggerSettings from nucypher_core import Address, HRAC, TreasureMap +from tests.constants import MOCK_ETH_PROVIDER_URI +from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager from porter.emitters import WebEmitter from porter.main import Porter @@ -20,38 +31,11 @@ 'pytest-nucypher', # Includes external fixtures module from nucypher ] -def pytest_addoption(parser): - parser.addoption("--run-nightly", - action="store_true", - default=False, - help="run tests even if they are marked as nightly") - - -def pytest_configure(config): - message = "{0}: mark test as {0} to run (skipped by default, use '{1}' to include these tests)" - config.addinivalue_line("markers", message.format("nightly", "--run-nightly")) +def pytest_addhooks(pluginmanager): + pluginmanager.set_blocked('ape_test') def pytest_collection_modifyitems(config, items): - - # - # Handle slow tests marker - # - - option_markers = { - "--run-nightly": "nightly" - } - - for option, marker in option_markers.items(): - option_is_set = config.getoption(option) - if option_is_set: - continue - - skip_reason = pytest.mark.skip(reason=f"need {option} option to run tests marked with '@pytest.mark.{marker}'") - for item in items: - if marker in item.keywords: - item.add_marker(skip_reason) - # # Handle Log Level # @@ -72,6 +56,15 @@ def monkeysession(): mpatch.undo() +@pytest.fixture(scope="module") +def monkeymodule(): + from _pytest.monkeypatch import MonkeyPatch + + mpatch = MonkeyPatch() + yield mpatch + mpatch.undo() + + @pytest.fixture(scope='module') def click_runner(): runner = CliRunner() @@ -88,11 +81,96 @@ def _get_random_checksum_address(): return _get_random_checksum_address +@pytest.fixture(scope="module") +def testerchain(mock_testerchain, module_mocker) -> MockBlockchain: + def always_use_mock(*a, **k): + return mock_testerchain + + module_mocker.patch.object( + BlockchainInterfaceFactory, "get_interface", always_use_mock + ) + return mock_testerchain + + +@pytest.fixture(scope='module') +def test_registry(): + return InMemoryContractRegistry() + + +@pytest.fixture(scope="module", autouse=True) +def staking_providers(testerchain, test_registry, monkeymodule): + def faked(self, *args, **kwargs): + return testerchain.stake_providers_accounts[ + testerchain.ursulas_accounts.index(self.transacting_power.account) + ] + + Operator.get_staking_provider_address = faked + return testerchain.stake_providers_accounts + +@pytest.fixture(scope='module') +def application_economics(): + economics = Economics() + return economics + + +@pytest.fixture(scope='module', autouse=True) +def mock_contract_agency(module_mocker, application_economics): + + # Patch + module_mocker.patch.object(EconomicsFactory, 'get_economics', return_value=application_economics) + + from tests.mock.agents import MockContractAgency + + # Monkeypatch # TODO: Use better tooling for this monkeypatch? + get_agent = ContractAgency.get_agent + get_agent_by_name = ContractAgency.get_agent_by_contract_name + ContractAgency.get_agent = MockContractAgency.get_agent + ContractAgency.get_agent_by_contract_name = MockContractAgency.get_agent_by_contract_name + + # Test + yield MockContractAgency() + + # Restore the monkey patching + ContractAgency.get_agent = get_agent + ContractAgency.get_agent_by_contract_name = get_agent_by_name + + +@pytest.fixture(scope="module", autouse=True) +def mock_sample_reservoir(testerchain, mock_contract_agency): + def mock_reservoir( + without: Optional[Iterable[ChecksumAddress]] = None, *args, **kwargs + ): + addresses = { + address: 1 + for address in testerchain.stake_providers_accounts + if address not in without + } + return StakingProvidersReservoir(addresses) + + mock_agent = mock_contract_agency.get_agent(PREApplicationAgent) + mock_agent.get_staking_provider_reservoir = mock_reservoir + + +@pytest.fixture(scope="module", autouse=True) +def mock_substantiate_stamp(module_mocker, monkeymodule): + fake_signature = b'\xb1W5?\x9b\xbaix>\'\xfe`\x1b\x9f\xeb*9l\xc0\xa7\xb9V\x9a\x83\x84\x04\x97\x0c\xad\x99\x86\x81W\x93l\xc3\xbde\x03\xcd"Y\xce\xcb\xf7\x02z\xf6\x9c\xac\x84\x05R\x9a\x9f\x97\xf7\xa02\xb2\xda\xa1Gv\x01' + module_mocker.patch.object(Ursula, "_substantiate_stamp", autospec=True) + module_mocker.patch.object(Ursula, "operator_signature", fake_signature) + module_mocker.patch.object(Teacher, "validate_operator") + + +@pytest.fixture(scope='module') +def test_registry_source_manager(test_registry): + with mock_registry_source_manager(test_registry=test_registry): + yield + + @pytest.fixture(scope="module") @pytest.mark.usefixtures('testerchain', 'agency') -def porter(ursulas, mock_rest_middleware): +def porter(ursulas, mock_rest_middleware, test_registry): porter = Porter(domain=TEMPORARY_DOMAIN, - eth_provider_uri="tester://pyevm", + eth_provider_uri=MOCK_ETH_PROVIDER_URI, + registry=test_registry, abort_on_learning_error=True, start_learning_now=True, known_nodes=ursulas, diff --git a/tests/test_fields.py b/tests/test_fields.py index 686eae3..ef40458 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -111,8 +111,8 @@ def test_key(): other_umbral_pub_key = SecretKey.random().public_key() serialized = field._serialize(value=umbral_pub_key, attr=None, obj=None) - assert serialized == bytes(umbral_pub_key).hex() - assert serialized != bytes(other_umbral_pub_key).hex() + assert serialized == umbral_pub_key.to_compressed_bytes().hex() + assert serialized != other_umbral_pub_key.to_compressed_bytes().hex() deserialized = field._deserialize(value=serialized, attr=None, data=None) assert deserialized == umbral_pub_key diff --git a/tests/test_porter_cli.py b/tests/test_porter_cli.py index 0f7dc42..fd29b0f 100644 --- a/tests/test_porter_cli.py +++ b/tests/test_porter_cli.py @@ -13,14 +13,14 @@ TEST_ETH_PROVIDER_URI = "tester://pyevm" @pytest.fixture(scope="function") -def teacher_uri(mocker, ursulas): +def teacher_uri(mocker, ursulas, test_registry_source_manager): teacher = list(ursulas)[0] teacher_uri = teacher.seed_node_metadata(as_teacher_uri=True) mocker.patch.object(Ursula, 'from_teacher_uri', return_value=teacher) yield teacher_uri -def test_porter_cli_run_simple(click_runner, teacher_uri): +def test_porter_cli_run_simple(click_runner, teacher_uri, test_registry_source_manager): porter_run_command = ('run', '--dry-run', '--network', TEMPORARY_DOMAIN, @@ -47,7 +47,7 @@ def test_porter_cli_run_simple(click_runner, teacher_uri): assert PORTER_RUN_MESSAGE.format(http_port=non_default_port) in output -def test_porter_cli_run_eth_provider_must_be_provided(click_runner, teacher_uri): +def test_porter_cli_run_eth_provider_must_be_provided(click_runner, teacher_uri, test_registry_source_manager): porter_run_command = ('run', '--dry-run', '--network', TEMPORARY_DOMAIN, @@ -58,7 +58,8 @@ def test_porter_cli_run_eth_provider_must_be_provided(click_runner, teacher_uri) def test_cli_run_with_cors_origin(click_runner, - teacher_uri): + teacher_uri, + test_registry_source_manager): allow_origins = ".*\.example\.com,.*\.otherexample\.org" porter_run_command = ('run', @@ -74,7 +75,8 @@ def test_cli_run_with_cors_origin(click_runner, def test_cli_run_with_empty_string_cors_origin(click_runner, - teacher_uri): + teacher_uri, + test_registry_source_manager): empty_string_allow_origins = "" porter_run_command = ('run', diff --git a/tests/test_porter_specifications.py b/tests/test_porter_specifications.py index 603dc46..b8f5949 100644 --- a/tests/test_porter_specifications.py +++ b/tests/test_porter_specifications.py @@ -371,10 +371,9 @@ class BobKeyInputRequirer(BaseSchema): assert "bobkey" in str(e) with pytest.raises(InvalidInputData) as e: - # lets just take a couple bytes off + # lets just take a couple bytes off (less bytes than required) BobKeyInputRequirer().load({'bobkey': "02f0cb3f3a33f16255d9b2586e6c56570aa07bbeb1157e169f1fb114ffb40037"}) assert "Could not convert input for bobkey to an Umbral Key" in str(e) - assert "xpected 33 bytes, got 32" in str(e) - result = BobKeyInputRequirer().load(dict(bobkey=bytes(bob.public_keys(DecryptingPower)).hex())) - assert isinstance(result['bobkey'], PublicKey) \ No newline at end of file + result = BobKeyInputRequirer().load(dict(bobkey=bob.public_keys(DecryptingPower).to_compressed_bytes().hex())) + assert isinstance(result['bobkey'], PublicKey) diff --git a/tests/test_porter_web_controller.py b/tests/test_porter_web_controller.py index 0006149..ca68256 100644 --- a/tests/test_porter_web_controller.py +++ b/tests/test_porter_web_controller.py @@ -142,11 +142,11 @@ def test_retrieve_cfrags(porter, # Try using multiple retrieval kits # multiple_retrieval_kits_params = dict(retrieve_cfrags_params) - enrico = Enrico(policy_encrypting_key=enacted_policy.public_key) - retrieval_kit_1 = RetrievalKit.from_message_kit(enrico.encrypt_message(b'The paradox of education is precisely this')) - retrieval_kit_2 = RetrievalKit.from_message_kit(enrico.encrypt_message(b'that as one begins to become conscious')) - retrieval_kit_3 = RetrievalKit.from_message_kit(enrico.encrypt_message(b'begins to examine the society in which')) - retrieval_kit_4 = RetrievalKit.from_message_kit(enrico.encrypt_message(b'he is (they are) being educated.')) + enrico = Enrico(encrypting_key=enacted_policy.public_key) + retrieval_kit_1 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'The paradox of education is precisely this')) + retrieval_kit_2 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'that as one begins to become conscious')) + retrieval_kit_3 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'begins to examine the society in which')) + retrieval_kit_4 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'he is (they are) being educated.')) retrieval_kit_field = RetrievalKitField() # use multiple retrieval kits and serialize for json multiple_retrieval_kits_params['retrieval_kits'] = [ From 464d89822d80435e22e4bd09a710428760420a23 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 11:06:57 -0400 Subject: [PATCH 003/114] Rename existing Porter schemas to be PRE specific, to make way for eventual CBD schemas. --- porter/interfaces.py | 6 ++--- porter/schema.py | 6 ++--- tests/test_porter_specifications.py | 34 ++++++++++++++--------------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/porter/interfaces.py b/porter/interfaces.py index f02d76e..1cedab8 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -35,7 +35,7 @@ def __init__(self, porter: 'Porter' = None, *args, **kwargs): # # Alice Endpoints # - @attach_schema(schema.AliceGetUrsulas) + @attach_schema(schema.PREGetUrsulas) def get_ursulas(self, quantity: int, exclude_ursulas: Optional[List[ChecksumAddress]] = None, @@ -49,7 +49,7 @@ def get_ursulas(self, response_data = {"ursulas": ursulas_info} # list of UrsulaInfo objects return response_data - @attach_schema(schema.AliceRevoke) + @attach_schema(schema.PRERevoke) def revoke(self) -> dict: # Steps (analogous to nucypher.character.control.interfaces): # 1. creation of objects / setup @@ -57,7 +57,7 @@ def revoke(self) -> dict: # 3. create response pass - @attach_schema(schema.BobRetrieveCFrags) + @attach_schema(schema.PRERetrieveCFrags) def retrieve_cfrags(self, treasure_map: TreasureMap, retrieval_kits: List[RetrievalKit], diff --git a/porter/schema.py b/porter/schema.py index deadfa8..e97f5fc 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -57,7 +57,7 @@ class Meta: # -class AliceGetUrsulas(BaseSchema): +class PREGetUrsulas(BaseSchema): quantity = PositiveInteger( required=True, load_only=True, @@ -115,7 +115,7 @@ def check_include_and_exclude_are_mutually_exclusive(self, data, **kwargs): f"common entries {common_ursulas}") -class AliceRevoke(BaseSchema): +class PRERevoke(BaseSchema): pass # TODO need to understand revoke process better @@ -134,7 +134,7 @@ class Meta: # -class BobRetrieveCFrags(BaseSchema): +class PRERetrieveCFrags(BaseSchema): treasure_map = TreasureMap( required=True, load_only=True, diff --git a/tests/test_porter_specifications.py b/tests/test_porter_specifications.py index b8f5949..026f32b 100644 --- a/tests/test_porter_specifications.py +++ b/tests/test_porter_specifications.py @@ -12,8 +12,8 @@ from porter.fields.treasuremap import TreasureMap from porter.main import Porter from porter.schema import ( - AliceGetUrsulas, - BobRetrieveCFrags, + PREGetUrsulas, + PRERetrieveCFrags, UrsulaInfoSchema ) from porter.schema import BaseSchema @@ -28,7 +28,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): # no args with pytest.raises(InvalidInputData): - AliceGetUrsulas().load({}) + PREGetUrsulas().load({}) quantity = 10 required_data = { @@ -36,12 +36,12 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): } # required args - AliceGetUrsulas().load(required_data) + PREGetUrsulas().load(required_data) # missing required args updated_data = {k: v for k, v in required_data.items() if k != 'quantity'} with pytest.raises(InvalidInputData): - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # optional components @@ -51,7 +51,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): for i in range(2): exclude_ursulas.append(get_random_checksum_address()) updated_data['exclude_ursulas'] = exclude_ursulas - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # only include updated_data = dict(required_data) @@ -59,19 +59,19 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): for i in range(3): include_ursulas.append(get_random_checksum_address()) updated_data['include_ursulas'] = include_ursulas - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # both exclude and include updated_data = dict(required_data) updated_data['exclude_ursulas'] = exclude_ursulas updated_data['include_ursulas'] = include_ursulas - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # list input formatted as ',' separated strings updated_data = dict(required_data) updated_data['exclude_ursulas'] = ','.join(exclude_ursulas) updated_data['include_ursulas'] = ','.join(include_ursulas) - data = AliceGetUrsulas().load(updated_data) + data = PREGetUrsulas().load(updated_data) assert data['exclude_ursulas'] == exclude_ursulas assert data['include_ursulas'] == include_ursulas @@ -79,7 +79,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): updated_data = dict(required_data) updated_data['exclude_ursulas'] = exclude_ursulas[0] updated_data['include_ursulas'] = include_ursulas[0] - data = AliceGetUrsulas().load(updated_data) + data = PREGetUrsulas().load(updated_data) assert data['exclude_ursulas'] == [exclude_ursulas[0]] assert data['include_ursulas'] == [include_ursulas[0]] @@ -89,7 +89,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): updated_data['include_ursulas'] = list(include_ursulas) # make copy to modify updated_data['include_ursulas'].append("0xdeadbeef") with pytest.raises(InvalidInputData): - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # invalid exclude entry updated_data = dict(required_data) @@ -97,7 +97,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): updated_data['exclude_ursulas'].append("0xdeadbeef") updated_data['include_ursulas'] = include_ursulas with pytest.raises(InvalidInputData): - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # too many ursulas to include updated_data = dict(required_data) @@ -107,7 +107,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): updated_data['include_ursulas'] = too_many_ursulas_to_include with pytest.raises(InvalidArgumentCombo): # number of ursulas to include exceeds quantity to sample - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # include and exclude addresses are not mutually exclusive - include has common entry updated_data = dict(required_data) @@ -116,7 +116,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): updated_data['include_ursulas'].append(exclude_ursulas[0]) # one address that overlaps with pytest.raises(InvalidArgumentCombo): # 1 address in both include and exclude lists - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # include and exclude addresses are not mutually exclusive - exclude has common entry updated_data = dict(required_data) @@ -125,7 +125,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): updated_data['include_ursulas'] = include_ursulas with pytest.raises(InvalidArgumentCombo): # 1 address in both include and exclude lists - AliceGetUrsulas().load(updated_data) + PREGetUrsulas().load(updated_data) # # Output i.e. dump @@ -142,7 +142,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): # use schema to determine expected output (encrypting key gets changed to hex) expected_ursulas_info.append(UrsulaInfoSchema().dump(ursula_info)) - output = AliceGetUrsulas().dump(obj={'ursulas': ursulas_info}) + output = PREGetUrsulas().dump(obj={'ursulas': ursulas_info}) assert output == {"ursulas": expected_ursulas_info} @@ -156,7 +156,7 @@ def test_bob_retrieve_cfrags(porter, alice, valid_user_address_context, get_random_checksum_address): - bob_retrieve_cfrags_schema = BobRetrieveCFrags() + bob_retrieve_cfrags_schema = PRERetrieveCFrags() # no args with pytest.raises(InvalidInputData): From 43cb22cdb610513907846f9eaf9f7449a16f5b76 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 12:25:21 -0400 Subject: [PATCH 004/114] Limit version of backports.zoneinfo to < python 3.9. --- dev-requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 5f6cd78..80c66ad 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version < '3.9' base58==1.0.3 bitarray==2.7.3 bytestring-splitter==2.4.1 diff --git a/requirements.txt b/requirements.txt index dc3fbf3..6777137 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.2 ; python_version >= '3.6' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version < '3.9' bitarray==2.7.3 bytestring-splitter==2.4.1 cached-property==1.5.2 From 2f8be0d2d75d7f5d756d3e36b19f953ad0cde964 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 13:33:28 -0400 Subject: [PATCH 005/114] Fix CI build. --- .github/workflows/tests.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e371ad5..eb43cde 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -26,8 +26,6 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install -e .[dev] - python -m pip install -r dev-requirements.txt - python scripts/install_solc.py - name: Run tests run: | From bd413746e265d9e98860387fdced4df64524c578 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 15:24:19 -0400 Subject: [PATCH 006/114] More reshuffling and renaming for legacy PRE functionality. --- porter/fields/{key.py => umbralkey.py} | 2 +- porter/schema.py | 22 +++++++------------ porter/utils.py | 14 ++++++------ tests/{ => pre}/test_porter.py | 0 tests/{ => pre}/test_porter_specifications.py | 10 ++++----- tests/{ => pre}/test_porter_web_controller.py | 4 ++-- tests/test_fields.py | 6 ++--- 7 files changed, 26 insertions(+), 32 deletions(-) rename porter/fields/{key.py => umbralkey.py} (94%) rename tests/{ => pre}/test_porter.py (100%) rename tests/{ => pre}/test_porter_specifications.py (98%) rename tests/{ => pre}/test_porter_web_controller.py (99%) diff --git a/porter/fields/key.py b/porter/fields/umbralkey.py similarity index 94% rename from porter/fields/key.py rename to porter/fields/umbralkey.py index 76cc20f..a42ed2a 100644 --- a/porter/fields/key.py +++ b/porter/fields/umbralkey.py @@ -5,7 +5,7 @@ from porter.fields.exceptions import InvalidInputData, InvalidNativeDataTypes -class Key(BaseField, fields.Field): +class UmbralKey(BaseField, fields.Field): def _serialize(self, value, attr, obj, **kwargs): if isinstance(value, PublicKey): diff --git a/porter/schema.py b/porter/schema.py index e97f5fc..b702bc0 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -8,7 +8,7 @@ from porter.fields.base import StringList, PositiveInteger, JSON from porter.fields.exceptions import InvalidArgumentCombo from porter.fields.exceptions import InvalidInputData -from porter.fields.key import Key +from porter.fields.umbralkey import UmbralKey from porter.fields.retrieve import RetrievalKit, CapsuleFrag from porter.fields.treasuremap import TreasureMap from porter.fields.ursula import UrsulaChecksumAddress @@ -45,7 +45,7 @@ class UrsulaInfoSchema(BaseSchema): """Schema for the result of sampling of Ursulas.""" checksum_address = UrsulaChecksumAddress() uri = URL() - encrypting_key = Key() + encrypting_key = UmbralKey() # maintain field declaration ordering class Meta: @@ -53,10 +53,9 @@ class Meta: # -# Alice Endpoints +# PRE Endpoints # - class PREGetUrsulas(BaseSchema): quantity = PositiveInteger( required=True, @@ -119,7 +118,7 @@ class PRERevoke(BaseSchema): pass # TODO need to understand revoke process better -class RetrievalOutcomeSchema(BaseSchema): +class PRERetrievalOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" cfrags = Dict(keys=UrsulaChecksumAddress(), values=CapsuleFrag()) errors = Dict(keys=UrsulaChecksumAddress(), values=String()) @@ -129,11 +128,6 @@ class Meta: ordered = True -# -# Bob Endpoints -# - - class PRERetrieveCFrags(BaseSchema): treasure_map = TreasureMap( required=True, @@ -156,7 +150,7 @@ class PRERetrieveCFrags(BaseSchema): default=[]), required=True, load_only=True) - alice_verifying_key = Key( + alice_verifying_key = UmbralKey( required=True, load_only=True, click=click.option( @@ -165,11 +159,11 @@ class PRERetrieveCFrags(BaseSchema): help="Alice's verifying key as a hexadecimal string", type=click.STRING, required=True)) - bob_encrypting_key = Key( + bob_encrypting_key = UmbralKey( required=True, load_only=True, click=option_bob_encrypting_key()) - bob_verifying_key = Key( + bob_verifying_key = UmbralKey( required=True, load_only=True, click=click.option( @@ -195,6 +189,6 @@ class PRERetrieveCFrags(BaseSchema): # output retrieval_results = marshmallow_fields.List( - marshmallow_fields.Nested(RetrievalOutcomeSchema), dump_only=True + marshmallow_fields.Nested(PRERetrievalOutcomeSchema), dump_only=True ) diff --git a/porter/utils.py b/porter/utils.py index 4906477..7e134d7 100644 --- a/porter/utils.py +++ b/porter/utils.py @@ -9,7 +9,7 @@ from nucypher.crypto.powers import DecryptingPower from porter.fields.base import JSON -from porter.fields.key import Key +from porter.fields.umbralkey import UmbralKey from porter.fields.retrieve import RetrievalKit as RetrievalKitField from porter.fields.treasuremap import TreasureMap @@ -71,9 +71,9 @@ def retrieval_request_setup(enacted_policy, encode_bytes(RetrievalKitField, RetrievalKit.from_message_kit(message_kit)) for message_kit in message_kits ], - alice_verifying_key=encode_bytes(Key, alice.stamp.as_umbral_pubkey()), - bob_encrypting_key=encode_bytes(Key, bob.public_keys(DecryptingPower)), - bob_verifying_key=encode_bytes(Key, bob.stamp.as_umbral_pubkey()), + alice_verifying_key=encode_bytes(UmbralKey, alice.stamp.as_umbral_pubkey()), + bob_encrypting_key=encode_bytes(UmbralKey, bob.public_keys(DecryptingPower)), + bob_verifying_key=encode_bytes(UmbralKey, bob.stamp.as_umbral_pubkey()), ) # context is optional if context: @@ -92,9 +92,9 @@ def retrieval_params_decode_from_rest(retrieval_params: Dict) -> Dict: decode_bytes(RetrievalKitField, kit) for kit in retrieval_params["retrieval_kits"] ], - alice_verifying_key=decode_bytes(Key, retrieval_params["alice_verifying_key"]), - bob_encrypting_key=decode_bytes(Key, retrieval_params["bob_encrypting_key"]), - bob_verifying_key=decode_bytes(Key, retrieval_params["bob_verifying_key"]), + alice_verifying_key=decode_bytes(UmbralKey, retrieval_params["alice_verifying_key"]), + bob_encrypting_key=decode_bytes(UmbralKey, retrieval_params["bob_encrypting_key"]), + bob_verifying_key=decode_bytes(UmbralKey, retrieval_params["bob_verifying_key"]), ) # context is optional if "context" in retrieval_params: diff --git a/tests/test_porter.py b/tests/pre/test_porter.py similarity index 100% rename from tests/test_porter.py rename to tests/pre/test_porter.py diff --git a/tests/test_porter_specifications.py b/tests/pre/test_porter_specifications.py similarity index 98% rename from tests/test_porter_specifications.py rename to tests/pre/test_porter_specifications.py index 026f32b..b3ecb90 100644 --- a/tests/test_porter_specifications.py +++ b/tests/pre/test_porter_specifications.py @@ -8,7 +8,7 @@ from nucypher_core.umbral import SecretKey from porter.fields.exceptions import SpecificationError, InvalidInputData, InvalidArgumentCombo -from porter.fields.key import Key +from porter.fields.umbralkey import UmbralKey from porter.fields.treasuremap import TreasureMap from porter.main import Porter from porter.schema import ( @@ -17,7 +17,7 @@ UrsulaInfoSchema ) from porter.schema import BaseSchema -from porter.schema import RetrievalOutcomeSchema +from porter.schema import PRERetrievalOutcomeSchema from porter.utils import retrieval_request_setup @@ -212,7 +212,7 @@ def test_bob_retrieve_cfrags(porter, ) retrieval_outcomes = porter.retrieve_cfrags(**non_encoded_retrieval_args) expected_retrieval_results_json = [] - retrieval_outcome_schema = RetrievalOutcomeSchema() + retrieval_outcome_schema = PRERetrievalOutcomeSchema() assert len(retrieval_outcomes) == 1 assert len(retrieval_outcomes[0].cfrags) > 0 @@ -263,7 +263,7 @@ def test_bob_retrieve_cfrags(porter, ) retrieval_outcomes = porter.retrieve_cfrags(**non_encoded_retrieval_args) expected_retrieval_results_json = [] - retrieval_outcome_schema = RetrievalOutcomeSchema() + retrieval_outcome_schema = PRERetrievalOutcomeSchema() assert len(retrieval_outcomes) == num_retrieval_kits for i in range(num_retrieval_kits): @@ -358,7 +358,7 @@ class UnenncryptedTreasureMapsOnly(BaseSchema): def test_key_validation(bob): class BobKeyInputRequirer(BaseSchema): - bobkey = Key() + bobkey = UmbralKey() with pytest.raises(InvalidInputData) as e: BobKeyInputRequirer().load({'bobkey': "I am the key to nothing"}) diff --git a/tests/test_porter_web_controller.py b/tests/pre/test_porter_web_controller.py similarity index 99% rename from tests/test_porter_web_controller.py rename to tests/pre/test_porter_web_controller.py index ca68256..86e29c6 100644 --- a/tests/test_porter_web_controller.py +++ b/tests/pre/test_porter_web_controller.py @@ -13,7 +13,7 @@ from porter.fields.base import JSON from porter.fields.retrieve import RetrievalKit as RetrievalKitField from porter.interfaces import PorterInterface -from porter.schema import RetrievalOutcomeSchema +from porter.schema import PRERetrievalOutcomeSchema from porter.utils import ( retrieval_params_decode_from_rest, retrieval_request_setup, @@ -120,7 +120,7 @@ def test_retrieve_cfrags(porter, policy_encrypting_key=enacted_policy.public_key, threshold=treasure_map.threshold) assert len(retrieval_results) == 1 - field = RetrievalOutcomeSchema() + field = PRERetrievalOutcomeSchema() cfrags = field.load(retrieval_results[0])['cfrags'] verified_cfrags = {} for ursula, cfrag in cfrags.items(): diff --git a/tests/test_fields.py b/tests/test_fields.py index ef40458..815b7bc 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -9,7 +9,7 @@ from porter.fields.base import PositiveInteger, String, Base64BytesRepresentation, JSON from porter.fields.base import StringList from porter.fields.exceptions import InvalidInputData -from porter.fields.key import Key +from porter.fields.umbralkey import UmbralKey from porter.fields.retrieve import RetrievalKit from porter.fields.ursula import UrsulaChecksumAddress @@ -104,8 +104,8 @@ def run_tests_on_kit(kit: RetrievalKitClass): field._deserialize(value=b64encode(b"invalid_retrieval_kit_bytes").decode(), attr=None, data=None) -def test_key(): - field = Key() +def test_umbral_key(): + field = UmbralKey() umbral_pub_key = SecretKey.random().public_key() other_umbral_pub_key = SecretKey.random().public_key() From ae06318f66b2d49894eaf7b07e1dde2d6ade0e64 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 15:24:50 -0400 Subject: [PATCH 007/114] Initial schema for CBD. --- porter/schema.py | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/porter/schema.py b/porter/schema.py index b702bc0..005bda8 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -5,7 +5,7 @@ from marshmallow.fields import URL from porter.cli.types import EIP55_CHECKSUM_ADDRESS -from porter.fields.base import StringList, PositiveInteger, JSON +from porter.fields.base import StringList, PositiveInteger, JSON, Integer, Base64BytesRepresentation from porter.fields.exceptions import InvalidArgumentCombo from porter.fields.exceptions import InvalidInputData from porter.fields.umbralkey import UmbralKey @@ -192,3 +192,45 @@ class PRERetrieveCFrags(BaseSchema): marshmallow_fields.Nested(PRERetrievalOutcomeSchema), dump_only=True ) +# +# CBD Endpoints +# + +class CBDDecryptionOutcomeSchema(BaseSchema): + """Schema for the result of /retrieve_cfrags endpoint.""" + decryption_responses = Dict(keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation()) + errors = Dict(keys=UrsulaChecksumAddress(), values=String()) + + # maintain field declaration ordering + class Meta: + ordered = True + + +class CBDDecrypt(BaseSchema): + ritual_id = Integer( + required=True, + load_only=True, + click=click.option( + '--ritual-id', + '-r', + help="Ritual ID", + type=click.INT, + required=True + ) + ) + encrypted_decryption_request = Base64BytesRepresentation( + required=True, + load_only=True, + click=click.option( + '--enc-decryption-request', + '-e', + help="Encrypted decryption request", + type=click.STRING, + required=True + ) + ) + + # output + retrieval_results = marshmallow_fields.List( + marshmallow_fields.Nested(CBDDecryptionOutcomeSchema), dump_only=True + ) From 75fef5bf838760fe3df05a560ce788cfd5fda6b7 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 15:30:17 -0400 Subject: [PATCH 008/114] Ensure that pre-commit scripts are run properly before commits. --- .pre-commit-config.yaml | 2 +- porter/fields/umbralkey.py | 2 +- scripts/run_unit_tests.sh | 5 +++++ tests/pre/test_porter_web_controller.py | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 scripts/run_unit_tests.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4218d65..9cc02ba 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,7 +39,7 @@ repos: - repo: https://github.com/akaihola/darker - rev: 1.4.2 + rev: 1.6.1 hooks: - id: darker args: [--isort] diff --git a/porter/fields/umbralkey.py b/porter/fields/umbralkey.py index a42ed2a..241db40 100644 --- a/porter/fields/umbralkey.py +++ b/porter/fields/umbralkey.py @@ -19,4 +19,4 @@ def _deserialize(self, value, attr, data, **kwargs): try: return PublicKey.from_compressed_bytes(bytes.fromhex(value)) except InvalidNativeDataTypes as e: - raise InvalidInputData(f"Could not convert input for {self.name} to an Umbral Key: {e}") \ No newline at end of file + raise InvalidInputData(f"Could not convert input for {self.name} to an Umbral Key: {e}") diff --git a/scripts/run_unit_tests.sh b/scripts/run_unit_tests.sh new file mode 100644 index 0000000..e84a379 --- /dev/null +++ b/scripts/run_unit_tests.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -e +pytest tests/unit +exit 0 diff --git a/tests/pre/test_porter_web_controller.py b/tests/pre/test_porter_web_controller.py index 86e29c6..a496e1f 100644 --- a/tests/pre/test_porter_web_controller.py +++ b/tests/pre/test_porter_web_controller.py @@ -241,4 +241,4 @@ def get_ursulas() -> Response: # remove checked entry values.remove(failure['value']) - errors.remove(failure['error']) \ No newline at end of file + errors.remove(failure['error']) From 0e3a5970dd2cc32d302de4dadf964f731322ad1c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 5 May 2023 17:19:30 -0400 Subject: [PATCH 009/114] Initial Porter CBD plumbing. --- porter/fields/base.py | 37 +++++++++++++++++++++ porter/fields/ursula.py | 8 +++++ porter/main.py | 36 ++++++++++++++++---- porter/schema.py | 49 ++++++++++++++++----------- tests/test_fields.py | 74 ++++++++++++++++++++++++++++++++++++++--- 5 files changed, 173 insertions(+), 31 deletions(-) diff --git a/porter/fields/base.py b/porter/fields/base.py index 3a87875..d6ca7d4 100644 --- a/porter/fields/base.py +++ b/porter/fields/base.py @@ -102,3 +102,40 @@ def _deserialize(self, value, attr, data, **kwargs): f"Unexpected object type, {type(result)}; expected {self.expected_type}") return result + + +class JSONDict(BaseField, fields.Dict): + """Serializes/Deserializes Dictionaries to/from JSON strings.""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def _serialize(self, value, attr, obj, **kwargs): + try: + value = super()._serialize(value, attr, obj, **kwargs) + except Exception as e: + raise InvalidInputData( + f"Could not convert input for {self.name} to JSON: {e}" + ) + try: + value_json = json.dumps(value) + return value_json + except Exception as e: + raise InvalidInputData( + f"Could not convert input for {self.name} to JSON: {e}" + ) + + def _deserialize(self, value, attr, data, **kwargs): + try: + result = json.loads(value) + except Exception as e: + raise InvalidInputData( + f"Could not convert input for {self.name} to dictionary: {e}" + ) + + try: + return super()._deserialize(result, attr, data, **kwargs) + except Exception as e: + raise InvalidInputData( + f"Could not convert input for {self.name} to dictionary: {e}" + ) diff --git a/porter/fields/ursula.py b/porter/fields/ursula.py index deef5b8..654cb17 100644 --- a/porter/fields/ursula.py +++ b/porter/fields/ursula.py @@ -9,6 +9,14 @@ class UrsulaChecksumAddress(String): """Ursula checksum address.""" click_type = EIP55_CHECKSUM_ADDRESS + def _serialize(self, value, attr, obj, **kwargs): + try: + return to_checksum_address(value=value) + except ValueError as e: + raise InvalidInputData( + f"Could not convert input for {self.name} to a valid checksum address: {e}" + ) + def _deserialize(self, value, attr, data, **kwargs): try: return to_checksum_address(value=value) diff --git a/porter/main.py b/porter/main.py index c442eca..05395df 100644 --- a/porter/main.py +++ b/porter/main.py @@ -73,6 +73,15 @@ class RetrievalOutcome(NamedTuple): cfrags: Dict errors: Dict + class CBDDecryptionOutcome(NamedTuple): + """ + Simple object that stores the results and errors of CBD decryption operations across + one or more Ursulas. + """ + + decryption_responses: Dict + errors: Dict + def __init__(self, domain: str = None, registry: BaseContractRegistry = None, @@ -172,12 +181,21 @@ def retrieve_cfrags(self, result_outcomes.append(result_outcome) return result_outcomes - def _make_reservoir(self, - exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, - include_ursulas: Optional[Sequence[ChecksumAddress]] = None): - return make_staking_provider_reservoir(application_agent=self.application_agent, - exclude_addresses=exclude_ursulas, - include_addresses=include_ursulas) + def cbd_decrypt( + self, threshold: int, decryption_requests: Dict[ChecksumAddress, bytes] + ) -> List[CBDDecryptionOutcome]: + pass + + def _make_reservoir( + self, + exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, + include_ursulas: Optional[Sequence[ChecksumAddress]] = None, + ): + return make_staking_provider_reservoir( + application_agent=self.application_agent, + exclude_addresses=exclude_ursulas, + include_addresses=include_ursulas, + ) def make_cli_controller(self, crash_on_error: bool = False): controller = PorterCLIController(app_name=self.APP_NAME, @@ -241,4 +259,10 @@ def retrieve_cfrags() -> Response: response = controller(method_name='retrieve_cfrags', control_request=request) return response + @porter_flask_control.route("/cbd_decrypt", methods=["POST"]) + def cbd_decrypt() -> Response: + """Porter control endpoint for executing a CBD decryption request.""" + response = controller(method_name="cbd_decrypt", control_request=request) + return response + return controller diff --git a/porter/schema.py b/porter/schema.py index 005bda8..7644445 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -1,16 +1,22 @@ import click -from marshmallow import fields as marshmallow_fields, Schema, INCLUDE +from marshmallow import INCLUDE, Schema +from marshmallow import fields as marshmallow_fields from marshmallow import validates_schema -from marshmallow.fields import String, Dict -from marshmallow.fields import URL +from marshmallow.fields import URL, Dict, String from porter.cli.types import EIP55_CHECKSUM_ADDRESS -from porter.fields.base import StringList, PositiveInteger, JSON, Integer, Base64BytesRepresentation -from porter.fields.exceptions import InvalidArgumentCombo -from porter.fields.exceptions import InvalidInputData -from porter.fields.umbralkey import UmbralKey -from porter.fields.retrieve import RetrievalKit, CapsuleFrag +from porter.fields.base import ( + JSON, + Base64BytesRepresentation, + Integer, + JSONDict, + PositiveInteger, + StringList, +) +from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData +from porter.fields.retrieve import CapsuleFrag, RetrievalKit from porter.fields.treasuremap import TreasureMap +from porter.fields.umbralkey import UmbralKey from porter.fields.ursula import UrsulaChecksumAddress @@ -120,8 +126,9 @@ class PRERevoke(BaseSchema): class PRERetrievalOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" - cfrags = Dict(keys=UrsulaChecksumAddress(), values=CapsuleFrag()) - errors = Dict(keys=UrsulaChecksumAddress(), values=String()) + + cfrags = marshmallow_fields.Dict(keys=UrsulaChecksumAddress(), values=CapsuleFrag()) + errors = marshmallow_fields.Dict(keys=UrsulaChecksumAddress(), values=String()) # maintain field declaration ordering class Meta: @@ -207,27 +214,29 @@ class Meta: class CBDDecrypt(BaseSchema): - ritual_id = Integer( + threshold = Integer( required=True, load_only=True, click=click.option( - '--ritual-id', - '-r', - help="Ritual ID", + "--decryption-threshold", + "-d", + help="Threshold of decryption responses required", type=click.INT, required=True ) ) - encrypted_decryption_request = Base64BytesRepresentation( + decryption_requests = JSONDict( + keys=UrsulaChecksumAddress(), + values=Base64BytesRepresentation(), required=True, load_only=True, click=click.option( - '--enc-decryption-request', - '-e', - help="Encrypted decryption request", + "--encrypted-decryption-requests", + "-erec", + help="Encrypted decryption requests dictionary keyed by ursula address", type=click.STRING, - required=True - ) + required=False, + ), ) # output diff --git a/tests/test_fields.py b/tests/test_fields.py index 815b7bc..2d1819a 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1,16 +1,24 @@ import json +import os from base64 import b64encode import pytest from eth_utils import to_canonical_address -from nucypher_core import RetrievalKit as RetrievalKitClass, Address, MessageKit +from nucypher_core import Address, MessageKit +from nucypher_core import RetrievalKit as RetrievalKitClass from nucypher_core.umbral import SecretKey -from porter.fields.base import PositiveInteger, String, Base64BytesRepresentation, JSON -from porter.fields.base import StringList +from porter.fields.base import ( + JSON, + Base64BytesRepresentation, + JSONDict, + PositiveInteger, + String, + StringList, +) from porter.fields.exceptions import InvalidInputData -from porter.fields.umbralkey import UmbralKey from porter.fields.retrieve import RetrievalKit +from porter.fields.umbralkey import UmbralKey from porter.fields.ursula import UrsulaChecksumAddress @@ -25,9 +33,19 @@ def test_ursula_checksum_address_field(get_random_checksum_address): assert serialized == ursula_checksum assert serialized != other_address + # test letter case of address + serialized = field._serialize(value=ursula_checksum.lower(), attr=None, obj=None) + assert serialized == ursula_checksum + assert serialized != ursula_checksum.lower() + serialized = field._serialize(value=ursula_checksum.upper(), attr=None, obj=None) + assert serialized == ursula_checksum + assert serialized != ursula_checksum.lower() + + with pytest.raises(InvalidInputData): + field._serialize(value="0xdeadbeef", attr=None, obj=None) + deserialized = field._deserialize(value=serialized, attr=None, data=None) assert deserialized == ursula_checksum - assert deserialized != other_address field._deserialize(value=ursula_checksum, attr=None, data=None) field._deserialize(value=ursula_checksum.lower(), attr=None, data=None) @@ -40,6 +58,8 @@ def test_ursula_checksum_address_field(get_random_checksum_address): field._deserialize(value="0xdeadbeef", attr=None, data=None) + + def test_ursula_checksum_address_string_list_field(get_random_checksum_address): ursula_1 = get_random_checksum_address() ursula_2 = get_random_checksum_address() @@ -224,3 +244,47 @@ def test_json_field(): with pytest.raises(InvalidInputData): # attempt to deserialize invalid data field._deserialize(value=json.dumps(d), attr=None, data=None) + + +def test_cbd_json_dict_field(get_random_checksum_address): + # test data + original_data = {} + expected_serialized_result = {} + num_decryption_requests = 5 + for i in range(0, 5): + ursula_checksum_address = get_random_checksum_address() + encrypted_decryption_request = os.urandom(32) + original_data[ursula_checksum_address] = encrypted_decryption_request + expected_serialized_result[ursula_checksum_address] = b64encode( + encrypted_decryption_request + ).decode() + + field = JSONDict(keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation()) + serialized = field._serialize(value=original_data, attr=None, obj=None) + assert serialized == json.dumps(expected_serialized_result) + + deserialized = field._deserialize(value=serialized, attr=None, data=None) + assert deserialized == original_data + + with pytest.raises(InvalidInputData): + # attempt to deserialize invalid key; must be checksum address + json_to_deserialize = json.dumps({"a": b64encode(os.urandom(32)).decode()}) + field._deserialize(value=json_to_deserialize, attr=None, data=None) + + with pytest.raises(InvalidInputData): + # attempt to deserialize invalid value; must be base64 string + json_to_deserialize = json.dumps({get_random_checksum_address(): 1}) + field._deserialize(value=json_to_deserialize, attr=None, data=None) + + with pytest.raises(InvalidInputData): + # attempt to deserialize non-dict object + json_to_deserialize = json.dumps({get_random_checksum_address(): 1}) + field._deserialize("the hills are alive...", attr=None, data=None) + + with pytest.raises(InvalidInputData): + # non-dict object + field._serialize(value=[1, 2, 3], attr=None, obj=None) + + with pytest.raises(InvalidInputData): + # attempt to serialize invalid key; must be checksum address + field._serialize(value={"a": os.urandom(32)}, attr=None, obj=None) From b73ff28efd767c966dd8d04fd7279085a9c6f868 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 9 May 2023 15:55:15 -0400 Subject: [PATCH 010/114] Rename PRE specific objects and relock dependencies to use parallel e2e-dkg dev branch for nucypher/nucypher. --- Pipfile | 4 +-- Pipfile.lock | 28 +++++++-------- dev-requirements.txt | 18 +++++----- porter/main.py | 47 ++++++++++++------------- porter/schema.py | 2 +- requirements.txt | 6 ++-- tests/pre/test_porter_specifications.py | 4 +-- 7 files changed, 53 insertions(+), 56 deletions(-) diff --git a/Pipfile b/Pipfile index c7656eb..523ee6a 100644 --- a/Pipfile +++ b/Pipfile @@ -7,11 +7,11 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} +nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "e2e-dkg"} flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "development", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "e2e-dkg", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 92f44f6..51805f2 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "feeafffa39620228409c72e746bc7cfbab89196493db3297c696f15fa1ca2343" + "sha256": "e1c4bdee1d2ec15b81daf70c7faf258b5b7d2761b9ec6ec35265898df2037070" }, "pipfile-spec": 6, "requires": { @@ -621,11 +621,11 @@ }, "ferveo": { "hashes": [ - "sha256:624ccfabfd29301a17a0f3822207b31246b69c7ed56b833b8604ceb0c187eaa8", - "sha256:e2c05fbd973f6d71914aadd93f2675d7c45377fe9bdf2c1005e3917d2762d3bf" + "sha256:48820d03698bae445a79a6873a48e9f739b10af3fcaf35dc9ecc39f440c09e68", + "sha256:be9b1661dd66e227c14db8cb55e23cd27832704e076f842ec09b6e9c783e3124" ], "markers": "python_version >= '3.7'", - "version": "==0.1.8" + "version": "==0.1.11" }, "flask": { "hashes": [ @@ -1116,8 +1116,8 @@ "version": "==0.4.4" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "20d750a1c6869beee8a6d137cea7e3c7d3e1f108" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "197a852b2198e51acd1c489b6df898c992fdc822" }, "nucypher-core": { "hashes": [ @@ -2759,11 +2759,11 @@ }, "ferveo": { "hashes": [ - "sha256:624ccfabfd29301a17a0f3822207b31246b69c7ed56b833b8604ceb0c187eaa8", - "sha256:e2c05fbd973f6d71914aadd93f2675d7c45377fe9bdf2c1005e3917d2762d3bf" + "sha256:48820d03698bae445a79a6873a48e9f739b10af3fcaf35dc9ecc39f440c09e68", + "sha256:be9b1661dd66e227c14db8cb55e23cd27832704e076f842ec09b6e9c783e3124" ], "markers": "python_version >= '3.7'", - "version": "==0.1.8" + "version": "==0.1.11" }, "filelock": { "hashes": [ @@ -3500,8 +3500,8 @@ "version": "==1.7.0" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "20d750a1c6869beee8a6d137cea7e3c7d3e1f108" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "197a852b2198e51acd1c489b6df898c992fdc822" }, "nucypher-core": { "hashes": [ @@ -4293,10 +4293,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:827fac0ed1c7921bd198727128a8aa890ad66242598aa18f4cdfa3e46bdd9a60", - "sha256:eb37b55ddfbbaf523dc91e59673caf10ab25e36cd4350ae71d19daa9c86506c7" + "sha256:5932c092c6e6035584eb74d77064e4bce3b7935dfc4a331349719a40db265840", + "sha256:cf89a5063ef84278d186aceaed6fb595bfe67d099298e537634a323664265669" ], - "version": "==1.22.0" + "version": "==1.22.2" }, "service-identity": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 80c66ad..bc7875e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' base58==1.0.3 bitarray==2.7.3 bytestring-splitter==2.4.1 @@ -42,14 +42,14 @@ eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.8.0b3 ; python_version < '4' and python_full_version >= '3.6.8' -eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' +eth-tester==0.8.0b3 ; python_full_version >= '3.6.8' and python_version < '4' +eth-typing==3.3.0 ; python_full_version >= '3.7.2' and python_version < '4' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' ethpm-types==0.4.5 ; python_version >= '3.8' and python_version < '4' evm-trace==0.1.0a18 ; python_version >= '3.8' and python_version < '4' exceptiongroup==1.1.1 ; python_version >= '3.7' executing==1.2.0 -ferveo==0.1.8 ; python_version >= '3.7' +ferveo==0.1.11 ; python_version >= '3.7' filelock==3.12.0 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' frozenlist==1.3.3 ; python_version >= '3.7' @@ -86,7 +86,7 @@ msgspec==0.14.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.7.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/nucypher/nucypher.git@20d750a1c6869beee8a6d137cea7e3c7d3e1f108 +nucypher @ git+https://github.com/derekpierre/nucypher.git@197a852b2198e51acd1c489b6df898c992fdc822 nucypher-core==0.7.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' @@ -133,7 +133,7 @@ pytest-mock==3.10.0 pytest-timeout==2.1.0 ; python_version >= '3.6' pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-baseconv==1.2.2 -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' pytz==2023.3 pyyaml==6.0 ; python_version >= '3.6' referencing==0.28.0 ; python_version >= '3.8' @@ -143,17 +143,17 @@ rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.22.0 +sentry-sdk==1.22.2 service-identity==21.1.0 setuptools==67.7.2 ; python_version >= '3.7' -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' snaptime==0.2.4 sortedcontainers==2.4.0 sqlalchemy==2.0.12 ; python_version >= '3.7' stack-data==0.6.2 tabulate==0.9.0 ; python_version >= '3.7' time-machine==2.9.0 ; python_version >= '3.7' -toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3' +toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' tomli==2.0.1 ; python_version >= '3.7' toolz==0.12.0 ; python_version >= '3.5' tqdm==4.65.0 ; python_version >= '3.7' diff --git a/porter/main.py b/porter/main.py index 05395df..2000f03 100644 --- a/porter/main.py +++ b/porter/main.py @@ -1,16 +1,10 @@ from pathlib import Path from typing import Dict, List, NamedTuple, Optional, Sequence -from constant_sorrow.constants import ( - NO_BLOCKCHAIN_CONNECTION, - NO_CONTROL_PROTOCOL -) +from constant_sorrow.constants import NO_BLOCKCHAIN_CONNECTION, NO_CONTROL_PROTOCOL from eth_typing import ChecksumAddress from eth_utils import to_checksum_address from flask import Response, request -from nucypher_core import RetrievalKit, TreasureMap -from nucypher_core.umbral import PublicKey - from nucypher.blockchain.eth.agents import ContractAgency, PREApplicationAgent from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import ( @@ -20,15 +14,14 @@ from nucypher.characters.lawful import Ursula from nucypher.crypto.powers import DecryptingPower from nucypher.network.nodes import Learner -from nucypher.network.retrieval import RetrievalClient -from nucypher.policy.reservoir import ( - PrefetchStrategy, - make_staking_provider_reservoir, -) +from nucypher.network.retrieval import PRERetrievalClient +from nucypher.policy.reservoir import PrefetchStrategy, make_staking_provider_reservoir from nucypher.utilities.concurrency import WorkerPool from nucypher.utilities.logging import Logger -from porter.controllers import PorterCLIController -from porter.controllers import WebController +from nucypher_core import RetrievalKit, TreasureMap +from nucypher_core.umbral import PublicKey + +from porter.controllers import PorterCLIController, WebController from porter.interfaces import PorterInterface BANNER = r""" @@ -64,7 +57,7 @@ class UrsulaInfo(NamedTuple): uri: str encrypting_key: PublicKey - class RetrievalOutcome(NamedTuple): + class PRERetrievalOutcome(NamedTuple): """ Simple object that stores the results and errors of re-encryption operations across one or more Ursulas. @@ -156,14 +149,16 @@ def get_ursula_info(ursula_address) -> Porter.UrsulaInfo: ursulas_info = successes.values() return list(ursulas_info) - def retrieve_cfrags(self, - treasure_map: TreasureMap, - retrieval_kits: Sequence[RetrievalKit], - alice_verifying_key: PublicKey, - bob_encrypting_key: PublicKey, - bob_verifying_key: PublicKey, - context: Optional[Dict] = None) -> List[RetrievalOutcome]: - client = RetrievalClient(self) + def retrieve_cfrags( + self, + treasure_map: TreasureMap, + retrieval_kits: Sequence[RetrievalKit], + alice_verifying_key: PublicKey, + bob_encrypting_key: PublicKey, + bob_verifying_key: PublicKey, + context: Optional[Dict] = None, + ) -> List[PRERetrievalOutcome]: + client = PRERetrievalClient(self) context = context or dict() # must not be None results, errors = client.retrieve_cfrags( treasure_map, @@ -175,14 +170,16 @@ def retrieve_cfrags(self, ) result_outcomes = [] for result, error in zip(results, errors): - result_outcome = Porter.RetrievalOutcome( + result_outcome = Porter.PRERetrievalOutcome( cfrags=result.cfrags, errors=error.errors ) result_outcomes.append(result_outcome) return result_outcomes def cbd_decrypt( - self, threshold: int, decryption_requests: Dict[ChecksumAddress, bytes] + self, + threshold: int, + encrypted_decryption_requests: Dict[ChecksumAddress, bytes], ) -> List[CBDDecryptionOutcome]: pass diff --git a/porter/schema.py b/porter/schema.py index 7644445..0014cae 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -225,7 +225,7 @@ class CBDDecrypt(BaseSchema): required=True ) ) - decryption_requests = JSONDict( + encrypted_decryption_requests = JSONDict( keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation(), required=True, diff --git a/requirements.txt b/requirements.txt index 6777137..2cdac72 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.2 ; python_version >= '3.6' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' bitarray==2.7.3 bytestring-splitter==2.4.1 cached-property==1.5.2 @@ -31,7 +31,7 @@ eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' eth-tester==0.8.0b3 ; python_version < '4' and python_full_version >= '3.6.8' eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ferveo==0.1.8 ; python_version >= '3.7' +ferveo==0.1.11 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' flask-cors==3.0.10 frozenlist==1.3.3 ; python_version >= '3.7' @@ -57,7 +57,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/nucypher/nucypher.git@20d750a1c6869beee8a6d137cea7e3c7d3e1f108 +nucypher @ git+https://github.com/derekpierre/nucypher.git@197a852b2198e51acd1c489b6df898c992fdc822 nucypher-core==0.7.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 diff --git a/tests/pre/test_porter_specifications.py b/tests/pre/test_porter_specifications.py index b3ecb90..7a43130 100644 --- a/tests/pre/test_porter_specifications.py +++ b/tests/pre/test_porter_specifications.py @@ -235,7 +235,7 @@ def test_bob_retrieve_cfrags(porter, get_random_checksum_address(): "Error Message 2", get_random_checksum_address(): "Error Message 3", } - new_retrieval_outcome = Porter.RetrievalOutcome( + new_retrieval_outcome = Porter.PRERetrievalOutcome( cfrags=retrieval_outcomes[0].cfrags, errors=errors ) expected_retrieval_results_json = [ @@ -289,7 +289,7 @@ def test_bob_retrieve_cfrags(porter, get_random_checksum_address() ] = error_message_template.format(i, j) new_retrieval_outcomes_with_errors.append( - Porter.RetrievalOutcome( + Porter.PRERetrievalOutcome( cfrags=retrieval_outcomes[i].cfrags, errors=specific_kit_errors ) ) From 47d533bb9717f389ca9bfca1aa17fe7a136e65fa Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 10 May 2023 12:33:57 -0400 Subject: [PATCH 011/114] Added REST cbd decrypt endpoint to Porter along with expected schema; additional testing. --- porter/interfaces.py | 13 ++++ porter/main.py | 20 ++++-- porter/schema.py | 3 +- tests/cbd/test_porter.py | 61 ++++++++++++++++++ tests/conftest.py | 134 ++++++++++++++++++++++++++++++++++++--- tests/test_fields.py | 3 +- 6 files changed, 217 insertions(+), 17 deletions(-) create mode 100644 tests/cbd/test_porter.py diff --git a/porter/interfaces.py b/porter/interfaces.py index 1cedab8..41216b5 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -77,3 +77,16 @@ def retrieve_cfrags(self, "retrieval_results": retrieval_outcomes } # list of RetrievalOutcome objects return response_data + + @attach_schema(schema.CBDDecrypt) + def cbd_decrypt( + self, + threshold: int, + encrypted_decryption_requests: Dict[ChecksumAddress, bytes], + ): + cbd_outcome = self.implementer.cbd_decrypt( + threshold=threshold, + encrypted_decryption_requests=encrypted_decryption_requests, + ) + response_data = {"decryption_results": cbd_outcome} + return response_data diff --git a/porter/main.py b/porter/main.py index 2000f03..d284a7e 100644 --- a/porter/main.py +++ b/porter/main.py @@ -1,7 +1,7 @@ from pathlib import Path from typing import Dict, List, NamedTuple, Optional, Sequence -from constant_sorrow.constants import NO_BLOCKCHAIN_CONNECTION, NO_CONTROL_PROTOCOL +from constant_sorrow.constants import NO_CONTROL_PROTOCOL from eth_typing import ChecksumAddress from eth_utils import to_checksum_address from flask import Response, request @@ -13,6 +13,7 @@ ) from nucypher.characters.lawful import Ursula from nucypher.crypto.powers import DecryptingPower +from nucypher.network.decryption import ThresholdDecryptionClient from nucypher.network.nodes import Learner from nucypher.network.retrieval import PRERetrievalClient from nucypher.policy.reservoir import PrefetchStrategy, make_staking_provider_reservoir @@ -72,8 +73,8 @@ class CBDDecryptionOutcome(NamedTuple): one or more Ursulas. """ - decryption_responses: Dict - errors: Dict + decryption_responses: Dict[ChecksumAddress, bytes] + errors: Dict[ChecksumAddress, str] def __init__(self, domain: str = None, @@ -180,8 +181,17 @@ def cbd_decrypt( self, threshold: int, encrypted_decryption_requests: Dict[ChecksumAddress, bytes], - ) -> List[CBDDecryptionOutcome]: - pass + ) -> CBDDecryptionOutcome: + decryption_client = ThresholdDecryptionClient(self) + successes, failures = decryption_client.gather_encrypted_decryption_shares( + encrypted_requests=encrypted_decryption_requests, threshold=threshold + ) + + cbd_outcome = Porter.CBDDecryptionOutcome( + decryption_responses=successes, errors=failures + ) + return cbd_outcome + def _make_reservoir( self, diff --git a/porter/schema.py b/porter/schema.py index 0014cae..a923bc2 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -203,6 +203,7 @@ class PRERetrieveCFrags(BaseSchema): # CBD Endpoints # + class CBDDecryptionOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" decryption_responses = Dict(keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation()) @@ -232,7 +233,7 @@ class CBDDecrypt(BaseSchema): load_only=True, click=click.option( "--encrypted-decryption-requests", - "-erec", + "-e", help="Encrypted decryption requests dictionary keyed by ursula address", type=click.STRING, required=False, diff --git a/tests/cbd/test_porter.py b/tests/cbd/test_porter.py new file mode 100644 index 0000000..ef7a4cc --- /dev/null +++ b/tests/cbd/test_porter.py @@ -0,0 +1,61 @@ +import json + +from ferveo_py import ( + Ciphertext, + DecryptionShareSimple, + combine_decryption_shares_simple, + decrypt_with_shared_secret, +) +from nucypher.crypto.ferveo.dkg import FerveoVariant +from nucypher_core import ( + Conditions, + ThresholdDecryptionRequest, + ThresholdDecryptionResponse, +) + + +def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): + ritual_id, public_key, cohort, params, threshold = dkg_setup + ciphertext, expected_plaintext, conditions = dkg_encrypted_data + + decryption_request = ThresholdDecryptionRequest( + id=ritual_id, + variant=int(FerveoVariant.SIMPLE.value), + ciphertext=ciphertext, + conditions=Conditions(json.dumps(conditions)), + ) + + encrypted_decryption_requests = { + ursula.checksum_address: bytes(decryption_request) for ursula in cohort + } + cbd_outcome = porter.cbd_decrypt( + threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests + ) + + # sufficient successes + assert len(cbd_outcome.decryption_responses) >= threshold + + # no errors + assert len(cbd_outcome.errors) == 0 + + ursula_addresses = [ursula.checksum_address for ursula in cohort] + + decryption_shares = [] + for ursula_address, response_bytes in cbd_outcome.decryption_responses.items(): + assert ursula_address in ursula_addresses + assert len(response_bytes) > 0 + decryption_response = ThresholdDecryptionResponse.from_bytes(response_bytes) + decryption_share = DecryptionShareSimple.from_bytes( + decryption_response.decryption_share + ) + decryption_shares.append(decryption_share) + + shared_secret = combine_decryption_shares_simple(decryption_shares) + conditions = json.dumps(conditions).encode() # aad + cleartext = decrypt_with_shared_secret( + Ciphertext.from_bytes(ciphertext), + conditions, # aad + shared_secret, + params, # dkg params + ) + assert bytes(cleartext) == expected_plaintext diff --git a/tests/conftest.py b/tests/conftest.py index 3c3a329..a87993b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,27 +1,35 @@ import os -from typing import Optional, Iterable +from typing import Iterable, List, Optional, Tuple import pytest from click.testing import CliRunner from eth_typing import ChecksumAddress from eth_utils import to_checksum_address -from nucypher.blockchain.economics import EconomicsFactory, Economics +from ferveo_py import Ciphertext, DkgPublicKey, DkgPublicParameters, Validator +from nucypher.blockchain.economics import Economics, EconomicsFactory from nucypher.blockchain.eth.actors import Operator -from nucypher.blockchain.eth.agents import ContractAgency, PREApplicationAgent, \ - StakingProvidersReservoir +from nucypher.blockchain.eth.agents import ( + ContractAgency, + CoordinatorAgent, + PREApplicationAgent, + StakingProvidersReservoir, +) from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import InMemoryContractRegistry -from nucypher.characters.lawful import Ursula +from nucypher.characters.lawful import Enrico, Ursula from nucypher.config.constants import TEMPORARY_DOMAIN -from nucypher.crypto.powers import DecryptingPower +from nucypher.crypto.ferveo import dkg +from nucypher.crypto.powers import DecryptingPower, RitualisticPower from nucypher.network.nodes import Learner, Teacher +from nucypher.policy.conditions.types import LingoList from nucypher.utilities.logging import GlobalLoggerSettings -from nucypher_core import Address, HRAC, TreasureMap -from tests.constants import MOCK_ETH_PROVIDER_URI -from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager +from nucypher_core import HRAC, Address, TreasureMap from porter.emitters import WebEmitter from porter.main import Porter +from tests.constants import MOCK_ETH_PROVIDER_URI +from tests.mock.coordinator import MockCoordinatorAgent +from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager # Crash on server error by default WebEmitter._crash_on_error_default = True @@ -31,6 +39,7 @@ 'pytest-nucypher', # Includes external fixtures module from nucypher ] + def pytest_addhooks(pluginmanager): pluginmanager.set_blocked('ape_test') @@ -107,6 +116,7 @@ def faked(self, *args, **kwargs): Operator.get_staking_provider_address = faked return testerchain.stake_providers_accounts + @pytest.fixture(scope='module') def application_economics(): economics = Economics() @@ -135,6 +145,14 @@ def mock_contract_agency(module_mocker, application_economics): ContractAgency.get_agent_by_contract_name = get_agent_by_name +@pytest.fixture(scope="module") +def coordinator_agent(mock_contract_agency) -> MockCoordinatorAgent: + coordinator_agent: CoordinatorAgent = mock_contract_agency.get_agent( + CoordinatorAgent, registry=None + ) + return coordinator_agent + + @pytest.fixture(scope="module", autouse=True) def mock_sample_reservoir(testerchain, mock_contract_agency): def mock_reservoir( @@ -212,3 +230,101 @@ def random_treasure_map_data(alice, bob, ursulas): def porter_web_controller(porter): web_controller = porter.make_web_controller(crash_on_error=False) yield web_controller.test_client() + + +@pytest.fixture(scope="module") +def dkg_setup( + get_random_checksum_address, ursulas, coordinator_agent +) -> Tuple[int, DkgPublicKey, List[Ursula], DkgPublicParameters, int]: + ritual_id = 0 + num_shares = 8 + threshold = 5 + cohort = ursulas[:num_shares] + + # configure validator cohort + validators = [] + for ursula in cohort: + validators.append( + Validator( + address=ursula.checksum_address, + public_key=ursula.public_keys(RitualisticPower), + ) + ) + + validators.sort(key=lambda x: x.address) # must be sorted + cohort.sort(key=lambda x: x.checksum_address) # sort to match + + # Go through ritual and set up Ursulas + transcripts = [] + for i, validator in enumerate(validators): + transcript = dkg.generate_transcript( + ritual_id=ritual_id, + me=validator, + shares=num_shares, + threshold=threshold, + nodes=validators, + ) + transcripts.append(transcript) + + cohort[i].dkg_storage.store_transcript( + ritual_id=ritual_id, transcript=transcript + ) + + aggregated_transcript, public_key, params = dkg.aggregate_transcripts( + ritual_id=ritual_id, + me=validators[0], + shares=num_shares, + threshold=threshold, + transcripts=list(zip(validators, transcripts)), + ) + + for ursula in cohort: + ursula.dkg_storage.store_aggregated_transcript( + ritual_id=ritual_id, aggregated_transcript=aggregated_transcript + ) + ursula.dkg_storage.store_dkg_params(ritual_id=ritual_id, public_params=params) + ursula.dkg_storage.store_public_key(ritual_id=ritual_id, public_key=public_key) + + ritual = CoordinatorAgent.Ritual( + initiator=get_random_checksum_address(), + dkg_size=num_shares, + init_timestamp=123456, + total_transcripts=num_shares, + total_aggregations=num_shares, + public_key=CoordinatorAgent.Ritual.G1Point.from_dkg_public_key(public_key), + aggregation_mismatch=False, + aggregated_transcript=bytes(aggregated_transcript), + participants=[ + CoordinatorAgent.Ritual.Participant( + provider=ursula.checksum_address, + aggregated=True, + transcript=bytes(transcripts[i]), + ) + for i, ursula in enumerate(cohort) + ], + ) + + # Configure CoordinatorAgent + coordinator_agent.get_ritual.return_value = ritual + coordinator_agent.get_ritual_status.return_value = ( + CoordinatorAgent.Ritual.Status.FINALIZED + ) + + return ritual_id, public_key, cohort, params, threshold + + +PLAINTEXT = "peace at dawn" +CONDITIONS = [ + {"returnValueTest": {"value": "0", "comparator": ">"}, "method": "timelock"} +] + + +@pytest.fixture(scope="module") +def dkg_encrypted_data(dkg_setup) -> Tuple[bytes, bytes, LingoList]: + _, public_key, _, _, _ = dkg_setup + enrico = Enrico(encrypting_key=public_key) + ciphertext = enrico.encrypt_for_dkg( + plaintext=PLAINTEXT.encode(), conditions=CONDITIONS + ) + + return bytes(ciphertext), PLAINTEXT.encode(), CONDITIONS diff --git a/tests/test_fields.py b/tests/test_fields.py index 2d1819a..adacc24 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -58,8 +58,6 @@ def test_ursula_checksum_address_field(get_random_checksum_address): field._deserialize(value="0xdeadbeef", attr=None, data=None) - - def test_ursula_checksum_address_string_list_field(get_random_checksum_address): ursula_1 = get_random_checksum_address() ursula_2 = get_random_checksum_address() @@ -259,6 +257,7 @@ def test_cbd_json_dict_field(get_random_checksum_address): encrypted_decryption_request ).decode() + # mimic usage for CBD field = JSONDict(keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation()) serialized = field._serialize(value=original_data, attr=None, obj=None) assert serialized == json.dumps(expected_serialized_result) From f3e69d36941fdab5db052a7d247e6a96ae6acc96 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 10 May 2023 14:53:13 -0400 Subject: [PATCH 012/114] Refine Porter CBD endpoint schema, and add tests. --- porter/schema.py | 14 +- .../{test_porter.py => test_cbd_porter.py} | 0 tests/cbd/test_cbd_porter_specifications.py | 166 ++++++++++ tests/pre/test_porter.py | 74 ----- tests/pre/test_porter_web_controller.py | 244 --------------- tests/pre/test_pre_porter.py | 87 ++++++ ...s.py => test_pre_porter_specifications.py} | 147 +++++---- tests/pre/test_pre_porter_web_controller.py | 295 ++++++++++++++++++ 8 files changed, 642 insertions(+), 385 deletions(-) rename tests/cbd/{test_porter.py => test_cbd_porter.py} (100%) create mode 100644 tests/cbd/test_cbd_porter_specifications.py delete mode 100644 tests/pre/test_porter.py delete mode 100644 tests/pre/test_porter_web_controller.py create mode 100644 tests/pre/test_pre_porter.py rename tests/pre/{test_porter_specifications.py => test_pre_porter_specifications.py} (74%) create mode 100644 tests/pre/test_pre_porter_web_controller.py diff --git a/porter/schema.py b/porter/schema.py index a923bc2..7aa5f2e 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -241,6 +241,16 @@ class CBDDecrypt(BaseSchema): ) # output - retrieval_results = marshmallow_fields.List( - marshmallow_fields.Nested(CBDDecryptionOutcomeSchema), dump_only=True + decryption_results = marshmallow_fields.Nested( + CBDDecryptionOutcomeSchema, dump_only=True ) + + @validates_schema + def check_valid_threshold_and_requests(self, data, **kwargs): + # TODO is this check a good thing? What about re-requests after failures? + threshold = data.get("threshold") + encrypted_decryption_requests = data.get("encrypted_decryption_requests") + if len(encrypted_decryption_requests) < threshold: + raise InvalidArgumentCombo( + f"Number of provided requests must be >= the expected threshold" + ) diff --git a/tests/cbd/test_porter.py b/tests/cbd/test_cbd_porter.py similarity index 100% rename from tests/cbd/test_porter.py rename to tests/cbd/test_cbd_porter.py diff --git a/tests/cbd/test_cbd_porter_specifications.py b/tests/cbd/test_cbd_porter_specifications.py new file mode 100644 index 0000000..4d84293 --- /dev/null +++ b/tests/cbd/test_cbd_porter_specifications.py @@ -0,0 +1,166 @@ +import json +from base64 import b64encode + +import pytest +from eth_utils import to_checksum_address +from nucypher.crypto.ferveo.dkg import FerveoVariant +from nucypher_core import Conditions, ThresholdDecryptionRequest + +from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData +from porter.main import Porter +from porter.schema import CBDDecrypt, CBDDecryptionOutcomeSchema + + +def test_cbd_decrypt( + porter, dkg_setup, dkg_encrypted_data, get_random_checksum_address +): + ritual_id, public_key, cohort, _, threshold = dkg_setup + ciphertext, expected_plaintext, conditions = dkg_encrypted_data + + cbd_decrypt_schema = CBDDecrypt() + + decryption_request = ThresholdDecryptionRequest( + id=ritual_id, + variant=int(FerveoVariant.SIMPLE.value), + ciphertext=bytes(ciphertext), + conditions=Conditions(json.dumps(conditions)), + ) + encrypted_decryption_requests = { + ursula.checksum_address: b64encode(bytes(decryption_request)).decode() + for ursula in cohort + } + + # no args + with pytest.raises(InvalidInputData): + cbd_decrypt_schema.load({}) + + # missing required args + with pytest.raises(InvalidInputData): + request_data = {"threshold": threshold} + cbd_decrypt_schema.load(request_data) + + with pytest.raises(InvalidInputData): + request_data = { + "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests) + } + cbd_decrypt_schema.load(request_data) + + # invalid param names + with pytest.raises(InvalidInputData): + request_data = { + "dkg_threshold": threshold, + "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + } + cbd_decrypt_schema.load(request_data) + + with pytest.raises(InvalidInputData): + request_data = { + "threshold": threshold, + "encrypted_dec_requests": json.dumps(encrypted_decryption_requests), + } + cbd_decrypt_schema.load(request_data) + + # invalid param types + with pytest.raises(InvalidInputData): + request_data = { + "threshold": "threshold? we don't need no stinking threshold", + "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + } + cbd_decrypt_schema.load(request_data) + + with pytest.raises(InvalidInputData): + request_data = { + "threshold": threshold, + "encrypted_decryption_requests": encrypted_decryption_requests, # not json string + } + cbd_decrypt_schema.load(request_data) + + # invalid param combination + with pytest.raises(InvalidArgumentCombo): + request_data = { + "threshold": len(encrypted_decryption_requests) + + 1, # threshold larger than number of requests + "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + } + cbd_decrypt_schema.load(request_data) + + # simple schema successful load + request_data = { + "threshold": threshold, + "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + } + cbd_decrypt_schema.load(request_data) + + # actual outcomes + encrypted_decryption_requests = { + ursula.checksum_address: bytes(decryption_request) + for ursula in cohort # non-json version + } + cbd_outcome = porter.cbd_decrypt( + threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests + ) + cbd_outcome_schema = CBDDecryptionOutcomeSchema() + + assert len(cbd_outcome.decryption_responses) >= threshold + assert len(cbd_outcome.errors) == 0 + + outcome_json = cbd_outcome_schema.dump(cbd_outcome) + output = cbd_decrypt_schema.dump(obj={"decryption_results": cbd_outcome}) + assert len(output["decryption_results"]["decryption_responses"]) >= threshold + assert ( + output["decryption_results"]["decryption_responses"] + == outcome_json["decryption_responses"] + ) + for ( + ursula_checksum_address, + decryption_response, + ) in cbd_outcome.decryption_responses.items(): + assert ( + output["decryption_results"]["decryption_responses"][ + ursula_checksum_address + ] + == b64encode(decryption_response).decode() + ) + + assert len(output["decryption_results"]["errors"]) == 0 + assert output["decryption_results"]["errors"] == outcome_json["errors"] + + assert output == {"decryption_results": outcome_json} + + # now include errors + errors = {} + for i in range(len(cohort) - threshold, len(cohort)): + ursula_checksum_address = to_checksum_address(cohort[i].checksum_address) + errors[ursula_checksum_address] = f"Error Message {i}" + + faked_cbd_outcome = Porter.CBDDecryptionOutcome( + decryption_responses=cbd_outcome.decryption_responses, errors=errors + ) + faked_outcome_json = cbd_outcome_schema.dump(faked_cbd_outcome) + output = cbd_decrypt_schema.dump(obj={"decryption_results": faked_cbd_outcome}) + assert len(output["decryption_results"]["decryption_responses"]) >= threshold + assert ( + output["decryption_results"]["decryption_responses"] + == faked_outcome_json["decryption_responses"] + ) + for ( + ursula_checksum_address, + decryption_response, + ) in faked_cbd_outcome.decryption_responses.items(): + assert ( + output["decryption_results"]["decryption_responses"][ + ursula_checksum_address + ] + == b64encode(decryption_response).decode() + ) + + assert len(output["decryption_results"]["errors"]) == len(errors) + assert output["decryption_results"]["errors"] == faked_outcome_json["errors"] + for i in range(len(cohort) - threshold, len(cohort)): + ursula_checksum_address = to_checksum_address(cohort[i].checksum_address) + assert ( + output["decryption_results"]["errors"][ursula_checksum_address] + == f"Error Message {i}" + ) + + assert output == {"decryption_results": faked_outcome_json} diff --git a/tests/pre/test_porter.py b/tests/pre/test_porter.py deleted file mode 100644 index 04ae13e..0000000 --- a/tests/pre/test_porter.py +++ /dev/null @@ -1,74 +0,0 @@ -from porter.utils import retrieval_request_setup - - -def test_get_ursulas(porter, ursulas): - # simple - quantity = 4 - ursulas_info = porter.get_ursulas(quantity=quantity) - returned_ursula_addresses = {ursula_info.checksum_address for ursula_info in ursulas_info} - assert len(returned_ursula_addresses) == quantity # ensure no repeats - - ursulas_list = list(ursulas) - - # include specific ursulas - include_ursulas = [ursulas_list[0].checksum_address, ursulas_list[1].checksum_address] - ursulas_info = porter.get_ursulas(quantity=quantity, - include_ursulas=include_ursulas) - returned_ursula_addresses = {ursula_info.checksum_address for ursula_info in ursulas_info} - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - - # exclude specific ursulas - number_to_exclude = len(ursulas_list) - 4 - exclude_ursulas = [] - for i in range(number_to_exclude): - exclude_ursulas.append(ursulas_list[i].checksum_address) - ursulas_info = porter.get_ursulas(quantity=quantity, - exclude_ursulas=exclude_ursulas) - returned_ursula_addresses = {ursula_info.checksum_address for ursula_info in ursulas_info} - assert len(returned_ursula_addresses) == quantity - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - # include and exclude - include_ursulas = [ursulas_list[0].checksum_address, ursulas_list[1].checksum_address] - exclude_ursulas = [ursulas_list[2].checksum_address, ursulas_list[3].checksum_address] - ursulas_info = porter.get_ursulas(quantity=quantity, - include_ursulas=include_ursulas, - exclude_ursulas=exclude_ursulas) - returned_ursula_addresses = {ursula_info.checksum_address for ursula_info in ursulas_info} - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - -def test_retrieve_cfrags(porter, - bob, - alice, - enacted_policy): - # Setup - retrieval_args, _ = retrieval_request_setup(enacted_policy, - bob, - alice) - - result = porter.retrieve_cfrags(**retrieval_args) - - assert result, "valid result returned" - - -def test_retrieve_cfrags_with_context(porter, - bob, - alice, - enacted_policy, - valid_user_address_context): - # Setup - retrieval_args, _ = retrieval_request_setup(enacted_policy, - bob, - alice, - context=valid_user_address_context) - - result = porter.retrieve_cfrags(**retrieval_args) - assert result, "valid result returned" diff --git a/tests/pre/test_porter_web_controller.py b/tests/pre/test_porter_web_controller.py deleted file mode 100644 index a496e1f..0000000 --- a/tests/pre/test_porter_web_controller.py +++ /dev/null @@ -1,244 +0,0 @@ -import json -import sys -from base64 import b64encode - -from flask import Response, request -from nucypher.characters.lawful import Enrico -from nucypher.crypto.powers import DecryptingPower -from nucypher.policy.kits import PolicyMessageKit, RetrievalResult -from nucypher.utilities.concurrency import WorkerPoolException -from nucypher_core import RetrievalKit - -from porter.controllers import WebController -from porter.fields.base import JSON -from porter.fields.retrieve import RetrievalKit as RetrievalKitField -from porter.interfaces import PorterInterface -from porter.schema import PRERetrievalOutcomeSchema -from porter.utils import ( - retrieval_params_decode_from_rest, - retrieval_request_setup, -) - - -def test_get_ursulas(porter_web_controller, ursulas): - # Send bad data to assert error return - response = porter_web_controller.get('/get_ursulas', data=json.dumps({'bad': 'input'})) - assert response.status_code == 400 - - quantity = 4 - ursulas_list = list(ursulas) - include_ursulas = [ursulas_list[0].checksum_address, ursulas_list[1].checksum_address] - exclude_ursulas = [ursulas_list[2].checksum_address, ursulas_list[3].checksum_address] - - get_ursulas_params = { - 'quantity': quantity, - 'include_ursulas': include_ursulas, - 'exclude_ursulas': exclude_ursulas - } - - # - # Success - # - response = porter_web_controller.get('/get_ursulas', data=json.dumps(get_ursulas_params)) - assert response.status_code == 200 - - response_data = json.loads(response.data) - ursulas_info = response_data['result']['ursulas'] - returned_ursula_addresses = {ursula_info['checksum_address'] for ursula_info in ursulas_info} # ensure no repeats - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - # - # Test Query parameters - # - response = porter_web_controller.get(f'/get_ursulas?quantity={quantity}' - f'&include_ursulas={",".join(include_ursulas)}' - f'&exclude_ursulas={",".join(exclude_ursulas)}') - assert response.status_code == 200 - response_data = json.loads(response.data) - ursulas_info = response_data['result']['ursulas'] - returned_ursula_addresses = {ursula_info['checksum_address'] for ursula_info in ursulas_info} # ensure no repeats - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - # - # Failure case - # - failed_ursula_params = dict(get_ursulas_params) - failed_ursula_params['quantity'] = len(ursulas_list) + 1 # too many to get - response = porter_web_controller.get('/get_ursulas', data=json.dumps(failed_ursula_params)) - assert response.status_code == 500 - - -def test_retrieve_cfrags(porter, - porter_web_controller, - enacted_policy, - bob, - alice, - random_treasure_map_data, - valid_user_address_context): - # Send bad data to assert error return - response = porter_web_controller.post('/retrieve_cfrags', data=json.dumps({'bad': 'input'})) - assert response.status_code == 400 - - # Setup - original_message = b'The paradox of education is precisely this - that as one begins to become ' \ - b'conscious one begins to examine the society in which ' \ - b'he is (they are) being educated.' # - James Baldwin - retrieve_cfrags_params, message_kits = retrieval_request_setup(enacted_policy, - bob, - alice, - specific_messages=[original_message], - encode_for_rest=True) - assert len(message_kits) == 1 - message_kit = message_kits[0] - - # - # Success - # - response = porter_web_controller.post('/retrieve_cfrags', data=json.dumps(retrieve_cfrags_params)) - assert response.status_code == 200 - - response_data = json.loads(response.data) - retrieval_results = response_data['result']['retrieval_results'] - assert retrieval_results - - # expected results - can only compare length of results, ursulas are randomized to obtain cfrags - retrieve_args = retrieval_params_decode_from_rest(retrieve_cfrags_params) - expected_results = porter.retrieve_cfrags(**retrieve_args) - assert len(retrieval_results) == len(expected_results) - - # check that the re-encryption performed was valid - treasure_map = retrieve_args['treasure_map'] - policy_message_kit = PolicyMessageKit.from_message_kit(message_kit=message_kit, - policy_encrypting_key=enacted_policy.public_key, - threshold=treasure_map.threshold) - assert len(retrieval_results) == 1 - field = PRERetrievalOutcomeSchema() - cfrags = field.load(retrieval_results[0])['cfrags'] - verified_cfrags = {} - for ursula, cfrag in cfrags.items(): - # need to obtain verified cfrags (verified cfrags are not deserializable, only non-verified cfrags) - verified_cfrag = cfrag.verify(capsule=policy_message_kit.message_kit.capsule, - verifying_pk=alice.stamp.as_umbral_pubkey(), - delegating_pk=enacted_policy.public_key, - receiving_pk=bob.public_keys(DecryptingPower)) - verified_cfrags[ursula] = verified_cfrag - retrieval_result_object = RetrievalResult(cfrags=verified_cfrags) - policy_message_kit = policy_message_kit.with_result(retrieval_result_object) - - assert policy_message_kit.is_decryptable_by_receiver() - - cleartext = bob._crypto_power.power_ups(DecryptingPower).keypair.decrypt_message_kit(policy_message_kit) - assert cleartext == original_message - - # - # Try using multiple retrieval kits - # - multiple_retrieval_kits_params = dict(retrieve_cfrags_params) - enrico = Enrico(encrypting_key=enacted_policy.public_key) - retrieval_kit_1 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'The paradox of education is precisely this')) - retrieval_kit_2 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'that as one begins to become conscious')) - retrieval_kit_3 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'begins to examine the society in which')) - retrieval_kit_4 = RetrievalKit.from_message_kit(enrico.encrypt_for_pre(b'he is (they are) being educated.')) - retrieval_kit_field = RetrievalKitField() - # use multiple retrieval kits and serialize for json - multiple_retrieval_kits_params['retrieval_kits'] = [ - retrieval_kit_field._serialize(value=retrieval_kit_1, attr=None, obj=None), - retrieval_kit_field._serialize(value=retrieval_kit_2, attr=None, obj=None), - retrieval_kit_field._serialize(value=retrieval_kit_3, attr=None, obj=None), - retrieval_kit_field._serialize(value=retrieval_kit_4, attr=None, obj=None) - ] - response = porter_web_controller.post('/retrieve_cfrags', data=json.dumps(multiple_retrieval_kits_params)) - assert response.status_code == 200 - - response_data = json.loads(response.data) - retrieval_results = response_data['result']['retrieval_results'] - assert retrieval_results - assert len(retrieval_results) == 4 - for i in range(0, 4): - assert len(retrieval_results[i]["cfrags"]) > 0 - assert len(retrieval_results[i]["errors"]) == 0 - - # - # Use context - # - context_field = JSON() - multiple_retrieval_kits_params['context'] = context_field._serialize(valid_user_address_context, attr=None, obj=None) - response = porter_web_controller.post('/retrieve_cfrags', data=json.dumps(multiple_retrieval_kits_params)) - assert response.status_code == 200 - - response_data = json.loads(response.data) - retrieval_results = response_data['result']['retrieval_results'] - assert retrieval_results - assert len(retrieval_results) == 4 - - # - # Failure - # - failure_retrieve_cfrags_params = dict(retrieve_cfrags_params) - # use encrypted treasure map - _, random_treasure_map = random_treasure_map_data - failure_retrieve_cfrags_params['treasure_map'] = b64encode(bytes(random_treasure_map)).decode() - response = porter_web_controller.post('/retrieve_cfrags', data=json.dumps(failure_retrieve_cfrags_params)) - assert response.status_code == 400 # invalid treasure map provided - - -def test_web_controller_handling_worker_pool_exception(mocker): - interface_impl = mocker.Mock() - num_failures = 3 - message_prefix = "Execution failed because test designed that way" - - def get_ursulas_method(*args, **kwargs): - failures = {} - for i in range(num_failures): - try: - raise ValueError(f'error_{i}') - except BaseException as e: - failures[f"value_{i}"] = sys.exc_info() - - raise WorkerPoolException(message_prefix=message_prefix, failures=failures) - - interface_impl.get_ursulas.side_effect = get_ursulas_method - controller = WebController(app_name="web_controller_app_test", - crash_on_error=False, - # too lazy to create test schema - use existing one - interface=PorterInterface(porter=interface_impl)) - control_transport = controller.make_control_transport() - - @control_transport.route('/get_ursulas', methods=['GET']) - def get_ursulas() -> Response: - """Porter control endpoint for sampling Ursulas on behalf of Alice.""" - response = controller(method_name='get_ursulas', control_request=request) - return response - - client = controller.test_client() - - get_ursulas_params = { - 'quantity': 5, - } - response = client.get('/get_ursulas', data=json.dumps(get_ursulas_params)) - - assert response.status_code == 404 - assert response.content_type == 'application/json' - response_data = json.loads(response.data) - - assert message_prefix in response_data['result']['failure_message'] - response_failures = response_data['result']['failures'] - assert len(response_failures) == 3 - - values = [f"value_{i}" for i in range(num_failures)] - errors = [f"error_{i}" for i in range(num_failures)] - for failure in response_failures: - assert failure['value'] in values - assert failure['error'] in errors - - # remove checked entry - values.remove(failure['value']) - errors.remove(failure['error']) diff --git a/tests/pre/test_pre_porter.py b/tests/pre/test_pre_porter.py new file mode 100644 index 0000000..e3d89e4 --- /dev/null +++ b/tests/pre/test_pre_porter.py @@ -0,0 +1,87 @@ +from porter.utils import retrieval_request_setup + + +def test_get_ursulas(porter, ursulas): + # simple + quantity = 4 + ursulas_info = porter.get_ursulas(quantity=quantity) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity # ensure no repeats + + ursulas_list = list(ursulas) + + # include specific ursulas + include_ursulas = [ + ursulas_list[0].checksum_address, + ursulas_list[1].checksum_address, + ] + ursulas_info = porter.get_ursulas( + quantity=quantity, include_ursulas=include_ursulas + ) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + + # exclude specific ursulas + number_to_exclude = len(ursulas_list) - 4 + exclude_ursulas = [] + for i in range(number_to_exclude): + exclude_ursulas.append(ursulas_list[i].checksum_address) + ursulas_info = porter.get_ursulas( + quantity=quantity, exclude_ursulas=exclude_ursulas + ) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + # include and exclude + include_ursulas = [ + ursulas_list[0].checksum_address, + ursulas_list[1].checksum_address, + ] + exclude_ursulas = [ + ursulas_list[2].checksum_address, + ursulas_list[3].checksum_address, + ] + ursulas_info = porter.get_ursulas( + quantity=quantity, + include_ursulas=include_ursulas, + exclude_ursulas=exclude_ursulas, + ) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + +def test_retrieve_cfrags(porter, bob, alice, enacted_policy): + # Setup + retrieval_args, _ = retrieval_request_setup(enacted_policy, bob, alice) + + result = porter.retrieve_cfrags(**retrieval_args) + + assert result, "valid result returned" + + +def test_retrieve_cfrags_with_context( + porter, bob, alice, enacted_policy, valid_user_address_context +): + # Setup + retrieval_args, _ = retrieval_request_setup( + enacted_policy, bob, alice, context=valid_user_address_context + ) + + result = porter.retrieve_cfrags(**retrieval_args) + assert result, "valid result returned" diff --git a/tests/pre/test_porter_specifications.py b/tests/pre/test_pre_porter_specifications.py similarity index 74% rename from tests/pre/test_porter_specifications.py rename to tests/pre/test_pre_porter_specifications.py index 7a43130..4366772 100644 --- a/tests/pre/test_porter_specifications.py +++ b/tests/pre/test_pre_porter_specifications.py @@ -4,20 +4,23 @@ import pytest from nucypher.crypto.powers import DecryptingPower from nucypher_core import TreasureMap as TreasureMapClass -from nucypher_core.umbral import PublicKey -from nucypher_core.umbral import SecretKey +from nucypher_core.umbral import PublicKey, SecretKey -from porter.fields.exceptions import SpecificationError, InvalidInputData, InvalidArgumentCombo -from porter.fields.umbralkey import UmbralKey +from porter.fields.exceptions import ( + InvalidArgumentCombo, + InvalidInputData, + SpecificationError, +) from porter.fields.treasuremap import TreasureMap +from porter.fields.umbralkey import UmbralKey from porter.main import Porter from porter.schema import ( + BaseSchema, PREGetUrsulas, + PRERetrievalOutcomeSchema, PRERetrieveCFrags, - UrsulaInfoSchema + UrsulaInfoSchema, ) -from porter.schema import BaseSchema -from porter.schema import PRERetrievalOutcomeSchema from porter.utils import retrieval_request_setup @@ -32,14 +35,14 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): quantity = 10 required_data = { - 'quantity': quantity, + "quantity": quantity, } # required args PREGetUrsulas().load(required_data) # missing required args - updated_data = {k: v for k, v in required_data.items() if k != 'quantity'} + updated_data = {k: v for k, v in required_data.items() if k != "quantity"} with pytest.raises(InvalidInputData): PREGetUrsulas().load(updated_data) @@ -50,7 +53,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): exclude_ursulas = [] for i in range(2): exclude_ursulas.append(get_random_checksum_address()) - updated_data['exclude_ursulas'] = exclude_ursulas + updated_data["exclude_ursulas"] = exclude_ursulas PREGetUrsulas().load(updated_data) # only include @@ -58,44 +61,44 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): include_ursulas = [] for i in range(3): include_ursulas.append(get_random_checksum_address()) - updated_data['include_ursulas'] = include_ursulas + updated_data["include_ursulas"] = include_ursulas PREGetUrsulas().load(updated_data) # both exclude and include updated_data = dict(required_data) - updated_data['exclude_ursulas'] = exclude_ursulas - updated_data['include_ursulas'] = include_ursulas + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = include_ursulas PREGetUrsulas().load(updated_data) # list input formatted as ',' separated strings updated_data = dict(required_data) - updated_data['exclude_ursulas'] = ','.join(exclude_ursulas) - updated_data['include_ursulas'] = ','.join(include_ursulas) + updated_data["exclude_ursulas"] = ",".join(exclude_ursulas) + updated_data["include_ursulas"] = ",".join(include_ursulas) data = PREGetUrsulas().load(updated_data) - assert data['exclude_ursulas'] == exclude_ursulas - assert data['include_ursulas'] == include_ursulas + assert data["exclude_ursulas"] == exclude_ursulas + assert data["include_ursulas"] == include_ursulas # single value as string cast to list updated_data = dict(required_data) - updated_data['exclude_ursulas'] = exclude_ursulas[0] - updated_data['include_ursulas'] = include_ursulas[0] + updated_data["exclude_ursulas"] = exclude_ursulas[0] + updated_data["include_ursulas"] = include_ursulas[0] data = PREGetUrsulas().load(updated_data) - assert data['exclude_ursulas'] == [exclude_ursulas[0]] - assert data['include_ursulas'] == [include_ursulas[0]] + assert data["exclude_ursulas"] == [exclude_ursulas[0]] + assert data["include_ursulas"] == [include_ursulas[0]] # invalid include entry updated_data = dict(required_data) - updated_data['exclude_ursulas'] = exclude_ursulas - updated_data['include_ursulas'] = list(include_ursulas) # make copy to modify - updated_data['include_ursulas'].append("0xdeadbeef") + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = list(include_ursulas) # make copy to modify + updated_data["include_ursulas"].append("0xdeadbeef") with pytest.raises(InvalidInputData): PREGetUrsulas().load(updated_data) # invalid exclude entry updated_data = dict(required_data) - updated_data['exclude_ursulas'] = list(exclude_ursulas) # make copy to modify - updated_data['exclude_ursulas'].append("0xdeadbeef") - updated_data['include_ursulas'] = include_ursulas + updated_data["exclude_ursulas"] = list(exclude_ursulas) # make copy to modify + updated_data["exclude_ursulas"].append("0xdeadbeef") + updated_data["include_ursulas"] = include_ursulas with pytest.raises(InvalidInputData): PREGetUrsulas().load(updated_data) @@ -104,25 +107,29 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): too_many_ursulas_to_include = [] while len(too_many_ursulas_to_include) <= quantity: too_many_ursulas_to_include.append(get_random_checksum_address()) - updated_data['include_ursulas'] = too_many_ursulas_to_include + updated_data["include_ursulas"] = too_many_ursulas_to_include with pytest.raises(InvalidArgumentCombo): # number of ursulas to include exceeds quantity to sample PREGetUrsulas().load(updated_data) # include and exclude addresses are not mutually exclusive - include has common entry updated_data = dict(required_data) - updated_data['exclude_ursulas'] = exclude_ursulas - updated_data['include_ursulas'] = list(include_ursulas) # make copy to modify - updated_data['include_ursulas'].append(exclude_ursulas[0]) # one address that overlaps + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = list(include_ursulas) # make copy to modify + updated_data["include_ursulas"].append( + exclude_ursulas[0] + ) # one address that overlaps with pytest.raises(InvalidArgumentCombo): # 1 address in both include and exclude lists PREGetUrsulas().load(updated_data) # include and exclude addresses are not mutually exclusive - exclude has common entry updated_data = dict(required_data) - updated_data['exclude_ursulas'] = list(exclude_ursulas) # make copy to modify - updated_data['exclude_ursulas'].append(include_ursulas[0]) # on address that overlaps - updated_data['include_ursulas'] = include_ursulas + updated_data["exclude_ursulas"] = list(exclude_ursulas) # make copy to modify + updated_data["exclude_ursulas"].append( + include_ursulas[0] + ) # on address that overlaps + updated_data["include_ursulas"] = include_ursulas with pytest.raises(InvalidArgumentCombo): # 1 address in both include and exclude lists PREGetUrsulas().load(updated_data) @@ -134,15 +141,17 @@ def test_alice_get_ursulas_schema(get_random_checksum_address): expected_ursulas_info = [] port = 11500 for i in range(3): - ursula_info = Porter.UrsulaInfo(get_random_checksum_address(), - f"https://127.0.0.1:{port+i}", - SecretKey.random().public_key()) + ursula_info = Porter.UrsulaInfo( + get_random_checksum_address(), + f"https://127.0.0.1:{port+i}", + SecretKey.random().public_key(), + ) ursulas_info.append(ursula_info) # use schema to determine expected output (encrypting key gets changed to hex) expected_ursulas_info.append(UrsulaInfoSchema().dump(ursula_info)) - output = PREGetUrsulas().dump(obj={'ursulas': ursulas_info}) + output = PREGetUrsulas().dump(obj={"ursulas": ursulas_info}) assert output == {"ursulas": expected_ursulas_info} @@ -150,12 +159,14 @@ def test_alice_revoke(): pass # TODO -def test_bob_retrieve_cfrags(porter, - enacted_policy, - bob, - alice, - valid_user_address_context, - get_random_checksum_address): +def test_bob_retrieve_cfrags( + porter, + enacted_policy, + bob, + alice, + valid_user_address_context, + get_random_checksum_address, +): bob_retrieve_cfrags_schema = PRERetrieveCFrags() # no args @@ -163,10 +174,9 @@ def test_bob_retrieve_cfrags(porter, bob_retrieve_cfrags_schema.load({}) # Setup - no context - retrieval_args, _ = retrieval_request_setup(enacted_policy, - bob, - alice, - encode_for_rest=True) + retrieval_args, _ = retrieval_request_setup( + enacted_policy, bob, alice, encode_for_rest=True + ) bob_retrieve_cfrags_schema.load(retrieval_args) # simple schema load w/ optional context @@ -317,63 +327,70 @@ def test_bob_retrieve_cfrags(porter, def make_header(brand: bytes, major: int, minor: int) -> bytes: # Hardcoding this since it's too much trouble to expose it all the way from Rust assert len(brand) == 4 - major_bytes = major.to_bytes(2, 'big') - minor_bytes = minor.to_bytes(2, 'big') + major_bytes = major.to_bytes(2, "big") + minor_bytes = minor.to_bytes(2, "big") header = brand + major_bytes + minor_bytes return header -def test_treasure_map_validation(enacted_policy, - bob): +def test_treasure_map_validation(enacted_policy, bob): class UnenncryptedTreasureMapsOnly(BaseSchema): tmap = TreasureMap() # this will raise a base64 error with pytest.raises(SpecificationError) as e: - UnenncryptedTreasureMapsOnly().load({'tmap': "your face looks like a treasure map"}) + UnenncryptedTreasureMapsOnly().load( + {"tmap": "your face looks like a treasure map"} + ) # assert that field name is in the error message assert "Could not parse tmap" in str(e) assert "Invalid base64-encoded string" in str(e) # valid base64 but invalid treasuremap - bad_map = make_header(b'TMap', 1, 0) + b"your face looks like a treasure map" + bad_map = make_header(b"TMap", 1, 0) + b"your face looks like a treasure map" bad_map_b64 = base64.b64encode(bad_map).decode() with pytest.raises(InvalidInputData) as e: - UnenncryptedTreasureMapsOnly().load({'tmap': bad_map_b64}) + UnenncryptedTreasureMapsOnly().load({"tmap": bad_map_b64}) assert "Could not convert input for tmap to a TreasureMap" in str(e) assert "Failed to deserialize" in str(e) # a valid treasuremap - decrypted_treasure_map = bob._decrypt_treasure_map(enacted_policy.treasure_map, - enacted_policy.publisher_verifying_key) + decrypted_treasure_map = bob._decrypt_treasure_map( + enacted_policy.treasure_map, enacted_policy.publisher_verifying_key + ) tmap_bytes = bytes(decrypted_treasure_map) tmap_b64 = base64.b64encode(tmap_bytes).decode() - result = UnenncryptedTreasureMapsOnly().load({'tmap': tmap_b64}) - assert isinstance(result['tmap'], TreasureMapClass) + result = UnenncryptedTreasureMapsOnly().load({"tmap": tmap_b64}) + assert isinstance(result["tmap"], TreasureMapClass) def test_key_validation(bob): - class BobKeyInputRequirer(BaseSchema): bobkey = UmbralKey() with pytest.raises(InvalidInputData) as e: - BobKeyInputRequirer().load({'bobkey': "I am the key to nothing"}) + BobKeyInputRequirer().load({"bobkey": "I am the key to nothing"}) assert "non-hexadecimal number found in fromhex()" in str(e) assert "bobkey" in str(e) with pytest.raises(InvalidInputData) as e: - BobKeyInputRequirer().load({'bobkey': "I am the key to nothing"}) + BobKeyInputRequirer().load({"bobkey": "I am the key to nothing"}) assert "non-hexadecimal number found in fromhex()" in str(e) assert "bobkey" in str(e) with pytest.raises(InvalidInputData) as e: # lets just take a couple bytes off (less bytes than required) - BobKeyInputRequirer().load({'bobkey': "02f0cb3f3a33f16255d9b2586e6c56570aa07bbeb1157e169f1fb114ffb40037"}) + BobKeyInputRequirer().load( + { + "bobkey": "02f0cb3f3a33f16255d9b2586e6c56570aa07bbeb1157e169f1fb114ffb40037" + } + ) assert "Could not convert input for bobkey to an Umbral Key" in str(e) - result = BobKeyInputRequirer().load(dict(bobkey=bob.public_keys(DecryptingPower).to_compressed_bytes().hex())) - assert isinstance(result['bobkey'], PublicKey) + result = BobKeyInputRequirer().load( + dict(bobkey=bob.public_keys(DecryptingPower).to_compressed_bytes().hex()) + ) + assert isinstance(result["bobkey"], PublicKey) diff --git a/tests/pre/test_pre_porter_web_controller.py b/tests/pre/test_pre_porter_web_controller.py new file mode 100644 index 0000000..7f35929 --- /dev/null +++ b/tests/pre/test_pre_porter_web_controller.py @@ -0,0 +1,295 @@ +import json +import sys +from base64 import b64encode + +from flask import Response, request +from nucypher.characters.lawful import Enrico +from nucypher.crypto.powers import DecryptingPower +from nucypher.policy.kits import PolicyMessageKit, RetrievalResult +from nucypher.utilities.concurrency import WorkerPoolException +from nucypher_core import RetrievalKit + +from porter.controllers import WebController +from porter.fields.base import JSON +from porter.fields.retrieve import RetrievalKit as RetrievalKitField +from porter.interfaces import PorterInterface +from porter.schema import PRERetrievalOutcomeSchema +from porter.utils import retrieval_params_decode_from_rest, retrieval_request_setup + + +def test_get_ursulas(porter_web_controller, ursulas): + # Send bad data to assert error return + response = porter_web_controller.get( + "/get_ursulas", data=json.dumps({"bad": "input"}) + ) + assert response.status_code == 400 + + quantity = 4 + ursulas_list = list(ursulas) + include_ursulas = [ + ursulas_list[0].checksum_address, + ursulas_list[1].checksum_address, + ] + exclude_ursulas = [ + ursulas_list[2].checksum_address, + ursulas_list[3].checksum_address, + ] + + get_ursulas_params = { + "quantity": quantity, + "include_ursulas": include_ursulas, + "exclude_ursulas": exclude_ursulas, + } + + # + # Success + # + response = porter_web_controller.get( + "/get_ursulas", data=json.dumps(get_ursulas_params) + ) + assert response.status_code == 200 + + response_data = json.loads(response.data) + ursulas_info = response_data["result"]["ursulas"] + returned_ursula_addresses = { + ursula_info["checksum_address"] for ursula_info in ursulas_info + } # ensure no repeats + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + # + # Test Query parameters + # + response = porter_web_controller.get( + f"/get_ursulas?quantity={quantity}" + f'&include_ursulas={",".join(include_ursulas)}' + f'&exclude_ursulas={",".join(exclude_ursulas)}' + ) + assert response.status_code == 200 + response_data = json.loads(response.data) + ursulas_info = response_data["result"]["ursulas"] + returned_ursula_addresses = { + ursula_info["checksum_address"] for ursula_info in ursulas_info + } # ensure no repeats + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + # + # Failure case + # + failed_ursula_params = dict(get_ursulas_params) + failed_ursula_params["quantity"] = len(ursulas_list) + 1 # too many to get + response = porter_web_controller.get( + "/get_ursulas", data=json.dumps(failed_ursula_params) + ) + assert response.status_code == 500 + + +def test_retrieve_cfrags( + porter, + porter_web_controller, + enacted_policy, + bob, + alice, + random_treasure_map_data, + valid_user_address_context, +): + # Send bad data to assert error return + response = porter_web_controller.post( + "/retrieve_cfrags", data=json.dumps({"bad": "input"}) + ) + assert response.status_code == 400 + + # Setup + original_message = ( + b"The paradox of education is precisely this - that as one begins to become " + b"conscious one begins to examine the society in which " + b"he is (they are) being educated." + ) # - James Baldwin + retrieve_cfrags_params, message_kits = retrieval_request_setup( + enacted_policy, + bob, + alice, + specific_messages=[original_message], + encode_for_rest=True, + ) + assert len(message_kits) == 1 + message_kit = message_kits[0] + + # + # Success + # + response = porter_web_controller.post( + "/retrieve_cfrags", data=json.dumps(retrieve_cfrags_params) + ) + assert response.status_code == 200 + + response_data = json.loads(response.data) + retrieval_results = response_data["result"]["retrieval_results"] + assert retrieval_results + + # expected results - can only compare length of results, ursulas are randomized to obtain cfrags + retrieve_args = retrieval_params_decode_from_rest(retrieve_cfrags_params) + expected_results = porter.retrieve_cfrags(**retrieve_args) + assert len(retrieval_results) == len(expected_results) + + # check that the re-encryption performed was valid + treasure_map = retrieve_args["treasure_map"] + policy_message_kit = PolicyMessageKit.from_message_kit( + message_kit=message_kit, + policy_encrypting_key=enacted_policy.public_key, + threshold=treasure_map.threshold, + ) + assert len(retrieval_results) == 1 + field = PRERetrievalOutcomeSchema() + cfrags = field.load(retrieval_results[0])["cfrags"] + verified_cfrags = {} + for ursula, cfrag in cfrags.items(): + # need to obtain verified cfrags (verified cfrags are not deserializable, only non-verified cfrags) + verified_cfrag = cfrag.verify( + capsule=policy_message_kit.message_kit.capsule, + verifying_pk=alice.stamp.as_umbral_pubkey(), + delegating_pk=enacted_policy.public_key, + receiving_pk=bob.public_keys(DecryptingPower), + ) + verified_cfrags[ursula] = verified_cfrag + retrieval_result_object = RetrievalResult(cfrags=verified_cfrags) + policy_message_kit = policy_message_kit.with_result(retrieval_result_object) + + assert policy_message_kit.is_decryptable_by_receiver() + + cleartext = bob._crypto_power.power_ups( + DecryptingPower + ).keypair.decrypt_message_kit(policy_message_kit) + assert cleartext == original_message + + # + # Try using multiple retrieval kits + # + multiple_retrieval_kits_params = dict(retrieve_cfrags_params) + enrico = Enrico(encrypting_key=enacted_policy.public_key) + retrieval_kit_1 = RetrievalKit.from_message_kit( + enrico.encrypt_for_pre(b"The paradox of education is precisely this") + ) + retrieval_kit_2 = RetrievalKit.from_message_kit( + enrico.encrypt_for_pre(b"that as one begins to become conscious") + ) + retrieval_kit_3 = RetrievalKit.from_message_kit( + enrico.encrypt_for_pre(b"begins to examine the society in which") + ) + retrieval_kit_4 = RetrievalKit.from_message_kit( + enrico.encrypt_for_pre(b"he is (they are) being educated.") + ) + retrieval_kit_field = RetrievalKitField() + # use multiple retrieval kits and serialize for json + multiple_retrieval_kits_params["retrieval_kits"] = [ + retrieval_kit_field._serialize(value=retrieval_kit_1, attr=None, obj=None), + retrieval_kit_field._serialize(value=retrieval_kit_2, attr=None, obj=None), + retrieval_kit_field._serialize(value=retrieval_kit_3, attr=None, obj=None), + retrieval_kit_field._serialize(value=retrieval_kit_4, attr=None, obj=None), + ] + response = porter_web_controller.post( + "/retrieve_cfrags", data=json.dumps(multiple_retrieval_kits_params) + ) + assert response.status_code == 200 + + response_data = json.loads(response.data) + retrieval_results = response_data["result"]["retrieval_results"] + assert retrieval_results + assert len(retrieval_results) == 4 + for i in range(0, 4): + assert len(retrieval_results[i]["cfrags"]) > 0 + assert len(retrieval_results[i]["errors"]) == 0 + + # + # Use context + # + context_field = JSON() + multiple_retrieval_kits_params["context"] = context_field._serialize( + valid_user_address_context, attr=None, obj=None + ) + response = porter_web_controller.post( + "/retrieve_cfrags", data=json.dumps(multiple_retrieval_kits_params) + ) + assert response.status_code == 200 + + response_data = json.loads(response.data) + retrieval_results = response_data["result"]["retrieval_results"] + assert retrieval_results + assert len(retrieval_results) == 4 + + # + # Failure + # + failure_retrieve_cfrags_params = dict(retrieve_cfrags_params) + # use encrypted treasure map + _, random_treasure_map = random_treasure_map_data + failure_retrieve_cfrags_params["treasure_map"] = b64encode( + bytes(random_treasure_map) + ).decode() + response = porter_web_controller.post( + "/retrieve_cfrags", data=json.dumps(failure_retrieve_cfrags_params) + ) + assert response.status_code == 400 # invalid treasure map provided + + +def test_web_controller_handling_worker_pool_exception(mocker): + interface_impl = mocker.Mock() + num_failures = 3 + message_prefix = "Execution failed because test designed that way" + + def get_ursulas_method(*args, **kwargs): + failures = {} + for i in range(num_failures): + try: + raise ValueError(f"error_{i}") + except BaseException as e: + failures[f"value_{i}"] = sys.exc_info() + + raise WorkerPoolException(message_prefix=message_prefix, failures=failures) + + interface_impl.get_ursulas.side_effect = get_ursulas_method + controller = WebController( + app_name="web_controller_app_test", + crash_on_error=False, + # too lazy to create test schema - use existing one + interface=PorterInterface(porter=interface_impl), + ) + control_transport = controller.make_control_transport() + + @control_transport.route("/get_ursulas", methods=["GET"]) + def get_ursulas() -> Response: + """Porter control endpoint for sampling Ursulas on behalf of Alice.""" + response = controller(method_name="get_ursulas", control_request=request) + return response + + client = controller.test_client() + + get_ursulas_params = { + "quantity": 5, + } + response = client.get("/get_ursulas", data=json.dumps(get_ursulas_params)) + + assert response.status_code == 404 + assert response.content_type == "application/json" + response_data = json.loads(response.data) + + assert message_prefix in response_data["result"]["failure_message"] + response_failures = response_data["result"]["failures"] + assert len(response_failures) == 3 + + values = [f"value_{i}" for i in range(num_failures)] + errors = [f"error_{i}" for i in range(num_failures)] + for failure in response_failures: + assert failure["value"] in values + assert failure["error"] in errors + + # remove checked entry + values.remove(failure["value"]) + errors.remove(failure["error"]) From 1270a527d9b5ecee11b2c1e0b7c7439f4908df3c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 10 May 2023 14:59:45 -0400 Subject: [PATCH 013/114] Limit version of backports.zoneinfo to < python 3.9 - was overwritten after relock. --- dev-requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index bc7875e..6372313 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version < '3.9' base58==1.0.3 bitarray==2.7.3 bytestring-splitter==2.4.1 diff --git a/requirements.txt b/requirements.txt index 2cdac72..07fbd51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.2 ; python_version >= '3.6' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version < '3.9' bitarray==2.7.3 bytestring-splitter==2.4.1 cached-property==1.5.2 From b7e87de865dcb3b3de182f132c90e71400c8e221 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 10 May 2023 16:24:33 -0400 Subject: [PATCH 014/114] Add web interface tests for cbd_decrypt REST endpoint. Rename tests. --- ...ications.py => test_cbd_specifications.py} | 0 ...py => test_porter_cbd_python_interface.py} | 4 +- tests/cbd/test_porter_cbd_web_interface.py | 114 ++++++++++++++++++ tests/conftest.py | 8 +- ...py => test_porter_pre_python_interface.py} | 0 ...er.py => test_porter_pre_web_interface.py} | 61 ---------- ...ications.py => test_pre_specifications.py} | 0 7 files changed, 120 insertions(+), 67 deletions(-) rename tests/cbd/{test_cbd_porter_specifications.py => test_cbd_specifications.py} (100%) rename tests/cbd/{test_cbd_porter.py => test_porter_cbd_python_interface.py} (94%) create mode 100644 tests/cbd/test_porter_cbd_web_interface.py rename tests/pre/{test_pre_porter.py => test_porter_pre_python_interface.py} (100%) rename tests/pre/{test_pre_porter_web_controller.py => test_porter_pre_web_interface.py} (79%) rename tests/pre/{test_pre_porter_specifications.py => test_pre_specifications.py} (100%) diff --git a/tests/cbd/test_cbd_porter_specifications.py b/tests/cbd/test_cbd_specifications.py similarity index 100% rename from tests/cbd/test_cbd_porter_specifications.py rename to tests/cbd/test_cbd_specifications.py diff --git a/tests/cbd/test_cbd_porter.py b/tests/cbd/test_porter_cbd_python_interface.py similarity index 94% rename from tests/cbd/test_cbd_porter.py rename to tests/cbd/test_porter_cbd_python_interface.py index ef7a4cc..688d8b6 100644 --- a/tests/cbd/test_cbd_porter.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -38,11 +38,11 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): # no errors assert len(cbd_outcome.errors) == 0 - ursula_addresses = [ursula.checksum_address for ursula in cohort] + cohort_addresses = [ursula.checksum_address for ursula in cohort] decryption_shares = [] for ursula_address, response_bytes in cbd_outcome.decryption_responses.items(): - assert ursula_address in ursula_addresses + assert ursula_address in cohort_addresses assert len(response_bytes) > 0 decryption_response = ThresholdDecryptionResponse.from_bytes(response_bytes) decryption_share = DecryptionShareSimple.from_bytes( diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py new file mode 100644 index 0000000..06cfba6 --- /dev/null +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -0,0 +1,114 @@ +import json +import os +from base64 import b64encode, b64decode + +from eth_utils import to_checksum_address +from ferveo_py import DecryptionShareSimple, combine_decryption_shares_simple, \ + decrypt_with_shared_secret, Ciphertext +from nucypher.crypto.ferveo.dkg import FerveoVariant +from nucypher_core import ThresholdDecryptionRequest, Conditions, ThresholdDecryptionResponse + + +def test_cbd_decrypt( + porter, + porter_web_controller, + dkg_setup, + dkg_encrypted_data +): + # Send bad data to assert error return + response = porter_web_controller.post( + "/cbd_decrypt", data=json.dumps({"bad": "input"}) + ) + assert response.status_code == 400 + + # Setup + ritual_id, public_key, cohort, params, threshold = dkg_setup + ciphertext, expected_plaintext, conditions = dkg_encrypted_data + + decryption_request = ThresholdDecryptionRequest( + id=ritual_id, + variant=int(FerveoVariant.SIMPLE.value), + ciphertext=bytes(ciphertext), + conditions=Conditions(json.dumps(conditions)), + ) + encrypted_decryption_requests = { + ursula.checksum_address: b64encode(bytes(decryption_request)).decode() + for ursula in cohort + } + request_data = { + "threshold": threshold, + "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + } + + # + # Success + # + response = porter_web_controller.post( + "/cbd_decrypt", data=json.dumps(request_data) + ) + assert response.status_code == 200 + + response_data = json.loads(response.data) + + decryption_results = response_data["result"]["decryption_results"] + assert decryption_results + + assert len(decryption_results['decryption_responses']) >= threshold + + cohort_addresses = [to_checksum_address(ursula.checksum_address) for ursula in cohort] + + errors = decryption_results["errors"] + assert len(errors) == 0 # no errors + + decryption_responses = decryption_results["decryption_responses"] + assert len(decryption_responses) >= threshold + + # check that the decryption performed was valid + decryption_shares = [] + for ursula_address, response_bytes in decryption_responses.items(): + assert ursula_address in cohort_addresses + assert len(response_bytes) > 0 + decryption_response = ThresholdDecryptionResponse.from_bytes(b64decode(response_bytes)) + decryption_share = DecryptionShareSimple.from_bytes( + decryption_response.decryption_share + ) + decryption_shares.append(decryption_share) + + shared_secret = combine_decryption_shares_simple(decryption_shares) + conditions = json.dumps(conditions).encode() # aad + cleartext = decrypt_with_shared_secret( + Ciphertext.from_bytes(ciphertext), + conditions, # aad + shared_secret, + params, # dkg params + ) + assert bytes(cleartext) == expected_plaintext + + # + # Errors (some invalid threshold decryption requests) + # + encrypted_decryption_requests = {} + for i in range(0, len(cohort)): + if i < threshold - 1: + # less than threshold valid data + data = b64encode(bytes(decryption_request)).decode() + else: + # invalid data + data = b64encode(bytes(os.urandom(32))).decode() + + encrypted_decryption_requests[cohort[i].checksum_address] = data + + request_data = { + "threshold": threshold, + "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + } + response = porter_web_controller.post( + "/cbd_decrypt", data=json.dumps(request_data) + ) + response_data = json.loads(response.data) + + decryption_results = response_data["result"]["decryption_results"] + assert decryption_results + assert len(decryption_results['decryption_responses']) == (threshold - 1) + errors = decryption_results["errors"] + assert len(errors) == (len(cohort) - threshold + 1) diff --git a/tests/conftest.py b/tests/conftest.py index a87993b..c78076c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,7 +5,7 @@ from click.testing import CliRunner from eth_typing import ChecksumAddress from eth_utils import to_checksum_address -from ferveo_py import Ciphertext, DkgPublicKey, DkgPublicParameters, Validator +from ferveo_py import DkgPublicKey, DkgPublicParameters, Validator from nucypher.blockchain.economics import Economics, EconomicsFactory from nucypher.blockchain.eth.actors import Operator from nucypher.blockchain.eth.agents import ( @@ -24,13 +24,13 @@ from nucypher.policy.conditions.types import LingoList from nucypher.utilities.logging import GlobalLoggerSettings from nucypher_core import HRAC, Address, TreasureMap - -from porter.emitters import WebEmitter -from porter.main import Porter from tests.constants import MOCK_ETH_PROVIDER_URI from tests.mock.coordinator import MockCoordinatorAgent from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager +from porter.emitters import WebEmitter +from porter.main import Porter + # Crash on server error by default WebEmitter._crash_on_error_default = True Learner._DEBUG_MODE = False diff --git a/tests/pre/test_pre_porter.py b/tests/pre/test_porter_pre_python_interface.py similarity index 100% rename from tests/pre/test_pre_porter.py rename to tests/pre/test_porter_pre_python_interface.py diff --git a/tests/pre/test_pre_porter_web_controller.py b/tests/pre/test_porter_pre_web_interface.py similarity index 79% rename from tests/pre/test_pre_porter_web_controller.py rename to tests/pre/test_porter_pre_web_interface.py index 7f35929..5a75878 100644 --- a/tests/pre/test_pre_porter_web_controller.py +++ b/tests/pre/test_porter_pre_web_interface.py @@ -1,18 +1,13 @@ import json -import sys from base64 import b64encode -from flask import Response, request from nucypher.characters.lawful import Enrico from nucypher.crypto.powers import DecryptingPower from nucypher.policy.kits import PolicyMessageKit, RetrievalResult -from nucypher.utilities.concurrency import WorkerPoolException from nucypher_core import RetrievalKit -from porter.controllers import WebController from porter.fields.base import JSON from porter.fields.retrieve import RetrievalKit as RetrievalKitField -from porter.interfaces import PorterInterface from porter.schema import PRERetrievalOutcomeSchema from porter.utils import retrieval_params_decode_from_rest, retrieval_request_setup @@ -237,59 +232,3 @@ def test_retrieve_cfrags( "/retrieve_cfrags", data=json.dumps(failure_retrieve_cfrags_params) ) assert response.status_code == 400 # invalid treasure map provided - - -def test_web_controller_handling_worker_pool_exception(mocker): - interface_impl = mocker.Mock() - num_failures = 3 - message_prefix = "Execution failed because test designed that way" - - def get_ursulas_method(*args, **kwargs): - failures = {} - for i in range(num_failures): - try: - raise ValueError(f"error_{i}") - except BaseException as e: - failures[f"value_{i}"] = sys.exc_info() - - raise WorkerPoolException(message_prefix=message_prefix, failures=failures) - - interface_impl.get_ursulas.side_effect = get_ursulas_method - controller = WebController( - app_name="web_controller_app_test", - crash_on_error=False, - # too lazy to create test schema - use existing one - interface=PorterInterface(porter=interface_impl), - ) - control_transport = controller.make_control_transport() - - @control_transport.route("/get_ursulas", methods=["GET"]) - def get_ursulas() -> Response: - """Porter control endpoint for sampling Ursulas on behalf of Alice.""" - response = controller(method_name="get_ursulas", control_request=request) - return response - - client = controller.test_client() - - get_ursulas_params = { - "quantity": 5, - } - response = client.get("/get_ursulas", data=json.dumps(get_ursulas_params)) - - assert response.status_code == 404 - assert response.content_type == "application/json" - response_data = json.loads(response.data) - - assert message_prefix in response_data["result"]["failure_message"] - response_failures = response_data["result"]["failures"] - assert len(response_failures) == 3 - - values = [f"value_{i}" for i in range(num_failures)] - errors = [f"error_{i}" for i in range(num_failures)] - for failure in response_failures: - assert failure["value"] in values - assert failure["error"] in errors - - # remove checked entry - values.remove(failure["value"]) - errors.remove(failure["error"]) diff --git a/tests/pre/test_pre_porter_specifications.py b/tests/pre/test_pre_specifications.py similarity index 100% rename from tests/pre/test_pre_porter_specifications.py rename to tests/pre/test_pre_specifications.py From 3085b9cc9102266029a70b54b79636b66c6ee094 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 10 May 2023 16:26:17 -0400 Subject: [PATCH 015/114] Fix precommit hook to run the correct tests. --- .pre-commit-config.yaml | 2 +- scripts/{run_unit_tests.sh => run_tests.sh} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename scripts/{run_unit_tests.sh => run_tests.sh} (66%) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9cc02ba..0e9d49d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,7 @@ repos: - id: tests name: Run Unit Tests - entry: scripts/run_unit_tests.sh + entry: scripts/run_tests.sh language: system types: [python] stages: [push] # required additional setup: pre-commit install && pre-commit install -t pre-push diff --git a/scripts/run_unit_tests.sh b/scripts/run_tests.sh similarity index 66% rename from scripts/run_unit_tests.sh rename to scripts/run_tests.sh index e84a379..2b04db1 100644 --- a/scripts/run_unit_tests.sh +++ b/scripts/run_tests.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash set -e -pytest tests/unit +pytest tests exit 0 From 7388ad2a9d5ced9e5bb7a4dd1fdc5a19f98e8699 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 17 May 2023 09:46:27 -0400 Subject: [PATCH 016/114] Depend on the correct `nucypher` commit hash - old one changed due to rebase, and `nucypher` PRs have been merged. --- Pipfile | 4 ++-- dev-requirements.txt | 2 +- requirements.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Pipfile b/Pipfile index 523ee6a..c7656eb 100644 --- a/Pipfile +++ b/Pipfile @@ -7,11 +7,11 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "e2e-dkg"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "e2e-dkg", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "development", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/dev-requirements.txt b/dev-requirements.txt index 6372313..24baf7a 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -86,7 +86,7 @@ msgspec==0.14.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.7.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/derekpierre/nucypher.git@197a852b2198e51acd1c489b6df898c992fdc822 +nucypher @ git+https://github.com/nucypher/nucypher.git@5a06721d7d18c523217cb3308942fb5c378eb081 nucypher-core==0.7.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 07fbd51..804c745 100644 --- a/requirements.txt +++ b/requirements.txt @@ -57,7 +57,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/derekpierre/nucypher.git@197a852b2198e51acd1c489b6df898c992fdc822 +nucypher @ git+https://github.com/nucypher/nucypher.git@5a06721d7d18c523217cb3308942fb5c378eb081 nucypher-core==0.7.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 From 0066a8d848e2288e6c44fb4ce8fe37ede9dc5495 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 16 May 2023 22:32:57 -0400 Subject: [PATCH 017/114] Update Porter to use E2EE based on proper EncryptedThresholdDecryptionRequest/Response types. --- dev-requirements.txt | 4 +- porter/fields/cbd.py | 43 +++++++++ porter/main.py | 17 +++- porter/schema.py | 11 ++- requirements.txt | 4 +- tests/cbd/test_cbd_specifications.py | 93 +++++++++++++------ tests/cbd/test_porter_cbd_python_interface.py | 34 ++++--- tests/cbd/test_porter_cbd_web_interface.py | 85 +++++++++++++---- tests/conftest.py | 15 ++- 9 files changed, 231 insertions(+), 75 deletions(-) create mode 100644 porter/fields/cbd.py diff --git a/dev-requirements.txt b/dev-requirements.txt index 24baf7a..7ccca54 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -86,8 +86,8 @@ msgspec==0.14.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.7.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/nucypher/nucypher.git@5a06721d7d18c523217cb3308942fb5c378eb081 -nucypher-core==0.7.0 +nucypher @ git+https://github.com/derekpierre/nucypher.git@bae870e97c9682d44cd58ddc36d68a89b2107d37 +nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@827b07e1e56a514ad81e11899dc0e1cfd1052001#subdirectory=nucypher-core-python numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' diff --git a/porter/fields/cbd.py b/porter/fields/cbd.py new file mode 100644 index 0000000..005c613 --- /dev/null +++ b/porter/fields/cbd.py @@ -0,0 +1,43 @@ +from nucypher_core import ( + EncryptedThresholdDecryptionRequest as EncryptedThresholdDecryptionRequestClass, +) +from nucypher_core import ( + EncryptedThresholdDecryptionResponse as EncryptedThresholdDecryptionResponseClass, +) + +from porter.fields.base import Base64BytesRepresentation +from porter.fields.exceptions import InvalidInputData + + +class EncryptedThresholdDecryptionRequest(Base64BytesRepresentation): + """ + Parameter representation of encrypted threshold decryption request. + """ + + def _deserialize(self, value, attr, data, **kwargs): + try: + encrypted_decryption_request_bytes = super()._deserialize( + value, attr, data, **kwargs + ) + return EncryptedThresholdDecryptionRequestClass.from_bytes( + encrypted_decryption_request_bytes + ) + except Exception as e: + raise InvalidInputData( + f"Could not convert input for {self.name} to an EncryptedThresholdDecryptionRequest: {e}" + ) from e + + +class EncryptedThresholdDecryptionResponse(Base64BytesRepresentation): + def _deserialize(self, value, attr, data, **kwargs): + try: + encrypted_decryption_response_bytes = super()._deserialize( + value, attr, data, **kwargs + ) + return EncryptedThresholdDecryptionResponseClass.from_bytes( + encrypted_decryption_response_bytes + ) + except Exception as e: + raise InvalidInputData( + f"Could not convert input for {self.name} to an EncryptedThresholdDecryptionResponse: {e}" + ) from e diff --git a/porter/main.py b/porter/main.py index d284a7e..16fbfd8 100644 --- a/porter/main.py +++ b/porter/main.py @@ -19,7 +19,12 @@ from nucypher.policy.reservoir import PrefetchStrategy, make_staking_provider_reservoir from nucypher.utilities.concurrency import WorkerPool from nucypher.utilities.logging import Logger -from nucypher_core import RetrievalKit, TreasureMap +from nucypher_core import ( + EncryptedThresholdDecryptionRequest, + EncryptedThresholdDecryptionResponse, + RetrievalKit, + TreasureMap, +) from nucypher_core.umbral import PublicKey from porter.controllers import PorterCLIController, WebController @@ -73,7 +78,9 @@ class CBDDecryptionOutcome(NamedTuple): one or more Ursulas. """ - decryption_responses: Dict[ChecksumAddress, bytes] + encrypted_decryption_responses: Dict[ + ChecksumAddress, EncryptedThresholdDecryptionResponse + ] errors: Dict[ChecksumAddress, str] def __init__(self, @@ -180,7 +187,9 @@ def retrieve_cfrags( def cbd_decrypt( self, threshold: int, - encrypted_decryption_requests: Dict[ChecksumAddress, bytes], + encrypted_decryption_requests: Dict[ + ChecksumAddress, EncryptedThresholdDecryptionRequest + ], ) -> CBDDecryptionOutcome: decryption_client = ThresholdDecryptionClient(self) successes, failures = decryption_client.gather_encrypted_decryption_shares( @@ -188,7 +197,7 @@ def cbd_decrypt( ) cbd_outcome = Porter.CBDDecryptionOutcome( - decryption_responses=successes, errors=failures + encrypted_decryption_responses=successes, errors=failures ) return cbd_outcome diff --git a/porter/schema.py b/porter/schema.py index 7aa5f2e..5ef52b5 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -13,6 +13,10 @@ PositiveInteger, StringList, ) +from porter.fields.cbd import ( + EncryptedThresholdDecryptionRequest, + EncryptedThresholdDecryptionResponse, +) from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData from porter.fields.retrieve import CapsuleFrag, RetrievalKit from porter.fields.treasuremap import TreasureMap @@ -206,7 +210,10 @@ class PRERetrieveCFrags(BaseSchema): class CBDDecryptionOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" - decryption_responses = Dict(keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation()) + + encrypted_decryption_responses = Dict( + keys=UrsulaChecksumAddress(), values=EncryptedThresholdDecryptionResponse() + ) errors = Dict(keys=UrsulaChecksumAddress(), values=String()) # maintain field declaration ordering @@ -228,7 +235,7 @@ class CBDDecrypt(BaseSchema): ) encrypted_decryption_requests = JSONDict( keys=UrsulaChecksumAddress(), - values=Base64BytesRepresentation(), + values=EncryptedThresholdDecryptionRequest(), required=True, load_only=True, click=click.option( diff --git a/requirements.txt b/requirements.txt index 804c745..b5bb527 100644 --- a/requirements.txt +++ b/requirements.txt @@ -57,8 +57,8 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/nucypher/nucypher.git@5a06721d7d18c523217cb3308942fb5c378eb081 -nucypher-core==0.7.0 +nucypher @ git+https://github.com/derekpierre/nucypher.git@bae870e97c9682d44cd58ddc36d68a89b2107d37 +nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@827b07e1e56a514ad81e11899dc0e1cfd1052001#subdirectory=nucypher-core-python packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index 4d84293..f33d6e1 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -4,8 +4,14 @@ import pytest from eth_utils import to_checksum_address from nucypher.crypto.ferveo.dkg import FerveoVariant +from nucypher.crypto.powers import ThresholdRequestDecryptingPower from nucypher_core import Conditions, ThresholdDecryptionRequest +from nucypher_core.umbral import SecretKey +from porter.fields.cbd import ( + EncryptedThresholdDecryptionRequest, + EncryptedThresholdDecryptionResponse, +) from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData from porter.main import Porter from porter.schema import CBDDecrypt, CBDDecryptionOutcomeSchema @@ -25,10 +31,24 @@ def test_cbd_decrypt( ciphertext=bytes(ciphertext), conditions=Conditions(json.dumps(conditions)), ) - encrypted_decryption_requests = { - ursula.checksum_address: b64encode(bytes(decryption_request)).decode() - for ursula in cohort - } + + response_sk = SecretKey.random() + + encrypted_request_field = EncryptedThresholdDecryptionRequest() + encrypted_decryption_requests = {} + for ursula in cohort: + request_encrypting_key = ( + ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) + ) + encrypted_decryption_request = decryption_request.encrypt( + request_encrypting_key=request_encrypting_key, + response_encrypting_key=response_sk.public_key(), + ) + encrypted_decryption_requests[ + ursula.checksum_address + ] = encrypted_request_field._serialize( + value=encrypted_decryption_request, attr=None, obj=None + ) # no args with pytest.raises(InvalidInputData): @@ -92,34 +112,45 @@ def test_cbd_decrypt( cbd_decrypt_schema.load(request_data) # actual outcomes - encrypted_decryption_requests = { - ursula.checksum_address: bytes(decryption_request) - for ursula in cohort # non-json version - } + encrypted_decryption_requests = {} + for ursula in cohort: + request_encrypting_key = ( + ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) + ) + encrypted_decryption_request = decryption_request.encrypt( + request_encrypting_key=request_encrypting_key, + response_encrypting_key=response_sk.public_key(), + ) + encrypted_decryption_requests[ + ursula.checksum_address + ] = encrypted_decryption_request + cbd_outcome = porter.cbd_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) cbd_outcome_schema = CBDDecryptionOutcomeSchema() - assert len(cbd_outcome.decryption_responses) >= threshold + assert len(cbd_outcome.encrypted_decryption_responses) >= threshold assert len(cbd_outcome.errors) == 0 outcome_json = cbd_outcome_schema.dump(cbd_outcome) output = cbd_decrypt_schema.dump(obj={"decryption_results": cbd_outcome}) - assert len(output["decryption_results"]["decryption_responses"]) >= threshold assert ( - output["decryption_results"]["decryption_responses"] - == outcome_json["decryption_responses"] + len(output["decryption_results"]["encrypted_decryption_responses"]) >= threshold + ) + assert ( + output["decryption_results"]["encrypted_decryption_responses"] + == outcome_json["encrypted_decryption_responses"] ) + encrypted_response_field = EncryptedThresholdDecryptionResponse() for ( ursula_checksum_address, - decryption_response, - ) in cbd_outcome.decryption_responses.items(): - assert ( - output["decryption_results"]["decryption_responses"][ - ursula_checksum_address - ] - == b64encode(decryption_response).decode() + encrypted_decryption_response, + ) in cbd_outcome.encrypted_decryption_responses.items(): + assert output["decryption_results"]["encrypted_decryption_responses"][ + ursula_checksum_address + ] == encrypted_response_field._serialize( + value=encrypted_decryption_response, attr=None, obj=None ) assert len(output["decryption_results"]["errors"]) == 0 @@ -134,24 +165,26 @@ def test_cbd_decrypt( errors[ursula_checksum_address] = f"Error Message {i}" faked_cbd_outcome = Porter.CBDDecryptionOutcome( - decryption_responses=cbd_outcome.decryption_responses, errors=errors + encrypted_decryption_responses=cbd_outcome.encrypted_decryption_responses, + errors=errors, ) faked_outcome_json = cbd_outcome_schema.dump(faked_cbd_outcome) output = cbd_decrypt_schema.dump(obj={"decryption_results": faked_cbd_outcome}) - assert len(output["decryption_results"]["decryption_responses"]) >= threshold assert ( - output["decryption_results"]["decryption_responses"] - == faked_outcome_json["decryption_responses"] + len(output["decryption_results"]["encrypted_decryption_responses"]) >= threshold + ) + assert ( + output["decryption_results"]["encrypted_decryption_responses"] + == faked_outcome_json["encrypted_decryption_responses"] ) for ( ursula_checksum_address, - decryption_response, - ) in faked_cbd_outcome.decryption_responses.items(): - assert ( - output["decryption_results"]["decryption_responses"][ - ursula_checksum_address - ] - == b64encode(decryption_response).decode() + encrypted_decryption_response, + ) in faked_cbd_outcome.encrypted_decryption_responses.items(): + assert output["decryption_results"]["encrypted_decryption_responses"][ + ursula_checksum_address + ] == encrypted_response_field._serialize( + value=encrypted_decryption_response, attr=None, obj=None ) assert len(output["decryption_results"]["errors"]) == len(errors) diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/cbd/test_porter_cbd_python_interface.py index 688d8b6..ba6b1ac 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -7,11 +7,8 @@ decrypt_with_shared_secret, ) from nucypher.crypto.ferveo.dkg import FerveoVariant -from nucypher_core import ( - Conditions, - ThresholdDecryptionRequest, - ThresholdDecryptionResponse, -) +from nucypher_core import Conditions, ThresholdDecryptionRequest +from nucypher_core.umbral import SecretKey def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): @@ -25,15 +22,26 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): conditions=Conditions(json.dumps(conditions)), ) - encrypted_decryption_requests = { - ursula.checksum_address: bytes(decryption_request) for ursula in cohort - } + response_sk = SecretKey.random() + + encrypted_decryption_requests = {} + for ursula in cohort: + request_encrypting_key = ( + ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) + ) + encrypted_decryption_requests[ + ursula.checksum_address + ] = decryption_request.encrypt( + request_encrypting_key=request_encrypting_key, + response_encrypting_key=response_sk.public_key(), + ) + cbd_outcome = porter.cbd_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) # sufficient successes - assert len(cbd_outcome.decryption_responses) >= threshold + assert len(cbd_outcome.encrypted_decryption_responses) >= threshold # no errors assert len(cbd_outcome.errors) == 0 @@ -41,10 +49,12 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): cohort_addresses = [ursula.checksum_address for ursula in cohort] decryption_shares = [] - for ursula_address, response_bytes in cbd_outcome.decryption_responses.items(): + for ( + ursula_address, + encrypted_decryption_response, + ) in cbd_outcome.encrypted_decryption_responses.items(): assert ursula_address in cohort_addresses - assert len(response_bytes) > 0 - decryption_response = ThresholdDecryptionResponse.from_bytes(response_bytes) + decryption_response = encrypted_decryption_response.decrypt(sk=response_sk) decryption_share = DecryptionShareSimple.from_bytes( decryption_response.decryption_share ) diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index 06cfba6..5e6031b 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -1,12 +1,24 @@ import json import os -from base64 import b64encode, b64decode +from base64 import b64decode, b64encode from eth_utils import to_checksum_address -from ferveo_py import DecryptionShareSimple, combine_decryption_shares_simple, \ - decrypt_with_shared_secret, Ciphertext +from ferveo_py import ( + Ciphertext, + DecryptionShareSimple, + combine_decryption_shares_simple, + decrypt_with_shared_secret, +) from nucypher.crypto.ferveo.dkg import FerveoVariant -from nucypher_core import ThresholdDecryptionRequest, Conditions, ThresholdDecryptionResponse +from nucypher_core import ( + Conditions, + EncryptedThresholdDecryptionResponse, + ThresholdDecryptionRequest, + ThresholdDecryptionResponse, +) +from nucypher_core.umbral import SecretKey + +from porter.fields.cbd import EncryptedThresholdDecryptionRequest def test_cbd_decrypt( @@ -31,10 +43,25 @@ def test_cbd_decrypt( ciphertext=bytes(ciphertext), conditions=Conditions(json.dumps(conditions)), ) - encrypted_decryption_requests = { - ursula.checksum_address: b64encode(bytes(decryption_request)).decode() - for ursula in cohort - } + + response_sk = SecretKey.random() + + encrypted_request_field = EncryptedThresholdDecryptionRequest() + encrypted_decryption_requests = {} + for ursula in cohort: + request_encrypting_key = ( + ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) + ) + encrypted_decryption_request = decryption_request.encrypt( + request_encrypting_key=request_encrypting_key, + response_encrypting_key=response_sk.public_key(), + ) + encrypted_decryption_requests[ + ursula.checksum_address + ] = encrypted_request_field._serialize( + value=encrypted_decryption_request, attr=None, obj=None + ) + request_data = { "threshold": threshold, "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), @@ -53,32 +80,37 @@ def test_cbd_decrypt( decryption_results = response_data["result"]["decryption_results"] assert decryption_results - assert len(decryption_results['decryption_responses']) >= threshold + assert len(decryption_results["encrypted_decryption_responses"]) >= threshold cohort_addresses = [to_checksum_address(ursula.checksum_address) for ursula in cohort] errors = decryption_results["errors"] assert len(errors) == 0 # no errors - decryption_responses = decryption_results["decryption_responses"] - assert len(decryption_responses) >= threshold + encrypted_decryption_responses = decryption_results[ + "encrypted_decryption_responses" + ] + assert len(encrypted_decryption_responses) >= threshold # check that the decryption performed was valid decryption_shares = [] - for ursula_address, response_bytes in decryption_responses.items(): + for ursula_address, response_bytes in encrypted_decryption_responses.items(): assert ursula_address in cohort_addresses assert len(response_bytes) > 0 - decryption_response = ThresholdDecryptionResponse.from_bytes(b64decode(response_bytes)) + encrypted_decryption_response = EncryptedThresholdDecryptionResponse.from_bytes( + b64decode(response_bytes) + ) + decryption_response = encrypted_decryption_response.decrypt(sk=response_sk) decryption_share = DecryptionShareSimple.from_bytes( decryption_response.decryption_share ) decryption_shares.append(decryption_share) shared_secret = combine_decryption_shares_simple(decryption_shares) - conditions = json.dumps(conditions).encode() # aad + json_conditions = json.dumps(conditions).encode() # aad cleartext = decrypt_with_shared_secret( Ciphertext.from_bytes(ciphertext), - conditions, # aad + json_conditions, # aad shared_secret, params, # dkg params ) @@ -91,11 +123,26 @@ def test_cbd_decrypt( for i in range(0, len(cohort)): if i < threshold - 1: # less than threshold valid data - data = b64encode(bytes(decryption_request)).decode() + request = decryption_request + else: # invalid data - data = b64encode(bytes(os.urandom(32))).decode() - + request = ThresholdDecryptionRequest( + id=999, # rando invalid ritual id + variant=int(FerveoVariant.SIMPLE.value), + ciphertext=bytes(ciphertext), + conditions=Conditions(json.dumps(conditions)), + ) + + encrypted_decryption_request = request.encrypt( + request_encrypting_key=cohort[ + i + ].threshold_request_power.get_pubkey_from_ritual_id(ritual_id=ritual_id), + response_encrypting_key=response_sk.public_key(), + ) + data = encrypted_request_field._serialize( + value=encrypted_decryption_request, attr=None, obj=None + ) encrypted_decryption_requests[cohort[i].checksum_address] = data request_data = { @@ -109,6 +156,6 @@ def test_cbd_decrypt( decryption_results = response_data["result"]["decryption_results"] assert decryption_results - assert len(decryption_results['decryption_responses']) == (threshold - 1) + assert len(decryption_results["encrypted_decryption_responses"]) == (threshold - 1) errors = decryption_results["errors"] assert len(errors) == (len(cohort) - threshold + 1) diff --git a/tests/conftest.py b/tests/conftest.py index c78076c..63d4e4a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -19,17 +19,21 @@ from nucypher.characters.lawful import Enrico, Ursula from nucypher.config.constants import TEMPORARY_DOMAIN from nucypher.crypto.ferveo import dkg -from nucypher.crypto.powers import DecryptingPower, RitualisticPower +from nucypher.crypto.powers import ( + DecryptingPower, + RitualisticPower, + ThresholdRequestDecryptingPower, +) from nucypher.network.nodes import Learner, Teacher from nucypher.policy.conditions.types import LingoList from nucypher.utilities.logging import GlobalLoggerSettings from nucypher_core import HRAC, Address, TreasureMap -from tests.constants import MOCK_ETH_PROVIDER_URI -from tests.mock.coordinator import MockCoordinatorAgent -from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager from porter.emitters import WebEmitter from porter.main import Porter +from tests.constants import MOCK_ETH_PROVIDER_URI +from tests.mock.coordinator import MockCoordinatorAgent +from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager # Crash on server error by default WebEmitter._crash_on_error_default = True @@ -299,6 +303,9 @@ def dkg_setup( provider=ursula.checksum_address, aggregated=True, transcript=bytes(transcripts[i]), + requestEncryptingKey=ursula.threshold_request_power.get_pubkey_from_ritual_id( + ritual_id + ), ) for i, ursula in enumerate(cohort) ], From 08bfa5ae8dea5a7558115500acf0d6937422f0ef Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 17 May 2023 09:03:30 -0400 Subject: [PATCH 018/114] Additional testing and cleanup for EncryptedThresholdDecryptionRequest/Response handling. --- porter/fields/cbd.py | 28 +++++- porter/schema.py | 8 +- tests/cbd/test_cbd_specifications.py | 10 +- tests/cbd/test_porter_cbd_python_interface.py | 23 +++++ tests/cbd/test_porter_cbd_web_interface.py | 10 +- tests/test_fields.py | 98 ++++++++++++++++++- 6 files changed, 156 insertions(+), 21 deletions(-) diff --git a/porter/fields/cbd.py b/porter/fields/cbd.py index 005c613..6b89051 100644 --- a/porter/fields/cbd.py +++ b/porter/fields/cbd.py @@ -9,11 +9,19 @@ from porter.fields.exceptions import InvalidInputData -class EncryptedThresholdDecryptionRequest(Base64BytesRepresentation): +class EncryptedThresholdDecryptionRequestField(Base64BytesRepresentation): """ Parameter representation of encrypted threshold decryption request. """ + def _serialize(self, value, attr, obj, **kwargs): + if not isinstance(value, EncryptedThresholdDecryptionRequestClass): + raise InvalidInputData( + f"Provided object is not an {EncryptedThresholdDecryptionRequestClass.__name__}" + ) + + return super()._serialize(value, attr, obj, **kwargs) + def _deserialize(self, value, attr, data, **kwargs): try: encrypted_decryption_request_bytes = super()._deserialize( @@ -24,11 +32,23 @@ def _deserialize(self, value, attr, data, **kwargs): ) except Exception as e: raise InvalidInputData( - f"Could not convert input for {self.name} to an EncryptedThresholdDecryptionRequest: {e}" + f"Could not convert input for {self.name} to an {EncryptedThresholdDecryptionRequestClass.__name__}: {e}" ) from e -class EncryptedThresholdDecryptionResponse(Base64BytesRepresentation): +class EncryptedThresholdDecryptionResponseField(Base64BytesRepresentation): + """ + Parameter representation of encrypted threshold decryption response. + """ + + def _serialize(self, value, attr, obj, **kwargs): + if not isinstance(value, EncryptedThresholdDecryptionResponseClass): + raise InvalidInputData( + f"Provided object is not an {EncryptedThresholdDecryptionResponseClass.__name__}" + ) + + return super()._serialize(value, attr, obj, **kwargs) + def _deserialize(self, value, attr, data, **kwargs): try: encrypted_decryption_response_bytes = super()._deserialize( @@ -39,5 +59,5 @@ def _deserialize(self, value, attr, data, **kwargs): ) except Exception as e: raise InvalidInputData( - f"Could not convert input for {self.name} to an EncryptedThresholdDecryptionResponse: {e}" + f"Could not convert input for {self.name} to an {EncryptedThresholdDecryptionResponseClass.__name__}: {e}" ) from e diff --git a/porter/schema.py b/porter/schema.py index 5ef52b5..d703fa5 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -14,8 +14,8 @@ StringList, ) from porter.fields.cbd import ( - EncryptedThresholdDecryptionRequest, - EncryptedThresholdDecryptionResponse, + EncryptedThresholdDecryptionRequestField, + EncryptedThresholdDecryptionResponseField, ) from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData from porter.fields.retrieve import CapsuleFrag, RetrievalKit @@ -212,7 +212,7 @@ class CBDDecryptionOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" encrypted_decryption_responses = Dict( - keys=UrsulaChecksumAddress(), values=EncryptedThresholdDecryptionResponse() + keys=UrsulaChecksumAddress(), values=EncryptedThresholdDecryptionResponseField() ) errors = Dict(keys=UrsulaChecksumAddress(), values=String()) @@ -235,7 +235,7 @@ class CBDDecrypt(BaseSchema): ) encrypted_decryption_requests = JSONDict( keys=UrsulaChecksumAddress(), - values=EncryptedThresholdDecryptionRequest(), + values=EncryptedThresholdDecryptionRequestField(), required=True, load_only=True, click=click.option( diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index f33d6e1..0e4d0be 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -1,16 +1,14 @@ import json -from base64 import b64encode import pytest from eth_utils import to_checksum_address from nucypher.crypto.ferveo.dkg import FerveoVariant -from nucypher.crypto.powers import ThresholdRequestDecryptingPower from nucypher_core import Conditions, ThresholdDecryptionRequest from nucypher_core.umbral import SecretKey from porter.fields.cbd import ( - EncryptedThresholdDecryptionRequest, - EncryptedThresholdDecryptionResponse, + EncryptedThresholdDecryptionRequestField, + EncryptedThresholdDecryptionResponseField, ) from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData from porter.main import Porter @@ -34,7 +32,7 @@ def test_cbd_decrypt( response_sk = SecretKey.random() - encrypted_request_field = EncryptedThresholdDecryptionRequest() + encrypted_request_field = EncryptedThresholdDecryptionRequestField() encrypted_decryption_requests = {} for ursula in cohort: request_encrypting_key = ( @@ -142,7 +140,7 @@ def test_cbd_decrypt( output["decryption_results"]["encrypted_decryption_responses"] == outcome_json["encrypted_decryption_responses"] ) - encrypted_response_field = EncryptedThresholdDecryptionResponse() + encrypted_response_field = EncryptedThresholdDecryptionResponseField() for ( ursula_checksum_address, encrypted_decryption_response, diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/cbd/test_porter_cbd_python_interface.py index ba6b1ac..d36214b 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -69,3 +69,26 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): params, # dkg params ) assert bytes(cleartext) == expected_plaintext + + # + # errors - invalid encrypting key used for request + # + random_public_key = SecretKey.random().public_key() + encrypted_decryption_requests = {} + for ursula in cohort: + encrypted_decryption_requests[ + ursula.checksum_address + ] = decryption_request.encrypt( + request_encrypting_key=random_public_key, + response_encrypting_key=response_sk.public_key(), + ) + + cbd_outcome = porter.cbd_decrypt( + threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests + ) + + # sufficient successes + assert len(cbd_outcome.encrypted_decryption_responses) == 0 + + # no errors + assert len(cbd_outcome.errors) == len(cohort) # all ursulas fail diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index 5e6031b..bf59720 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -1,6 +1,5 @@ import json -import os -from base64 import b64decode, b64encode +from base64 import b64decode from eth_utils import to_checksum_address from ferveo_py import ( @@ -14,11 +13,10 @@ Conditions, EncryptedThresholdDecryptionResponse, ThresholdDecryptionRequest, - ThresholdDecryptionResponse, ) from nucypher_core.umbral import SecretKey -from porter.fields.cbd import EncryptedThresholdDecryptionRequest +from porter.fields.cbd import EncryptedThresholdDecryptionRequestField def test_cbd_decrypt( @@ -46,7 +44,7 @@ def test_cbd_decrypt( response_sk = SecretKey.random() - encrypted_request_field = EncryptedThresholdDecryptionRequest() + encrypted_request_field = EncryptedThresholdDecryptionRequestField() encrypted_decryption_requests = {} for ursula in cohort: request_encrypting_key = ( @@ -158,4 +156,4 @@ def test_cbd_decrypt( assert decryption_results assert len(decryption_results["encrypted_decryption_responses"]) == (threshold - 1) errors = decryption_results["errors"] - assert len(errors) == (len(cohort) - threshold + 1) + assert len(errors) == (len(cohort) - (threshold - 1)) diff --git a/tests/test_fields.py b/tests/test_fields.py index adacc24..0a922cc 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -4,8 +4,16 @@ import pytest from eth_utils import to_canonical_address -from nucypher_core import Address, MessageKit +from nucypher.crypto.ferveo.dkg import FerveoVariant +from nucypher_core import ( + Address, + Conditions, + EncryptedThresholdDecryptionRequest, + EncryptedThresholdDecryptionResponse, + MessageKit, +) from nucypher_core import RetrievalKit as RetrievalKitClass +from nucypher_core import ThresholdDecryptionRequest, ThresholdDecryptionResponse from nucypher_core.umbral import SecretKey from porter.fields.base import ( @@ -16,6 +24,10 @@ String, StringList, ) +from porter.fields.cbd import ( + EncryptedThresholdDecryptionRequestField, + EncryptedThresholdDecryptionResponseField, +) from porter.fields.exceptions import InvalidInputData from porter.fields.retrieve import RetrievalKit from porter.fields.umbralkey import UmbralKey @@ -287,3 +299,87 @@ def test_cbd_json_dict_field(get_random_checksum_address): with pytest.raises(InvalidInputData): # attempt to serialize invalid key; must be checksum address field._serialize(value={"a": os.urandom(32)}, attr=None, obj=None) + + +def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): + ritual_id, _, _, _, _ = dkg_setup + ciphertext, expected_plaintext, conditions = dkg_encrypted_data + + decryption_request = ThresholdDecryptionRequest( + id=ritual_id, + variant=int(FerveoVariant.SIMPLE.value), + ciphertext=bytes(ciphertext), + conditions=Conditions(json.dumps(conditions)), + ) + + field = EncryptedThresholdDecryptionRequestField() + + random_request_encrypting_sk = SecretKey.random() + random_response_encrypting_sk = SecretKey.random() + encrypted_request = decryption_request.encrypt( + request_encrypting_key=random_request_encrypting_sk.public_key(), + response_encrypting_key=random_response_encrypting_sk.public_key(), + ) + + serialized_data = field._serialize(value=encrypted_request, attr=None, obj=None) + assert serialized_data == b64encode(bytes(encrypted_request)).decode() + + deserialized_encrypted_request = field._deserialize( + value=serialized_data, attr=None, data=None + ) + assert isinstance( + deserialized_encrypted_request, EncryptedThresholdDecryptionRequest + ) + assert deserialized_encrypted_request.id == ritual_id + assert bytes(deserialized_encrypted_request) == bytes(encrypted_request) + + deserialized_request = deserialized_encrypted_request.decrypt( + sk=random_request_encrypting_sk + ) + assert bytes(deserialized_request.decryption_request) == bytes(decryption_request) + assert ( + deserialized_request.response_encrypting_key + == random_response_encrypting_sk.public_key() + ) + + with pytest.raises(InvalidInputData): + field._serialize( + value="EncryptedThresholdDecryptionRequestString", attr=None, obj=None + ) + + with pytest.raises(InvalidInputData): + field._deserialize(value=os.urandom(32), attr=None, data=None) + + +def test_encrypted_threshold_decryption_response(): + decryption_share = os.urandom(32) + decryption_response = ThresholdDecryptionResponse(decryption_share=decryption_share) + + field = EncryptedThresholdDecryptionResponseField() + + random_response_encrypting_sk = SecretKey.random() + encrypted_response = decryption_response.encrypt( + random_response_encrypting_sk.public_key() + ) + + serialized_data = field._serialize(value=encrypted_response, attr=None, obj=None) + assert serialized_data == b64encode(bytes(encrypted_response)).decode() + + deserialized_encrypted_response = field._deserialize( + value=serialized_data, attr=None, data=None + ) + assert isinstance( + deserialized_encrypted_response, EncryptedThresholdDecryptionResponse + ) + assert bytes(deserialized_encrypted_response) == bytes(encrypted_response) + + deserialized_response = deserialized_encrypted_response.decrypt( + sk=random_response_encrypting_sk + ) + assert bytes(deserialized_response) == bytes(decryption_response) + + with pytest.raises(InvalidInputData): + field._serialize(value=[1, 2, 3, 4, 5], attr=None, obj=None) + + with pytest.raises(InvalidInputData): + field._deserialize(value=os.urandom(32), attr=None, data=None) From 0435136d0e417413f0ddfbd8cdf45b3f7fe01af4 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 20 May 2023 14:06:38 -0400 Subject: [PATCH 019/114] Incorporate changes from latest `nucypher-core` changes. --- Pipfile | 5 +- Pipfile.lock | 1261 ++++++++--------- dev-requirements.txt | 71 +- requirements.txt | 38 +- tests/cbd/test_cbd_specifications.py | 2 +- tests/cbd/test_porter_cbd_python_interface.py | 2 +- tests/cbd/test_porter_cbd_web_interface.py | 4 +- tests/test_fields.py | 4 +- 8 files changed, 678 insertions(+), 709 deletions(-) diff --git a/Pipfile b/Pipfile index c7656eb..6313e15 100644 --- a/Pipfile +++ b/Pipfile @@ -7,11 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} +nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "e2e-dkg"} +nucypher-core = {git="https://github.com/derekpierre/nucypher-core.git", ref="e2e-dkg", subdirectory="nucypher-core-python"} # should be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "development", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "e2e-dkg", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 51805f2..c15aef3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "e1c4bdee1d2ec15b81daf70c7faf258b5b7d2761b9ec6ec35265898df2037070" + "sha256": "b46f5c5aed8bebaad42e3632ce41a0ca715cb224ee0f4728b83c0c91f317c6e7" }, "pipfile-spec": 6, "requires": { @@ -284,11 +284,11 @@ }, "certifi": { "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", + "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" ], "markers": "python_version >= '3.6'", - "version": "==2022.12.7" + "version": "==2023.5.7" }, "cffi": { "hashes": [ @@ -597,11 +597,11 @@ }, "eth-tester": { "hashes": [ - "sha256:44a21e8c9c2fa98a5723e3bcd63c174bc2e92cbadd894b75ccae34cea0245e6c", - "sha256:c13252513f2ec7db536a3300e5bc5715a954c683d23cd7fe478192634e2fa26c" + "sha256:9cf8742896e26c53e03a79ca6c3a008bf64527f042659bcad306d87fbf2fa79a", + "sha256:d7db78d21bb33bc645d6172dd5ad259eab52399f2b62d4e9fcab075baf8a6877" ], "markers": "python_version < '4' and python_full_version >= '3.6.8'", - "version": "==0.8.0b3" + "version": "==0.9.0b1" }, "eth-typing": { "hashes": [ @@ -621,11 +621,11 @@ }, "ferveo": { "hashes": [ - "sha256:48820d03698bae445a79a6873a48e9f739b10af3fcaf35dc9ecc39f440c09e68", - "sha256:be9b1661dd66e227c14db8cb55e23cd27832704e076f842ec09b6e9c783e3124" + "sha256:5748e9a039ccf2a6e85fc9d6c986168dfdc5f1eead15b35c1a2992e737298d34", + "sha256:832dc2c1139cc3e052a07ad842ef671bf542dde20722426183b975967329002b" ], "markers": "python_version >= '3.7'", - "version": "==0.1.11" + "version": "==0.1.12" }, "flask": { "hashes": [ @@ -802,19 +802,19 @@ }, "jsonschema": { "hashes": [ - "sha256:4b88fe4edfd5ddc3364fca04b1554d4dd5bc67d2eb73c8795ab2d9e46a032643", - "sha256:b75063d9d6a5f5023c3d9bb89863a9cc1aaf34ccbd4dcf58ee5c5f23c1871b2a" + "sha256:112d303b0291095108013e712d4038d85f11dfc6b0141430932fce7c33d221b8", + "sha256:e8a9b0e9245d8e9c57e2281f30f1d11e0326abb919aa6866997a016487fcaef8" ], "markers": "python_version >= '3.8'", - "version": "==4.18.0a6" + "version": "==4.18.0a7" }, "jsonschema-specifications": { "hashes": [ - "sha256:1f84ccccce27abf263904363aa59171e9f889c152965f9e71bc05dfc520502fb", - "sha256:a743d6acd3d6ce0aa4d691b001be145eb8d0075d5beb3ce77c4e17cb13ebf158" + "sha256:2914352153a22053662886c096a4d905a41e771f28baa52c86d135b359dc64ed", + "sha256:ca4c182adb268045fb70e6c09eb818ff4f9d27e762725b0f257cfdd318dffca9" ], "markers": "python_version >= '3.8'", - "version": "==2023.3.6" + "version": "==2023.5.1" }, "lru-dict": { "hashes": [ @@ -1117,28 +1117,12 @@ }, "nucypher": { "git": "https://github.com/derekpierre/nucypher.git", - "ref": "197a852b2198e51acd1c489b6df898c992fdc822" + "ref": "4871cb01c82fc57ae801998b42fc4c304daf3e3e" }, "nucypher-core": { - "hashes": [ - "sha256:010acfa1b5db8672ecab6d423f115d1f26c893a9d46cab21be5858e07cedb97b", - "sha256:2edf1ff64f4c26be39939271b0c49f0e6dca007f568be4e2364631e9b731f69b", - "sha256:338d909da9ee7ae194b13ba771ff607ce36d0660d365e6dd9368343da3871fbc", - "sha256:514e7c861b05adc50a7bd748ea952df5870b1dfca77cfc2e5763bc0662f0ce59", - "sha256:52bfe3ed2bdd53cae0a88299b4e64510223e6debc5ca51989c5b8f93c9d40598", - "sha256:610ce729317c5c8817f60943660f4dd8464ac64adb95ea808c009c8ef92fc43f", - "sha256:679169a79e1ebd51bb2f7db50feef60522b658237b925660e97b83bc5cb31897", - "sha256:682c01979482a74186ef7fff2f9a717f319099e9d29874713f4f989658739cd6", - "sha256:79524ea772f608438d3a755980a79301717ad33fb1fca7c5e0d51a950faa53f0", - "sha256:9a3e08b62dcc5a943c6a08775a4597da80fd4be9fc380adb84d48a96cee7f59e", - "sha256:d0208752ecd41b69f8b494d8f515c2bf67be53179e1b75cd1770e15be9431194", - "sha256:d216c5bdb811c707c2c80cc66912373e5cb09eb148509d4a0fe8d080a78aab08", - "sha256:dbb9372629f3f5a9a19084c1f9b24814c6b055ffcbde0f0fcbbc7b488d1064f5", - "sha256:dc4e9c23dbca27cfbd8eac2796776ece4c4320a8efd174997ea0efdc3fb12c55", - "sha256:e63d7f4a25f6475c97e80f9e32c9c5056c8e5f51a3b1af1db73e8f2b0978d13b", - "sha256:e8007b202704512678f16d225789d843535b38cf5bcda2442c1510eb7e16e4cc" - ], - "version": "==0.7.0" + "git": "https://github.com/derekpierre/nucypher-core.git", + "ref": "9cb792197dbb20d4997448fc37b116f9f1fb686c", + "subdirectory": "nucypher-core-python" }, "packaging": { "hashes": [ @@ -1218,22 +1202,22 @@ }, "protobuf": { "hashes": [ - "sha256:0a3d1a3f746cc5209163bab06f4f56b77fb9d523beedd42e04e6334bb653fd84", - "sha256:139682756712146b24fb276c800dc7d05057136b331b66cd2a31f68e55dbac6f", - "sha256:33673619f4f28b04f4e99b578ceb99b335b31ee5f5a2cc513a9d32284ff8d956", - "sha256:3979ea994d7bf9fcbc7541b7cf2331c0850896d20db099d9d22cc6f01627ee68", - "sha256:499e5884e71719de45baeec980ea2c46a4fabe83a240363ea3272507f4819771", - "sha256:6d7c54c6686462f06b0f19d5c4cc1ce86be247493b89ed6cdb37f7b5f02f26ee", - "sha256:87af9d12258b4f3602dc26417db9dc89204d029647d5cf0de7d9d819fbd5b35c", - "sha256:a24d1498edef52e4a17f67b7640e1973f9affc168f15fe6d9eff4cb1ede785ea", - "sha256:a49938ad67a8652d64b662be6841e29764cd44d6db7e0be2f8c9d7a68c53b129", - "sha256:ba9e9279844e49a734accb0696f929615c59226176d585a341ccc51e85431e39", - "sha256:be3791a2694b96008334e8072845eaf5c7d4bce4564cf126ecbc34d3bf5abcdc", - "sha256:cf6904fabb6ef00c8bd0b666b196584af333442b05c044c492a09f743d31db6f", - "sha256:e7e5bca11a5ff3bc4919aaf80bc83781b6ea093b77f60743f766f1af2aec68e4" + "sha256:2036a3a1e7fc27f973fa0a7888dce712393af644f4695385f117886abc792e39", + "sha256:32e78beda26d7a101fecf15d7a4a792278a0d26a31bc327ff05564a9d68ab8ee", + "sha256:346990f634272caac1f09efbcfbbacb23098b1f606d172534c6fa2d9758bb436", + "sha256:3b8905eafe4439076e1f58e9d1fa327025fd2777cf90f14083092ae47f77b0aa", + "sha256:3ce113b3f3362493bddc9069c2163a38f240a9ed685ff83e7bcb756b05e1deb0", + "sha256:410bcc0a5b279f634d3e16082ce221dfef7c3392fac723500e2e64d1806dd2be", + "sha256:5b9cd6097e6acae48a68cb29b56bc79339be84eca65b486910bb1e7a30e2b7c1", + "sha256:65f0ac96ef67d7dd09b19a46aad81a851b6f85f89725577f16de38f2d68ad477", + "sha256:91fac0753c3c4951fbb98a93271c43cc7cf3b93cf67747b3e600bb1e5cc14d61", + "sha256:95789b569418a3e32a53f43d7763be3d490a831e9c08042539462b6d972c2d7e", + "sha256:ac50be82491369a9ec3710565777e4da87c6d2e20404e0abb1f3a8f10ffd20f0", + "sha256:decf119d54e820f298ee6d89c72d6b289ea240c32c521f00433f9dc420595f38", + "sha256:f9510cac91e764e86acd74e2b7f7bc5e6127a7f3fb646d7c8033cfb84fd1176a" ], "markers": "python_version >= '3.7'", - "version": "==4.23.0rc2" + "version": "==4.23.1" }, "py-ecc": { "hashes": [ @@ -1245,10 +1229,10 @@ }, "py-evm": { "hashes": [ - "sha256:2539de6d05c67fa146eacee973812c20b7574f9a741d70fc7b904199f90065d7", - "sha256:42e375ee5a9fcfffa2be804d951b0c46b028a9a1fe1f3ce34d279003dc0677a5" + "sha256:5d23d441a5afe8543e0a90966c61bcce8c6d9d1c9303a536f85d237a264b8e4d", + "sha256:844f1858f9c92633a862de8b466313174fb4d5a67c6e62d3cad3be34587ebddc" ], - "version": "==0.6.1a2" + "version": "==0.7.0a2" }, "pyasn1": { "hashes": [ @@ -1281,42 +1265,41 @@ }, "pycryptodome": { "hashes": [ - "sha256:04779cc588ad8f13c80a060b0b1c9d1c203d051d8a43879117fe6b8aaf1cd3fa", - "sha256:121d61663267f73692e8bde5ec0d23c9146465a0d75cad75c34f75c752527b01", - "sha256:1a30f51b990994491cec2d7d237924e5b6bd0d445da9337d77de384ad7f254f9", - "sha256:2c5631204ebcc7ae33d11c43037b2dafe25e2ab9c1de6448eb6502ac69c19a56", - "sha256:333306eaea01fde50a73c4619e25631e56c4c61bd0fb0a2346479e67e3d3a820", - "sha256:38bbd6717eac084408b4094174c0805bdbaba1f57fc250fd0309ae5ec9ed7e09", - "sha256:3a232474cd89d3f51e4295abe248a8b95d0332d153bf46444e415409070aae1e", - "sha256:4992ec965606054e8326e83db1c8654f0549cdb26fce1898dc1a20bc7684ec1c", - "sha256:53068e33c74f3b93a8158dacaa5d0f82d254a81b1002e0cd342be89fcb3433eb", - "sha256:5587803d5b66dfd99e7caa31ed91fba0fdee3661c5d93684028ad6653fce725f", - "sha256:5a790bc045003d89d42e3b9cb3cc938c8561a57a88aaa5691512e8540d1ae79c", - "sha256:74794a2e2896cd0cf56fdc9db61ef755fa812b4a4900fa46c49045663a92b8d0", - "sha256:80ea8333b6a5f2d9e856ff2293dba2e3e661197f90bf0f4d5a82a0a6bc83a626", - "sha256:8198f2b04c39d817b206ebe0db25a6653bb5f463c2319d6f6d9a80d012ac1e37", - "sha256:87e2ca3aa557781447428c4b6c8c937f10ff215202ab40ece5c13a82555c10d6", - "sha256:909e36a43fe4a8a3163e9c7fc103867825d14a2ecb852a63d3905250b308a4e5", - "sha256:9453b4e21e752df8737fdffac619e93c9f0ec55ead9a45df782055eb95ef37d9", - "sha256:9ec565e89a6b400eca814f28d78a9ef3f15aea1df74d95b28b7720739b28f37f", - "sha256:a3228728a3808bc9f18c1797ec1179a0efb5068c817b2ffcf6bcd012494dffb2", - "sha256:a74f45aee8c5cc4d533e585e0e596e9f78521e1543a302870a27b0ae2106381e", - "sha256:afbcdb0eda20a0e1d44e3a1ad6d4ec3c959210f4b48cabc0e387a282f4c7deb8", - "sha256:ba2d4fcb844c6ba5df4bbfee9352ad5352c5ae939ac450e06cdceff653280450", - "sha256:bce2e2d8e82fcf972005652371a3e8731956a0c1fbb719cc897943b3695ad91b", - "sha256:c133f6721fba313722a018392a91e3c69d3706ae723484841752559e71d69dc6", - "sha256:ca1ceb6303be1282148f04ac21cebeebdb4152590842159877778f9cf1634f09", - "sha256:d086d46774e27b280e4cece8ab3d87299cf0d39063f00f1e9290d096adc5662a", - "sha256:dc22cc00f804485a3c2a7e2010d9f14a705555f67020eb083e833cabd5bd82e4", - "sha256:e1819b67bcf6ca48341e9b03c2e45b1c891fa8eb1a8458482d14c2805c9616f2", - "sha256:e7debd9c439e7b84f53be3cf4ba8b75b3d0b6e6015212355d6daf44ac672e210", - "sha256:f44c0d28716d950135ff21505f2c764498eda9d8806b7c78764165848aa419bc", - "sha256:f68d6c8ea2974a571cacb7014dbaada21063a0375318d88ac1f9300bc81e93c3", - "sha256:f812d58c5af06d939b2baccdda614a3ffd80531a26e5faca2c9f8b1770b2b7af", - "sha256:f8e550caf52472ae9126953415e4fc554ab53049a5691c45b8816895c632e4d7" + "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb", + "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6", + "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403", + "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148", + "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4", + "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825", + "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2", + "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14", + "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c", + "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4", + "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2", + "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb", + "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf", + "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec", + "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918", + "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3", + "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944", + "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e", + "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024", + "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f", + "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1", + "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380", + "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9", + "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e", + "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413", + "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec", + "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54", + "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2", + "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27", + "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b", + "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf", + "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==3.17" + "version": "==3.18.0" }, "pyethash": { "hashes": [ @@ -1391,113 +1374,113 @@ }, "referencing": { "hashes": [ - "sha256:3c963366bc94261bec1a4bd5917a05fee800c1e87995add5edba21abfa253c7d", - "sha256:8c1886f14748c22c9fdc0e302add12f99ad93cada04ce818d47641dc06637a36" + "sha256:7af30260a7a0ece4bc24f2687a152b571f7ae61e90ca5d08fad372fe44998585", + "sha256:a635d6caee584b0d0f91d1477d6fb93fe3bf53bec8fa1a1cad5a2888621d18dd" ], "markers": "python_version >= '3.8'", - "version": "==0.28.0" + "version": "==0.28.2" }, "regex": { "hashes": [ - "sha256:00f6f26e748c797a041ab6957f4cacc66a7fbd5dc5f627760985f5c5b7de2af6", - "sha256:0130a2fdd6f033c3e3710d0b950cc6abd3133c5af88c40c78e77641cb6f6cf8a", - "sha256:027d4962340dbd84979fd1c40bfd7ca8362030abfbbff25f1327bbf4867f047c", - "sha256:037f4be6a240a11a6d3397e932ef5d3ec5855858910792a0ab7d351bd0333533", - "sha256:04a825fd9f5931263eccd0cbdbf171a9792fa1bf2642ca62800b57689ca1b660", - "sha256:06fe9870165d4975a8a3e27a83919b9014b35dd2ee7061a5f2be8e579294cedc", - "sha256:0a664857dd9b1076942c4d73c54a031066ee0ae88a438e7a1e0e79c1c5ddf47a", - "sha256:0c731522eaf74166066fcf91fe7fe3c3617cc5e8df0c150132282d0dd5225afc", - "sha256:0d5a0edefdf800aeef6cf559af75e614fb2eb2d0388f0b132af805fdefcf8ec6", - "sha256:0eee66c4ce6ced2e9d5d4497a569bab6257a6d118eb43dd57cceb61ba00b62d8", - "sha256:12be293d718e05f7304f715980b1a25b16e34a1ff2121740592559d066f91e67", - "sha256:1ad00c9aae6090d052c0ee16a2737a7154031793e6c7b58a629eed8d8aa77e31", - "sha256:1d98e4748a60c9902ad504e862756c43cc707404fc3025f82ef5bbe50bee3b9e", - "sha256:1dc5e9a847613679ac8bd0386a0e54f2958441a0fcc123778637e433041aa763", - "sha256:1ef51012493837263236781ac9598f059dc4e5a4d72627bd3ac85cbd5d1b0ee1", - "sha256:2095acff95df0bf6ec3dee672a03d3d78606b4ca419d53fbd606c559cebedf45", - "sha256:21b653c1538cbbc1c58f6d6f3ccb4a5ce56491f0ab370ec057c1c64a152eb48c", - "sha256:24db1c0fc20850db47977824a99fdae81d6764adaf8192dd874185d9e7166dbb", - "sha256:2762750332f57820c0f38ade87ce4ebe671b178892faed0112f574f0b42801cf", - "sha256:336fb3f585e239362d4f26dd6f904b15d91febfc980f47ed706858f5cee20ce6", - "sha256:3633a07ffeabc14f3cd531f11794bb603267d86e4109cb811a34aee020622d3f", - "sha256:376fa2ef6a02a004b6fe4ebaa5ba370e7532ec6915efd12e33aa434517f8bbee", - "sha256:3965a9ab13f1bf3e4af021c7dbe9678dd9f8dc5cc9097b3d3cbbf3ad00574b5d", - "sha256:3d8cc797f87c07372e7d300198e1423c2b7bd35b68f375cc6700e26158940c9a", - "sha256:460672c6ec94997755bd37b00302853b9d85a5a433121c198359958e8c10ced5", - "sha256:49a77f0b62a4122cf578d1194658973c435e6d2a9611013be11b6750056a5930", - "sha256:4c2ae89c92a04b057b412f88a3359e77600ce966a740e2da212667ce795e1bdc", - "sha256:50e00ab84396bfbeb1bede61eff6641f957b6532e74e02be480d71914e20e2ac", - "sha256:5a7ab3440f0c653dee8b42af858da6e07615c64ba86a6b3509a0ecf44eabdb11", - "sha256:5a98814d42282153c30d674ee34ea114a03ea8d32fd5d9b924d46fbeb2c7eb15", - "sha256:5cc67b3562aada6682ae45f2ea40819baa6bffe38155883100f8779c22c8c087", - "sha256:5d321dd059fd00482537aaba919e29189ea4ab6a03528881267982bb7707f610", - "sha256:5f82d4e0725788787216c9ae53116e6e477b2d97f29ec1e5086f5afbab5716b0", - "sha256:5fda1fc36dd923aee070d7aab3a85b448c8b62930900c615bb67db829281103b", - "sha256:63a92f28a3f285dae06aae83227cb66cc87256db040aaf26c1c48ae5221eccde", - "sha256:6469c2baf450fd1e648752b113a1fc1d67dfbad359f6171be954bacf7b09d126", - "sha256:6686256d1d435ed782ff12ef11e074705911a40d3907b986e53ca9a996e88489", - "sha256:6ccd0d7557c4e76303a6429ec9de55cd87334809cda66c0f101831e2ce9073c1", - "sha256:6f02105d4a511f550dcd63f750937d1607a1f6dc253c798c4adf36aba89215a3", - "sha256:70bd0c121b3c4e641e5c4e633c4581059acad774a1a62bcb15fea3470c2a61cc", - "sha256:770f825c7751ce43aae2088fee94f2e60f95e181223642a0bb35cbaeea92001c", - "sha256:77b3333a6cd1161b81bcf018a9bdb3cc567074a913aa69b98b9c8c79be28565c", - "sha256:797bab57e1317c940030f3c15d48c01e1f16d12ba0f6a807ee0bebdc1cfe3f2d", - "sha256:8418b0ee315555ca9786daab00ec8aaf47dfb2698a5be689676e83e88b949f22", - "sha256:861ed1249302664f96b2e968216486a02af0a143e0f3cc6fd92b78f11aa18579", - "sha256:89f54d4bbd452a5ee01dc31ec918f7b1f32483f13d3598af1acf5ea82ad82ad3", - "sha256:8c704e7062c59d2f7e2eebda2c0c0b69bd807ca6579c3a21fc4b1d8505cfc090", - "sha256:8d5bc5035989852a4ae7dacf8dc99db7c4f21c852486777a98b8efe37af4d8d7", - "sha256:91f47522688955cb33190f8354ccaa1cc058d05e73f99afe9ace40db36c159e8", - "sha256:9322797fddd51ec0312a8b649d9a3ebfabf4826a204ef8e1cc11801013005323", - "sha256:953ba37dd83c424c2cf699c64a8477645fc7c7403ffd2eb1417189eddbbfb4a7", - "sha256:97fd2885df308edcdf96baa632192a4291f3ed5b072c0bc3f29dc1e6de40ffa4", - "sha256:99780a0880d3dab2bb6f863492d38ab90ffdc9daf4fbefb505524f6f3a1c9dbe", - "sha256:9b887d87188489859411d0c7e741f7dfe8a3ca5946b0db8b3c9e5daecc089b62", - "sha256:9e1b4b0b4baff934ef3c0ac56578a6b773f7f90ad1db3ff843ee40d83bdae09f", - "sha256:a419384c6c80d58532016c3cf6a3aca009bfb7661f33e119ba7f77ec0e28222a", - "sha256:aa92f9ad481108a7e4c5a5234608f7c718f8b67003ce4719a4d2735d82b54167", - "sha256:ac402ac165f42f41b3aef9e8a9c6fb204dac31faad65b3b0ae6bff4bc9d0dad2", - "sha256:ad84e1d4be3504e7dcd6370b3e847eaf05d5d35cb0818d0bd2d1a26b58c0abd2", - "sha256:b132e4507c6404faece005329de7b2b97653ddfeeaf84f058fe820791160dcda", - "sha256:b365b8fa0d5fd0208db5b0e94582edb796dde07d1f99c5a9c1ff6be172c374ee", - "sha256:b48820071a49b68ca8734e8b2bd1f26632512154816b261b614e62cc724d9f8a", - "sha256:b7eb07d60c385aec906b82d48447907a2bbf454d0e9ead62168de111accabaf8", - "sha256:b87d38717ed855583ae1693f6095fc9c06b7dde4ddec782b41aa92931dd60e7c", - "sha256:bda905e040e6c2875a7dde9652a9e0c426aaac6058568cc064f8128b061439ee", - "sha256:c10b1388106447db0cdb8e340d06fa2d49b822368a049c36928d3c24296c2e37", - "sha256:c1155571edd498b6274f969517db6781500fbb24fc91ff740ea5a37c4735b3ba", - "sha256:c1fa9651141caaafa0d6048695a4a04bc4bf39c75f250a36b1a05c9588a403a9", - "sha256:c300461ed8159f61d979971ba51f1acd1e6f9907d86888e9275165e06ea90f06", - "sha256:c40f7e8c02b287550166a3e36dbb89f9387db86a71101f6242668e3ef979cd2a", - "sha256:c455d886838dd5a248e7f06e5573275fc854febd206eb937cf632082a06a939f", - "sha256:cb22580ce5e2eee138a78df40444151ff51c91acd11be546216a046677c75593", - "sha256:ccd0c918971f79bd9a883f13f91343dd2eaefbafd4344aadfe5134a65fb821c3", - "sha256:d0ac14c36d91b191d1cb073fb5ac49937d88a5c8b051ced3875321a525202c34", - "sha256:d28933aa1242814ed737b569b2baf96e4d236c52be454b5dc17afd36bf893c12", - "sha256:db5d5c9c7bbcf9cbc541f8adba8c92a7a7abd0de4f0343da4e96fb78ffe9d1a1", - "sha256:dbc47670e0424a566084e15af9a253b85f90fa26e60fa07e1b10c90df4c8fd07", - "sha256:dbcb49036a6a6065035ac2acc1ad6a918f9e09ef2d0f9392dc90b8756f789f95", - "sha256:e708e69c4d3bc41df29efb94aadc5578c841b2cd02f8cbb1bcfbf280f2801238", - "sha256:e87450db3c444f41e3ac6a09b7a10ddfe54fa1e98bf60ee299fe6d11097540cd", - "sha256:ea2d66c1fd898d81b8ce0f95afab9ba0ab522cf08810f11fa28ad958706cd2b2", - "sha256:eaff21326bc5d9be0c2f400931d39274105bd5d06650f0b0215392d1b050d404", - "sha256:ebf0776fdc7a5e0ac11b6db2d69ac77479411b627a96119ffa4427ba32f3bb66", - "sha256:f2bc7249840faacfff6196e5b5ffeb3fdaf078986521a1cda34e9be5607e773b", - "sha256:f3e20cf2575b1330687d3dd6242f82278b3bdc09a9f36cc7ac4d45b7dd63c1f5", - "sha256:f576b8dec95456ba0157943a57f5f88c076cf96cc363ef1bf5027c2976fd487a", - "sha256:fbc5b23b569d96b8c831574c93098b68c6d7ff2509f31268c968152ca4f2ecd0", - "sha256:ff8fef88029d0420315935041db517855ea022889fa8d54959943e39fffebf59" + "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff", + "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea", + "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9", + "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423", + "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c", + "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60", + "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764", + "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2", + "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f", + "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe", + "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2", + "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a", + "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c", + "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17", + "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426", + "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e", + "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8", + "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67", + "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e", + "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32", + "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559", + "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66", + "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e", + "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8", + "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309", + "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18", + "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a", + "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94", + "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0", + "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d", + "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80", + "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810", + "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6", + "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96", + "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a", + "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636", + "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d", + "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe", + "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b", + "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2", + "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d", + "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393", + "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac", + "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926", + "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91", + "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e", + "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a", + "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46", + "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a", + "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd", + "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3", + "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd", + "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657", + "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3", + "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2", + "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a", + "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1", + "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550", + "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833", + "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81", + "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8", + "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5", + "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19", + "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d", + "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86", + "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e", + "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008", + "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8", + "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2", + "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da", + "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053", + "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa", + "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb", + "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22", + "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc", + "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6", + "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051", + "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d", + "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468", + "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df", + "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1", + "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d", + "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479", + "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b", + "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35", + "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956", + "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2", + "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.4" + "version": "==2023.5.5" }, "requests": { "hashes": [ - "sha256:e8f3c9be120d3333921d213eef078af392fba3933ab7ed2d1cba3b56f2568c3b", - "sha256:f2e34a75f4749019bb0e3effb66683630e4ffeaf75819fb51bebef1bf5aef059" + "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294", + "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4" ], "markers": "python_version >= '3.7'", - "version": "==2.29.0" + "version": "==2.30.0" }, "rlp": { "hashes": [ @@ -1696,19 +1679,19 @@ }, "tzlocal": { "hashes": [ - "sha256:407e15ad8fa5b05a66b8f65505b23f0dbd4ee96b343c6da4393e9c60f55d591c", - "sha256:59a6c67af3fb05b6359768cecfacc2c0df368c36b671d18d1e021a5aa70b5f8c" + "sha256:46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803", + "sha256:f3596e180296aaf2dbd97d124fe76ae3a0e3d32b258447de7b939b3fd4be992f" ], "markers": "python_version >= '3.7'", - "version": "==5.0b2" + "version": "==5.0.1" }, "urllib3": { "hashes": [ - "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", - "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" + "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc", + "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.15" + "markers": "python_version >= '3.7'", + "version": "==2.0.2" }, "watchdog": { "hashes": [ @@ -1746,95 +1729,95 @@ }, "web3": { "hashes": [ - "sha256:7695ee81162c644de0dfd0f5372f96a73be557b46365d218f581ca10197c6389", - "sha256:ca860ad23b1f71384620659f17a374e5850ab3c1bb928a09f0103ee25e3d4c1b" + "sha256:b9fcc2372e7cac27d96621c169be40174eccbb93346bba2ab45ad791140d47fe", + "sha256:c86889b9c0b8f9f5ce5f5f0bb9f9bfc551cf775aeaf903964ddf28d303b85c62" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.2.0" + "version": "==6.4.0" }, "websockets": { "hashes": [ - "sha256:0fb4480556825e4e6bf2eebdbeb130d9474c62705100c90e59f2f56459ddab42", - "sha256:13bd5bebcd16a4b5e403061b8b9dcc5c77e7a71e3c57e072d8dff23e33f70fba", - "sha256:143782041e95b63083b02107f31cda999f392903ae331de1307441f3a4557d51", - "sha256:1b52def56d2a26e0e9c464f90cadb7e628e04f67b0ff3a76a4d9a18dfc35e3dd", - "sha256:1df2413266bf48430ef2a752c49b93086c6bf192d708e4a9920544c74cd2baa6", - "sha256:2174a75d579d811279855df5824676d851a69f52852edb0e7551e0eeac6f59a4", - "sha256:220d5b93764dd70d7617f1663da64256df7e7ea31fc66bc52c0e3750ee134ae3", - "sha256:232b6ba974f5d09b1b747ac232f3a3d8f86de401d7b565e837cc86988edf37ac", - "sha256:25aae96c1060e85836552a113495db6d857400288161299d77b7b20f2ac569f2", - "sha256:25e265686ea385f22a00cc2b719b880797cd1bb53b46dbde969e554fb458bfde", - "sha256:2abeeae63154b7f63d9f764685b2d299e9141171b8b896688bd8baec6b3e2303", - "sha256:2acdc82099999e44fa7bd8c886f03c70a22b1d53ae74252f389be30d64fd6004", - "sha256:2eb042734e710d39e9bc58deab23a65bd2750e161436101488f8af92f183c239", - "sha256:3178d965ec204773ab67985a09f5696ca6c3869afeed0bb51703ea404a24e975", - "sha256:320ddceefd2364d4afe6576195201a3632a6f2e6d207b0c01333e965b22dbc84", - "sha256:34a6f8996964ccaa40da42ee36aa1572adcb1e213665e24aa2f1037da6080909", - "sha256:3565a8f8c7bdde7c29ebe46146bd191290413ee6f8e94cf350609720c075b0a1", - "sha256:392d409178db1e46d1055e51cc850136d302434e12d412a555e5291ab810f622", - "sha256:3a09cce3dacb6ad638fdfa3154d9e54a98efe7c8f68f000e55ca9c716496ca67", - "sha256:3a2100b02d1aaf66dc48ff1b2a72f34f6ebc575a02bc0350cc8e9fbb35940166", - "sha256:3b87cd302f08ea9e74fdc080470eddbed1e165113c1823fb3ee6328bc40ca1d3", - "sha256:3e79065ff6549dd3c765e7916067e12a9c91df2affea0ac51bcd302aaf7ad207", - "sha256:3ffe251a31f37e65b9b9aca5d2d67fd091c234e530f13d9dce4a67959d5a3fba", - "sha256:46388a050d9e40316e58a3f0838c63caacb72f94129eb621a659a6e49bad27ce", - "sha256:46dda4bc2030c335abe192b94e98686615f9274f6b56f32f2dd661fb303d9d12", - "sha256:4c54086b2d2aec3c3cb887ad97e9c02c6be9f1d48381c7419a4aa932d31661e4", - "sha256:5004c087d17251938a52cce21b3dbdabeecbbe432ce3f5bbbf15d8692c36eac9", - "sha256:502683c5dedfc94b9f0f6790efb26aa0591526e8403ad443dce922cd6c0ec83b", - "sha256:518ed6782d9916c5721ebd61bb7651d244178b74399028302c8617d0620af291", - "sha256:580cc95c58118f8c39106be71e24d0b7e1ad11a155f40a2ee687f99b3e5e432e", - "sha256:58477b041099bb504e1a5ddd8aa86302ed1d5c6995bdd3db2b3084ef0135d277", - "sha256:5875f623a10b9ba154cb61967f940ab469039f0b5e61c80dd153a65f024d9fb7", - "sha256:5c7de298371d913824f71b30f7685bb07ad13969c79679cca5b1f7f94fec012f", - "sha256:634239bc844131863762865b75211a913c536817c0da27f691400d49d256df1d", - "sha256:6d872c972c87c393e6a49c1afbdc596432df8c06d0ff7cd05aa18e885e7cfb7c", - "sha256:752fbf420c71416fb1472fec1b4cb8631c1aa2be7149e0a5ba7e5771d75d2bb9", - "sha256:7742cd4524622cc7aa71734b51294644492a961243c4fe67874971c4d3045982", - "sha256:808b8a33c961bbd6d33c55908f7c137569b09ea7dd024bce969969aa04ecf07c", - "sha256:87c69f50281126dcdaccd64d951fb57fbce272578d24efc59bce72cf264725d0", - "sha256:8df63dcd955eb6b2e371d95aacf8b7c535e482192cff1b6ce927d8f43fb4f552", - "sha256:8f24cd758cbe1607a91b720537685b64e4d39415649cac9177cd1257317cf30c", - "sha256:8f392587eb2767afa8a34e909f2fec779f90b630622adc95d8b5e26ea8823cb8", - "sha256:954eb789c960fa5daaed3cfe336abc066941a5d456ff6be8f0e03dd89886bb4c", - "sha256:955fcdb304833df2e172ce2492b7b47b4aab5dcc035a10e093d911a1916f2c87", - "sha256:95c09427c1c57206fe04277bf871b396476d5a8857fa1b99703283ee497c7a5d", - "sha256:a4fe2442091ff71dee0769a10449420fd5d3b606c590f78dd2b97d94b7455640", - "sha256:aa7b33c1fb2f7b7b9820f93a5d61ffd47f5a91711bc5fa4583bbe0c0601ec0b2", - "sha256:adf6385f677ed2e0b021845b36f55c43f171dab3a9ee0ace94da67302f1bc364", - "sha256:b1a69701eb98ed83dd099de4a686dc892c413d974fa31602bc00aca7cb988ac9", - "sha256:b2a573c8d71b7af937852b61e7ccb37151d719974146b5dc734aad350ef55a02", - "sha256:b444366b605d2885f0034dd889faf91b4b47668dd125591e2c64bfde611ac7e1", - "sha256:b985ba2b9e972cf99ddffc07df1a314b893095f62c75bc7c5354a9c4647c6503", - "sha256:c78ca3037a954a4209b9f900e0eabbc471fb4ebe96914016281df2c974a93e3e", - "sha256:ca9b2dced5cbbc5094678cc1ec62160f7b0fe4defd601cd28a36fde7ee71bbb5", - "sha256:cb46d2c7631b2e6f10f7c8bac7854f7c5e5288f024f1c137d4633c79ead1e3c0", - "sha256:ce69f5c742eefd039dce8622e99d811ef2135b69d10f9aa79fbf2fdcc1e56cd7", - "sha256:cf45d273202b0c1cec0f03a7972c655b93611f2e996669667414557230a87b88", - "sha256:d1881518b488a920434a271a6e8a5c9481a67c4f6352ebbdd249b789c0467ddc", - "sha256:d3cc3e48b6c9f7df8c3798004b9c4b92abca09eeea5e1b0a39698f05b7a33b9d", - "sha256:d6b2bfa1d884c254b841b0ff79373b6b80779088df6704f034858e4d705a4802", - "sha256:d70a438ef2a22a581d65ad7648e949d4ccd20e3c8ed7a90bbc46df4e60320891", - "sha256:daa1e8ea47507555ed7a34f8b49398d33dff5b8548eae3de1dc0ef0607273a33", - "sha256:dca9708eea9f9ed300394d4775beb2667288e998eb6f542cdb6c02027430c599", - "sha256:dd906b0cdc417ea7a5f13bb3c6ca3b5fd563338dc596996cb0fdd7872d691c0a", - "sha256:e0eeeea3b01c97fd3b5049a46c908823f68b59bf0e18d79b231d8d6764bc81ee", - "sha256:e37a76ccd483a6457580077d43bc3dfe1fd784ecb2151fcb9d1c73f424deaeba", - "sha256:e8b967a4849db6b567dec3f7dd5d97b15ce653e3497b8ce0814e470d5e074750", - "sha256:ec00401846569aaf018700249996143f567d50050c5b7b650148989f956547af", - "sha256:ede13a6998ba2568b21825809d96e69a38dc43184bdeebbde3699c8baa21d015", - "sha256:f97e03d4d5a4f0dca739ea274be9092822f7430b77d25aa02da6775e490f6846" + "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", + "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", + "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", + "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", + "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", + "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", + "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", + "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", + "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", + "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", + "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", + "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", + "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", + "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", + "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", + "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", + "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", + "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", + "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", + "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", + "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", + "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", + "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", + "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", + "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", + "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", + "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", + "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", + "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", + "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", + "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", + "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", + "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", + "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", + "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", + "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", + "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", + "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", + "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", + "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", + "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", + "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", + "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", + "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", + "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", + "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", + "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", + "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", + "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", + "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", + "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", + "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", + "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", + "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", + "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", + "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", + "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", + "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", + "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", + "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", + "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", + "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", + "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", + "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", + "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", + "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", + "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", + "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", + "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", + "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" ], "markers": "python_version >= '3.7'", - "version": "==11.0.2" + "version": "==11.0.3" }, "werkzeug": { "hashes": [ - "sha256:4866679a0722de00796a74086238bb3b98d90f423f05de039abb09315487254a", - "sha256:a987caf1092edc7523edb139edb20c70571c4a8d5eed02e0b547b4739174d091" + "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76", + "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f" ], "markers": "python_version >= '3.8'", - "version": "==2.3.3" + "version": "==2.3.4" }, "yarl": { "hashes": [ @@ -2069,12 +2052,8 @@ "version": "==1.3.1" }, "ape-solidity": { - "hashes": [ - "sha256:bee73a005ec3b8af6673352d5abbaeb5ba3c01333a0947c9ff2d26016e4cc979", - "sha256:c051a129c9016d0e03d83a36bef689be45b36908fbd70b224196688142a64308" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.6.3" + "git": "https://github.com/derekpierre/ape-solidity.git", + "ref": "a98042d371bc8e181b52aaa821a738e94a637ab9" }, "appdirs": { "hashes": [ @@ -2088,7 +2067,6 @@ "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" ], - "markers": "sys_platform == 'darwin'", "version": "==0.1.3" }, "asttokens": { @@ -2273,11 +2251,11 @@ }, "certifi": { "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", + "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" ], "markers": "python_version >= '3.6'", - "version": "==2022.12.7" + "version": "==2023.5.7" }, "cffi": { "hashes": [ @@ -2658,11 +2636,11 @@ }, "eth-ape": { "hashes": [ - "sha256:7f085d8f2bb8cd627ed73696f6fd4f694246a87e67e94055bf2f9408e5aaccf2", - "sha256:dfb0944e8c601fb78689ec26666b2a07311a5a466362d9fa7eeecf6d75eb86ef" + "sha256:afc51a1b8511d0af64400b8846923d5839af56b77ee8867021aa9750bbaaa8ba", + "sha256:f186855fcc3ae2adc35c39734046fcbebbcf7f043fc5bdca1848c8a795784e3c" ], - "markers": "python_version < '3.11' and python_version >= '3.8'", - "version": "==0.6.8" + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.6.9" }, "eth-bloom": { "hashes": [ @@ -2704,11 +2682,11 @@ }, "eth-tester": { "hashes": [ - "sha256:44a21e8c9c2fa98a5723e3bcd63c174bc2e92cbadd894b75ccae34cea0245e6c", - "sha256:c13252513f2ec7db536a3300e5bc5715a954c683d23cd7fe478192634e2fa26c" + "sha256:9cf8742896e26c53e03a79ca6c3a008bf64527f042659bcad306d87fbf2fa79a", + "sha256:d7db78d21bb33bc645d6172dd5ad259eab52399f2b62d4e9fcab075baf8a6877" ], "markers": "python_version < '4' and python_full_version >= '3.6.8'", - "version": "==0.8.0b3" + "version": "==0.9.0b1" }, "eth-typing": { "hashes": [ @@ -2728,19 +2706,19 @@ }, "ethpm-types": { "hashes": [ - "sha256:8923693a673862d74ab0ac0f0bd1072e4017e27262f189ec9b9b2007db53360b", - "sha256:b48a83bc4b21ef066ed4f405a357ec2770ab171eed233c25804aec423d798703" + "sha256:8a2a4a5a93cb5753152675fb582c48e26dbf450b2759a34b60fd3aca692f16d7", + "sha256:b7f7e9b56ee5f41c65180c7009b7ea42840636b3b04f8a9af3c8298b6a97c2e7" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.4.5" + "version": "==0.5.0" }, "evm-trace": { "hashes": [ - "sha256:15ca3d09f1e3d507467c9ddaa6694d11a3e50448183686d62ba433a6816b8d7c", - "sha256:91248145bcc12c4f388a89afc35099a4bec019969228fc175a39815107e2eaf6" + "sha256:afb47b727e4322ede8fbf266a0b4cb4e0fc2a29d6a166b27a46244669b1613c0", + "sha256:ddd82bcfebc5ec6eff636b38eef6411fe45acf5319f0e20446b27d9db4650934" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.1.0a18" + "version": "==0.1.0a20" }, "exceptiongroup": { "hashes": [ @@ -2759,11 +2737,11 @@ }, "ferveo": { "hashes": [ - "sha256:48820d03698bae445a79a6873a48e9f739b10af3fcaf35dc9ecc39f440c09e68", - "sha256:be9b1661dd66e227c14db8cb55e23cd27832704e076f842ec09b6e9c783e3124" + "sha256:5748e9a039ccf2a6e85fc9d6c986168dfdc5f1eead15b35c1a2992e737298d34", + "sha256:832dc2c1139cc3e052a07ad842ef671bf542dde20722426183b975967329002b" ], "markers": "python_version >= '3.7'", - "version": "==0.1.11" + "version": "==0.1.12" }, "filelock": { "hashes": [ @@ -2959,19 +2937,19 @@ }, "hypothesis": { "hashes": [ - "sha256:7940ae975ab48f86d36cedfd0eeccb8e37e99746785f7d6bb17b4a8ec4ec07a8", - "sha256:f67e4925e26cbee4561b492e3845f68559b8a51b08cfaef9b6cf6f6c40c5e091" + "sha256:15cdadb80a7ac59087581624d266a4fb585b5cce9b7f88f506c481a9f0e583f6", + "sha256:a12bf34c29bd22757d20edf93f95805978ed0ffb8d0b22dbadc890a79dc9baa8" ], "markers": "python_version >= '3.7'", - "version": "==6.75.1" + "version": "==6.75.3" }, "identify": { "hashes": [ - "sha256:17d9351c028a781456965e781ed2a435755cac655df1ebd930f7186b54399312", - "sha256:50b01b9d5f73c6b53e5fa2caf9f543d3e657a9d0bbdeb203ebb8d45960ba7433" + "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4", + "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d" ], "markers": "python_version >= '3.7'", - "version": "==2.5.23" + "version": "==2.5.24" }, "idna": { "hashes": [ @@ -3097,11 +3075,11 @@ }, "ipython": { "hashes": [ - "sha256:2442915417763b62181009259782975fa50bb5eedb97ae97fb614204bf6ecc21", - "sha256:e3015a1a4aa09b3984fb81b9cef4f0772af5a549878b81efb094cda8bb121993" + "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea", + "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc" ], "markers": "python_version >= '3.8'", - "version": "==8.12.1" + "version": "==8.12.2" }, "itsdangerous": { "hashes": [ @@ -3129,19 +3107,25 @@ }, "jsonschema": { "hashes": [ - "sha256:4b88fe4edfd5ddc3364fca04b1554d4dd5bc67d2eb73c8795ab2d9e46a032643", - "sha256:b75063d9d6a5f5023c3d9bb89863a9cc1aaf34ccbd4dcf58ee5c5f23c1871b2a" + "sha256:112d303b0291095108013e712d4038d85f11dfc6b0141430932fce7c33d221b8", + "sha256:e8a9b0e9245d8e9c57e2281f30f1d11e0326abb919aa6866997a016487fcaef8" ], "markers": "python_version >= '3.8'", - "version": "==4.18.0a6" + "version": "==4.18.0a7" }, "jsonschema-specifications": { "hashes": [ - "sha256:1f84ccccce27abf263904363aa59171e9f889c152965f9e71bc05dfc520502fb", - "sha256:a743d6acd3d6ce0aa4d691b001be145eb8d0075d5beb3ce77c4e17cb13ebf158" + "sha256:2914352153a22053662886c096a4d905a41e771f28baa52c86d135b359dc64ed", + "sha256:ca4c182adb268045fb70e6c09eb818ff4f9d27e762725b0f257cfdd318dffca9" ], "markers": "python_version >= '3.8'", - "version": "==2023.3.6" + "version": "==2023.5.1" + }, + "lazyasd": { + "hashes": [ + "sha256:a3196f05cff27f952ad05767e5735fd564b4ea4e89b23f5ea1887229c3db145b" + ], + "version": "==0.1.4" }, "lru-dict": { "hashes": [ @@ -3373,38 +3357,38 @@ }, "msgspec": { "hashes": [ - "sha256:03ddc8c518afbea4fb89afb587d77f11d00909f003966d437f31fb8fffdfac28", - "sha256:1c8f7e631fad9d5a33fcfb0f2a27eb86dc0390e91d6b51c95a604b7ccbc264f1", - "sha256:1fc99f0929fa91cc53fa35f59be366d67f116c2b7f0f3b29dc60e3179f6fb205", - "sha256:2039451b22813af2fd5cbe99eaecfc318d64fcee5af0ce5b3d5cce12427d24cd", - "sha256:26bcb3a69b348be2757ab19e86038e586920522a99d49d358c12890fbcfb6aa8", - "sha256:3288b65ee7c78d08f32003a8b5ca72fff12c6a7400bd35f9d65630c9d58efce2", - "sha256:4f13e47803aedbb32c9375317fedbd20af3397dc024d311eebdc635c07f6f908", - "sha256:57a79cfa306fda2c66f4fc7eb72836c0f78fd9a6d748d028960b387797f0381b", - "sha256:580464c7ca5c47a1422973c853301bbfd3d1a4184bdb6bddb73b5df094d8fc55", - "sha256:587371a65798a0f0182d0a7a4b7c4b87a5f46e25e8821c6474b3f717dcfcad14", - "sha256:59491de3566c7789bdb0a152f305e150a6ba3e825af471680b05a029a664a89a", - "sha256:78361dadef4b993b8c4a887d3d267b89b0ea0846259eadf2fe993659e4dbf9c8", - "sha256:7e50885274e2041e49ec5d7cce8e59768f599c27dfb4c046edaf9ab25b1fddc2", - "sha256:87c4cd1bb197be11f89ad779038c8989d6ffcb8b360705107f034e4d2783c0a6", - "sha256:8927efaf506e5a8f9ffe76602e08d30a80c19b38d50a7e783887c317573ecd80", - "sha256:8b8a766b9f3e7f87946965a8ffc6e72f7a3ec8d031b3168df16762bfd3d03205", - "sha256:8ed61cad6b20f0218a8d239294c4b30b4e82854871ba0434cf0d54497043bffe", - "sha256:907ed4305a97b50248e6b86e79ddc8edcf9b718eab0c93a6b46d673c5edbe3a4", - "sha256:94fc3d9a8835f18c18b48fdf49f7d445184061bfbc457a6623a4eb1f74ebe806", - "sha256:a0a3908309581e4e632457fac1938fec7fd84121396ddab6ddca37784e6db068", - "sha256:a12e704786256431d559c2027d6135a64f2339f009118d97906709cd8409e7ac", - "sha256:b965c14851f146537f1b732cd2ed16c38e0c59662f23b72d396aee21e81aed4f", - "sha256:d03861f0d271b696faefb1a885ea0c7dc7db70baaa05c7f18086f2b9085d1cb8", - "sha256:d469aede5d986223d6ec9a8d0713156f96fd6b427b12e14f81d26627a47687b9", - "sha256:d85e9bfd1441216010c084626d968e96a3d88d762959c5eb430de62076cd7fe9", - "sha256:decd1d2015d340ebfd58f29ed2916e118ca255b6a94fc1787a236a2654dfd8ff", - "sha256:eee59e73982ca0d730f8d4e8fb5f01da9fa466490dea43ea1bcfa23b8a8bbc0d", - "sha256:f97006b9c9e24e9677fb84f43586fb4d03a72eb426199656a1c24775c62b9fe4", - "sha256:ff7c987330e2be62eb8811bc2da33507e8edeb761f4fd343f2fa5fdafce4f989" + "sha256:05fc603508e0c8021249d3e531fa4bb72d167bdfa76d869d48f96a5b8f9b50bf", + "sha256:07ee1d1a15e3b319dcd7326470216928a7b58d47460b253577ccd0ab5dcf5c3c", + "sha256:0c75fd847709e30265f050375c408fec1c07797694162834aa86ab3b3cf055da", + "sha256:1b5b7c1b69416eab3ab2ad1c9593b749226b80555532292fae5fe9d154794089", + "sha256:20bf8018bff6bb85f5315ba6fd47b2f9373ab67e8bb59b0d7a7def22bbbf9f70", + "sha256:22713a1f618b4094c0268c6fbeef530397e5f3fa5292e4afd51caddad645843f", + "sha256:2b57b6869ef1717c0343465198e19284d1e6aa5f292af2726284e4dfedfedeef", + "sha256:346960762d648a6512b51f30be7c1267630e0bbc6fd65e8b23a3f54e5f562656", + "sha256:381c7a891adcc741e617956ba987912bc21864f9dd27b8cfb03bfb0aded5e1fd", + "sha256:415519f68cd3f1a224f87ed415459ac3b86e4f6e82815a036e4238c62006f696", + "sha256:42c2f9fe0b58dc6f2b15720490c67554b5ba0007d3ee94340ca4448bda917287", + "sha256:490c88d76d573cce16653434ace3d9a8a8675ef6e350f114752fe60e69b6a232", + "sha256:4d3cde786110a92f764666b9f963b4389d5d1798bf1aca2422a59931d8d1f694", + "sha256:550b359c49562d52849103b87b4f7381fbc0adf958afa316599befb9a3e3379e", + "sha256:8a46a9818570362d4022161684cdb97ecd102953043059ee4902862940f48f8d", + "sha256:8b7e0354c37b742e1c02fe0cd3ced97db516c8da62ac5a408609e9f5858aaf24", + "sha256:8cee590163788fce21c5998d09198ef08ec06c1ca68ef50f2d5ed9e54d308538", + "sha256:9178a7550a5516295c682e6e5c143782503719b4c816496349a4a0f1b62397ef", + "sha256:9d61de44b248feef82c8979a1e9912c923527cfb1d01c93b7bb5d6ca93ed09d6", + "sha256:beb3789519253b22338cca48053ba5ac8b442633e3af8f58e264d776a98ff6d0", + "sha256:bf3ab3f8d5752dbe68babc77d21b42575b916793515442e3890aef680e212154", + "sha256:c4c7e0abfac3a67f3e1d51e1d1313fd4205528e17663ff264b1945c3370b18bd", + "sha256:cc253e4ad51d360590358ab2cee5a6139f04ad994e0fcbff52e7f61fca475c3e", + "sha256:cd198ed4445914ebc25a24b6cc6020902bb6b888fc9b39500ef4500841b1b437", + "sha256:d760ff747165d84965791bfcd14588f61f111708036d80f1980387e3760035e7", + "sha256:ddef8fdc06676dd1bec9fe67b3128f84079469ee6424384cbb29a90c9033b559", + "sha256:f77cc91d3cb8a7bccfba28fe4aec537178384509bfce222f8eca287b7e5d0214", + "sha256:ff80bd40469915cc61686086a2503b901e17040f8a191099d8ccaa45dc72df8c", + "sha256:fffa7ec85f27577f7f5471b390bf902d58ccd89b3612cf40bfb92f4ba75e6c95" ], "markers": "python_version >= '3.8'", - "version": "==0.14.2" + "version": "==0.15.0" }, "multidict": { "hashes": [ @@ -3493,36 +3477,20 @@ }, "nodeenv": { "hashes": [ - "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e", - "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b" + "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2", + "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==1.7.0" + "version": "==1.8.0" }, "nucypher": { "git": "https://github.com/derekpierre/nucypher.git", - "ref": "197a852b2198e51acd1c489b6df898c992fdc822" + "ref": "4871cb01c82fc57ae801998b42fc4c304daf3e3e" }, "nucypher-core": { - "hashes": [ - "sha256:010acfa1b5db8672ecab6d423f115d1f26c893a9d46cab21be5858e07cedb97b", - "sha256:2edf1ff64f4c26be39939271b0c49f0e6dca007f568be4e2364631e9b731f69b", - "sha256:338d909da9ee7ae194b13ba771ff607ce36d0660d365e6dd9368343da3871fbc", - "sha256:514e7c861b05adc50a7bd748ea952df5870b1dfca77cfc2e5763bc0662f0ce59", - "sha256:52bfe3ed2bdd53cae0a88299b4e64510223e6debc5ca51989c5b8f93c9d40598", - "sha256:610ce729317c5c8817f60943660f4dd8464ac64adb95ea808c009c8ef92fc43f", - "sha256:679169a79e1ebd51bb2f7db50feef60522b658237b925660e97b83bc5cb31897", - "sha256:682c01979482a74186ef7fff2f9a717f319099e9d29874713f4f989658739cd6", - "sha256:79524ea772f608438d3a755980a79301717ad33fb1fca7c5e0d51a950faa53f0", - "sha256:9a3e08b62dcc5a943c6a08775a4597da80fd4be9fc380adb84d48a96cee7f59e", - "sha256:d0208752ecd41b69f8b494d8f515c2bf67be53179e1b75cd1770e15be9431194", - "sha256:d216c5bdb811c707c2c80cc66912373e5cb09eb148509d4a0fe8d080a78aab08", - "sha256:dbb9372629f3f5a9a19084c1f9b24814c6b055ffcbde0f0fcbbc7b488d1064f5", - "sha256:dc4e9c23dbca27cfbd8eac2796776ece4c4320a8efd174997ea0efdc3fb12c55", - "sha256:e63d7f4a25f6475c97e80f9e32c9c5056c8e5f51a3b1af1db73e8f2b0978d13b", - "sha256:e8007b202704512678f16d225789d843535b38cf5bcda2442c1510eb7e16e4cc" - ], - "version": "==0.7.0" + "git": "https://github.com/derekpierre/nucypher-core.git", + "ref": "9cb792197dbb20d4997448fc37b116f9f1fb686c", + "subdirectory": "nucypher-core-python" }, "numpy": { "hashes": [ @@ -3691,11 +3659,11 @@ }, "platformdirs": { "hashes": [ - "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4", - "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335" + "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f", + "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5" ], "markers": "python_version >= '3.7'", - "version": "==3.5.0" + "version": "==3.5.1" }, "pluggy": { "hashes": [ @@ -3707,11 +3675,11 @@ }, "pre-commit": { "hashes": [ - "sha256:218e9e3f7f7f3271ebc355a15598a4d3893ad9fc7b57fe446db75644543323b9", - "sha256:733f78c9a056cdd169baa6cd4272d51ecfda95346ef8a89bf93712706021b907" + "sha256:66e37bec2d882de1f17f88075047ef8962581f83c234ac08da21a0c58953d1f0", + "sha256:8056bc52181efadf4aac792b1f4f255dfd2fb5a350ded7335d251a68561e8cb6" ], "index": "pypi", - "version": "==3.3.1" + "version": "==3.3.2" }, "prometheus-client": { "hashes": [ @@ -3731,22 +3699,22 @@ }, "protobuf": { "hashes": [ - "sha256:0a3d1a3f746cc5209163bab06f4f56b77fb9d523beedd42e04e6334bb653fd84", - "sha256:139682756712146b24fb276c800dc7d05057136b331b66cd2a31f68e55dbac6f", - "sha256:33673619f4f28b04f4e99b578ceb99b335b31ee5f5a2cc513a9d32284ff8d956", - "sha256:3979ea994d7bf9fcbc7541b7cf2331c0850896d20db099d9d22cc6f01627ee68", - "sha256:499e5884e71719de45baeec980ea2c46a4fabe83a240363ea3272507f4819771", - "sha256:6d7c54c6686462f06b0f19d5c4cc1ce86be247493b89ed6cdb37f7b5f02f26ee", - "sha256:87af9d12258b4f3602dc26417db9dc89204d029647d5cf0de7d9d819fbd5b35c", - "sha256:a24d1498edef52e4a17f67b7640e1973f9affc168f15fe6d9eff4cb1ede785ea", - "sha256:a49938ad67a8652d64b662be6841e29764cd44d6db7e0be2f8c9d7a68c53b129", - "sha256:ba9e9279844e49a734accb0696f929615c59226176d585a341ccc51e85431e39", - "sha256:be3791a2694b96008334e8072845eaf5c7d4bce4564cf126ecbc34d3bf5abcdc", - "sha256:cf6904fabb6ef00c8bd0b666b196584af333442b05c044c492a09f743d31db6f", - "sha256:e7e5bca11a5ff3bc4919aaf80bc83781b6ea093b77f60743f766f1af2aec68e4" + "sha256:2036a3a1e7fc27f973fa0a7888dce712393af644f4695385f117886abc792e39", + "sha256:32e78beda26d7a101fecf15d7a4a792278a0d26a31bc327ff05564a9d68ab8ee", + "sha256:346990f634272caac1f09efbcfbbacb23098b1f606d172534c6fa2d9758bb436", + "sha256:3b8905eafe4439076e1f58e9d1fa327025fd2777cf90f14083092ae47f77b0aa", + "sha256:3ce113b3f3362493bddc9069c2163a38f240a9ed685ff83e7bcb756b05e1deb0", + "sha256:410bcc0a5b279f634d3e16082ce221dfef7c3392fac723500e2e64d1806dd2be", + "sha256:5b9cd6097e6acae48a68cb29b56bc79339be84eca65b486910bb1e7a30e2b7c1", + "sha256:65f0ac96ef67d7dd09b19a46aad81a851b6f85f89725577f16de38f2d68ad477", + "sha256:91fac0753c3c4951fbb98a93271c43cc7cf3b93cf67747b3e600bb1e5cc14d61", + "sha256:95789b569418a3e32a53f43d7763be3d490a831e9c08042539462b6d972c2d7e", + "sha256:ac50be82491369a9ec3710565777e4da87c6d2e20404e0abb1f3a8f10ffd20f0", + "sha256:decf119d54e820f298ee6d89c72d6b289ea240c32c521f00433f9dc420595f38", + "sha256:f9510cac91e764e86acd74e2b7f7bc5e6127a7f3fb646d7c8033cfb84fd1176a" ], "markers": "python_version >= '3.7'", - "version": "==4.23.0rc2" + "version": "==4.23.1" }, "ptyprocess": { "hashes": [ @@ -3787,10 +3755,10 @@ }, "py-evm": { "hashes": [ - "sha256:2539de6d05c67fa146eacee973812c20b7574f9a741d70fc7b904199f90065d7", - "sha256:42e375ee5a9fcfffa2be804d951b0c46b028a9a1fe1f3ce34d279003dc0677a5" + "sha256:5d23d441a5afe8543e0a90966c61bcce8c6d9d1c9303a536f85d237a264b8e4d", + "sha256:844f1858f9c92633a862de8b466313174fb4d5a67c6e62d3cad3be34587ebddc" ], - "version": "==0.6.1a2" + "version": "==0.7.0a2" }, "py-geth": { "hashes": [ @@ -3860,42 +3828,41 @@ }, "pycryptodome": { "hashes": [ - "sha256:04779cc588ad8f13c80a060b0b1c9d1c203d051d8a43879117fe6b8aaf1cd3fa", - "sha256:121d61663267f73692e8bde5ec0d23c9146465a0d75cad75c34f75c752527b01", - "sha256:1a30f51b990994491cec2d7d237924e5b6bd0d445da9337d77de384ad7f254f9", - "sha256:2c5631204ebcc7ae33d11c43037b2dafe25e2ab9c1de6448eb6502ac69c19a56", - "sha256:333306eaea01fde50a73c4619e25631e56c4c61bd0fb0a2346479e67e3d3a820", - "sha256:38bbd6717eac084408b4094174c0805bdbaba1f57fc250fd0309ae5ec9ed7e09", - "sha256:3a232474cd89d3f51e4295abe248a8b95d0332d153bf46444e415409070aae1e", - "sha256:4992ec965606054e8326e83db1c8654f0549cdb26fce1898dc1a20bc7684ec1c", - "sha256:53068e33c74f3b93a8158dacaa5d0f82d254a81b1002e0cd342be89fcb3433eb", - "sha256:5587803d5b66dfd99e7caa31ed91fba0fdee3661c5d93684028ad6653fce725f", - "sha256:5a790bc045003d89d42e3b9cb3cc938c8561a57a88aaa5691512e8540d1ae79c", - "sha256:74794a2e2896cd0cf56fdc9db61ef755fa812b4a4900fa46c49045663a92b8d0", - "sha256:80ea8333b6a5f2d9e856ff2293dba2e3e661197f90bf0f4d5a82a0a6bc83a626", - "sha256:8198f2b04c39d817b206ebe0db25a6653bb5f463c2319d6f6d9a80d012ac1e37", - "sha256:87e2ca3aa557781447428c4b6c8c937f10ff215202ab40ece5c13a82555c10d6", - "sha256:909e36a43fe4a8a3163e9c7fc103867825d14a2ecb852a63d3905250b308a4e5", - "sha256:9453b4e21e752df8737fdffac619e93c9f0ec55ead9a45df782055eb95ef37d9", - "sha256:9ec565e89a6b400eca814f28d78a9ef3f15aea1df74d95b28b7720739b28f37f", - "sha256:a3228728a3808bc9f18c1797ec1179a0efb5068c817b2ffcf6bcd012494dffb2", - "sha256:a74f45aee8c5cc4d533e585e0e596e9f78521e1543a302870a27b0ae2106381e", - "sha256:afbcdb0eda20a0e1d44e3a1ad6d4ec3c959210f4b48cabc0e387a282f4c7deb8", - "sha256:ba2d4fcb844c6ba5df4bbfee9352ad5352c5ae939ac450e06cdceff653280450", - "sha256:bce2e2d8e82fcf972005652371a3e8731956a0c1fbb719cc897943b3695ad91b", - "sha256:c133f6721fba313722a018392a91e3c69d3706ae723484841752559e71d69dc6", - "sha256:ca1ceb6303be1282148f04ac21cebeebdb4152590842159877778f9cf1634f09", - "sha256:d086d46774e27b280e4cece8ab3d87299cf0d39063f00f1e9290d096adc5662a", - "sha256:dc22cc00f804485a3c2a7e2010d9f14a705555f67020eb083e833cabd5bd82e4", - "sha256:e1819b67bcf6ca48341e9b03c2e45b1c891fa8eb1a8458482d14c2805c9616f2", - "sha256:e7debd9c439e7b84f53be3cf4ba8b75b3d0b6e6015212355d6daf44ac672e210", - "sha256:f44c0d28716d950135ff21505f2c764498eda9d8806b7c78764165848aa419bc", - "sha256:f68d6c8ea2974a571cacb7014dbaada21063a0375318d88ac1f9300bc81e93c3", - "sha256:f812d58c5af06d939b2baccdda614a3ffd80531a26e5faca2c9f8b1770b2b7af", - "sha256:f8e550caf52472ae9126953415e4fc554ab53049a5691c45b8816895c632e4d7" + "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb", + "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6", + "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403", + "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148", + "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4", + "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825", + "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2", + "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14", + "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c", + "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4", + "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2", + "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb", + "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf", + "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec", + "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918", + "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3", + "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944", + "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e", + "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024", + "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f", + "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1", + "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380", + "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9", + "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e", + "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413", + "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec", + "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54", + "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2", + "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27", + "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b", + "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf", + "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==3.17" + "version": "==3.18.0" }, "pydantic": { "hashes": [ @@ -3947,11 +3914,11 @@ }, "pygithub": { "hashes": [ - "sha256:4e7fe9c3ec30d5fde5b4fbb97f18821c9dbf372bf6df337fe66f6689a65e0a83", - "sha256:7d528b4ad92bc13122129fafd444ce3d04c47d2d801f6446b6e6ee2d410235b3" + "sha256:1e6b1b7afe31f75151fb81f7ab6b984a7188a852bdb123dbb9ae90023c3ce60f", + "sha256:f435884af617c6debaa76cbc355372d1027445a56fbc39972a3b9ed4968badc8" ], "markers": "python_version >= '3.7'", - "version": "==1.58.1" + "version": "==1.58.2" }, "pygments": { "hashes": [ @@ -3966,11 +3933,11 @@ "crypto" ], "hashes": [ - "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd", - "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14" + "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1", + "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074" ], "markers": "python_version >= '3.7'", - "version": "==2.6.0" + "version": "==2.7.0" }, "pynacl": { "hashes": [ @@ -4131,113 +4098,113 @@ }, "referencing": { "hashes": [ - "sha256:3c963366bc94261bec1a4bd5917a05fee800c1e87995add5edba21abfa253c7d", - "sha256:8c1886f14748c22c9fdc0e302add12f99ad93cada04ce818d47641dc06637a36" + "sha256:7af30260a7a0ece4bc24f2687a152b571f7ae61e90ca5d08fad372fe44998585", + "sha256:a635d6caee584b0d0f91d1477d6fb93fe3bf53bec8fa1a1cad5a2888621d18dd" ], "markers": "python_version >= '3.8'", - "version": "==0.28.0" + "version": "==0.28.2" }, "regex": { "hashes": [ - "sha256:00f6f26e748c797a041ab6957f4cacc66a7fbd5dc5f627760985f5c5b7de2af6", - "sha256:0130a2fdd6f033c3e3710d0b950cc6abd3133c5af88c40c78e77641cb6f6cf8a", - "sha256:027d4962340dbd84979fd1c40bfd7ca8362030abfbbff25f1327bbf4867f047c", - "sha256:037f4be6a240a11a6d3397e932ef5d3ec5855858910792a0ab7d351bd0333533", - "sha256:04a825fd9f5931263eccd0cbdbf171a9792fa1bf2642ca62800b57689ca1b660", - "sha256:06fe9870165d4975a8a3e27a83919b9014b35dd2ee7061a5f2be8e579294cedc", - "sha256:0a664857dd9b1076942c4d73c54a031066ee0ae88a438e7a1e0e79c1c5ddf47a", - "sha256:0c731522eaf74166066fcf91fe7fe3c3617cc5e8df0c150132282d0dd5225afc", - "sha256:0d5a0edefdf800aeef6cf559af75e614fb2eb2d0388f0b132af805fdefcf8ec6", - "sha256:0eee66c4ce6ced2e9d5d4497a569bab6257a6d118eb43dd57cceb61ba00b62d8", - "sha256:12be293d718e05f7304f715980b1a25b16e34a1ff2121740592559d066f91e67", - "sha256:1ad00c9aae6090d052c0ee16a2737a7154031793e6c7b58a629eed8d8aa77e31", - "sha256:1d98e4748a60c9902ad504e862756c43cc707404fc3025f82ef5bbe50bee3b9e", - "sha256:1dc5e9a847613679ac8bd0386a0e54f2958441a0fcc123778637e433041aa763", - "sha256:1ef51012493837263236781ac9598f059dc4e5a4d72627bd3ac85cbd5d1b0ee1", - "sha256:2095acff95df0bf6ec3dee672a03d3d78606b4ca419d53fbd606c559cebedf45", - "sha256:21b653c1538cbbc1c58f6d6f3ccb4a5ce56491f0ab370ec057c1c64a152eb48c", - "sha256:24db1c0fc20850db47977824a99fdae81d6764adaf8192dd874185d9e7166dbb", - "sha256:2762750332f57820c0f38ade87ce4ebe671b178892faed0112f574f0b42801cf", - "sha256:336fb3f585e239362d4f26dd6f904b15d91febfc980f47ed706858f5cee20ce6", - "sha256:3633a07ffeabc14f3cd531f11794bb603267d86e4109cb811a34aee020622d3f", - "sha256:376fa2ef6a02a004b6fe4ebaa5ba370e7532ec6915efd12e33aa434517f8bbee", - "sha256:3965a9ab13f1bf3e4af021c7dbe9678dd9f8dc5cc9097b3d3cbbf3ad00574b5d", - "sha256:3d8cc797f87c07372e7d300198e1423c2b7bd35b68f375cc6700e26158940c9a", - "sha256:460672c6ec94997755bd37b00302853b9d85a5a433121c198359958e8c10ced5", - "sha256:49a77f0b62a4122cf578d1194658973c435e6d2a9611013be11b6750056a5930", - "sha256:4c2ae89c92a04b057b412f88a3359e77600ce966a740e2da212667ce795e1bdc", - "sha256:50e00ab84396bfbeb1bede61eff6641f957b6532e74e02be480d71914e20e2ac", - "sha256:5a7ab3440f0c653dee8b42af858da6e07615c64ba86a6b3509a0ecf44eabdb11", - "sha256:5a98814d42282153c30d674ee34ea114a03ea8d32fd5d9b924d46fbeb2c7eb15", - "sha256:5cc67b3562aada6682ae45f2ea40819baa6bffe38155883100f8779c22c8c087", - "sha256:5d321dd059fd00482537aaba919e29189ea4ab6a03528881267982bb7707f610", - "sha256:5f82d4e0725788787216c9ae53116e6e477b2d97f29ec1e5086f5afbab5716b0", - "sha256:5fda1fc36dd923aee070d7aab3a85b448c8b62930900c615bb67db829281103b", - "sha256:63a92f28a3f285dae06aae83227cb66cc87256db040aaf26c1c48ae5221eccde", - "sha256:6469c2baf450fd1e648752b113a1fc1d67dfbad359f6171be954bacf7b09d126", - "sha256:6686256d1d435ed782ff12ef11e074705911a40d3907b986e53ca9a996e88489", - "sha256:6ccd0d7557c4e76303a6429ec9de55cd87334809cda66c0f101831e2ce9073c1", - "sha256:6f02105d4a511f550dcd63f750937d1607a1f6dc253c798c4adf36aba89215a3", - "sha256:70bd0c121b3c4e641e5c4e633c4581059acad774a1a62bcb15fea3470c2a61cc", - "sha256:770f825c7751ce43aae2088fee94f2e60f95e181223642a0bb35cbaeea92001c", - "sha256:77b3333a6cd1161b81bcf018a9bdb3cc567074a913aa69b98b9c8c79be28565c", - "sha256:797bab57e1317c940030f3c15d48c01e1f16d12ba0f6a807ee0bebdc1cfe3f2d", - "sha256:8418b0ee315555ca9786daab00ec8aaf47dfb2698a5be689676e83e88b949f22", - "sha256:861ed1249302664f96b2e968216486a02af0a143e0f3cc6fd92b78f11aa18579", - "sha256:89f54d4bbd452a5ee01dc31ec918f7b1f32483f13d3598af1acf5ea82ad82ad3", - "sha256:8c704e7062c59d2f7e2eebda2c0c0b69bd807ca6579c3a21fc4b1d8505cfc090", - "sha256:8d5bc5035989852a4ae7dacf8dc99db7c4f21c852486777a98b8efe37af4d8d7", - "sha256:91f47522688955cb33190f8354ccaa1cc058d05e73f99afe9ace40db36c159e8", - "sha256:9322797fddd51ec0312a8b649d9a3ebfabf4826a204ef8e1cc11801013005323", - "sha256:953ba37dd83c424c2cf699c64a8477645fc7c7403ffd2eb1417189eddbbfb4a7", - "sha256:97fd2885df308edcdf96baa632192a4291f3ed5b072c0bc3f29dc1e6de40ffa4", - "sha256:99780a0880d3dab2bb6f863492d38ab90ffdc9daf4fbefb505524f6f3a1c9dbe", - "sha256:9b887d87188489859411d0c7e741f7dfe8a3ca5946b0db8b3c9e5daecc089b62", - "sha256:9e1b4b0b4baff934ef3c0ac56578a6b773f7f90ad1db3ff843ee40d83bdae09f", - "sha256:a419384c6c80d58532016c3cf6a3aca009bfb7661f33e119ba7f77ec0e28222a", - "sha256:aa92f9ad481108a7e4c5a5234608f7c718f8b67003ce4719a4d2735d82b54167", - "sha256:ac402ac165f42f41b3aef9e8a9c6fb204dac31faad65b3b0ae6bff4bc9d0dad2", - "sha256:ad84e1d4be3504e7dcd6370b3e847eaf05d5d35cb0818d0bd2d1a26b58c0abd2", - "sha256:b132e4507c6404faece005329de7b2b97653ddfeeaf84f058fe820791160dcda", - "sha256:b365b8fa0d5fd0208db5b0e94582edb796dde07d1f99c5a9c1ff6be172c374ee", - "sha256:b48820071a49b68ca8734e8b2bd1f26632512154816b261b614e62cc724d9f8a", - "sha256:b7eb07d60c385aec906b82d48447907a2bbf454d0e9ead62168de111accabaf8", - "sha256:b87d38717ed855583ae1693f6095fc9c06b7dde4ddec782b41aa92931dd60e7c", - "sha256:bda905e040e6c2875a7dde9652a9e0c426aaac6058568cc064f8128b061439ee", - "sha256:c10b1388106447db0cdb8e340d06fa2d49b822368a049c36928d3c24296c2e37", - "sha256:c1155571edd498b6274f969517db6781500fbb24fc91ff740ea5a37c4735b3ba", - "sha256:c1fa9651141caaafa0d6048695a4a04bc4bf39c75f250a36b1a05c9588a403a9", - "sha256:c300461ed8159f61d979971ba51f1acd1e6f9907d86888e9275165e06ea90f06", - "sha256:c40f7e8c02b287550166a3e36dbb89f9387db86a71101f6242668e3ef979cd2a", - "sha256:c455d886838dd5a248e7f06e5573275fc854febd206eb937cf632082a06a939f", - "sha256:cb22580ce5e2eee138a78df40444151ff51c91acd11be546216a046677c75593", - "sha256:ccd0c918971f79bd9a883f13f91343dd2eaefbafd4344aadfe5134a65fb821c3", - "sha256:d0ac14c36d91b191d1cb073fb5ac49937d88a5c8b051ced3875321a525202c34", - "sha256:d28933aa1242814ed737b569b2baf96e4d236c52be454b5dc17afd36bf893c12", - "sha256:db5d5c9c7bbcf9cbc541f8adba8c92a7a7abd0de4f0343da4e96fb78ffe9d1a1", - "sha256:dbc47670e0424a566084e15af9a253b85f90fa26e60fa07e1b10c90df4c8fd07", - "sha256:dbcb49036a6a6065035ac2acc1ad6a918f9e09ef2d0f9392dc90b8756f789f95", - "sha256:e708e69c4d3bc41df29efb94aadc5578c841b2cd02f8cbb1bcfbf280f2801238", - "sha256:e87450db3c444f41e3ac6a09b7a10ddfe54fa1e98bf60ee299fe6d11097540cd", - "sha256:ea2d66c1fd898d81b8ce0f95afab9ba0ab522cf08810f11fa28ad958706cd2b2", - "sha256:eaff21326bc5d9be0c2f400931d39274105bd5d06650f0b0215392d1b050d404", - "sha256:ebf0776fdc7a5e0ac11b6db2d69ac77479411b627a96119ffa4427ba32f3bb66", - "sha256:f2bc7249840faacfff6196e5b5ffeb3fdaf078986521a1cda34e9be5607e773b", - "sha256:f3e20cf2575b1330687d3dd6242f82278b3bdc09a9f36cc7ac4d45b7dd63c1f5", - "sha256:f576b8dec95456ba0157943a57f5f88c076cf96cc363ef1bf5027c2976fd487a", - "sha256:fbc5b23b569d96b8c831574c93098b68c6d7ff2509f31268c968152ca4f2ecd0", - "sha256:ff8fef88029d0420315935041db517855ea022889fa8d54959943e39fffebf59" + "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff", + "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea", + "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9", + "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423", + "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c", + "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60", + "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764", + "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2", + "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f", + "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe", + "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2", + "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a", + "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c", + "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17", + "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426", + "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e", + "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8", + "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67", + "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e", + "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32", + "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559", + "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66", + "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e", + "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8", + "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309", + "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18", + "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a", + "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94", + "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0", + "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d", + "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80", + "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810", + "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6", + "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96", + "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a", + "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636", + "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d", + "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe", + "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b", + "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2", + "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d", + "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393", + "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac", + "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926", + "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91", + "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e", + "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a", + "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46", + "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a", + "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd", + "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3", + "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd", + "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657", + "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3", + "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2", + "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a", + "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1", + "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550", + "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833", + "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81", + "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8", + "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5", + "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19", + "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d", + "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86", + "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e", + "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008", + "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8", + "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2", + "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da", + "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053", + "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa", + "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb", + "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22", + "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc", + "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6", + "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051", + "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d", + "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468", + "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df", + "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1", + "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d", + "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479", + "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b", + "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35", + "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956", + "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2", + "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.4" + "version": "==2023.5.5" }, "requests": { "hashes": [ - "sha256:e8f3c9be120d3333921d213eef078af392fba3933ab7ed2d1cba3b56f2568c3b", - "sha256:f2e34a75f4749019bb0e3effb66683630e4ffeaf75819fb51bebef1bf5aef059" + "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294", + "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4" ], "markers": "python_version >= '3.7'", - "version": "==2.29.0" + "version": "==2.30.0" }, "rich": { "hashes": [ @@ -4293,10 +4260,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:5932c092c6e6035584eb74d77064e4bce3b7935dfc4a331349719a40db265840", - "sha256:cf89a5063ef84278d186aceaed6fb595bfe67d099298e537634a323664265669" + "sha256:092888f3abf7a2ea78f0bfcefc3e0465caee2b6f0efb26f538ccc60f95dca179", + "sha256:99c15556a23621be9f18c2955f7ce63321713bf1c0ad396b27b61399bac5f458" ], - "version": "==1.22.2" + "version": "==1.21.1" }, "service-identity": { "hashes": [ @@ -4336,50 +4303,50 @@ }, "sqlalchemy": { "hashes": [ - "sha256:03206576ca53f55b9de6e890273e498f4b2e6e687a9db9859bdcd21df5a63e53", - "sha256:09205893a84b6bedae0453d3f384f5d2a6499b6e45ad977549894cdcd85d8f1c", - "sha256:0e5501c78b5ab917f0f0f75ce7f0018f683a0a76e95f30e6561bf61c9ff69d43", - "sha256:10f1ff0ebe21d2cea89ead231ba3ecf75678463ab85f19ce2ce91207620737f3", - "sha256:1fac17c866111283cbcdb7024d646abb71fdd95f3ce975cf3710258bc55742fd", - "sha256:297b752d4f30350b64175bbbd57dc94c061a35f5d1dba088d0a367dbbebabc94", - "sha256:2a3101252f3de9a18561c1fb0a68b1ee465485990aba458d4510f214bd5a582c", - "sha256:32762dba51b663609757f861584a722093487f53737e76474cc6e190904dc31b", - "sha256:369f6564e68a9c60f0b9dde121def491e651a4ba8dcdd652a93f1cd5977cd85c", - "sha256:3745dee26a7ee012598577ad3b8f6e6cd50a49b2afa0cde9db668da6bf2c2319", - "sha256:3c053c3f4c4e45d4c8b27977647566c140d6de3f61a4e2acb92ea24cf9911c7f", - "sha256:4ad525b9dd17b478a2ed8580d7f2bc46b0f5889153c6b1c099729583e395b4b9", - "sha256:53b2c8adbcbb59732fb21a024aaa261983655845d86e3fc26a5676cec0ebaa09", - "sha256:5d709f43caee115b03b707b8cbbcb8b303045dd7cdc825b6d29857d71f3425ae", - "sha256:5e9d390727c11b9a7e583bf6770de36895c0936bddb98ae93ae99282e6428d5f", - "sha256:6b1fa0ffc378a7061c452cb4a1f804fad1b3b8aa8d0552725531d27941b2e3ed", - "sha256:6e1d50592cb24d1947c374c666add65ded7c181ec98a89ed17abbe9b8b2e2ff4", - "sha256:77a06b0983faf9aa48ee6219d41ade39dee16ce90857cc181dbcf6918acd234d", - "sha256:7eb25b981cbc9e7df9f56ad7ec4c6d77323090ca4b7147fcdc09d66535377759", - "sha256:85b0efe1c71459ba435a6593f54a0e39334b16ba383e8010fdb9d0127ca51ba8", - "sha256:87b2c2d13c3d1384859b60eabb3139e169ce68ada1d2963dbd0c7af797f16efe", - "sha256:8aad66215a3817a7a1d535769773333250de2653c89b53f7e2d42b677d398027", - "sha256:91f4b1bdc987ef85fe3a0ce5d26ac72ff8f60207b08272aa2a65494836391d69", - "sha256:978bee4ecbcdadf087220618409fb9be9509458df479528b70308f0599c7c519", - "sha256:9fe98e9d26778d7711ceee2c671741b4f54c74677668481d733d6f70747d7690", - "sha256:a022c588c0f413f8cddf9fcc597dbf317efeac4186d8bff9aa7f3219258348b0", - "sha256:a4709457f1c317e347051498b91fa2b86c4bcdebf93c84e6d121a4fc8a397307", - "sha256:aec5fb36b53125554ecc2285526eb5cc31b21f6cb059993c1c5ca831959de052", - "sha256:b6ceca432ce88ad12aab5b5896c343a1993c90b325d9193dcd055e73e18a0439", - "sha256:b76c2fde827522e21922418325c1b95c2d795cdecfb4bc261e4d37965199ee7f", - "sha256:bddfc5bd1dee5db0fddc9dab26f800c283f3243e7281bbf107200fed30125f9c", - "sha256:bf83700faa9642388fbd3167db3f6cbb2e88cc8367b8c22204f3f408ee782d25", - "sha256:c5268ec05c21e2ecf5bca09314bcaadfec01f02163088cd602db4379862958dd", - "sha256:d9796d5c13b2b7f05084d0ce52528cf919f9bde9e0f10672a6393a4490415695", - "sha256:dc67efd00ce7f428a446ce012673c03c63c5abb5dec3f33750087b8bdc173bf0", - "sha256:dfd6385b662aea83e63dd4db5fe116eb11914022deb1745f0b57fa8470c18ffe", - "sha256:e495ad05a13171fbb5d72fe5993469c8bceac42bcf6b8f9f117a518ee7fbc353", - "sha256:e752c34f7a2057ebe82c856698b9f277c633d4aad006bddf7af74598567c8931", - "sha256:f0843132168b44ca33c5e5a2046c954775dde8c580ce27f5cf2e134d0d9919e4", - "sha256:f30c5608c64fc9c1fa9a16277eb4784f782362566fe40ff8d283358c8f2c5fe0", - "sha256:f6ebadefc4331dda83c22519e1ea1e61104df6eb38abbb80ab91b0a8527a5c19" + "sha256:06f7e29e542c6f2dc751d4e9a8bdee1945226c0d501f8ee008baf5175604fb90", + "sha256:1ca00a7aca9636675a05b8ef99e09b9a6a680dfc346b5fe04e6ecc957a947501", + "sha256:21333b7ce04c3a57a7b17e19cd8a2ebeae4d58e3c97e57b0d6a2c626d7cddd3b", + "sha256:243e580b477f0552424f9f9d281e5b37aa8be03e2261cfe992c60acd16fe218c", + "sha256:252c49f86312e900591fb795d495a9e1b4199d0a799b55a6a5f46969068895c0", + "sha256:26025ba87797ac616b4823030adb2832e825ad8cdb4ac688e19ee93be69a42b6", + "sha256:281f0862483d89f169584f6b69dde1130d70612f4414c6a6167f690c7ac2a871", + "sha256:29935e0f3d91b7a97b9e635f3cf01d88cc7a0ace2e4686ec6cdbdfa04b0a2839", + "sha256:2c50b9d78362654d193ec03f4e524a1490abe9ac9d1001df60dd1e00d01d3d69", + "sha256:319184b851c0db141138a0a062fdd86b9eb5be4251a7d760d6465b92dd6c4e1e", + "sha256:433467a5c4d0cf5f54f374574fb8a2d12c7f806c9a924307e1b816bd79f9ed3f", + "sha256:465cf63f3a739f876ae0128e1308586f77516b5a574419614757d59682eb2feb", + "sha256:49261a8f4bc0b41050d7719b93f1c93a8e19594aeeb252df93d61232f70c54d4", + "sha256:4dceffe226116aa16040ae36529fb1159f12c021d93de8de9f1261753a2ba2aa", + "sha256:52169b1452bf6609c1b5fe95fba4d376f6e4551e7d73a5fd9216afbaf61ceed9", + "sha256:5364901aea8b5562a01d583c186bb5448913a8250f53617b5f592ca51f5c5e8a", + "sha256:56b2b4bbfb5bf6c40d84109665a9f0c1c26b6f6280f1749ee5ddf3b82052386a", + "sha256:7cb74468e646497daa743ab2344f7bb5e9fe97774654fa84879b38f8065ceb29", + "sha256:7e7527a1b16587c9b4660241ab5df334f693381ec47682b54293993aca8acfa9", + "sha256:7f02243efca602601bf5646ee627512b36e64068a3c88212e571b609bc7e128e", + "sha256:82eb21e6aab4de898b6be89f5426454e4b5eee49792a44da87e602da89bb31dc", + "sha256:888317fbebefbe87c933551f30864acd26366fad270d9be9dbb2ead32e446d83", + "sha256:8e1c6ed1e82c33917d7724ae2fe8e32715cb25b31ed467db2f507b21fd63cdb1", + "sha256:a824b15ef9596133d02364775c47ce173ea379179cc367e61d9d591e95843fdb", + "sha256:ac104bb4390fdbf743f0de01cda40740b7da32f62304e89efb4e3300587636c6", + "sha256:afed9029db08e16187c7e2dcdfed99e9041499bdc4392589624b05d0a17b8c41", + "sha256:b3c7201fed64bfd83e90472ca4addce3be5dbaaf0cd427f61b1fb5425d89e714", + "sha256:bd213137ef398aed36e45c14d49057a3471f7200c07484ea5bbd89a91f488922", + "sha256:bec31cb4dcd924ff53b3bfdec1b565ccda062f0ebd1a325a247a1550782057de", + "sha256:c1b8ea166cf63964dc11477f905869cc59b404f71a8e90033bd50843150584e0", + "sha256:c38bc0abfd93989afceeb79abb05f20ef0d56ebfd5eba5738e207ef50c1efd56", + "sha256:ce24180cf34ecd47a9a91d535b429deec14dc3d0cfa54d04979a3ebc60b1887d", + "sha256:cf0b16edbebcd200c93e01cf0031b2af44d6ba374a8f8f7b120bc3db1df99cb7", + "sha256:d49ce7ac0713c820b5e2d6863ef87c22a8e1c950ce2778c69eb1327fc4b80dd2", + "sha256:d5c19b4a78126a263ecf01fcc1671344b5514392906cd46b70be74b73e543264", + "sha256:dabed709bd639e38c6b7f4ffc9a187d251dfc7636b5bc366408f5eadb631a558", + "sha256:e402263eca51ba18f3f8b06314a37b7a458496a65a515f5a25c7895423826a93", + "sha256:e422bec95850df641b05f2bd605d9995e01a66d55fa9fff6c79387dbdd8915af", + "sha256:ec03e57ab555153195283017d804e0469b95bb012ecb19f6e2f0b22a3e60bdca", + "sha256:f60461645af46e92bea54db9f3175c55bd9bceba02b133b77f700d7d9de57ead", + "sha256:f851d8e2aaa0b0d07b89b7338441954e4d16d0eed5d140981e25cb5cfa259b3b" ], "markers": "python_version >= '3.7'", - "version": "==2.0.12" + "version": "==2.0.14" }, "stack-data": { "hashes": [ @@ -4537,19 +4504,19 @@ }, "tzlocal": { "hashes": [ - "sha256:407e15ad8fa5b05a66b8f65505b23f0dbd4ee96b343c6da4393e9c60f55d591c", - "sha256:59a6c67af3fb05b6359768cecfacc2c0df368c36b671d18d1e021a5aa70b5f8c" + "sha256:46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803", + "sha256:f3596e180296aaf2dbd97d124fe76ae3a0e3d32b258447de7b939b3fd4be992f" ], "markers": "python_version >= '3.7'", - "version": "==5.0b2" + "version": "==5.0.1" }, "urllib3": { "hashes": [ - "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", - "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" + "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc", + "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.15" + "markers": "python_version >= '3.7'", + "version": "==2.0.2" }, "varint": { "hashes": [ @@ -4608,95 +4575,95 @@ }, "web3": { "hashes": [ - "sha256:7695ee81162c644de0dfd0f5372f96a73be557b46365d218f581ca10197c6389", - "sha256:ca860ad23b1f71384620659f17a374e5850ab3c1bb928a09f0103ee25e3d4c1b" + "sha256:b9fcc2372e7cac27d96621c169be40174eccbb93346bba2ab45ad791140d47fe", + "sha256:c86889b9c0b8f9f5ce5f5f0bb9f9bfc551cf775aeaf903964ddf28d303b85c62" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.2.0" + "version": "==6.4.0" }, "websockets": { "hashes": [ - "sha256:0fb4480556825e4e6bf2eebdbeb130d9474c62705100c90e59f2f56459ddab42", - "sha256:13bd5bebcd16a4b5e403061b8b9dcc5c77e7a71e3c57e072d8dff23e33f70fba", - "sha256:143782041e95b63083b02107f31cda999f392903ae331de1307441f3a4557d51", - "sha256:1b52def56d2a26e0e9c464f90cadb7e628e04f67b0ff3a76a4d9a18dfc35e3dd", - "sha256:1df2413266bf48430ef2a752c49b93086c6bf192d708e4a9920544c74cd2baa6", - "sha256:2174a75d579d811279855df5824676d851a69f52852edb0e7551e0eeac6f59a4", - "sha256:220d5b93764dd70d7617f1663da64256df7e7ea31fc66bc52c0e3750ee134ae3", - "sha256:232b6ba974f5d09b1b747ac232f3a3d8f86de401d7b565e837cc86988edf37ac", - "sha256:25aae96c1060e85836552a113495db6d857400288161299d77b7b20f2ac569f2", - "sha256:25e265686ea385f22a00cc2b719b880797cd1bb53b46dbde969e554fb458bfde", - "sha256:2abeeae63154b7f63d9f764685b2d299e9141171b8b896688bd8baec6b3e2303", - "sha256:2acdc82099999e44fa7bd8c886f03c70a22b1d53ae74252f389be30d64fd6004", - "sha256:2eb042734e710d39e9bc58deab23a65bd2750e161436101488f8af92f183c239", - "sha256:3178d965ec204773ab67985a09f5696ca6c3869afeed0bb51703ea404a24e975", - "sha256:320ddceefd2364d4afe6576195201a3632a6f2e6d207b0c01333e965b22dbc84", - "sha256:34a6f8996964ccaa40da42ee36aa1572adcb1e213665e24aa2f1037da6080909", - "sha256:3565a8f8c7bdde7c29ebe46146bd191290413ee6f8e94cf350609720c075b0a1", - "sha256:392d409178db1e46d1055e51cc850136d302434e12d412a555e5291ab810f622", - "sha256:3a09cce3dacb6ad638fdfa3154d9e54a98efe7c8f68f000e55ca9c716496ca67", - "sha256:3a2100b02d1aaf66dc48ff1b2a72f34f6ebc575a02bc0350cc8e9fbb35940166", - "sha256:3b87cd302f08ea9e74fdc080470eddbed1e165113c1823fb3ee6328bc40ca1d3", - "sha256:3e79065ff6549dd3c765e7916067e12a9c91df2affea0ac51bcd302aaf7ad207", - "sha256:3ffe251a31f37e65b9b9aca5d2d67fd091c234e530f13d9dce4a67959d5a3fba", - "sha256:46388a050d9e40316e58a3f0838c63caacb72f94129eb621a659a6e49bad27ce", - "sha256:46dda4bc2030c335abe192b94e98686615f9274f6b56f32f2dd661fb303d9d12", - "sha256:4c54086b2d2aec3c3cb887ad97e9c02c6be9f1d48381c7419a4aa932d31661e4", - "sha256:5004c087d17251938a52cce21b3dbdabeecbbe432ce3f5bbbf15d8692c36eac9", - "sha256:502683c5dedfc94b9f0f6790efb26aa0591526e8403ad443dce922cd6c0ec83b", - "sha256:518ed6782d9916c5721ebd61bb7651d244178b74399028302c8617d0620af291", - "sha256:580cc95c58118f8c39106be71e24d0b7e1ad11a155f40a2ee687f99b3e5e432e", - "sha256:58477b041099bb504e1a5ddd8aa86302ed1d5c6995bdd3db2b3084ef0135d277", - "sha256:5875f623a10b9ba154cb61967f940ab469039f0b5e61c80dd153a65f024d9fb7", - "sha256:5c7de298371d913824f71b30f7685bb07ad13969c79679cca5b1f7f94fec012f", - "sha256:634239bc844131863762865b75211a913c536817c0da27f691400d49d256df1d", - "sha256:6d872c972c87c393e6a49c1afbdc596432df8c06d0ff7cd05aa18e885e7cfb7c", - "sha256:752fbf420c71416fb1472fec1b4cb8631c1aa2be7149e0a5ba7e5771d75d2bb9", - "sha256:7742cd4524622cc7aa71734b51294644492a961243c4fe67874971c4d3045982", - "sha256:808b8a33c961bbd6d33c55908f7c137569b09ea7dd024bce969969aa04ecf07c", - "sha256:87c69f50281126dcdaccd64d951fb57fbce272578d24efc59bce72cf264725d0", - "sha256:8df63dcd955eb6b2e371d95aacf8b7c535e482192cff1b6ce927d8f43fb4f552", - "sha256:8f24cd758cbe1607a91b720537685b64e4d39415649cac9177cd1257317cf30c", - "sha256:8f392587eb2767afa8a34e909f2fec779f90b630622adc95d8b5e26ea8823cb8", - "sha256:954eb789c960fa5daaed3cfe336abc066941a5d456ff6be8f0e03dd89886bb4c", - "sha256:955fcdb304833df2e172ce2492b7b47b4aab5dcc035a10e093d911a1916f2c87", - "sha256:95c09427c1c57206fe04277bf871b396476d5a8857fa1b99703283ee497c7a5d", - "sha256:a4fe2442091ff71dee0769a10449420fd5d3b606c590f78dd2b97d94b7455640", - "sha256:aa7b33c1fb2f7b7b9820f93a5d61ffd47f5a91711bc5fa4583bbe0c0601ec0b2", - "sha256:adf6385f677ed2e0b021845b36f55c43f171dab3a9ee0ace94da67302f1bc364", - "sha256:b1a69701eb98ed83dd099de4a686dc892c413d974fa31602bc00aca7cb988ac9", - "sha256:b2a573c8d71b7af937852b61e7ccb37151d719974146b5dc734aad350ef55a02", - "sha256:b444366b605d2885f0034dd889faf91b4b47668dd125591e2c64bfde611ac7e1", - "sha256:b985ba2b9e972cf99ddffc07df1a314b893095f62c75bc7c5354a9c4647c6503", - "sha256:c78ca3037a954a4209b9f900e0eabbc471fb4ebe96914016281df2c974a93e3e", - "sha256:ca9b2dced5cbbc5094678cc1ec62160f7b0fe4defd601cd28a36fde7ee71bbb5", - "sha256:cb46d2c7631b2e6f10f7c8bac7854f7c5e5288f024f1c137d4633c79ead1e3c0", - "sha256:ce69f5c742eefd039dce8622e99d811ef2135b69d10f9aa79fbf2fdcc1e56cd7", - "sha256:cf45d273202b0c1cec0f03a7972c655b93611f2e996669667414557230a87b88", - "sha256:d1881518b488a920434a271a6e8a5c9481a67c4f6352ebbdd249b789c0467ddc", - "sha256:d3cc3e48b6c9f7df8c3798004b9c4b92abca09eeea5e1b0a39698f05b7a33b9d", - "sha256:d6b2bfa1d884c254b841b0ff79373b6b80779088df6704f034858e4d705a4802", - "sha256:d70a438ef2a22a581d65ad7648e949d4ccd20e3c8ed7a90bbc46df4e60320891", - "sha256:daa1e8ea47507555ed7a34f8b49398d33dff5b8548eae3de1dc0ef0607273a33", - "sha256:dca9708eea9f9ed300394d4775beb2667288e998eb6f542cdb6c02027430c599", - "sha256:dd906b0cdc417ea7a5f13bb3c6ca3b5fd563338dc596996cb0fdd7872d691c0a", - "sha256:e0eeeea3b01c97fd3b5049a46c908823f68b59bf0e18d79b231d8d6764bc81ee", - "sha256:e37a76ccd483a6457580077d43bc3dfe1fd784ecb2151fcb9d1c73f424deaeba", - "sha256:e8b967a4849db6b567dec3f7dd5d97b15ce653e3497b8ce0814e470d5e074750", - "sha256:ec00401846569aaf018700249996143f567d50050c5b7b650148989f956547af", - "sha256:ede13a6998ba2568b21825809d96e69a38dc43184bdeebbde3699c8baa21d015", - "sha256:f97e03d4d5a4f0dca739ea274be9092822f7430b77d25aa02da6775e490f6846" + "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", + "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", + "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", + "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", + "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", + "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", + "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", + "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", + "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", + "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", + "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", + "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", + "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", + "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", + "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", + "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", + "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", + "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", + "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", + "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", + "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", + "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", + "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", + "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", + "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", + "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", + "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", + "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", + "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", + "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", + "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", + "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", + "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", + "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", + "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", + "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", + "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", + "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", + "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", + "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", + "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", + "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", + "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", + "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", + "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", + "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", + "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", + "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", + "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", + "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", + "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", + "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", + "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", + "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", + "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", + "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", + "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", + "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", + "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", + "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", + "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", + "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", + "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", + "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", + "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", + "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", + "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", + "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", + "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", + "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" ], "markers": "python_version >= '3.7'", - "version": "==11.0.2" + "version": "==11.0.3" }, "werkzeug": { "hashes": [ - "sha256:4866679a0722de00796a74086238bb3b98d90f423f05de039abb09315487254a", - "sha256:a987caf1092edc7523edb139edb20c70571c4a8d5eed02e0b547b4739174d091" + "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76", + "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f" ], "markers": "python_version >= '3.8'", - "version": "==2.3.3" + "version": "==2.3.4" }, "wrapt": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 7ccca54..a7187f4 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,21 +1,21 @@ -i https://pypi.python.org/simple aiohttp==3.8.2 ; python_version >= '3.6' aiosignal==1.3.1 ; python_version >= '3.7' -ape-solidity==0.6.3 ; python_version >= '3.8' and python_version < '4' +ape-solidity @ git+https://github.com/derekpierre/ape-solidity.git@a98042d371bc8e181b52aaa821a738e94a637ab9 appdirs==1.4.4 -appnope==0.1.3 ; sys_platform == 'darwin' +appnope==0.1.3 asttokens==2.2.1 async-timeout==4.0.2 ; python_version >= '3.6' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' base58==1.0.3 bitarray==2.7.3 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2022.12.7 ; python_version >= '3.6' +certifi==2023.5.7 ; python_version >= '3.6' cffi==1.15.1 cfgv==3.3.1 ; python_full_version >= '3.6.1' charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' @@ -36,20 +36,20 @@ eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' eip712-structs==1.1.0 eth-abi==4.0.0 ; python_version >= '3.7' and python_version < '4' eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' -eth-ape==0.6.8 ; python_version < '3.11' and python_version >= '3.8' +eth-ape==0.6.9 ; python_version >= '3.8' and python_version < '4' eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.8.0b3 ; python_full_version >= '3.6.8' and python_version < '4' +eth-tester==0.9.0b1 ; python_full_version >= '3.6.8' and python_version < '4' eth-typing==3.3.0 ; python_full_version >= '3.7.2' and python_version < '4' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ethpm-types==0.4.5 ; python_version >= '3.8' and python_version < '4' -evm-trace==0.1.0a18 ; python_version >= '3.8' and python_version < '4' +ethpm-types==0.5.0 ; python_version >= '3.8' and python_version < '4' +evm-trace==0.1.0a20 ; python_version >= '3.8' and python_version < '4' exceptiongroup==1.1.1 ; python_version >= '3.7' executing==1.2.0 -ferveo==0.1.11 ; python_version >= '3.7' +ferveo==0.1.12 ; python_version >= '3.7' filelock==3.12.0 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' frozenlist==1.3.3 ; python_version >= '3.7' @@ -58,20 +58,21 @@ hendrix==4.0.0 hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' humanize==4.6.0 ; python_version >= '3.7' hyperlink==21.0.0 -hypothesis==6.75.1 ; python_version >= '3.7' -identify==2.5.23 ; python_version >= '3.7' +hypothesis==6.75.3 ; python_version >= '3.7' +identify==2.5.24 ; python_version >= '3.7' idna==3.4 ; python_version >= '3.5' ijson==3.2.0.post0 importlib-metadata==6.6.0 ; python_version >= '3.7' importlib-resources==5.12.0 ; python_version >= '3.7' incremental==22.10.0 iniconfig==2.0.0 ; python_version >= '3.7' -ipython==8.12.1 ; python_version >= '3.8' +ipython==8.12.2 ; python_version >= '3.8' itsdangerous==2.1.2 ; python_version >= '3.7' jedi==0.18.2 ; python_version >= '3.6' jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.18.0a6 ; python_version >= '3.8' -jsonschema-specifications==2023.3.6 ; python_version >= '3.8' +jsonschema==4.18.0a7 ; python_version >= '3.8' +jsonschema-specifications==2023.5.1 ; python_version >= '3.8' +lazyasd==0.1.4 lru-dict==1.1.8 mako==1.2.4 ; python_version >= '3.7' markupsafe==2.1.2 ; python_version >= '3.7' @@ -82,12 +83,12 @@ mnemonic==0.20 ; python_version >= '3.5' morphys==1.0 msgpack==1.0.5 msgpack-python==0.5.6 -msgspec==0.14.2 ; python_version >= '3.8' +msgspec==0.15.0 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nodeenv==1.7.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/derekpierre/nucypher.git@bae870e97c9682d44cd58ddc36d68a89b2107d37 -nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@827b07e1e56a514ad81e11899dc0e1cfd1052001#subdirectory=nucypher-core-python +nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +nucypher @ git+https://github.com/derekpierre/nucypher.git@4871cb01c82fc57ae801998b42fc4c304daf3e3e +nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@9cb792197dbb20d4997448fc37b116f9f1fb686c#subdirectory=nucypher-core-python numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' @@ -97,18 +98,18 @@ pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' pexpect==4.8.0 pickleshare==0.7.5 pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' -platformdirs==3.5.0 ; python_version >= '3.7' +platformdirs==3.5.1 ; python_version >= '3.7' pluggy==1.0.0 ; python_version >= '3.6' -pre-commit==3.3.1 +pre-commit==3.3.2 prometheus-client==0.16.0 ; python_version >= '3.6' prompt-toolkit==3.0.38 ; python_full_version >= '3.7.0' -protobuf==4.23.0rc2 ; python_version >= '3.7' +protobuf==4.23.1 ; python_version >= '3.7' ptyprocess==0.7.0 pure-eval==0.2.2 py==1.11.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' py-cid==0.3.0 py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' -py-evm==0.6.1a2 +py-evm==0.7.0a2 py-geth==3.12.0 ; python_version >= '3' py-multibase==1.0.3 py-multicodec==0.2.1 @@ -118,12 +119,12 @@ pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2 pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.17 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' pydantic==1.10.7 ; python_version >= '3.7' pyethash==0.1.27 -pygithub==1.58.1 ; python_version >= '3.7' +pygithub==1.58.2 ; python_version >= '3.7' pygments==2.15.1 ; python_version >= '3.7' -pyjwt[crypto]==2.6.0 ; python_version >= '3.7' +pyjwt[crypto]==2.7.0 ; python_version >= '3.7' pynacl==1.5.0 ; python_version >= '3.6' pyopenssl==23.1.1 ; python_version >= '3.6' pysha3==1.0.2 @@ -136,20 +137,20 @@ python-baseconv==1.2.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' pytz==2023.3 pyyaml==6.0 ; python_version >= '3.6' -referencing==0.28.0 ; python_version >= '3.8' -regex==2023.5.4 ; python_version >= '3.6' -requests==2.29.0 ; python_version >= '3.7' +referencing==0.28.2 ; python_version >= '3.8' +regex==2023.5.5 ; python_version >= '3.6' +requests==2.30.0 ; python_version >= '3.7' rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.22.2 +sentry-sdk==1.21.1 service-identity==21.1.0 setuptools==67.7.2 ; python_version >= '3.7' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' snaptime==0.2.4 sortedcontainers==2.4.0 -sqlalchemy==2.0.12 ; python_version >= '3.7' +sqlalchemy==2.0.14 ; python_version >= '3.7' stack-data==0.6.2 tabulate==0.9.0 ; python_version >= '3.7' time-machine==2.9.0 ; python_version >= '3.7' @@ -163,15 +164,15 @@ twisted==22.10.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' typing-extensions==4.5.0 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' -tzlocal==5.0b2 ; python_version >= '3.7' -urllib3==1.26.15 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +tzlocal==5.0.1 ; python_version >= '3.7' +urllib3==2.0.2 ; python_version >= '3.7' varint==1.0.2 virtualenv==20.23.0 ; python_version >= '3.7' watchdog==2.3.1 ; python_version >= '3.6' wcwidth==0.2.6 -web3==6.2.0 ; python_full_version >= '3.7.2' -websockets==11.0.2 ; python_version >= '3.7' -werkzeug==2.3.3 ; python_version >= '3.8' +web3==6.4.0 ; python_full_version >= '3.7.2' +websockets==11.0.3 ; python_version >= '3.7' +werkzeug==2.3.4 ; python_version >= '3.8' wrapt==1.15.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' yarl==1.9.2 ; python_version >= '3.7' zipp==3.15.0 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index b5bb527..52a62c1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,11 +6,11 @@ async-timeout==4.0.2 ; python_version >= '3.6' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' bitarray==2.7.3 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2022.12.7 ; python_version >= '3.6' +certifi==2023.5.7 ; python_version >= '3.6' cffi==1.15.1 charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' click==8.1.3 ; python_version >= '3.7' @@ -28,10 +28,10 @@ eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.8.0b3 ; python_version < '4' and python_full_version >= '3.6.8' +eth-tester==0.9.0b1 ; python_version < '4' and python_full_version >= '3.6.8' eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ferveo==0.1.11 ; python_version >= '3.7' +ferveo==0.1.12 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' flask-cors==3.0.10 frozenlist==1.3.3 ; python_version >= '3.7' @@ -45,8 +45,8 @@ importlib-resources==5.12.0 ; python_version >= '3.7' incremental==22.10.0 itsdangerous==2.1.2 ; python_version >= '3.7' jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.18.0a6 ; python_version >= '3.8' -jsonschema-specifications==2023.3.6 ; python_version >= '3.8' +jsonschema==4.18.0a7 ; python_version >= '3.8' +jsonschema-specifications==2023.5.1 ; python_version >= '3.8' lru-dict==1.1.8 mako==1.2.4 ; python_version >= '3.7' markupsafe==2.1.2 ; python_version >= '3.7' @@ -57,29 +57,29 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/derekpierre/nucypher.git@bae870e97c9682d44cd58ddc36d68a89b2107d37 -nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@827b07e1e56a514ad81e11899dc0e1cfd1052001#subdirectory=nucypher-core-python +nucypher @ git+https://github.com/derekpierre/nucypher.git@4871cb01c82fc57ae801998b42fc4c304daf3e3e +nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@9cb792197dbb20d4997448fc37b116f9f1fb686c#subdirectory=nucypher-core-python packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' -protobuf==4.23.0rc2 ; python_version >= '3.7' +protobuf==4.23.1 ; python_version >= '3.7' py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' -py-evm==0.6.1a2 +py-evm==0.7.0a2 pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.17 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' pyethash==0.1.27 pynacl==1.5.0 ; python_version >= '3.6' pyopenssl==23.1.1 ; python_version >= '3.6' pysha3==1.0.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3 -referencing==0.28.0 ; python_version >= '3.8' -regex==2023.5.4 ; python_version >= '3.6' -requests==2.29.0 ; python_version >= '3.7' +referencing==0.28.2 ; python_version >= '3.8' +regex==2023.5.5 ; python_version >= '3.6' +requests==2.30.0 ; python_version >= '3.7' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' @@ -96,12 +96,12 @@ twisted==22.10.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' typing-extensions==4.5.0 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' -tzlocal==5.0b2 ; python_version >= '3.7' -urllib3==1.26.15 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +tzlocal==5.0.1 ; python_version >= '3.7' +urllib3==2.0.2 ; python_version >= '3.7' watchdog==2.3.1 ; python_version >= '3.6' -web3==6.2.0 ; python_full_version >= '3.7.2' -websockets==11.0.2 ; python_version >= '3.7' -werkzeug==2.3.3 ; python_version >= '3.8' +web3==6.4.0 ; python_full_version >= '3.7.2' +websockets==11.0.3 ; python_version >= '3.7' +werkzeug==2.3.4 ; python_version >= '3.8' yarl==1.9.2 ; python_version >= '3.7' zipp==3.15.0 ; python_version >= '3.7' zope.interface==6.1a2 ; python_version >= '3.7' diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index 0e4d0be..5a49d08 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -24,7 +24,7 @@ def test_cbd_decrypt( cbd_decrypt_schema = CBDDecrypt() decryption_request = ThresholdDecryptionRequest( - id=ritual_id, + ritual_id=ritual_id, variant=int(FerveoVariant.SIMPLE.value), ciphertext=bytes(ciphertext), conditions=Conditions(json.dumps(conditions)), diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/cbd/test_porter_cbd_python_interface.py index d36214b..740efc7 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -16,7 +16,7 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): ciphertext, expected_plaintext, conditions = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( - id=ritual_id, + ritual_id=ritual_id, variant=int(FerveoVariant.SIMPLE.value), ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index bf59720..1a56eb8 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -36,7 +36,7 @@ def test_cbd_decrypt( ciphertext, expected_plaintext, conditions = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( - id=ritual_id, + ritual_id=ritual_id, variant=int(FerveoVariant.SIMPLE.value), ciphertext=bytes(ciphertext), conditions=Conditions(json.dumps(conditions)), @@ -126,7 +126,7 @@ def test_cbd_decrypt( else: # invalid data request = ThresholdDecryptionRequest( - id=999, # rando invalid ritual id + ritual_id=999, # rando invalid ritual id variant=int(FerveoVariant.SIMPLE.value), ciphertext=bytes(ciphertext), conditions=Conditions(json.dumps(conditions)), diff --git a/tests/test_fields.py b/tests/test_fields.py index 0a922cc..4bdeb97 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -306,7 +306,7 @@ def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): ciphertext, expected_plaintext, conditions = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( - id=ritual_id, + ritual_id=ritual_id, variant=int(FerveoVariant.SIMPLE.value), ciphertext=bytes(ciphertext), conditions=Conditions(json.dumps(conditions)), @@ -330,7 +330,7 @@ def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): assert isinstance( deserialized_encrypted_request, EncryptedThresholdDecryptionRequest ) - assert deserialized_encrypted_request.id == ritual_id + assert deserialized_encrypted_request.ritual_id == ritual_id assert bytes(deserialized_encrypted_request) == bytes(encrypted_request) deserialized_request = deserialized_encrypted_request.decrypt( From ad9b28bbb8047c28f4ac3fe2245850e772efceac Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 23 May 2023 16:18:49 -0400 Subject: [PATCH 020/114] Update dependencies now that required changes from other repos are merged/released. --- Pipfile | 6 +- Pipfile.lock | 348 ++++++++++++++++++++++++------------------- dev-requirements.txt | 34 ++--- requirements.txt | 14 +- 4 files changed, 220 insertions(+), 182 deletions(-) diff --git a/Pipfile b/Pipfile index 6313e15..15cd159 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "e2e-dkg"} -nucypher-core = {git="https://github.com/derekpierre/nucypher-core.git", ref="e2e-dkg", subdirectory="nucypher-core-python"} # should be the same as nucypher +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} +nucypher-core = ">=0.8.0" # should be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "e2e-dkg", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "development", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index c15aef3..fb0eb69 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "b46f5c5aed8bebaad42e3632ce41a0ca715cb224ee0f4728b83c0c91f317c6e7" + "sha256": "04a96ae33c4c43a4da8f3be6680686e423765038c5bf1a6fb66ae042acbee48e" }, "pipfile-spec": 6, "requires": { @@ -621,11 +621,11 @@ }, "ferveo": { "hashes": [ - "sha256:5748e9a039ccf2a6e85fc9d6c986168dfdc5f1eead15b35c1a2992e737298d34", - "sha256:832dc2c1139cc3e052a07ad842ef671bf542dde20722426183b975967329002b" + "sha256:782e8f1745a7d38c7dcbd72936e54a1a8a9514a674095f4b60fb9e4f469b9637", + "sha256:84b4a45523f3c314d1d50e09a92d66b2b9e9d4f82f03534394123ce4e11bf8d7" ], "markers": "python_version >= '3.7'", - "version": "==0.1.12" + "version": "==0.1.13" }, "flask": { "hashes": [ @@ -1116,13 +1116,30 @@ "version": "==0.4.4" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "4871cb01c82fc57ae801998b42fc4c304daf3e3e" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "9305d4d76c22dee587cbc20d443c43b757e41485" }, "nucypher-core": { - "git": "https://github.com/derekpierre/nucypher-core.git", - "ref": "9cb792197dbb20d4997448fc37b116f9f1fb686c", - "subdirectory": "nucypher-core-python" + "hashes": [ + "sha256:28489ded2fd94fc1ac541c199624d7206ce83a9a275c40c913390977e3c18e08", + "sha256:2f85aebf29435f8359f6092cbfb7b0f754623e473107c7e2dd8a7c7c3881b2a4", + "sha256:37dade4937218fd47e7d8f3f8eabc41516f99b75b9fd09671bf4b74834fbdd2f", + "sha256:3bb1f181e5e176de74efc4cc8efa462383c8754433750fcb0a69d91b6c2e8460", + "sha256:6358879b2660602a5e1ab860d7853f0c04173392825bbec2beaec5f25040e382", + "sha256:689f9a3d996de90fd2758cd83ce75b60e5c1cfbaf3b45d36b05122eadaad962e", + "sha256:6c5bb09e1f609363edd4147a45f6d535cc29a317407ba209c9608308c27d5890", + "sha256:85411e3a33ee7c6680d88d14e221df122b2ae8c3d8a9dd388107fd4f9393431e", + "sha256:8a21482a84a7932707b9c74e3c34372559d50eb9a31f3bbd99d43bf5d3deb7c5", + "sha256:986e247a6023a859f7ad5712d8256adf385191817a45b04ea04e35d083fec02f", + "sha256:ac241d959c2f721a73ba60d0fc66ff813061baef6c6b928d199e2ed7fbcb6d26", + "sha256:be86a5d179e6873fd3e1c8917423853182cfd2b34ba54d0909494fb027a6836b", + "sha256:c7605e7a9a6dbb9577f80c59eedff576519aa5716dff4c9667a27fc116dc642e", + "sha256:caa5afb7459ccca0fe22e200204f3324373c08a68a0f7bd8f278bb628c5844b7", + "sha256:eab9c077d0c6479e56ad61e49096d1ccea22dd36d99789e19b162c7e7fd0aa39", + "sha256:f74faf208aecf1edcc83640ed2696a75315de5088fec51650c3e38d13f041587" + ], + "index": "pypi", + "version": "==0.8.0" }, "packaging": { "hashes": [ @@ -1374,11 +1391,11 @@ }, "referencing": { "hashes": [ - "sha256:7af30260a7a0ece4bc24f2687a152b571f7ae61e90ca5d08fad372fe44998585", - "sha256:a635d6caee584b0d0f91d1477d6fb93fe3bf53bec8fa1a1cad5a2888621d18dd" + "sha256:2502c83c224ec5a7e4a43031e6423b339284924c00ef69eb0044c61f74f37062", + "sha256:59c5608900564b192b8e3b3d66b976e85d6eb46108e1ef57ad8ec982f564ea30" ], "markers": "python_version >= '3.8'", - "version": "==0.28.2" + "version": "==0.28.3" }, "regex": { "hashes": [ @@ -1476,11 +1493,11 @@ }, "requests": { "hashes": [ - "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294", - "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4" + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], "markers": "python_version >= '3.7'", - "version": "==2.30.0" + "version": "==2.31.0" }, "rlp": { "hashes": [ @@ -1535,11 +1552,11 @@ }, "setuptools": { "hashes": [ - "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b", - "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990" + "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", + "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" ], "markers": "python_version >= '3.7'", - "version": "==67.7.2" + "version": "==67.8.0" }, "six": { "hashes": [ @@ -1663,11 +1680,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb", - "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4" + "sha256:6ad00b63f849b7dcc313b70b6b304ed67b2b2963b3098a33efe18056b1a9a223", + "sha256:ff6b238610c747e44c268aa4bb23c8c735d665a63726df3f9431ce707f2aa768" ], "markers": "python_version >= '3.7'", - "version": "==4.5.0" + "version": "==4.6.0" }, "tzdata": { "hashes": [ @@ -2052,8 +2069,12 @@ "version": "==1.3.1" }, "ape-solidity": { - "git": "https://github.com/derekpierre/ape-solidity.git", - "ref": "a98042d371bc8e181b52aaa821a738e94a637ab9" + "hashes": [ + "sha256:015f895bf338e921b632b40d18279e5969e85972125ae468f4ada00d900a2bf7", + "sha256:904f7f22d2f2dd5c3351c847072294115df47e38ce4939f680aff4ae86249fad" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.6.5" }, "appdirs": { "hashes": [ @@ -2706,11 +2727,11 @@ }, "ethpm-types": { "hashes": [ - "sha256:8a2a4a5a93cb5753152675fb582c48e26dbf450b2759a34b60fd3aca692f16d7", - "sha256:b7f7e9b56ee5f41c65180c7009b7ea42840636b3b04f8a9af3c8298b6a97c2e7" + "sha256:7f5637ab33e9c9895732354f632cee595cfc4ce3362bc95e9ac8a7a37cce1e9e", + "sha256:a27ceed908a24dfb5b01da51b01d90acb6f742468996f049c91b6b7c4a8c4fb2" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.5.0" + "version": "==0.5.1" }, "evm-trace": { "hashes": [ @@ -2737,11 +2758,11 @@ }, "ferveo": { "hashes": [ - "sha256:5748e9a039ccf2a6e85fc9d6c986168dfdc5f1eead15b35c1a2992e737298d34", - "sha256:832dc2c1139cc3e052a07ad842ef671bf542dde20722426183b975967329002b" + "sha256:782e8f1745a7d38c7dcbd72936e54a1a8a9514a674095f4b60fb9e4f469b9637", + "sha256:84b4a45523f3c314d1d50e09a92d66b2b9e9d4f82f03534394123ce4e11bf8d7" ], "markers": "python_version >= '3.7'", - "version": "==0.1.12" + "version": "==0.1.13" }, "filelock": { "hashes": [ @@ -3357,38 +3378,38 @@ }, "msgspec": { "hashes": [ - "sha256:05fc603508e0c8021249d3e531fa4bb72d167bdfa76d869d48f96a5b8f9b50bf", - "sha256:07ee1d1a15e3b319dcd7326470216928a7b58d47460b253577ccd0ab5dcf5c3c", - "sha256:0c75fd847709e30265f050375c408fec1c07797694162834aa86ab3b3cf055da", - "sha256:1b5b7c1b69416eab3ab2ad1c9593b749226b80555532292fae5fe9d154794089", - "sha256:20bf8018bff6bb85f5315ba6fd47b2f9373ab67e8bb59b0d7a7def22bbbf9f70", - "sha256:22713a1f618b4094c0268c6fbeef530397e5f3fa5292e4afd51caddad645843f", - "sha256:2b57b6869ef1717c0343465198e19284d1e6aa5f292af2726284e4dfedfedeef", - "sha256:346960762d648a6512b51f30be7c1267630e0bbc6fd65e8b23a3f54e5f562656", - "sha256:381c7a891adcc741e617956ba987912bc21864f9dd27b8cfb03bfb0aded5e1fd", - "sha256:415519f68cd3f1a224f87ed415459ac3b86e4f6e82815a036e4238c62006f696", - "sha256:42c2f9fe0b58dc6f2b15720490c67554b5ba0007d3ee94340ca4448bda917287", - "sha256:490c88d76d573cce16653434ace3d9a8a8675ef6e350f114752fe60e69b6a232", - "sha256:4d3cde786110a92f764666b9f963b4389d5d1798bf1aca2422a59931d8d1f694", - "sha256:550b359c49562d52849103b87b4f7381fbc0adf958afa316599befb9a3e3379e", - "sha256:8a46a9818570362d4022161684cdb97ecd102953043059ee4902862940f48f8d", - "sha256:8b7e0354c37b742e1c02fe0cd3ced97db516c8da62ac5a408609e9f5858aaf24", - "sha256:8cee590163788fce21c5998d09198ef08ec06c1ca68ef50f2d5ed9e54d308538", - "sha256:9178a7550a5516295c682e6e5c143782503719b4c816496349a4a0f1b62397ef", - "sha256:9d61de44b248feef82c8979a1e9912c923527cfb1d01c93b7bb5d6ca93ed09d6", - "sha256:beb3789519253b22338cca48053ba5ac8b442633e3af8f58e264d776a98ff6d0", - "sha256:bf3ab3f8d5752dbe68babc77d21b42575b916793515442e3890aef680e212154", - "sha256:c4c7e0abfac3a67f3e1d51e1d1313fd4205528e17663ff264b1945c3370b18bd", - "sha256:cc253e4ad51d360590358ab2cee5a6139f04ad994e0fcbff52e7f61fca475c3e", - "sha256:cd198ed4445914ebc25a24b6cc6020902bb6b888fc9b39500ef4500841b1b437", - "sha256:d760ff747165d84965791bfcd14588f61f111708036d80f1980387e3760035e7", - "sha256:ddef8fdc06676dd1bec9fe67b3128f84079469ee6424384cbb29a90c9033b559", - "sha256:f77cc91d3cb8a7bccfba28fe4aec537178384509bfce222f8eca287b7e5d0214", - "sha256:ff80bd40469915cc61686086a2503b901e17040f8a191099d8ccaa45dc72df8c", - "sha256:fffa7ec85f27577f7f5471b390bf902d58ccd89b3612cf40bfb92f4ba75e6c95" + "sha256:09aad00f25fc8f37bd118554a46c448f028bbf67fb048cd3f09671f634c5315c", + "sha256:0af2ae0f398ffe1b88fd1540d64bd23b490434d632305700aa7e54d90e5fb618", + "sha256:0c0c4706ee200b61b510f76f505e03730abc6fbdd4336f6fdc99538798df7ddc", + "sha256:1016f241013f5569716bb7ae28897bc2f7d72ea1f0120673afa8ceb9823f9fd6", + "sha256:154a790227c32ab66671df48af991b288a97456cc488d21b1eea63f390eae617", + "sha256:18a3870c6348dee8a2f315a7c95219707123550e4fa648b7a2ec9f327e96e46c", + "sha256:1d8104ee7b6babba778c9b73771964189ab0bf95f3fe513e26425f9b4ff58d10", + "sha256:1d8c6ef247ca5178f161288a46654b88849975e4c24adff9ad7c778f77b0f2e1", + "sha256:217fa8a0eba122401c3fae3d07e1444556447ba3b9d65fc6647421b35430f2e2", + "sha256:2c67ed9bec9da6fc42255f6351fc423447ee535f0c9834b678bb1e049ab37e69", + "sha256:3df96499ec70b714896d9941ae0bd8d1ff267abb39f85f9984e6e7d4e5176863", + "sha256:46e275ad73531b0a8d8c4b36c2f1fd7c286b89545b806e10da8443c8f4b258ca", + "sha256:50ebfe068e6330afcb32bbc6863984175b99c1988a7ede5e8f6f898f5270e815", + "sha256:51b11b0da147348500c54a7be4f804d63accce9c74410e15e994f6ec69177bdc", + "sha256:5f01e7388de0bb2d30ac5dfdce9a63f8643d1bc9657e24efb1f7e2ffdf70732b", + "sha256:5fc1971fb06ba4a282a7dd5c7dab95d53c7785203d1f9100a0b8ade041605714", + "sha256:6652d4152091266150ba238ba674db59a2349c0b3548401c9881f3702d6ee6fc", + "sha256:7afb2719019c8e304c7abc6c30d3f0516f43ace563a0b223805de19ae500cbab", + "sha256:80d753014680dfdf4a8f8a133f6e6a64e4a8f16f1722652512277a360ee9e66c", + "sha256:8d288240680f3e0153a735f411a22ae16e47498d501b4dfa0434a1f888173b26", + "sha256:9074e743f538297a30ee043b5cd31c6fcd4d99a1995f619c01137d83ec0e5963", + "sha256:9e95dec734d2b8efaf8c9a3bbb6e162336c9b3ffc58a2b34001c05a0f6e8e581", + "sha256:a515af7c8b25e7f38475f91d7b733c711d128dbe7febb9fa3621d8386893cae6", + "sha256:ba8744d0f51f5a169c28545e98087c10039d7ee93c92f97209f7ec69a926470a", + "sha256:cd1ae653ad3e3914dafa11156243e92a594e2c916a19dbbcf72102a1bef812c2", + "sha256:d365daaa42e8a42691046d0eead11ffc26ff1e72b0eb291488ddd2cd5e642513", + "sha256:d4edb271657402cb31935d573b176f088fa2b77abf5aa8c4e2dceaf113bf5970", + "sha256:e0b6ef1a716f9232ca9d9934ef06bd0fd3dc2ace5df7b96fa7971d1d72ec15cc", + "sha256:ef239496d2d75d94ac89a54016e92c94d7486d19a4ab9dca7f11f8a837cccdb3" ], "markers": "python_version >= '3.8'", - "version": "==0.15.0" + "version": "==0.15.1" }, "multidict": { "hashes": [ @@ -3484,13 +3505,30 @@ "version": "==1.8.0" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "4871cb01c82fc57ae801998b42fc4c304daf3e3e" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "9305d4d76c22dee587cbc20d443c43b757e41485" }, "nucypher-core": { - "git": "https://github.com/derekpierre/nucypher-core.git", - "ref": "9cb792197dbb20d4997448fc37b116f9f1fb686c", - "subdirectory": "nucypher-core-python" + "hashes": [ + "sha256:28489ded2fd94fc1ac541c199624d7206ce83a9a275c40c913390977e3c18e08", + "sha256:2f85aebf29435f8359f6092cbfb7b0f754623e473107c7e2dd8a7c7c3881b2a4", + "sha256:37dade4937218fd47e7d8f3f8eabc41516f99b75b9fd09671bf4b74834fbdd2f", + "sha256:3bb1f181e5e176de74efc4cc8efa462383c8754433750fcb0a69d91b6c2e8460", + "sha256:6358879b2660602a5e1ab860d7853f0c04173392825bbec2beaec5f25040e382", + "sha256:689f9a3d996de90fd2758cd83ce75b60e5c1cfbaf3b45d36b05122eadaad962e", + "sha256:6c5bb09e1f609363edd4147a45f6d535cc29a317407ba209c9608308c27d5890", + "sha256:85411e3a33ee7c6680d88d14e221df122b2ae8c3d8a9dd388107fd4f9393431e", + "sha256:8a21482a84a7932707b9c74e3c34372559d50eb9a31f3bbd99d43bf5d3deb7c5", + "sha256:986e247a6023a859f7ad5712d8256adf385191817a45b04ea04e35d083fec02f", + "sha256:ac241d959c2f721a73ba60d0fc66ff813061baef6c6b928d199e2ed7fbcb6d26", + "sha256:be86a5d179e6873fd3e1c8917423853182cfd2b34ba54d0909494fb027a6836b", + "sha256:c7605e7a9a6dbb9577f80c59eedff576519aa5716dff4c9667a27fc116dc642e", + "sha256:caa5afb7459ccca0fe22e200204f3324373c08a68a0f7bd8f278bb628c5844b7", + "sha256:eab9c077d0c6479e56ad61e49096d1ccea22dd36d99789e19b162c7e7fd0aa39", + "sha256:f74faf208aecf1edcc83640ed2696a75315de5088fec51650c3e38d13f041587" + ], + "index": "pypi", + "version": "==0.8.0" }, "numpy": { "hashes": [ @@ -3866,45 +3904,45 @@ }, "pydantic": { "hashes": [ - "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e", - "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6", - "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd", - "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca", - "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b", - "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a", - "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245", - "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d", - "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee", - "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1", - "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3", - "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d", - "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5", - "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914", - "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd", - "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1", - "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e", - "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e", - "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a", - "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd", - "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f", - "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209", - "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d", - "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a", - "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143", - "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918", - "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52", - "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e", - "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f", - "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e", - "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb", - "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe", - "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe", - "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d", - "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209", - "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af" + "sha256:052d8654cb65174d6f9490cc9b9a200083a82cf5c3c5d3985db765757eb3b375", + "sha256:0c6fafa0965b539d7aab0a673a046466d23b86e4b0e8019d25fd53f4df62c277", + "sha256:1243d28e9b05003a89d72e7915fdb26ffd1d39bdd39b00b7dbe4afae4b557f9d", + "sha256:12f7b0bf8553e310e530e9f3a2f5734c68699f42218bf3568ef49cd9b0e44df4", + "sha256:1410275520dfa70effadf4c21811d755e7ef9bb1f1d077a21958153a92c8d9ca", + "sha256:16f8c3e33af1e9bb16c7a91fc7d5fa9fe27298e9f299cff6cb744d89d573d62c", + "sha256:17aef11cc1b997f9d574b91909fed40761e13fac438d72b81f902226a69dac01", + "sha256:191ba419b605f897ede9892f6c56fb182f40a15d309ef0142212200a10af4c18", + "sha256:1952526ba40b220b912cdc43c1c32bcf4a58e3f192fa313ee665916b26befb68", + "sha256:1ced8375969673929809d7f36ad322934c35de4af3b5e5b09ec967c21f9f7887", + "sha256:2e4148e635994d57d834be1182a44bdb07dd867fa3c2d1b37002000646cc5459", + "sha256:34d327c81e68a1ecb52fe9c8d50c8a9b3e90d3c8ad991bfc8f953fb477d42fb4", + "sha256:35db5301b82e8661fa9c505c800d0990bc14e9f36f98932bb1d248c0ac5cada5", + "sha256:3e59417ba8a17265e632af99cc5f35ec309de5980c440c255ab1ca3ae96a3e0e", + "sha256:42aa0c4b5c3025483240a25b09f3c09a189481ddda2ea3a831a9d25f444e03c1", + "sha256:666bdf6066bf6dbc107b30d034615d2627e2121506c555f73f90b54a463d1f33", + "sha256:66a703d1983c675a6e0fed8953b0971c44dba48a929a2000a493c3772eb61a5a", + "sha256:6a82d6cda82258efca32b40040228ecf43a548671cb174a1e81477195ed3ed56", + "sha256:6f2e754d5566f050954727c77f094e01793bcb5725b663bf628fa6743a5a9108", + "sha256:7456eb22ed9aaa24ff3e7b4757da20d9e5ce2a81018c1b3ebd81a0b88a18f3b2", + "sha256:7b1f6cb446470b7ddf86c2e57cd119a24959af2b01e552f60705910663af09a4", + "sha256:7d5b8641c24886d764a74ec541d2fc2c7fb19f6da2a4001e6d580ba4a38f7878", + "sha256:84d80219c3f8d4cad44575e18404099c76851bc924ce5ab1c4c8bb5e2a2227d0", + "sha256:88f195f582851e8db960b4a94c3e3ad25692c1c1539e2552f3df7a9e972ef60e", + "sha256:93e6bcfccbd831894a6a434b0aeb1947f9e70b7468f274154d03d71fabb1d7c6", + "sha256:93e766b4a8226e0708ef243e843105bf124e21331694367f95f4e3b4a92bbb3f", + "sha256:ab523c31e22943713d80d8d342d23b6f6ac4b792a1e54064a8d0cf78fd64e800", + "sha256:bb14388ec45a7a0dc429e87def6396f9e73c8c77818c927b6a60706603d5f2ea", + "sha256:c0ab53b609c11dfc0c060d94335993cc2b95b2150e25583bec37a49b2d6c6c3f", + "sha256:c33b60054b2136aef8cf190cd4c52a3daa20b2263917c49adad20eaf381e823b", + "sha256:ceb6a23bf1ba4b837d0cfe378329ad3f351b5897c8d4914ce95b85fba96da5a1", + "sha256:d532bf00f381bd6bc62cabc7d1372096b75a33bc197a312b03f5838b4fb84edd", + "sha256:df7800cb1984d8f6e249351139667a8c50a379009271ee6236138a22a0c0f319", + "sha256:e82d4566fcd527eae8b244fa952d99f2ca3172b7e97add0b43e2d97ee77f81ab", + "sha256:f90c1e29f447557e9e26afb1c4dbf8768a10cc676e3781b6a577841ade126b85", + "sha256:f9613fadad06b4f3bc5db2653ce2f22e0de84a7c6c293909b48f6ed37b83c61f" ], "markers": "python_version >= '3.7'", - "version": "==1.10.7" + "version": "==1.10.8" }, "pyethash": { "hashes": [ @@ -4098,11 +4136,11 @@ }, "referencing": { "hashes": [ - "sha256:7af30260a7a0ece4bc24f2687a152b571f7ae61e90ca5d08fad372fe44998585", - "sha256:a635d6caee584b0d0f91d1477d6fb93fe3bf53bec8fa1a1cad5a2888621d18dd" + "sha256:2502c83c224ec5a7e4a43031e6423b339284924c00ef69eb0044c61f74f37062", + "sha256:59c5608900564b192b8e3b3d66b976e85d6eb46108e1ef57ad8ec982f564ea30" ], "markers": "python_version >= '3.8'", - "version": "==0.28.2" + "version": "==0.28.3" }, "regex": { "hashes": [ @@ -4200,11 +4238,11 @@ }, "requests": { "hashes": [ - "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294", - "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4" + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], "markers": "python_version >= '3.7'", - "version": "==2.30.0" + "version": "==2.31.0" }, "rich": { "hashes": [ @@ -4274,11 +4312,11 @@ }, "setuptools": { "hashes": [ - "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b", - "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990" + "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", + "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" ], "markers": "python_version >= '3.7'", - "version": "==67.7.2" + "version": "==67.8.0" }, "six": { "hashes": [ @@ -4303,50 +4341,50 @@ }, "sqlalchemy": { "hashes": [ - "sha256:06f7e29e542c6f2dc751d4e9a8bdee1945226c0d501f8ee008baf5175604fb90", - "sha256:1ca00a7aca9636675a05b8ef99e09b9a6a680dfc346b5fe04e6ecc957a947501", - "sha256:21333b7ce04c3a57a7b17e19cd8a2ebeae4d58e3c97e57b0d6a2c626d7cddd3b", - "sha256:243e580b477f0552424f9f9d281e5b37aa8be03e2261cfe992c60acd16fe218c", - "sha256:252c49f86312e900591fb795d495a9e1b4199d0a799b55a6a5f46969068895c0", - "sha256:26025ba87797ac616b4823030adb2832e825ad8cdb4ac688e19ee93be69a42b6", - "sha256:281f0862483d89f169584f6b69dde1130d70612f4414c6a6167f690c7ac2a871", - "sha256:29935e0f3d91b7a97b9e635f3cf01d88cc7a0ace2e4686ec6cdbdfa04b0a2839", - "sha256:2c50b9d78362654d193ec03f4e524a1490abe9ac9d1001df60dd1e00d01d3d69", - "sha256:319184b851c0db141138a0a062fdd86b9eb5be4251a7d760d6465b92dd6c4e1e", - "sha256:433467a5c4d0cf5f54f374574fb8a2d12c7f806c9a924307e1b816bd79f9ed3f", - "sha256:465cf63f3a739f876ae0128e1308586f77516b5a574419614757d59682eb2feb", - "sha256:49261a8f4bc0b41050d7719b93f1c93a8e19594aeeb252df93d61232f70c54d4", - "sha256:4dceffe226116aa16040ae36529fb1159f12c021d93de8de9f1261753a2ba2aa", - "sha256:52169b1452bf6609c1b5fe95fba4d376f6e4551e7d73a5fd9216afbaf61ceed9", - "sha256:5364901aea8b5562a01d583c186bb5448913a8250f53617b5f592ca51f5c5e8a", - "sha256:56b2b4bbfb5bf6c40d84109665a9f0c1c26b6f6280f1749ee5ddf3b82052386a", - "sha256:7cb74468e646497daa743ab2344f7bb5e9fe97774654fa84879b38f8065ceb29", - "sha256:7e7527a1b16587c9b4660241ab5df334f693381ec47682b54293993aca8acfa9", - "sha256:7f02243efca602601bf5646ee627512b36e64068a3c88212e571b609bc7e128e", - "sha256:82eb21e6aab4de898b6be89f5426454e4b5eee49792a44da87e602da89bb31dc", - "sha256:888317fbebefbe87c933551f30864acd26366fad270d9be9dbb2ead32e446d83", - "sha256:8e1c6ed1e82c33917d7724ae2fe8e32715cb25b31ed467db2f507b21fd63cdb1", - "sha256:a824b15ef9596133d02364775c47ce173ea379179cc367e61d9d591e95843fdb", - "sha256:ac104bb4390fdbf743f0de01cda40740b7da32f62304e89efb4e3300587636c6", - "sha256:afed9029db08e16187c7e2dcdfed99e9041499bdc4392589624b05d0a17b8c41", - "sha256:b3c7201fed64bfd83e90472ca4addce3be5dbaaf0cd427f61b1fb5425d89e714", - "sha256:bd213137ef398aed36e45c14d49057a3471f7200c07484ea5bbd89a91f488922", - "sha256:bec31cb4dcd924ff53b3bfdec1b565ccda062f0ebd1a325a247a1550782057de", - "sha256:c1b8ea166cf63964dc11477f905869cc59b404f71a8e90033bd50843150584e0", - "sha256:c38bc0abfd93989afceeb79abb05f20ef0d56ebfd5eba5738e207ef50c1efd56", - "sha256:ce24180cf34ecd47a9a91d535b429deec14dc3d0cfa54d04979a3ebc60b1887d", - "sha256:cf0b16edbebcd200c93e01cf0031b2af44d6ba374a8f8f7b120bc3db1df99cb7", - "sha256:d49ce7ac0713c820b5e2d6863ef87c22a8e1c950ce2778c69eb1327fc4b80dd2", - "sha256:d5c19b4a78126a263ecf01fcc1671344b5514392906cd46b70be74b73e543264", - "sha256:dabed709bd639e38c6b7f4ffc9a187d251dfc7636b5bc366408f5eadb631a558", - "sha256:e402263eca51ba18f3f8b06314a37b7a458496a65a515f5a25c7895423826a93", - "sha256:e422bec95850df641b05f2bd605d9995e01a66d55fa9fff6c79387dbdd8915af", - "sha256:ec03e57ab555153195283017d804e0469b95bb012ecb19f6e2f0b22a3e60bdca", - "sha256:f60461645af46e92bea54db9f3175c55bd9bceba02b133b77f700d7d9de57ead", - "sha256:f851d8e2aaa0b0d07b89b7338441954e4d16d0eed5d140981e25cb5cfa259b3b" + "sha256:1a0754c2d9f0c7982bec0a31138e495ed1f6b8435d7e677c45be60ec18370acf", + "sha256:1d6320a1d175447dce63618ec997a53836de48ed3b44bbe952f0b4b399b19941", + "sha256:1e885dacb167077df15af2f9ccdacbd7f5dd0d538a6d74b94074f2cefc7bb589", + "sha256:201a99f922ac8c780b3929128fbd9df901418877c70e160e19adb05665e51c31", + "sha256:21c89044fc48a25c2184eba332edeffbbf9367913bb065cd31538235d828f06f", + "sha256:256b2b9660e51ad7055a9835b12717416cf7288afcf465107413917b6bb2316f", + "sha256:2e940a8659ef870ae10e0d9e2a6d5aaddf0ff6e91f7d0d7732afc9e8c4be9bbc", + "sha256:3fb5d09f1d51480f711b69fe28ad42e4f8b08600a85ab2473baee669e1257800", + "sha256:435f6807fa6a0597d84741470f19db204a7d34625ea121abd63e8d95f673f0c4", + "sha256:4670ce853cb25f72115a1bbe366ae13cf3f28fc5c87222df14f8d3d55d51816e", + "sha256:4a75fdb9a84072521bb2ebd31eefe1165d4dccea3039dda701a864f4b5daa17f", + "sha256:4d61731a35eddb0f667774fe15e5a4831e444d066081d1e809e1b8a0e3f97cae", + "sha256:51b19887c96d405599880da6a7cbdf8545a7e78ec5683e46a43bac8885e32d0f", + "sha256:536c86ec81ca89291d533ff41a3a05f9e4e88e01906dcee0751fc7082f3e8d6c", + "sha256:55ec62ddc0200b4fee94d11abbec7aa25948d5d21cb8df8807f4bdd3c51ba44b", + "sha256:5cc48a7fda2b5c5b8860494d6c575db3a101a68416492105fed6591dc8a2728a", + "sha256:670ecf74ee2e70b917028a06446ad26ff9b1195e84b09c3139c215123d57dc30", + "sha256:6a3f8020e013e9b3b7941dcf20b0fc8f7429daaf7158760846731cbd8caa5e45", + "sha256:6b42913a0259267e9ee335da0c36498077799e59c5e332d506e72b4f32de781d", + "sha256:6f5784dfb2d45c19cde03c45c04a54bf47428610106197ed6e6fa79f33bc63d3", + "sha256:6f80a9c9a9af0e4bd5080cc0955ce70274c28e9b931ad7e0fb07021afcd32af6", + "sha256:78303719c6f72af97814b0072ad18bee72e70adca8d95cf8fecd59c5e1ddb040", + "sha256:788d1772fb8dcd12091ca82809eef504ce0f2c423e45284bc351b872966ff554", + "sha256:79bfe728219239bdc493950ea4a4d15b02138ecb304771f9024d0d6f5f4e3706", + "sha256:810199d1c5b43603a9e815ae9487aef3ab1ade7ed9c0c485e12519358929fbfe", + "sha256:88ab245ed2c96265441ed2818977be28c840cfa5204ba167425d6c26eb67b7e7", + "sha256:933d30273861fe61f014ce2a7e3c364915f5efe9ed250ec1066ca6ea5942c0bd", + "sha256:994a75b197662e0608b6a76935d7c345f7fd874eac0b7093d561033db61b0e8c", + "sha256:9b31ebde27575b3b0708673ec14f0c305c4564d995b545148ab7ac0f4d9b847a", + "sha256:9d810b4aacd5ef4e293aa4ea01f19fca53999e9edcfc4a8ef1146238b30bdc28", + "sha256:ae1d8deb391ab39cc8f0d5844e588a115ae3717e607d91482023917f920f777f", + "sha256:bc5c2b0da46c26c5f73f700834f871d0723e1e882641932468d56833bab09775", + "sha256:cea7c4a3dfc2ca61f88a2b1ddd6b0bfbd116c9b1a361b3b66fd826034b833142", + "sha256:d14282bf5b4de87f922db3c70858953fd081ef4f05dba6cca3dd705daffe1cc9", + "sha256:d6b17cb86908e7f88be14007d6afe7d2ab11966e373044137f96a6a4d83eb21c", + "sha256:da7381a883aee20b7d2ffda17d909b38134b6a625920e65239a1c681881df800", + "sha256:db269f67ed17b07e80aaa8fba1f650c0d84aa0bdd9d5352e4ac38d5bf47ac568", + "sha256:df25052b92bd514357a9b370d74f240db890ea79aaa428fb893520e10ee5bc18", + "sha256:e17fdcb8971e77c439113642ca8861f9465e21fc693bd3916654ceef3ac26883", + "sha256:f6fd3c88ea4b170d13527e93be1945e69facd917661d3725a63470eb683fbffe", + "sha256:f7f994a53c0e6b44a2966fd6bfc53e37d34b7dca34e75b6be295de6db598255e" ], "markers": "python_version >= '3.7'", - "version": "==2.0.14" + "version": "==2.0.15" }, "stack-data": { "hashes": [ @@ -4488,11 +4526,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb", - "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4" + "sha256:6ad00b63f849b7dcc313b70b6b304ed67b2b2963b3098a33efe18056b1a9a223", + "sha256:ff6b238610c747e44c268aa4bb23c8c735d665a63726df3f9431ce707f2aa768" ], "markers": "python_version >= '3.7'", - "version": "==4.5.0" + "version": "==4.6.0" }, "tzdata": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index a7187f4..d5e8b95 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,7 +1,7 @@ -i https://pypi.python.org/simple aiohttp==3.8.2 ; python_version >= '3.6' aiosignal==1.3.1 ; python_version >= '3.7' -ape-solidity @ git+https://github.com/derekpierre/ape-solidity.git@a98042d371bc8e181b52aaa821a738e94a637ab9 +ape-solidity==0.6.5 ; python_version >= '3.8' and python_version < '4' appdirs==1.4.4 appnope==0.1.3 asttokens==2.2.1 @@ -42,14 +42,14 @@ eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.0b1 ; python_full_version >= '3.6.8' and python_version < '4' -eth-typing==3.3.0 ; python_full_version >= '3.7.2' and python_version < '4' +eth-tester==0.9.0b1 ; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ethpm-types==0.5.0 ; python_version >= '3.8' and python_version < '4' +ethpm-types==0.5.1 ; python_version >= '3.8' and python_version < '4' evm-trace==0.1.0a20 ; python_version >= '3.8' and python_version < '4' exceptiongroup==1.1.1 ; python_version >= '3.7' executing==1.2.0 -ferveo==0.1.12 ; python_version >= '3.7' +ferveo==0.1.13 ; python_version >= '3.7' filelock==3.12.0 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' frozenlist==1.3.3 ; python_version >= '3.7' @@ -83,12 +83,12 @@ mnemonic==0.20 ; python_version >= '3.5' morphys==1.0 msgpack==1.0.5 msgpack-python==0.5.6 -msgspec==0.15.0 ; python_version >= '3.8' +msgspec==0.15.1 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/derekpierre/nucypher.git@4871cb01c82fc57ae801998b42fc4c304daf3e3e -nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@9cb792197dbb20d4997448fc37b116f9f1fb686c#subdirectory=nucypher-core-python +nucypher @ git+https://github.com/nucypher/nucypher.git@9305d4d76c22dee587cbc20d443c43b757e41485 +nucypher-core==0.8.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' @@ -120,7 +120,7 @@ pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, pychalk==2.0.1 pycparser==2.21 pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -pydantic==1.10.7 ; python_version >= '3.7' +pydantic==1.10.8 ; python_version >= '3.7' pyethash==0.1.27 pygithub==1.58.2 ; python_version >= '3.7' pygments==2.15.1 ; python_version >= '3.7' @@ -134,27 +134,27 @@ pytest-mock==3.10.0 pytest-timeout==2.1.0 ; python_version >= '3.6' pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-baseconv==1.2.2 -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3 pyyaml==6.0 ; python_version >= '3.6' -referencing==0.28.2 ; python_version >= '3.8' +referencing==0.28.3 ; python_version >= '3.8' regex==2023.5.5 ; python_version >= '3.6' -requests==2.30.0 ; python_version >= '3.7' +requests==2.31.0 ; python_version >= '3.7' rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' sentry-sdk==1.21.1 service-identity==21.1.0 -setuptools==67.7.2 ; python_version >= '3.7' -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' +setuptools==67.8.0 ; python_version >= '3.7' +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 -sqlalchemy==2.0.14 ; python_version >= '3.7' +sqlalchemy==2.0.15 ; python_version >= '3.7' stack-data==0.6.2 tabulate==0.9.0 ; python_version >= '3.7' time-machine==2.9.0 ; python_version >= '3.7' -toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' +toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3' tomli==2.0.1 ; python_version >= '3.7' toolz==0.12.0 ; python_version >= '3.5' tqdm==4.65.0 ; python_version >= '3.7' @@ -162,7 +162,7 @@ traitlets==5.9.0 ; python_version >= '3.7' trie==2.1.0 ; python_version >= '3.7' and python_version < '4' twisted==22.10.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.5.0 ; python_version >= '3.7' +typing-extensions==4.6.0 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' tzlocal==5.0.1 ; python_version >= '3.7' urllib3==2.0.2 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 52a62c1..cb089bb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,7 +31,7 @@ eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' eth-tester==0.9.0b1 ; python_version < '4' and python_full_version >= '3.6.8' eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ferveo==0.1.12 ; python_version >= '3.7' +ferveo==0.1.13 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' flask-cors==3.0.10 frozenlist==1.3.3 ; python_version >= '3.7' @@ -57,8 +57,8 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/derekpierre/nucypher.git@4871cb01c82fc57ae801998b42fc4c304daf3e3e -nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@9cb792197dbb20d4997448fc37b116f9f1fb686c#subdirectory=nucypher-core-python +nucypher @ git+https://github.com/nucypher/nucypher.git@9305d4d76c22dee587cbc20d443c43b757e41485 +nucypher-core==0.8.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' @@ -77,14 +77,14 @@ pyopenssl==23.1.1 ; python_version >= '3.6' pysha3==1.0.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3 -referencing==0.28.2 ; python_version >= '3.8' +referencing==0.28.3 ; python_version >= '3.8' regex==2023.5.5 ; python_version >= '3.6' -requests==2.30.0 ; python_version >= '3.7' +requests==2.31.0 ; python_version >= '3.7' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' service-identity==21.1.0 -setuptools==67.7.2 ; python_version >= '3.7' +setuptools==67.8.0 ; python_version >= '3.7' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 @@ -94,7 +94,7 @@ toolz==0.12.0 ; python_version >= '3.5' trie==2.1.0 ; python_version >= '3.7' and python_version < '4' twisted==22.10.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.5.0 ; python_version >= '3.7' +typing-extensions==4.6.0 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' tzlocal==5.0.1 ; python_version >= '3.7' urllib3==2.0.2 ; python_version >= '3.7' From c19046fe7cc6556853098067764605c3712f2616 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 31 May 2023 09:18:01 -0400 Subject: [PATCH 021/114] Incorporate latest changes to use session key objects from `nucypher-core` that use Curve 25519, ferveo module in `nucypher-core`, and changes to CoordinatorAgent. --- Pipfile | 2 +- dev-requirements.txt | 5 +- requirements.txt | 5 +- tests/cbd/test_cbd_specifications.py | 25 +++++---- tests/cbd/test_porter_cbd_python_interface.py | 38 +++++++------ tests/cbd/test_porter_cbd_web_interface.py | 54 +++++++++++-------- tests/conftest.py | 19 +++---- tests/test_fields.py | 47 +++++++++------- 8 files changed, 115 insertions(+), 80 deletions(-) diff --git a/Pipfile b/Pipfile index 15cd159..fd3b7cc 100644 --- a/Pipfile +++ b/Pipfile @@ -8,7 +8,7 @@ python_version = "3" [packages] nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} -nucypher-core = ">=0.8.0" # should be the same as nucypher +nucypher-core = {git = "https://github.com/nucypher/nucypher.git", ref = "main"} # should be the same as nucypher flask-cors = "*" [dev-packages] diff --git a/dev-requirements.txt b/dev-requirements.txt index d5e8b95..e4e1242 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -49,7 +49,6 @@ ethpm-types==0.5.1 ; python_version >= '3.8' and python_version < '4' evm-trace==0.1.0a20 ; python_version >= '3.8' and python_version < '4' exceptiongroup==1.1.1 ; python_version >= '3.7' executing==1.2.0 -ferveo==0.1.13 ; python_version >= '3.7' filelock==3.12.0 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' frozenlist==1.3.3 ; python_version >= '3.7' @@ -87,8 +86,8 @@ msgspec==0.15.1 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/nucypher/nucypher.git@9305d4d76c22dee587cbc20d443c43b757e41485 -nucypher-core==0.8.0 +nucypher @ git+https://github.com/derekpierre/nucypher.git@018b78b53fc013412c6fc8088bab05d8836f2dd2 +nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@253dfde60e6106ceeda696b86cb2f605ce3cd557#subdirectory=nucypher-core-python numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' diff --git a/requirements.txt b/requirements.txt index cb089bb..a67051a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,7 +31,6 @@ eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' eth-tester==0.9.0b1 ; python_version < '4' and python_full_version >= '3.6.8' eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ferveo==0.1.13 ; python_version >= '3.7' flask==2.2.5 ; python_version >= '3.7' flask-cors==3.0.10 frozenlist==1.3.3 ; python_version >= '3.7' @@ -57,8 +56,8 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/nucypher/nucypher.git@9305d4d76c22dee587cbc20d443c43b757e41485 -nucypher-core==0.8.0 +nucypher @ git+https://github.com/derekpierre/nucypher.git@018b78b53fc013412c6fc8088bab05d8836f2dd2 +nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@253dfde60e6106ceeda696b86cb2f605ce3cd557#subdirectory=nucypher-core-python packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index 5a49d08..ce4ef1b 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -3,8 +3,7 @@ import pytest from eth_utils import to_checksum_address from nucypher.crypto.ferveo.dkg import FerveoVariant -from nucypher_core import Conditions, ThresholdDecryptionRequest -from nucypher_core.umbral import SecretKey +from nucypher_core import Conditions, SessionStaticSecret, ThresholdDecryptionRequest from porter.fields.cbd import ( EncryptedThresholdDecryptionRequestField, @@ -26,21 +25,24 @@ def test_cbd_decrypt( decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, variant=int(FerveoVariant.SIMPLE.value), - ciphertext=bytes(ciphertext), + ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) - response_sk = SecretKey.random() + requester_secret_key = SessionStaticSecret.random() encrypted_request_field = EncryptedThresholdDecryptionRequestField() encrypted_decryption_requests = {} for ursula in cohort: - request_encrypting_key = ( + ursula_decryption_request_static_key = ( ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) ) + shared_secret = requester_secret_key.derive_shared_secret( + ursula_decryption_request_static_key + ) encrypted_decryption_request = decryption_request.encrypt( - request_encrypting_key=request_encrypting_key, - response_encrypting_key=response_sk.public_key(), + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), ) encrypted_decryption_requests[ ursula.checksum_address @@ -112,12 +114,15 @@ def test_cbd_decrypt( # actual outcomes encrypted_decryption_requests = {} for ursula in cohort: - request_encrypting_key = ( + ursula_decryption_request_static_key = ( ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) ) + shared_secret = requester_secret_key.derive_shared_secret( + ursula_decryption_request_static_key + ) encrypted_decryption_request = decryption_request.encrypt( - request_encrypting_key=request_encrypting_key, - response_encrypting_key=response_sk.public_key(), + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), ) encrypted_decryption_requests[ ursula.checksum_address diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/cbd/test_porter_cbd_python_interface.py index 740efc7..e7776ec 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -1,14 +1,13 @@ import json -from ferveo_py import ( +from nucypher.crypto.ferveo.dkg import FerveoVariant +from nucypher_core import Conditions, SessionStaticSecret, ThresholdDecryptionRequest +from nucypher_core.ferveo import ( Ciphertext, DecryptionShareSimple, combine_decryption_shares_simple, decrypt_with_shared_secret, ) -from nucypher.crypto.ferveo.dkg import FerveoVariant -from nucypher_core import Conditions, ThresholdDecryptionRequest -from nucypher_core.umbral import SecretKey def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): @@ -22,19 +21,24 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): conditions=Conditions(json.dumps(conditions)), ) - response_sk = SecretKey.random() + requester_secret_key = SessionStaticSecret.random() encrypted_decryption_requests = {} + shared_secrets = {} for ursula in cohort: - request_encrypting_key = ( + ursula_decryption_request_static_key = ( ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) ) + shared_secret = requester_secret_key.derive_shared_secret( + ursula_decryption_request_static_key + ) encrypted_decryption_requests[ ursula.checksum_address ] = decryption_request.encrypt( - request_encrypting_key=request_encrypting_key, - response_encrypting_key=response_sk.public_key(), + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), ) + shared_secrets[ursula.checksum_address] = shared_secret cbd_outcome = porter.cbd_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests @@ -54,18 +58,21 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): encrypted_decryption_response, ) in cbd_outcome.encrypted_decryption_responses.items(): assert ursula_address in cohort_addresses - decryption_response = encrypted_decryption_response.decrypt(sk=response_sk) + shared_secret = shared_secrets[ursula_address] + decryption_response = encrypted_decryption_response.decrypt( + shared_secret=shared_secret + ) decryption_share = DecryptionShareSimple.from_bytes( decryption_response.decryption_share ) decryption_shares.append(decryption_share) - shared_secret = combine_decryption_shares_simple(decryption_shares) + combined_shares = combine_decryption_shares_simple(decryption_shares) conditions = json.dumps(conditions).encode() # aad cleartext = decrypt_with_shared_secret( - Ciphertext.from_bytes(ciphertext), + ciphertext, conditions, # aad - shared_secret, + combined_shares, params, # dkg params ) assert bytes(cleartext) == expected_plaintext @@ -73,14 +80,15 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): # # errors - invalid encrypting key used for request # - random_public_key = SecretKey.random().public_key() + random_public_key = SessionStaticSecret.random().public_key() + shared_secret = requester_secret_key.derive_shared_secret(random_public_key) encrypted_decryption_requests = {} for ursula in cohort: encrypted_decryption_requests[ ursula.checksum_address ] = decryption_request.encrypt( - request_encrypting_key=random_public_key, - response_encrypting_key=response_sk.public_key(), + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), ) cbd_outcome = porter.cbd_decrypt( diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index 1a56eb8..528fe05 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -2,19 +2,19 @@ from base64 import b64decode from eth_utils import to_checksum_address -from ferveo_py import ( - Ciphertext, - DecryptionShareSimple, - combine_decryption_shares_simple, - decrypt_with_shared_secret, -) from nucypher.crypto.ferveo.dkg import FerveoVariant from nucypher_core import ( Conditions, EncryptedThresholdDecryptionResponse, + SessionStaticSecret, ThresholdDecryptionRequest, ) -from nucypher_core.umbral import SecretKey +from nucypher_core.ferveo import ( + Ciphertext, + DecryptionShareSimple, + combine_decryption_shares_simple, + decrypt_with_shared_secret, +) from porter.fields.cbd import EncryptedThresholdDecryptionRequestField @@ -38,27 +38,32 @@ def test_cbd_decrypt( decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, variant=int(FerveoVariant.SIMPLE.value), - ciphertext=bytes(ciphertext), + ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) - response_sk = SecretKey.random() + requester_secret_key = SessionStaticSecret.random() encrypted_request_field = EncryptedThresholdDecryptionRequestField() encrypted_decryption_requests = {} + shared_secrets = {} for ursula in cohort: - request_encrypting_key = ( + ursula_decryption_request_static_key = ( ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) ) + shared_secret = requester_secret_key.derive_shared_secret( + ursula_decryption_request_static_key + ) encrypted_decryption_request = decryption_request.encrypt( - request_encrypting_key=request_encrypting_key, - response_encrypting_key=response_sk.public_key(), + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), ) encrypted_decryption_requests[ ursula.checksum_address ] = encrypted_request_field._serialize( value=encrypted_decryption_request, attr=None, obj=None ) + shared_secrets[ursula.checksum_address] = shared_secret request_data = { "threshold": threshold, @@ -98,18 +103,21 @@ def test_cbd_decrypt( encrypted_decryption_response = EncryptedThresholdDecryptionResponse.from_bytes( b64decode(response_bytes) ) - decryption_response = encrypted_decryption_response.decrypt(sk=response_sk) + shared_secret = shared_secrets[ursula_address] + decryption_response = encrypted_decryption_response.decrypt( + shared_secret=shared_secret + ) decryption_share = DecryptionShareSimple.from_bytes( decryption_response.decryption_share ) decryption_shares.append(decryption_share) - shared_secret = combine_decryption_shares_simple(decryption_shares) + combined_shares = combine_decryption_shares_simple(decryption_shares) json_conditions = json.dumps(conditions).encode() # aad cleartext = decrypt_with_shared_secret( - Ciphertext.from_bytes(ciphertext), + ciphertext, json_conditions, # aad - shared_secret, + combined_shares, params, # dkg params ) assert bytes(cleartext) == expected_plaintext @@ -128,15 +136,19 @@ def test_cbd_decrypt( request = ThresholdDecryptionRequest( ritual_id=999, # rando invalid ritual id variant=int(FerveoVariant.SIMPLE.value), - ciphertext=bytes(ciphertext), + ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) + ursula_decryption_request_static_key = cohort[ + i + ].threshold_request_power.get_pubkey_from_ritual_id(ritual_id=ritual_id) + shared_secret = requester_secret_key.derive_shared_secret( + ursula_decryption_request_static_key + ) encrypted_decryption_request = request.encrypt( - request_encrypting_key=cohort[ - i - ].threshold_request_power.get_pubkey_from_ritual_id(ritual_id=ritual_id), - response_encrypting_key=response_sk.public_key(), + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), ) data = encrypted_request_field._serialize( value=encrypted_decryption_request, attr=None, obj=None diff --git a/tests/conftest.py b/tests/conftest.py index 63d4e4a..d874359 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,7 +5,6 @@ from click.testing import CliRunner from eth_typing import ChecksumAddress from eth_utils import to_checksum_address -from ferveo_py import DkgPublicKey, DkgPublicParameters, Validator from nucypher.blockchain.economics import Economics, EconomicsFactory from nucypher.blockchain.eth.actors import Operator from nucypher.blockchain.eth.agents import ( @@ -19,15 +18,17 @@ from nucypher.characters.lawful import Enrico, Ursula from nucypher.config.constants import TEMPORARY_DOMAIN from nucypher.crypto.ferveo import dkg -from nucypher.crypto.powers import ( - DecryptingPower, - RitualisticPower, - ThresholdRequestDecryptingPower, -) +from nucypher.crypto.powers import DecryptingPower, RitualisticPower from nucypher.network.nodes import Learner, Teacher from nucypher.policy.conditions.types import LingoList from nucypher.utilities.logging import GlobalLoggerSettings from nucypher_core import HRAC, Address, TreasureMap +from nucypher_core.ferveo import ( + Ciphertext, + DkgPublicKey, + DkgPublicParameters, + Validator, +) from porter.emitters import WebEmitter from porter.main import Porter @@ -303,7 +304,7 @@ def dkg_setup( provider=ursula.checksum_address, aggregated=True, transcript=bytes(transcripts[i]), - requestEncryptingKey=ursula.threshold_request_power.get_pubkey_from_ritual_id( + decryption_request_static_key=ursula.threshold_request_power.get_pubkey_from_ritual_id( ritual_id ), ) @@ -327,11 +328,11 @@ def dkg_setup( @pytest.fixture(scope="module") -def dkg_encrypted_data(dkg_setup) -> Tuple[bytes, bytes, LingoList]: +def dkg_encrypted_data(dkg_setup) -> Tuple[Ciphertext, bytes, LingoList]: _, public_key, _, _, _ = dkg_setup enrico = Enrico(encrypting_key=public_key) ciphertext = enrico.encrypt_for_dkg( plaintext=PLAINTEXT.encode(), conditions=CONDITIONS ) - return bytes(ciphertext), PLAINTEXT.encode(), CONDITIONS + return ciphertext, PLAINTEXT.encode(), CONDITIONS diff --git a/tests/test_fields.py b/tests/test_fields.py index 4bdeb97..c26e50a 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -13,7 +13,11 @@ MessageKit, ) from nucypher_core import RetrievalKit as RetrievalKitClass -from nucypher_core import ThresholdDecryptionRequest, ThresholdDecryptionResponse +from nucypher_core import ( + SessionStaticSecret, + ThresholdDecryptionRequest, + ThresholdDecryptionResponse, +) from nucypher_core.umbral import SecretKey from porter.fields.base import ( @@ -308,17 +312,19 @@ def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, variant=int(FerveoVariant.SIMPLE.value), - ciphertext=bytes(ciphertext), + ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) field = EncryptedThresholdDecryptionRequestField() - random_request_encrypting_sk = SecretKey.random() - random_response_encrypting_sk = SecretKey.random() + ursula_public_key = SessionStaticSecret.random().public_key() + requester_secret_key = SessionStaticSecret.random() + + shared_secret = requester_secret_key.derive_shared_secret(ursula_public_key) encrypted_request = decryption_request.encrypt( - request_encrypting_key=random_request_encrypting_sk.public_key(), - response_encrypting_key=random_response_encrypting_sk.public_key(), + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), ) serialized_data = field._serialize(value=encrypted_request, attr=None, obj=None) @@ -331,16 +337,16 @@ def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): deserialized_encrypted_request, EncryptedThresholdDecryptionRequest ) assert deserialized_encrypted_request.ritual_id == ritual_id + assert ( + deserialized_encrypted_request.requester_public_key + == requester_secret_key.public_key() + ) assert bytes(deserialized_encrypted_request) == bytes(encrypted_request) deserialized_request = deserialized_encrypted_request.decrypt( - sk=random_request_encrypting_sk - ) - assert bytes(deserialized_request.decryption_request) == bytes(decryption_request) - assert ( - deserialized_request.response_encrypting_key - == random_response_encrypting_sk.public_key() + shared_secret=shared_secret ) + assert bytes(deserialized_request) == bytes(decryption_request) with pytest.raises(InvalidInputData): field._serialize( @@ -352,15 +358,19 @@ def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): def test_encrypted_threshold_decryption_response(): + ritual_id = 123 decryption_share = os.urandom(32) - decryption_response = ThresholdDecryptionResponse(decryption_share=decryption_share) + decryption_response = ThresholdDecryptionResponse( + ritual_id=ritual_id, decryption_share=decryption_share + ) field = EncryptedThresholdDecryptionResponseField() - random_response_encrypting_sk = SecretKey.random() - encrypted_response = decryption_response.encrypt( - random_response_encrypting_sk.public_key() - ) + requester_public_key = SessionStaticSecret.random().public_key() + ursula_secret_key = SessionStaticSecret.random() + shared_secret = ursula_secret_key.derive_shared_secret(requester_public_key) + + encrypted_response = decryption_response.encrypt(shared_secret=shared_secret) serialized_data = field._serialize(value=encrypted_response, attr=None, obj=None) assert serialized_data == b64encode(bytes(encrypted_response)).decode() @@ -372,9 +382,10 @@ def test_encrypted_threshold_decryption_response(): deserialized_encrypted_response, EncryptedThresholdDecryptionResponse ) assert bytes(deserialized_encrypted_response) == bytes(encrypted_response) + assert deserialized_encrypted_response.ritual_id == ritual_id deserialized_response = deserialized_encrypted_response.decrypt( - sk=random_response_encrypting_sk + shared_secret=shared_secret ) assert bytes(deserialized_response) == bytes(decryption_response) From 33866a64a22b381cc31b5479c498f2492fdbb421 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 7 Jun 2023 10:37:33 -0400 Subject: [PATCH 022/114] Relock dependencies to use `nucypher-core` `v0.9.0` and latest commit on `nucypher/nucypher`. --- Pipfile | 2 +- Pipfile.lock | 1524 +++++++++++++++++--------------- dev-requirements.txt | 52 +- requirements.txt | 28 +- scripts/relock_dependencies.sh | 43 + setup.py | 24 +- 6 files changed, 883 insertions(+), 790 deletions(-) create mode 100755 scripts/relock_dependencies.sh diff --git a/Pipfile b/Pipfile index fd3b7cc..20259a7 100644 --- a/Pipfile +++ b/Pipfile @@ -8,7 +8,7 @@ python_version = "3" [packages] nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} -nucypher-core = {git = "https://github.com/nucypher/nucypher.git", ref = "main"} # should be the same as nucypher +nucypher-core = ">=0.9.0" # should be the same as nucypher flask-cors = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index fb0eb69..048da59 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "04a96ae33c4c43a4da8f3be6680686e423765038c5bf1a6fb66ae042acbee48e" + "sha256": "7af5b35526f0d6c94255b04cafa3f3b70fcee70bad1273ab24a02a03983ef298" }, "pipfile-spec": 6, "requires": { @@ -178,95 +178,95 @@ }, "bitarray": { "hashes": [ - "sha256:00a6fc4355bd4e6ead54d05187dc4ea39f0af439b336ae113f0194673ed730ae", - "sha256:00e93f70cbcbeabd1e79accf1b6f5b2424cd40556e7877f618549523d0031c98", - "sha256:01f8d02c3eae82c98d4259777cb2f042a0b3989d7dceeb37c643cb94b91d5a42", - "sha256:029c724bf38c6616b90b1c423b846b63f8d607ed5a23d270e3862696d88a5392", - "sha256:057f9c53a34e42deed6e8813a82b9c85924f4728be28e3b9b65144569ac5a387", - "sha256:088e6e9ea7f0eaf8b672679a68096dbc0a7a7b7a4ed567860f7362e1588370a6", - "sha256:0b84fd9dbf999cbca1090a7703aa1404cd01af4035c6ba3adf69d41280611fb6", - "sha256:0d1f49cc51919d6fa0f7eebd073d2c620b80079aa537d084a7fafb46a35c7a4d", - "sha256:0fe747a134f7f5bc0877eee58090ae7e7f23628eeb459f681ade65719c3f246a", - "sha256:102db74ee82ec5774aba01481e73eedaebd27ba167344a81d3b42e6fbf9ffb77", - "sha256:1048a29b3d72b1821a3ae9e8d64e71ed96c53a1a36b1da6db02091a424a8f795", - "sha256:10dc358fe29d7a4c5be78ab2fb5aa50cb8066babd23e0b5589eb68e26afe58d8", - "sha256:122cd70ee0de2cc9d94da8b8ebcb7dca12b9f4d3beefb94c11e110e1d87503bb", - "sha256:1289f408a8b5c87cdb4fd7975d4021c6e61209ccb956d0411e72bf43c7f78463", - "sha256:1362e9fb78ca72aa52ec1f1fbd62872801302001b0156ed2a1e707850cd30ffd", - "sha256:1502660ab489b1f18c3493c766252cd5d24bc1cbf4bdf3594e0a30de142ed453", - "sha256:16345146b61e93ca20679c83537ccf7245f78b17035f5b1a436fd2b75da04c5e", - "sha256:16cb00911584a6e9ca0f42c305714898120dc6bfbbec90dacedeed4690331a47", - "sha256:1af9b720a048c69e999094e2310138b7cfca5471a9d2c1dbe4b53dd10e516720", - "sha256:1e1553933f4533040491f4e4499bcbbfcee42c4056f56d7e18010e779daab33d", - "sha256:23b7bada6d6b62cba08f4a1b8a95da2d8592aae1db3c167dcb52abcba0a7bef5", - "sha256:27524bc92fdeb464a5057a4677a35f482cf30be2e920bd1d11c46de533cafda6", - "sha256:2c1b2c91bf991b5c641faee78dd5a751dff6155ec51c7a6c7f922dc85431898e", - "sha256:2cdf5700537e5aa4ec9f4a0b498b8d5b03b9859d503e01ea17a6a134a838aa30", - "sha256:302149aaff75939beb8af7f32ac9bf922480033a24fb54f4ebc0c9dc175247c4", - "sha256:305e6f7441c007f296644ba3899c0306ce9fd7a482dbbc06b6e7b7bd6e0ddabc", - "sha256:31e60d8341c3189aa156ca8cb2f6370b29d79cf132e3d091714b0a5a9097eb69", - "sha256:3cf37431de779b29e5c0d8e36868f77f6df53c3c19c20e8404137e257dc80040", - "sha256:3fb6a952796d16c3a309d866eef56a8f4e5591d112c22446e67d33ecb096b44b", - "sha256:433f91c8ab8338662aaa86b0677e6c15c35f8f7b65d4c43d7d1647a8198bc0b0", - "sha256:4abe2f829f6f2d330bccf1bcde2192264ab9a15d6d00e507265f46dc66557014", - "sha256:4b2d150a81a981537801ac7d4f4f5d082c48343612a21f4e2c4cd2e887973bd5", - "sha256:4b84230624d15868e407ba8b66df54fc69ee6a9e9cb6d51eb264b8f2614596f1", - "sha256:50d5e2c026b3e3d145f64c457338ea99edcbdd302fdcbd96418251ac51a98a59", - "sha256:5df10eb9b794932b0cf806f412d1c6d04fb7655ca7ae5caf6354b9edc380a5f7", - "sha256:699b0134e87c0c4e3b224d879d218c4385a06e6b72df73b4c9c9d549155fb837", - "sha256:6d19c34a2121eccfeb642d4ad71163bd3342a8f3a99e6724fe824bdfbc0a5b65", - "sha256:72fd7f6f940bc42914c86700591ccfd1daeff0e414cefcbd7843117df2fac4e9", - "sha256:748847e58c45a37f23db1f53a6dc16ae32aa80ee504653d79336830de1a79ed7", - "sha256:757a08bf0aed5a650a399f8c66bcba00c210bce34408b6d7b09b4837bee8f4da", - "sha256:7659bdfe7716b14a39007e31e957fa64d7f0d9e40a1dbd024bd81b972d76bffb", - "sha256:76bbbb9ceebb9cbb2b14369b3681fecab226792b339f612e79f6575ca31fed45", - "sha256:7776c070943f45cd8303543a6625cf82f2e000ef9c885d52d7828be099e52f42", - "sha256:78378d8dacbe1f4f263347f42ec0a41cc2097cd671c6ac30a65a838284a5e141", - "sha256:7a8995737fae8de03b31ed83acf4f4326a55b217022009d18be19ff87fc9010e", - "sha256:7d571056115bbdc18f199a9ee4c2a1b5884f5e63a3c05fe43d2fc7fc67320515", - "sha256:7f6540b45b2230442f7a0614745131e0a6f28251f5d33ac19d0ed61d80db7153", - "sha256:8591ad5768860ad186dc94fd58b2932604a7639b57eefbbff2b4865af3407691", - "sha256:860edf8533223d82bd6201894bcaf540f828f49075f363390eecf04b12fb94cb", - "sha256:86e9c48ffeddb0f943e87ab65e1e95dccc9b44ef3761af3bf9642973ab7646d2", - "sha256:87851a82bdf849e3c40ff6d8af5f734634e17f52a8f7f7e74486c2f8ce717578", - "sha256:87897ec0e4876c9f2c1ae313519de0ed2ad8041a4d2210a083f9b4a239add2e3", - "sha256:888df211aafe5fad41c0792a686d95c8ba37345d5037f437aa3c09608f9c3b56", - "sha256:8ab6770833976448a9a973bc0df63adedc4c30de4774cec5a9928fc496423ebb", - "sha256:8abd23f94cdcce971d932a5f0a066d40fbc61901fd087aa70d32cccd1793bd20", - "sha256:8b2f31a4cc28aef27355ab896e4b4cc2da2204b2b7adb674d8be7fefa0c93868", - "sha256:8b8fd92c8026e4ba6874e94f538890e35bef2a3a18ea54e3663c578b7916ade1", - "sha256:8becbb9649fd29ee577f9f0405ce2fba5cf9fa2c290c9b044bc235c04473f213", - "sha256:91f43f6b6c9129a56d3e2dccb8b88ffce0e4f4893dd9d69d285676bdf5b9ca14", - "sha256:979d42e0b2c3113526f9716a461e08671788a23ce7e3b5cd090ce3e6a6762641", - "sha256:980f6564218f853a9341fb045446539d4153338926ed2fb222e86dc9b2ae9b8f", - "sha256:99c9345c417a9cff98f9f6e59b0350dcc10c2e0e1ea66acf7946de1cd60541fa", - "sha256:9a544f99c24b6f658907eb9edf290a9c54f4106738b2ab84cd19dc6013cc3abf", - "sha256:9ee181cc00aaba38d9812f4df4e7d828105b6dde3b068cd2c43f1d8f395e0046", - "sha256:a1d439c98e65ab8e5fbcc2b242a16e7a3f076974bff78185ff42ba2d4c220032", - "sha256:a5fc2512bdf5289a1412c936c65d17881d2b46edb0036c63a8d5605dc8d398a3", - "sha256:a69c99274aee2ffdc7f1cfd34044ccb7155790d6f5217d677ea46a6ddead6dd2", - "sha256:b43d56c7c96f5a055f4051be426496db2a616840645d0ab3733d5ceacb2f701b", - "sha256:b508e1bba4ec68fd0ef28505e2dad2f56de7df710c8334c97036705a562cb908", - "sha256:b5df624ee8a4098c3b1149f4817f2a4a0121c4920e1c114af324bc52d6659e2b", - "sha256:bd7f4b2df89bf4e298756c0be0be67fb84d6aa49bda60d46805d43f0e643abd5", - "sha256:c3956ae54285ab30d802756144887e30e013f81c9f03e5ffff9daa46d8ca0154", - "sha256:c531532c21bc1063e65957a1a85a2d13601ec21801f70821c89d9339b16ebc78", - "sha256:cb1d60ed709989e34e7158d97fdb077a2f2dfc505998a84161a70f81a6101172", - "sha256:cb46c3a4002c8322dd0e1b4b53f8a647dcb0f199f5c7a1fc03d3880c3eabbd2c", - "sha256:cb9a8ee23416bd0cfd457118978bc2f6f02c20b95336db486887f670bf92c2b7", - "sha256:d089b1d0b157c9a484f8f7475eecea813d0dc3818adc5bf352903da14fe88fc3", - "sha256:d3b5abb73c45d40d27f9795dac9d6eb1515729c13f93dd67df2be07be6549990", - "sha256:d63f20299441e32171f08fc62f7ea7e401cc12a96f67a36ab2d76439ecfcb118", - "sha256:da1570f301abdfda68f4fdb40c4d3f09af4bb6e4550b4fa5395db0d142b680bc", - "sha256:e2a0313657e6656efca2148cfc91c50fdafca6f811b6c7d0906e6ba57134e560", - "sha256:e4b7fdb9772e087174f446655bbc497a1600b5758f279c6d44fcf344c13d5c8a", - "sha256:ea33ed09157e032f0a7a2627ef87f156e9927697f59b55961439d34bf45af23a", - "sha256:f64abe9301b918d2c352e42198cea0196f3639bc1ad23a4a9d8ae97f66068901", - "sha256:f71256a32609b036adad932e1228b66a6b4e2cae6be397e588ddc0babd9a78b9", - "sha256:fb3f003dee96dbf24a6df71443557f249b17b20083c189995302b14eb01530bf", - "sha256:fe80c23409efb41b86efb5e45f334420a9b5b7828f5b3d08b5ff28f03a024d9e" - ], - "version": "==2.7.3" + "sha256:0331ce777174f1f06e592b5199e056cdece817181522d75e5671ef728bb5c591", + "sha256:0474532ad832da5a6c4f4127d64de68455a5948dcb9e824aa4a3927ced87ba1f", + "sha256:05c868339a9fb6095b600a4e576b76e269710ad519b00861d6b2a319e7d24465", + "sha256:0970faa5ce3ca6601d29f242941b5920c601535ac850aa9be942bcfe99636619", + "sha256:143d4f65e1f45a533e13521be1dc557a782317ecf76520eabd5a903b26ecb187", + "sha256:168acedc8ad7b87d01b6b733d37b0414aa4da6d10e1eedebb6cf3d79389fcef2", + "sha256:19bb60f0f3f99d066d4ad75247490107f7d3f0ba8f97b4f686f71bec8b0b2a68", + "sha256:1bcc809a67b03d7950a7f01cb8bb35b9a2b7fe9361f10aaf2fdfa44073ffed0d", + "sha256:1ffd91235c8a7c7ea3e3a6f710545b578c901303d6b98b7d2ee730ebf9c2a4ff", + "sha256:21f1ae716f61bf700327dd8e47a993a1b0bce30f1e8881f6bd6243223b6bafff", + "sha256:21ff72a03a9e60c43a98cb3b0f8c246414fae1a3bbbf425af06f6f350cde30d2", + "sha256:22dc38cb226b7604dbdd2d5504cf8d0a2e645e353eb158fed56d908e3243aea1", + "sha256:2435ac2598ae7caf283bf6af6c3e03f4dc6adf5a3bfaf01ffc719bd61411647b", + "sha256:2e55ad91330c2f1ff78f4b904b897e691d623a1858466924fb39233e669b1219", + "sha256:2e8365a513c1eaab2457e7065f517221bf11bf4909231f4b3e5204844b66bcbb", + "sha256:382e76863e9ad999af9ff0e5061d2df47abebcddeaa897da7924234f772db698", + "sha256:3ac1be1f87c67dc7e3640496427b6a291684a5612ede5b9a33aa34f620395985", + "sha256:3b3d319d89ee099279ec8c3efd57c2f21cd0b8d34e2ad0b5db07f3e45c4568d8", + "sha256:3c0f8520112563a306219ce1d4d9120a09179f5c7014e6cc629aeeb821436ecb", + "sha256:3cb3d4660075ee690549034c18093b1766168dc925ca16f76ab8d64250a96120", + "sha256:4138461ffb2605515fd5c7199c1d870095b3913fe2d0a195b21492ff84901168", + "sha256:4366f2998a63013fe260b8a34051858c98d6680a8bc832529d500af9e820f991", + "sha256:44203138e5a0548f120c40cf24bf27fc7e05ca5dc698f1f8fa53bfb9bdd1b700", + "sha256:4a9e2c9b6e391a167e1a87058ed3777440f5d4db623724832b762c704fe6f062", + "sha256:509a12c3f4a8abfcee3eec02000883b5cdce3e689bb99cdc5fac3767b6b7d2c5", + "sha256:50c7bb2d950c6ec10d02f47f6fd9e786ff890a4879e04bd62c74f0204c62c419", + "sha256:5423427bb3af9b75e01a4aca6d38e84906b16ff9f62e2a64dce877c9505735a3", + "sha256:54e1bdcdf3c4541a9df432c73c117be9d195629a4d9a705c9d61a05c797fb0c1", + "sha256:553f3a4d97d7974e7632f754411d91f4f435756fd961204ee494a2af68137b4f", + "sha256:58e3ce453708f43f9666a1abed97c50e052351631d7463fdea07d8e9f50dd9bd", + "sha256:656195c2e378cab88c98fbbad723104d1b75483d6a88df6049c81ca7303e3d88", + "sha256:6b417fb3d2c5636c369eda939db33dac97115fce72a192c63e1210db78ce4e9f", + "sha256:6f502bcef6e215b837db2c84150275ada5120c78776caffda26291c4b6688646", + "sha256:70fbb07504d63a5d793107ce16b0722de7fa45aca943959153b05ddc04f41cf3", + "sha256:716fdc54eaea23029d95f285b94d1bb1954aaeaa16ceb51910f3923ea13950e5", + "sha256:72cae6daf2e56675dfe4f65caf1d63ee74295926d0bb78c27d8e1b49a91dbae2", + "sha256:74d4fb48e2463638ce7be1c20613a7e118485bb46cfd84bc2a14c7d3b098f49c", + "sha256:7dac4575632f2900e7aed2f3a75c3ff672786bdfba8c000a86e62eea62d2a018", + "sha256:84262cadabc706a11affc6a80cc7ff3a0d0f2b7bd33eef58f9d733cfe260e6da", + "sha256:857c90a35ebaa1157b280ec62571e124384ca737434681d1a59de375795cc9d9", + "sha256:8712c561d370d7667c861e14e69fcce63ca761e50fb3cc7ef79682eeeaed567b", + "sha256:90a1cd9fe75eb91534ebf5459e9f2d4c83d5399f6ec812584d3dfc84440d784c", + "sha256:90d7f4c75174ed190c60854bce461fa6be66a9005e4bc595b8f134b31601ce90", + "sha256:94fdfaa747d5fcb996ff060a1396a6cb3132a3404ba7b019748370fafe3ff1dd", + "sha256:9944648f9f12a500c46e1786088a40e9711afc9c51db2370610f974e851dac9c", + "sha256:9c2cc2ab01bd1d809e9e5b0be28b25901db2a87b6ae483d29a744764cb89988e", + "sha256:9c6ef513b8166af421178027efbbf9b51a322645a00a2fa73809f27a899c1acb", + "sha256:9f79ad4d19595f9f9dd615a33a95c2eeb1b88705de3fbf96677b057b48408039", + "sha256:a3f5defdc2d36d969febeef7508a0bf7e93cdfb3325ac95863d95d753c23c99f", + "sha256:a625129aa68d7886a86bb0d5166c72fc0849f0e34dd88e8b772be3c7fcd6fd8b", + "sha256:a7d41e52d2295f53f5a03c62efbcb6d481f3b9a8ff87c2e072d2adb879f4929e", + "sha256:a99deab760c063e200ed3267893b87534deeaaa4ffc03da54942a7833e59fe51", + "sha256:abc528163aa87642b968a06af467b4db1e7f303784b30e0b2cc120aaba4bf887", + "sha256:adb48a4bb255d69fb22ac27d7ac92280731905a3b19f377ab1f02478c309b501", + "sha256:af991272a2a20396c79d07847d96370490a2eca0c781792c9c7cd7deff863297", + "sha256:b0274bf5a568d3322052403758c7ba0e32a005474115592cdb74d54cfa2b1772", + "sha256:b07ea1bb32f7ed62f2f693dabc91bd41e0977205fefbeb4fa93733518c09273a", + "sha256:b2a70ffabcce0efe8cf6113526c5dcb70c6e7b912289c84f0ad8c4288d7b1c0f", + "sha256:b4a94c1f94a8a4ebe51a375490eccec94261aa357edd4faf5ca2398e8c30ebd1", + "sha256:b56e07e21a24ca580bff7ef5eebef8d28bfe139c9a24da76359399ce20d33bc1", + "sha256:b73f48f85ba28c10db498bc2654678b7b9076d08ec34542101e9bfa3e209a6ee", + "sha256:b81c2d73a7b348c957aac8ee71076a80e92b29deb68db49ff941a4306cb419e8", + "sha256:bbfb02fde64b14a820a9268836103b028f20a206333fc6d637e3e663824b64ad", + "sha256:bdc829b1eecd57ee9b65c3b6c61814671683e061b21a267c64b8f1db29703bca", + "sha256:bf7921fef3e869e51734306174ed52d8ec11c8c359fcf98d72c4bee8d9fb82fc", + "sha256:bf8f13fc2d91960f94f8a8a3ad2e824cb1ca7bb49d1f905f9201327bdf9c086f", + "sha256:c2100c7b5bc813350ad8abe30f7223c9398d86ab30ebeffc7f780938fd53c009", + "sha256:c3aad9c8944a1cc2d3ac6f31fcfe164e22b1785e24f85b6f89b377667c5a5a87", + "sha256:ceb0e02a73d4908ab9aa72eb6c7fa04eec37daad2d93192892a5f3a6947264db", + "sha256:d03fe73637a798ac39adcefb18d8bb78eaa3529f79e6455ee462a1fb084adbf6", + "sha256:d1814b9185aedcb75fc7f7e02753be7fa114d18f8bb29f0e31a84507ed7d01ee", + "sha256:d6540e180eccb4e5c6df2d460df7b1b0d12a00364b73806a1df8cf1d8f1a34eb", + "sha256:d83881e4594c136301d1ec8d783f456dd6b001316588a781f16ddd20522c5d83", + "sha256:daa1239c5b388b6f5c51426eee0c70fad7f24d0668e4b461e66c8755f996d4cb", + "sha256:daa88834560f9c655231b6c3ed8ac069755a7f48ff8c3d37a5ffb88108e8c69d", + "sha256:de72f691895ee41cd720b335ab52d7dc979dd1348eb06891bd5093aa6988cfbd", + "sha256:e2f89fbe7dcd915a5bc4a53ed7be0e1640d3a84a5347db722e7249b715b8b91a", + "sha256:e5175dfe778839c6bf4e3496e4487dac0508a49c9a23c4a5b4fe29d2d1411543", + "sha256:e5b284c11eced377fa799f66fe69208d140a3ffcb29a767e57e9c66e66f061ad", + "sha256:ea6bda210224d23bef6af867adfc37bdf150fd9efdbfbdf61ba3b381b57583c5", + "sha256:ebc4ea4c48b050becdd177cf9b0a5d4be99cfa52a118fbe34f871156e5b1ad39", + "sha256:ed833c809ddff4d4ec81c878dd0b1a8a9b7de094d35dbc623b21cba707c26839", + "sha256:f30a89d673945109a64d2c3cb5bc2c707ed18efb8e018b6a9d233cb08034525d", + "sha256:f3f3d9cbd3e4032cc0b562a69cd7b2d7f7a7c96cc681871029f92bf49e99fb06", + "sha256:f4cdb4e3565d2fee759053272e6ec26ba8a7185f6bccba9e78a98d4df0ed08a2", + "sha256:fc99267064529627b28b53f8eeac64e3ac42a936c4f8c703122a6e14f77a1ea0", + "sha256:fce679c2d607ac7552516fbd08e1834ec4ef883ebcd94183daaf6190f4a2fc6b" + ], + "version": "==2.7.4" }, "bytestring-splitter": { "hashes": [ @@ -400,28 +400,28 @@ }, "cryptography": { "hashes": [ - "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", - "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", - "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", - "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", - "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", - "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", - "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", - "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", - "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", - "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", - "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", - "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", - "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", - "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", - "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", - "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", - "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", - "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", - "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" + "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db", + "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a", + "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039", + "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c", + "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3", + "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485", + "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c", + "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca", + "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5", + "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5", + "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3", + "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb", + "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43", + "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31", + "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc", + "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b", + "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006", + "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a", + "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699" ], - "markers": "python_version >= '3.6'", - "version": "==40.0.2" + "markers": "python_version >= '3.7'", + "version": "==41.0.1" }, "cytoolz": { "hashes": [ @@ -619,14 +619,6 @@ "markers": "python_version >= '3.7' and python_version < '4'", "version": "==2.1.0" }, - "ferveo": { - "hashes": [ - "sha256:782e8f1745a7d38c7dcbd72936e54a1a8a9514a674095f4b60fb9e4f469b9637", - "sha256:84b4a45523f3c314d1d50e09a92d66b2b9e9d4f82f03534394123ce4e11bf8d7" - ], - "markers": "python_version >= '3.7'", - "version": "==0.1.13" - }, "flask": { "hashes": [ "sha256:58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf", @@ -802,72 +794,106 @@ }, "jsonschema": { "hashes": [ - "sha256:112d303b0291095108013e712d4038d85f11dfc6b0141430932fce7c33d221b8", - "sha256:e8a9b0e9245d8e9c57e2281f30f1d11e0326abb919aa6866997a016487fcaef8" + "sha256:d6a4f48fcecc06e8915c30de13076837b624999167655c4c643b50ed93c0e526", + "sha256:f1eb210cc329f9cc09bd10c5f7a287f5b1538de6d5662ef2528b9f9b428dbd85" ], "markers": "python_version >= '3.8'", - "version": "==4.18.0a7" + "version": "==4.18.0a9" }, "jsonschema-specifications": { "hashes": [ - "sha256:2914352153a22053662886c096a4d905a41e771f28baa52c86d135b359dc64ed", - "sha256:ca4c182adb268045fb70e6c09eb818ff4f9d27e762725b0f257cfdd318dffca9" + "sha256:1aefc07b022e3b8ce8bec135c78b74ae1ffd260822c67011427192b3a7525e09", + "sha256:51d2972bf690cfe21970f722f878580d863f7c127d200fce671c5dae10b88f5f" ], "markers": "python_version >= '3.8'", - "version": "==2023.5.1" + "version": "==2023.5.2" }, "lru-dict": { "hashes": [ - "sha256:075b9dd46d7022b675419bc6e3631748ae184bc8af195d20365a98b4f3bb2914", - "sha256:0972d669e9e207617e06416166718b073a49bf449abbd23940d9545c0847a4d9", - "sha256:0f83cd70a6d32f9018d471be609f3af73058f700691657db4a3d3dd78d3f96dd", - "sha256:10fe823ff90b655f0b6ba124e2b576ecda8c61b8ead76b456db67831942d22f2", - "sha256:163079dbda54c3e6422b23da39fb3ecc561035d65e8496ff1950cbdb376018e1", - "sha256:1fe16ade5fd0a57e9a335f69b8055aaa6fb278fbfa250458e4f6b8255115578f", - "sha256:262a4e622010ceb960a6a5222ed011090e50954d45070fd369c0fa4d2ed7d9a9", - "sha256:2f340b61f3cdfee71f66da7dbfd9a5ea2db6974502ccff2065cdb76619840dca", - "sha256:348167f110494cfafae70c066470a6f4e4d43523933edf16ccdb8947f3b5fae0", - "sha256:3b1692755fef288b67af5cd8a973eb331d1f44cb02cbdc13660040809c2bfec6", - "sha256:3ca497cb25f19f24171f9172805f3ff135b911aeb91960bd4af8e230421ccb51", - "sha256:3d003a864899c29b0379e412709a6e516cbd6a72ee10b09d0b33226343617412", - "sha256:3fef595c4f573141d54a38bda9221b9ee3cbe0acc73d67304a1a6d5972eb2a02", - "sha256:484ac524e4615f06dc72ffbfd83f26e073c9ec256de5413634fbd024c010a8bc", - "sha256:55aeda6b6789b2d030066b4f5f6fc3596560ba2a69028f35f3682a795701b5b1", - "sha256:5a592363c93d6fc6472d5affe2819e1c7590746aecb464774a4f67e09fbefdfc", - "sha256:5b09dbe47bc4b4d45ffe56067aff190bc3c0049575da6e52127e114236e0a6a7", - "sha256:6e2a7aa9e36626fb48fdc341c7e3685a31a7b50ea4918677ea436271ad0d904d", - "sha256:70364e3cbef536adab8762b4835e18f5ca8e3fddd8bd0ec9258c42bbebd0ee77", - "sha256:720f5728e537f11a311e8b720793a224e985d20e6b7c3d34a891a391865af1a2", - "sha256:7284bdbc5579bbdc3fc8f869ed4c169f403835566ab0f84567cdbfdd05241847", - "sha256:7be1b66926277993cecdc174c15a20c8ce785c1f8b39aa560714a513eef06473", - "sha256:86d32a4498b74a75340497890a260d37bf1560ad2683969393032977dd36b088", - "sha256:878bc8ef4073e5cfb953dfc1cf4585db41e8b814c0106abde34d00ee0d0b3115", - "sha256:881104711900af45967c2e5ce3e62291dd57d5b2a224d58b7c9f60bf4ad41b8c", - "sha256:8c50ab9edaa5da5838426816a2b7bcde9d576b4fc50e6a8c062073dbc4969d78", - "sha256:8f6561f9cd5a452cb84905c6a87aa944fdfdc0f41cc057d03b71f9b29b2cc4bd", - "sha256:93336911544ebc0e466272043adab9fb9f6e9dcba6024b639c32553a3790e089", - "sha256:9447214e4857e16d14158794ef01e4501d8fad07d298d03308d9f90512df02fa", - "sha256:97c24ffc55de6013075979f440acd174e88819f30387074639fb7d7178ca253e", - "sha256:99f6cfb3e28490357a0805b409caf693e46c61f8dbb789c51355adb693c568d3", - "sha256:9be6c4039ef328676b868acea619cd100e3de1a35b3be211cf0eaf9775563b65", - "sha256:9d70257246b8207e8ef3d8b18457089f5ff0dfb087bd36eb33bce6584f2e0b3a", - "sha256:a777d48319d293b1b6a933d606c0e4899690a139b4c81173451913bbcab6f44f", - "sha256:add762163f4af7f4173fafa4092eb7c7f023cf139ef6d2015cfea867e1440d82", - "sha256:b6f64005ede008b7a866be8f3f6274dbf74e656e15e4004e9d99ad65efb01809", - "sha256:beb089c46bd95243d1ac5b2bd13627317b08bf40dd8dc16d4b7ee7ecb3cf65ca", - "sha256:c07163c9dcbb2eca377f366b1331f46302fd8b6b72ab4d603087feca00044bb0", - "sha256:c2fe692332c2f1d81fd27457db4b35143801475bfc2e57173a2403588dd82a42", - "sha256:ca8f89361e0e7aad0bf93ae03a31502e96280faeb7fb92267f4998fb230d36b2", - "sha256:d2ed4151445c3f30423c2698f72197d64b27b1cd61d8d56702ffe235584e47c2", - "sha256:db20597c4e67b4095b376ce2e83930c560f4ce481e8d05737885307ed02ba7c1", - "sha256:de972c7f4bc7b6002acff2a8de984c55fbd7f2289dba659cfd90f7a0f5d8f5d1", - "sha256:f1df1da204a9f0b5eb8393a46070f1d984fa8559435ee790d7f8f5602038fc00", - "sha256:f4d0a6d733a23865019b1c97ed6fb1fdb739be923192abf4dbb644f697a26a69", - "sha256:f874e9c2209dada1a080545331aa1277ec060a13f61684a8642788bf44b2325f", - "sha256:f877f53249c3e49bbd7612f9083127290bede6c7d6501513567ab1bf9c581381", - "sha256:f9d5815c0e85922cd0fb8344ca8b1c7cf020bf9fc45e670d34d51932c91fd7ec" + "sha256:00f6e8a3fc91481b40395316a14c94daa0f0a5de62e7e01a7d589f8d29224052", + "sha256:020b93870f8c7195774cbd94f033b96c14f51c57537969965c3af300331724fe", + "sha256:05fb8744f91f58479cbe07ed80ada6696ec7df21ea1740891d4107a8dd99a970", + "sha256:086ce993414f0b28530ded7e004c77dc57c5748fa6da488602aa6e7f79e6210e", + "sha256:0c316dfa3897fabaa1fe08aae89352a3b109e5f88b25529bc01e98ac029bf878", + "sha256:0facf49b053bf4926d92d8d5a46fe07eecd2af0441add0182c7432d53d6da667", + "sha256:1171ad3bff32aa8086778be4a3bdff595cc2692e78685bcce9cb06b96b22dcc2", + "sha256:1184d91cfebd5d1e659d47f17a60185bbf621635ca56dcdc46c6a1745d25df5c", + "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7", + "sha256:18ee88ada65bd2ffd483023be0fa1c0a6a051ef666d1cd89e921dcce134149f2", + "sha256:203b3e78d03d88f491fa134f85a42919020686b6e6f2d09759b2f5517260c651", + "sha256:20f5f411f7751ad9a2c02e80287cedf69ae032edd321fe696e310d32dd30a1f8", + "sha256:21b3090928c7b6cec509e755cc3ab742154b33660a9b433923bd12c37c448e3e", + "sha256:22147367b296be31cc858bf167c448af02435cac44806b228c9be8117f1bfce4", + "sha256:231d7608f029dda42f9610e5723614a35b1fff035a8060cf7d2be19f1711ace8", + "sha256:25f9e0bc2fe8f41c2711ccefd2871f8a5f50a39e6293b68c3dec576112937aad", + "sha256:287c2115a59c1c9ed0d5d8ae7671e594b1206c36ea9df2fca6b17b86c468ff99", + "sha256:291d13f85224551913a78fe695cde04cbca9dcb1d84c540167c443eb913603c9", + "sha256:312b6b2a30188586fe71358f0f33e4bac882d33f5e5019b26f084363f42f986f", + "sha256:34a3091abeb95e707f381a8b5b7dc8e4ee016316c659c49b726857b0d6d1bd7a", + "sha256:35a142a7d1a4fd5d5799cc4f8ab2fff50a598d8cee1d1c611f50722b3e27874f", + "sha256:3838e33710935da2ade1dd404a8b936d571e29268a70ff4ca5ba758abb3850df", + "sha256:5345bf50e127bd2767e9fd42393635bbc0146eac01f6baf6ef12c332d1a6a329", + "sha256:5919dd04446bc1ee8d6ecda2187deeebfff5903538ae71083e069bc678599446", + "sha256:59f3df78e94e07959f17764e7fa7ca6b54e9296953d2626a112eab08e1beb2db", + "sha256:5b172fce0a0ffc0fa6d282c14256d5a68b5db1e64719c2915e69084c4b6bf555", + "sha256:5c6acbd097b15bead4de8e83e8a1030bb4d8257723669097eac643a301a952f0", + "sha256:5d90a70c53b0566084447c3ef9374cc5a9be886e867b36f89495f211baabd322", + "sha256:604d07c7604b20b3130405d137cae61579578b0e8377daae4125098feebcb970", + "sha256:6b7a031e47421d4b7aa626b8c91c180a9f037f89e5d0a71c4bb7afcf4036c774", + "sha256:6da5b8099766c4da3bf1ed6e7d7f5eff1681aff6b5987d1258a13bd2ed54f0c9", + "sha256:712e71b64da181e1c0a2eaa76cd860265980cd15cb0e0498602b8aa35d5db9f8", + "sha256:71da89e134747e20ed5b8ad5b4ee93fc5b31022c2b71e8176e73c5a44699061b", + "sha256:756230c22257597b7557eaef7f90484c489e9ba78e5bb6ab5a5bcfb6b03cb075", + "sha256:7d3336e901acec897bcd318c42c2b93d5f1d038e67688f497045fc6bad2c0be7", + "sha256:7e51fa6a203fa91d415f3b2900e5748ec8e06ad75777c98cc3aeb3983ca416d7", + "sha256:877801a20f05c467126b55338a4e9fa30e2a141eb7b0b740794571b7d619ee11", + "sha256:87bbad3f5c3de8897b8c1263a9af73bbb6469fb90e7b57225dad89b8ef62cd8d", + "sha256:8bda3a9afd241ee0181661decaae25e5336ce513ac268ab57da737eacaa7871f", + "sha256:8dafc481d2defb381f19b22cc51837e8a42631e98e34b9e0892245cc96593deb", + "sha256:91d577a11b84387013815b1ad0bb6e604558d646003b44c92b3ddf886ad0f879", + "sha256:981ef3edc82da38d39eb60eae225b88a538d47b90cce2e5808846fd2cf64384b", + "sha256:987b73a06bcf5a95d7dc296241c6b1f9bc6cda42586948c9dabf386dc2bef1cd", + "sha256:9e4c85aa8844bdca3c8abac3b7f78da1531c74e9f8b3e4890c6e6d86a5a3f6c0", + "sha256:a3ea7571b6bf2090a85ff037e6593bbafe1a8598d5c3b4560eb56187bcccb4dc", + "sha256:a87bdc291718bbdf9ea4be12ae7af26cbf0706fa62c2ac332748e3116c5510a7", + "sha256:aaecd7085212d0aa4cd855f38b9d61803d6509731138bf798a9594745953245b", + "sha256:ae301c282a499dc1968dd633cfef8771dd84228ae9d40002a3ea990e4ff0c469", + "sha256:afdadd73304c9befaed02eb42f5f09fdc16288de0a08b32b8080f0f0f6350aa6", + "sha256:b20b7c9beb481e92e07368ebfaa363ed7ef61e65ffe6e0edbdbaceb33e134124", + "sha256:b30122e098c80e36d0117810d46459a46313421ce3298709170b687dc1240b02", + "sha256:b55753ee23028ba8644fd22e50de7b8f85fa60b562a0fafaad788701d6131ff8", + "sha256:b5ccfd2291c93746a286c87c3f895165b697399969d24c54804ec3ec559d4e43", + "sha256:b6613daa851745dd22b860651de930275be9d3e9373283a2164992abacb75b62", + "sha256:b710f0f4d7ec4f9fa89dfde7002f80bcd77de8024017e70706b0911ea086e2ef", + "sha256:b9ec7a4a0d6b8297102aa56758434fb1fca276a82ed7362e37817407185c3abb", + "sha256:bb12f19cdf9c4f2d9aa259562e19b188ff34afab28dd9509ff32a3f1c2c29326", + "sha256:bd2cd1b998ea4c8c1dad829fc4fa88aeed4dee555b5e03c132fc618e6123f168", + "sha256:c4da599af36618881748b5db457d937955bb2b4800db891647d46767d636c408", + "sha256:c53b12b89bd7a6c79f0536ff0d0a84fdf4ab5f6252d94b24b9b753bd9ada2ddf", + "sha256:c9617583173a29048e11397f165501edc5ae223504a404b2532a212a71ecc9ed", + "sha256:cd46c94966f631a81ffe33eee928db58e9fbee15baba5923d284aeadc0e0fa76", + "sha256:cd6806313606559e6c7adfa0dbeb30fc5ab625f00958c3d93f84831e7a32b71e", + "sha256:d0dd4cd58220351233002f910e35cc01d30337696b55c6578f71318b137770f9", + "sha256:d0f7ec902a0097ac39f1922c89be9eaccf00eb87751e28915320b4f72912d057", + "sha256:d5bb41bc74b321789803d45b124fc2145c1b3353b4ad43296d9d1d242574969b", + "sha256:d7ab0c10c4fa99dc9e26b04e6b62ac32d2bcaea3aad9b81ec8ce9a7aa32b7b1b", + "sha256:de24b47159e07833aeab517d9cb1c3c5c2d6445cc378b1c2f1d8d15fb4841d63", + "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641", + "sha256:df25a426446197488a6702954dcc1de511deee20c9db730499a2aa83fddf0df1", + "sha256:e25b2e90a032dc248213af7f3f3e975e1934b204f3b16aeeaeaff27a3b65e128", + "sha256:e707d93bae8f0a14e6df1ae8b0f076532b35f00e691995f33132d806a88e5c18", + "sha256:ea2ac3f7a7a2f32f194c84d82a034e66780057fd908b421becd2f173504d040e", + "sha256:ead83ac59a29d6439ddff46e205ce32f8b7f71a6bd8062347f77e232825e3d0a", + "sha256:edad398d5d402c43d2adada390dd83c74e46e020945ff4df801166047013617e", + "sha256:f010cfad3ab10676e44dc72a813c968cd586f37b466d27cde73d1f7f1ba158c2", + "sha256:f404dcc8172da1f28da9b1f0087009578e608a4899b96d244925c4f463201f2a", + "sha256:f54908bf91280a9b8fa6a8c8f3c2f65850ce6acae2852bbe292391628ebca42f", + "sha256:f5d5a5f976b39af73324f2b793862859902ccb9542621856d51a5993064f25e4", + "sha256:f9484016e6765bd295708cccc9def49f708ce07ac003808f69efa386633affb9", + "sha256:fbf36c5a220a85187cacc1fcb7dd87070e04b5fc28df7a43f6842f7c8224a388", + "sha256:fc42882b554a86e564e0b662da47b8a4b32fa966920bd165e27bb8079a323bc1" ], - "version": "==1.1.8" + "version": "==1.2.0" }, "mako": { "hashes": [ @@ -879,59 +905,59 @@ }, "markupsafe": { "hashes": [ - "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", - "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", - "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", - "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", - "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", - "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", - "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", - "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", - "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", - "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", - "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", - "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", - "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", - "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", - "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", - "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", - "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", - "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", - "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", - "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", - "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", - "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", - "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", - "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", - "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", - "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", - "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", - "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", - "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", - "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", - "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", - "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", - "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", - "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", - "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", - "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", - "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", - "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", - "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", - "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", - "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", - "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", - "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", - "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", - "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", - "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", - "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", - "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", - "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", - "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" ], "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "version": "==2.1.3" }, "marshmallow": { "hashes": [ @@ -1117,29 +1143,29 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "9305d4d76c22dee587cbc20d443c43b757e41485" + "ref": "0bbd734c64a3c3ab8caca80dbc6be155db93a5e7" }, "nucypher-core": { "hashes": [ - "sha256:28489ded2fd94fc1ac541c199624d7206ce83a9a275c40c913390977e3c18e08", - "sha256:2f85aebf29435f8359f6092cbfb7b0f754623e473107c7e2dd8a7c7c3881b2a4", - "sha256:37dade4937218fd47e7d8f3f8eabc41516f99b75b9fd09671bf4b74834fbdd2f", - "sha256:3bb1f181e5e176de74efc4cc8efa462383c8754433750fcb0a69d91b6c2e8460", - "sha256:6358879b2660602a5e1ab860d7853f0c04173392825bbec2beaec5f25040e382", - "sha256:689f9a3d996de90fd2758cd83ce75b60e5c1cfbaf3b45d36b05122eadaad962e", - "sha256:6c5bb09e1f609363edd4147a45f6d535cc29a317407ba209c9608308c27d5890", - "sha256:85411e3a33ee7c6680d88d14e221df122b2ae8c3d8a9dd388107fd4f9393431e", - "sha256:8a21482a84a7932707b9c74e3c34372559d50eb9a31f3bbd99d43bf5d3deb7c5", - "sha256:986e247a6023a859f7ad5712d8256adf385191817a45b04ea04e35d083fec02f", - "sha256:ac241d959c2f721a73ba60d0fc66ff813061baef6c6b928d199e2ed7fbcb6d26", - "sha256:be86a5d179e6873fd3e1c8917423853182cfd2b34ba54d0909494fb027a6836b", - "sha256:c7605e7a9a6dbb9577f80c59eedff576519aa5716dff4c9667a27fc116dc642e", - "sha256:caa5afb7459ccca0fe22e200204f3324373c08a68a0f7bd8f278bb628c5844b7", - "sha256:eab9c077d0c6479e56ad61e49096d1ccea22dd36d99789e19b162c7e7fd0aa39", - "sha256:f74faf208aecf1edcc83640ed2696a75315de5088fec51650c3e38d13f041587" + "sha256:05e5c3559bfe9315642d2cca14ddabd00072f28cf5949f75b6f1ea09e39cd496", + "sha256:10b5c282b1b40fc719fb14e02098b789b212fe1e8ad61260c2482dd0da279bc1", + "sha256:33dc84371e3e692a924cbd8df3be001b46ba393572016f9e9d97e951ca5b3974", + "sha256:3a4f7b4f4dc35200a3c09c9cc68f485fea58b1e153efd5ffb3ba5a5a92b7b4be", + "sha256:5e3e6ae1be94c1082ab96704d3ed3b8e938a3996c2d09f36dbf2fd756efaf063", + "sha256:6aadb27a8a1675fb5b0af720ba63d4fb9b28aad3d33bbefeb9f3f0e7f25a32e6", + "sha256:802e7e56328253080260016f40121bca889c22c2e4de55bbcd8039d7c7066703", + "sha256:8fa7003d4b9cd26a51d86cec3f34be15dd29e28565a7db63ef67496d152f71aa", + "sha256:944b27c4df95e0b0c1119bcd53786ca29e2d1bbf33c417a7511346885100a4bc", + "sha256:99710afe0df83d749b22a571ec7cddfbc3cca1e3805bf39da3707cd5ae593486", + "sha256:b1d5904308854ab51dbccd4a064347b34f001edace90d1f4521da99e0fec1e48", + "sha256:b33b7608de37c358ae544ae169d810e8e20e18f1ac87d1cecbffb99e300009ff", + "sha256:cb5b6d8fd0f8daf8011477663861b2df1919e80c8b863aed56a7ca65e024fb47", + "sha256:d239ccabd6b5d8878895ce5282ca672e17b076a372dd28ecedcd2db4cb02521d", + "sha256:d949842943acc401b2f72c681b92fb5bd3e3f1e047d3feb71096f2782127cc8d", + "sha256:e2122115e5306b88f4d522f6f4dac3ec99e266ecdbad67af7440822e1e0a91ba" ], "index": "pypi", - "version": "==0.8.0" + "version": "==0.9.0" }, "packaging": { "hashes": [ @@ -1219,22 +1245,22 @@ }, "protobuf": { "hashes": [ - "sha256:2036a3a1e7fc27f973fa0a7888dce712393af644f4695385f117886abc792e39", - "sha256:32e78beda26d7a101fecf15d7a4a792278a0d26a31bc327ff05564a9d68ab8ee", - "sha256:346990f634272caac1f09efbcfbbacb23098b1f606d172534c6fa2d9758bb436", - "sha256:3b8905eafe4439076e1f58e9d1fa327025fd2777cf90f14083092ae47f77b0aa", - "sha256:3ce113b3f3362493bddc9069c2163a38f240a9ed685ff83e7bcb756b05e1deb0", - "sha256:410bcc0a5b279f634d3e16082ce221dfef7c3392fac723500e2e64d1806dd2be", - "sha256:5b9cd6097e6acae48a68cb29b56bc79339be84eca65b486910bb1e7a30e2b7c1", - "sha256:65f0ac96ef67d7dd09b19a46aad81a851b6f85f89725577f16de38f2d68ad477", - "sha256:91fac0753c3c4951fbb98a93271c43cc7cf3b93cf67747b3e600bb1e5cc14d61", - "sha256:95789b569418a3e32a53f43d7763be3d490a831e9c08042539462b6d972c2d7e", - "sha256:ac50be82491369a9ec3710565777e4da87c6d2e20404e0abb1f3a8f10ffd20f0", - "sha256:decf119d54e820f298ee6d89c72d6b289ea240c32c521f00433f9dc420595f38", - "sha256:f9510cac91e764e86acd74e2b7f7bc5e6127a7f3fb646d7c8033cfb84fd1176a" + "sha256:09310bce43353b46d73ba7e3bca78273b9bc50349509b9698e64d288c6372c2a", + "sha256:20874e7ca4436f683b64ebdbee2129a5a2c301579a67d1a7dda2cdf62fb7f5f7", + "sha256:25e3370eda26469b58b602e29dff069cfaae8eaa0ef4550039cc5ef8dc004511", + "sha256:281342ea5eb631c86697e1e048cb7e73b8a4e85f3299a128c116f05f5c668f8f", + "sha256:384dd44cb4c43f2ccddd3645389a23ae61aeb8cfa15ca3a0f60e7c3ea09b28b3", + "sha256:54a533b971288af3b9926e53850c7eb186886c0c84e61daa8444385a4720297f", + "sha256:6c081863c379bb1741be8f8193e893511312b1d7329b4a75445d1ea9955be69e", + "sha256:86df87016d290143c7ce3be3ad52d055714ebaebb57cc659c387e76cfacd81aa", + "sha256:8da6070310d634c99c0db7df48f10da495cc283fd9e9234877f0cd182d43ab7f", + "sha256:b2cfab63a230b39ae603834718db74ac11e52bccaaf19bf20f5cce1a84cf76df", + "sha256:c52cfcbfba8eb791255edd675c1fe6056f723bf832fa67f0442218f8817c076e", + "sha256:ce744938406de1e64b91410f473736e815f28c3b71201302612a68bf01517fea", + "sha256:efabbbbac1ab519a514579ba9ec52f006c28ae19d97915951f69fa70da2c9e91" ], "markers": "python_version >= '3.7'", - "version": "==4.23.1" + "version": "==4.23.2" }, "py-ecc": { "hashes": [ @@ -1342,11 +1368,11 @@ }, "pyopenssl": { "hashes": [ - "sha256:841498b9bec61623b1b6c47ebbc02367c07d60e0e195f19790817f10cc8db0b7", - "sha256:9e0c526404a210df9d2b18cd33364beadb0dc858a739b885677bc65e105d4a4c" + "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2", + "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac" ], "markers": "python_version >= '3.6'", - "version": "==23.1.1" + "version": "==23.2.0" }, "pysha3": { "hashes": [ @@ -1391,105 +1417,105 @@ }, "referencing": { "hashes": [ - "sha256:2502c83c224ec5a7e4a43031e6423b339284924c00ef69eb0044c61f74f37062", - "sha256:59c5608900564b192b8e3b3d66b976e85d6eb46108e1ef57ad8ec982f564ea30" + "sha256:54b64ae36b91827f9f50d05a5af27570a5ca9ba6a1be49809215419d5ab32253", + "sha256:bddd26f8fbb64d153334cca7bc20305c72295e287d84bbf5756afa50efdeb6ae" ], "markers": "python_version >= '3.8'", - "version": "==0.28.3" + "version": "==0.29.0" }, "regex": { "hashes": [ - "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff", - "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea", - "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9", - "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423", - "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c", - "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60", - "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764", - "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2", - "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f", - "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe", - "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2", - "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a", - "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c", - "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17", - "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426", - "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e", - "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8", - "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67", - "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e", - "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32", - "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559", - "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66", - "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e", - "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8", - "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309", - "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18", - "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a", - "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94", - "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0", - "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d", - "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80", - "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810", - "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6", - "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96", - "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a", - "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636", - "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d", - "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe", - "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b", - "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2", - "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d", - "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393", - "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac", - "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926", - "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91", - "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e", - "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a", - "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46", - "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a", - "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd", - "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3", - "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd", - "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657", - "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3", - "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2", - "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a", - "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1", - "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550", - "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833", - "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81", - "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8", - "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5", - "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19", - "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d", - "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86", - "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e", - "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008", - "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8", - "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2", - "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da", - "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053", - "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa", - "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb", - "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22", - "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc", - "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6", - "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051", - "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d", - "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468", - "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df", - "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1", - "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d", - "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479", - "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b", - "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35", - "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956", - "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2", - "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135" + "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938", + "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6", + "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef", + "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525", + "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af", + "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc", + "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54", + "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8", + "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7", + "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568", + "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c", + "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f", + "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536", + "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2", + "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb", + "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df", + "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019", + "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18", + "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f", + "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac", + "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8", + "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9", + "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697", + "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06", + "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d", + "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036", + "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1", + "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787", + "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9", + "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0", + "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7", + "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461", + "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee", + "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3", + "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0", + "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f", + "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14", + "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477", + "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd", + "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16", + "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc", + "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff", + "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd", + "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2", + "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e", + "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef", + "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07", + "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3", + "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3", + "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a", + "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7", + "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa", + "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82", + "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77", + "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222", + "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c", + "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd", + "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d", + "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68", + "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9", + "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693", + "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487", + "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06", + "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591", + "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27", + "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a", + "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969", + "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3", + "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0", + "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7", + "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751", + "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747", + "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289", + "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72", + "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777", + "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9", + "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1", + "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1", + "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e", + "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf", + "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f", + "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd", + "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2", + "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c", + "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1", + "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88", + "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9", + "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.5" + "version": "==2023.6.3" }, "requests": { "hashes": [ @@ -1680,11 +1706,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:6ad00b63f849b7dcc313b70b6b304ed67b2b2963b3098a33efe18056b1a9a223", - "sha256:ff6b238610c747e44c268aa4bb23c8c735d665a63726df3f9431ce707f2aa768" + "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", + "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" ], "markers": "python_version >= '3.7'", - "version": "==4.6.0" + "version": "==4.6.3" }, "tzdata": { "hashes": [ @@ -1704,11 +1730,11 @@ }, "urllib3": { "hashes": [ - "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc", - "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" + "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", + "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" ], "markers": "python_version >= '3.7'", - "version": "==2.0.2" + "version": "==2.0.3" }, "watchdog": { "hashes": [ @@ -2166,95 +2192,95 @@ }, "bitarray": { "hashes": [ - "sha256:00a6fc4355bd4e6ead54d05187dc4ea39f0af439b336ae113f0194673ed730ae", - "sha256:00e93f70cbcbeabd1e79accf1b6f5b2424cd40556e7877f618549523d0031c98", - "sha256:01f8d02c3eae82c98d4259777cb2f042a0b3989d7dceeb37c643cb94b91d5a42", - "sha256:029c724bf38c6616b90b1c423b846b63f8d607ed5a23d270e3862696d88a5392", - "sha256:057f9c53a34e42deed6e8813a82b9c85924f4728be28e3b9b65144569ac5a387", - "sha256:088e6e9ea7f0eaf8b672679a68096dbc0a7a7b7a4ed567860f7362e1588370a6", - "sha256:0b84fd9dbf999cbca1090a7703aa1404cd01af4035c6ba3adf69d41280611fb6", - "sha256:0d1f49cc51919d6fa0f7eebd073d2c620b80079aa537d084a7fafb46a35c7a4d", - "sha256:0fe747a134f7f5bc0877eee58090ae7e7f23628eeb459f681ade65719c3f246a", - "sha256:102db74ee82ec5774aba01481e73eedaebd27ba167344a81d3b42e6fbf9ffb77", - "sha256:1048a29b3d72b1821a3ae9e8d64e71ed96c53a1a36b1da6db02091a424a8f795", - "sha256:10dc358fe29d7a4c5be78ab2fb5aa50cb8066babd23e0b5589eb68e26afe58d8", - "sha256:122cd70ee0de2cc9d94da8b8ebcb7dca12b9f4d3beefb94c11e110e1d87503bb", - "sha256:1289f408a8b5c87cdb4fd7975d4021c6e61209ccb956d0411e72bf43c7f78463", - "sha256:1362e9fb78ca72aa52ec1f1fbd62872801302001b0156ed2a1e707850cd30ffd", - "sha256:1502660ab489b1f18c3493c766252cd5d24bc1cbf4bdf3594e0a30de142ed453", - "sha256:16345146b61e93ca20679c83537ccf7245f78b17035f5b1a436fd2b75da04c5e", - "sha256:16cb00911584a6e9ca0f42c305714898120dc6bfbbec90dacedeed4690331a47", - "sha256:1af9b720a048c69e999094e2310138b7cfca5471a9d2c1dbe4b53dd10e516720", - "sha256:1e1553933f4533040491f4e4499bcbbfcee42c4056f56d7e18010e779daab33d", - "sha256:23b7bada6d6b62cba08f4a1b8a95da2d8592aae1db3c167dcb52abcba0a7bef5", - "sha256:27524bc92fdeb464a5057a4677a35f482cf30be2e920bd1d11c46de533cafda6", - "sha256:2c1b2c91bf991b5c641faee78dd5a751dff6155ec51c7a6c7f922dc85431898e", - "sha256:2cdf5700537e5aa4ec9f4a0b498b8d5b03b9859d503e01ea17a6a134a838aa30", - "sha256:302149aaff75939beb8af7f32ac9bf922480033a24fb54f4ebc0c9dc175247c4", - "sha256:305e6f7441c007f296644ba3899c0306ce9fd7a482dbbc06b6e7b7bd6e0ddabc", - "sha256:31e60d8341c3189aa156ca8cb2f6370b29d79cf132e3d091714b0a5a9097eb69", - "sha256:3cf37431de779b29e5c0d8e36868f77f6df53c3c19c20e8404137e257dc80040", - "sha256:3fb6a952796d16c3a309d866eef56a8f4e5591d112c22446e67d33ecb096b44b", - "sha256:433f91c8ab8338662aaa86b0677e6c15c35f8f7b65d4c43d7d1647a8198bc0b0", - "sha256:4abe2f829f6f2d330bccf1bcde2192264ab9a15d6d00e507265f46dc66557014", - "sha256:4b2d150a81a981537801ac7d4f4f5d082c48343612a21f4e2c4cd2e887973bd5", - "sha256:4b84230624d15868e407ba8b66df54fc69ee6a9e9cb6d51eb264b8f2614596f1", - "sha256:50d5e2c026b3e3d145f64c457338ea99edcbdd302fdcbd96418251ac51a98a59", - "sha256:5df10eb9b794932b0cf806f412d1c6d04fb7655ca7ae5caf6354b9edc380a5f7", - "sha256:699b0134e87c0c4e3b224d879d218c4385a06e6b72df73b4c9c9d549155fb837", - "sha256:6d19c34a2121eccfeb642d4ad71163bd3342a8f3a99e6724fe824bdfbc0a5b65", - "sha256:72fd7f6f940bc42914c86700591ccfd1daeff0e414cefcbd7843117df2fac4e9", - "sha256:748847e58c45a37f23db1f53a6dc16ae32aa80ee504653d79336830de1a79ed7", - "sha256:757a08bf0aed5a650a399f8c66bcba00c210bce34408b6d7b09b4837bee8f4da", - "sha256:7659bdfe7716b14a39007e31e957fa64d7f0d9e40a1dbd024bd81b972d76bffb", - "sha256:76bbbb9ceebb9cbb2b14369b3681fecab226792b339f612e79f6575ca31fed45", - "sha256:7776c070943f45cd8303543a6625cf82f2e000ef9c885d52d7828be099e52f42", - "sha256:78378d8dacbe1f4f263347f42ec0a41cc2097cd671c6ac30a65a838284a5e141", - "sha256:7a8995737fae8de03b31ed83acf4f4326a55b217022009d18be19ff87fc9010e", - "sha256:7d571056115bbdc18f199a9ee4c2a1b5884f5e63a3c05fe43d2fc7fc67320515", - "sha256:7f6540b45b2230442f7a0614745131e0a6f28251f5d33ac19d0ed61d80db7153", - "sha256:8591ad5768860ad186dc94fd58b2932604a7639b57eefbbff2b4865af3407691", - "sha256:860edf8533223d82bd6201894bcaf540f828f49075f363390eecf04b12fb94cb", - "sha256:86e9c48ffeddb0f943e87ab65e1e95dccc9b44ef3761af3bf9642973ab7646d2", - "sha256:87851a82bdf849e3c40ff6d8af5f734634e17f52a8f7f7e74486c2f8ce717578", - "sha256:87897ec0e4876c9f2c1ae313519de0ed2ad8041a4d2210a083f9b4a239add2e3", - "sha256:888df211aafe5fad41c0792a686d95c8ba37345d5037f437aa3c09608f9c3b56", - "sha256:8ab6770833976448a9a973bc0df63adedc4c30de4774cec5a9928fc496423ebb", - "sha256:8abd23f94cdcce971d932a5f0a066d40fbc61901fd087aa70d32cccd1793bd20", - "sha256:8b2f31a4cc28aef27355ab896e4b4cc2da2204b2b7adb674d8be7fefa0c93868", - "sha256:8b8fd92c8026e4ba6874e94f538890e35bef2a3a18ea54e3663c578b7916ade1", - "sha256:8becbb9649fd29ee577f9f0405ce2fba5cf9fa2c290c9b044bc235c04473f213", - "sha256:91f43f6b6c9129a56d3e2dccb8b88ffce0e4f4893dd9d69d285676bdf5b9ca14", - "sha256:979d42e0b2c3113526f9716a461e08671788a23ce7e3b5cd090ce3e6a6762641", - "sha256:980f6564218f853a9341fb045446539d4153338926ed2fb222e86dc9b2ae9b8f", - "sha256:99c9345c417a9cff98f9f6e59b0350dcc10c2e0e1ea66acf7946de1cd60541fa", - "sha256:9a544f99c24b6f658907eb9edf290a9c54f4106738b2ab84cd19dc6013cc3abf", - "sha256:9ee181cc00aaba38d9812f4df4e7d828105b6dde3b068cd2c43f1d8f395e0046", - "sha256:a1d439c98e65ab8e5fbcc2b242a16e7a3f076974bff78185ff42ba2d4c220032", - "sha256:a5fc2512bdf5289a1412c936c65d17881d2b46edb0036c63a8d5605dc8d398a3", - "sha256:a69c99274aee2ffdc7f1cfd34044ccb7155790d6f5217d677ea46a6ddead6dd2", - "sha256:b43d56c7c96f5a055f4051be426496db2a616840645d0ab3733d5ceacb2f701b", - "sha256:b508e1bba4ec68fd0ef28505e2dad2f56de7df710c8334c97036705a562cb908", - "sha256:b5df624ee8a4098c3b1149f4817f2a4a0121c4920e1c114af324bc52d6659e2b", - "sha256:bd7f4b2df89bf4e298756c0be0be67fb84d6aa49bda60d46805d43f0e643abd5", - "sha256:c3956ae54285ab30d802756144887e30e013f81c9f03e5ffff9daa46d8ca0154", - "sha256:c531532c21bc1063e65957a1a85a2d13601ec21801f70821c89d9339b16ebc78", - "sha256:cb1d60ed709989e34e7158d97fdb077a2f2dfc505998a84161a70f81a6101172", - "sha256:cb46c3a4002c8322dd0e1b4b53f8a647dcb0f199f5c7a1fc03d3880c3eabbd2c", - "sha256:cb9a8ee23416bd0cfd457118978bc2f6f02c20b95336db486887f670bf92c2b7", - "sha256:d089b1d0b157c9a484f8f7475eecea813d0dc3818adc5bf352903da14fe88fc3", - "sha256:d3b5abb73c45d40d27f9795dac9d6eb1515729c13f93dd67df2be07be6549990", - "sha256:d63f20299441e32171f08fc62f7ea7e401cc12a96f67a36ab2d76439ecfcb118", - "sha256:da1570f301abdfda68f4fdb40c4d3f09af4bb6e4550b4fa5395db0d142b680bc", - "sha256:e2a0313657e6656efca2148cfc91c50fdafca6f811b6c7d0906e6ba57134e560", - "sha256:e4b7fdb9772e087174f446655bbc497a1600b5758f279c6d44fcf344c13d5c8a", - "sha256:ea33ed09157e032f0a7a2627ef87f156e9927697f59b55961439d34bf45af23a", - "sha256:f64abe9301b918d2c352e42198cea0196f3639bc1ad23a4a9d8ae97f66068901", - "sha256:f71256a32609b036adad932e1228b66a6b4e2cae6be397e588ddc0babd9a78b9", - "sha256:fb3f003dee96dbf24a6df71443557f249b17b20083c189995302b14eb01530bf", - "sha256:fe80c23409efb41b86efb5e45f334420a9b5b7828f5b3d08b5ff28f03a024d9e" - ], - "version": "==2.7.3" + "sha256:0331ce777174f1f06e592b5199e056cdece817181522d75e5671ef728bb5c591", + "sha256:0474532ad832da5a6c4f4127d64de68455a5948dcb9e824aa4a3927ced87ba1f", + "sha256:05c868339a9fb6095b600a4e576b76e269710ad519b00861d6b2a319e7d24465", + "sha256:0970faa5ce3ca6601d29f242941b5920c601535ac850aa9be942bcfe99636619", + "sha256:143d4f65e1f45a533e13521be1dc557a782317ecf76520eabd5a903b26ecb187", + "sha256:168acedc8ad7b87d01b6b733d37b0414aa4da6d10e1eedebb6cf3d79389fcef2", + "sha256:19bb60f0f3f99d066d4ad75247490107f7d3f0ba8f97b4f686f71bec8b0b2a68", + "sha256:1bcc809a67b03d7950a7f01cb8bb35b9a2b7fe9361f10aaf2fdfa44073ffed0d", + "sha256:1ffd91235c8a7c7ea3e3a6f710545b578c901303d6b98b7d2ee730ebf9c2a4ff", + "sha256:21f1ae716f61bf700327dd8e47a993a1b0bce30f1e8881f6bd6243223b6bafff", + "sha256:21ff72a03a9e60c43a98cb3b0f8c246414fae1a3bbbf425af06f6f350cde30d2", + "sha256:22dc38cb226b7604dbdd2d5504cf8d0a2e645e353eb158fed56d908e3243aea1", + "sha256:2435ac2598ae7caf283bf6af6c3e03f4dc6adf5a3bfaf01ffc719bd61411647b", + "sha256:2e55ad91330c2f1ff78f4b904b897e691d623a1858466924fb39233e669b1219", + "sha256:2e8365a513c1eaab2457e7065f517221bf11bf4909231f4b3e5204844b66bcbb", + "sha256:382e76863e9ad999af9ff0e5061d2df47abebcddeaa897da7924234f772db698", + "sha256:3ac1be1f87c67dc7e3640496427b6a291684a5612ede5b9a33aa34f620395985", + "sha256:3b3d319d89ee099279ec8c3efd57c2f21cd0b8d34e2ad0b5db07f3e45c4568d8", + "sha256:3c0f8520112563a306219ce1d4d9120a09179f5c7014e6cc629aeeb821436ecb", + "sha256:3cb3d4660075ee690549034c18093b1766168dc925ca16f76ab8d64250a96120", + "sha256:4138461ffb2605515fd5c7199c1d870095b3913fe2d0a195b21492ff84901168", + "sha256:4366f2998a63013fe260b8a34051858c98d6680a8bc832529d500af9e820f991", + "sha256:44203138e5a0548f120c40cf24bf27fc7e05ca5dc698f1f8fa53bfb9bdd1b700", + "sha256:4a9e2c9b6e391a167e1a87058ed3777440f5d4db623724832b762c704fe6f062", + "sha256:509a12c3f4a8abfcee3eec02000883b5cdce3e689bb99cdc5fac3767b6b7d2c5", + "sha256:50c7bb2d950c6ec10d02f47f6fd9e786ff890a4879e04bd62c74f0204c62c419", + "sha256:5423427bb3af9b75e01a4aca6d38e84906b16ff9f62e2a64dce877c9505735a3", + "sha256:54e1bdcdf3c4541a9df432c73c117be9d195629a4d9a705c9d61a05c797fb0c1", + "sha256:553f3a4d97d7974e7632f754411d91f4f435756fd961204ee494a2af68137b4f", + "sha256:58e3ce453708f43f9666a1abed97c50e052351631d7463fdea07d8e9f50dd9bd", + "sha256:656195c2e378cab88c98fbbad723104d1b75483d6a88df6049c81ca7303e3d88", + "sha256:6b417fb3d2c5636c369eda939db33dac97115fce72a192c63e1210db78ce4e9f", + "sha256:6f502bcef6e215b837db2c84150275ada5120c78776caffda26291c4b6688646", + "sha256:70fbb07504d63a5d793107ce16b0722de7fa45aca943959153b05ddc04f41cf3", + "sha256:716fdc54eaea23029d95f285b94d1bb1954aaeaa16ceb51910f3923ea13950e5", + "sha256:72cae6daf2e56675dfe4f65caf1d63ee74295926d0bb78c27d8e1b49a91dbae2", + "sha256:74d4fb48e2463638ce7be1c20613a7e118485bb46cfd84bc2a14c7d3b098f49c", + "sha256:7dac4575632f2900e7aed2f3a75c3ff672786bdfba8c000a86e62eea62d2a018", + "sha256:84262cadabc706a11affc6a80cc7ff3a0d0f2b7bd33eef58f9d733cfe260e6da", + "sha256:857c90a35ebaa1157b280ec62571e124384ca737434681d1a59de375795cc9d9", + "sha256:8712c561d370d7667c861e14e69fcce63ca761e50fb3cc7ef79682eeeaed567b", + "sha256:90a1cd9fe75eb91534ebf5459e9f2d4c83d5399f6ec812584d3dfc84440d784c", + "sha256:90d7f4c75174ed190c60854bce461fa6be66a9005e4bc595b8f134b31601ce90", + "sha256:94fdfaa747d5fcb996ff060a1396a6cb3132a3404ba7b019748370fafe3ff1dd", + "sha256:9944648f9f12a500c46e1786088a40e9711afc9c51db2370610f974e851dac9c", + "sha256:9c2cc2ab01bd1d809e9e5b0be28b25901db2a87b6ae483d29a744764cb89988e", + "sha256:9c6ef513b8166af421178027efbbf9b51a322645a00a2fa73809f27a899c1acb", + "sha256:9f79ad4d19595f9f9dd615a33a95c2eeb1b88705de3fbf96677b057b48408039", + "sha256:a3f5defdc2d36d969febeef7508a0bf7e93cdfb3325ac95863d95d753c23c99f", + "sha256:a625129aa68d7886a86bb0d5166c72fc0849f0e34dd88e8b772be3c7fcd6fd8b", + "sha256:a7d41e52d2295f53f5a03c62efbcb6d481f3b9a8ff87c2e072d2adb879f4929e", + "sha256:a99deab760c063e200ed3267893b87534deeaaa4ffc03da54942a7833e59fe51", + "sha256:abc528163aa87642b968a06af467b4db1e7f303784b30e0b2cc120aaba4bf887", + "sha256:adb48a4bb255d69fb22ac27d7ac92280731905a3b19f377ab1f02478c309b501", + "sha256:af991272a2a20396c79d07847d96370490a2eca0c781792c9c7cd7deff863297", + "sha256:b0274bf5a568d3322052403758c7ba0e32a005474115592cdb74d54cfa2b1772", + "sha256:b07ea1bb32f7ed62f2f693dabc91bd41e0977205fefbeb4fa93733518c09273a", + "sha256:b2a70ffabcce0efe8cf6113526c5dcb70c6e7b912289c84f0ad8c4288d7b1c0f", + "sha256:b4a94c1f94a8a4ebe51a375490eccec94261aa357edd4faf5ca2398e8c30ebd1", + "sha256:b56e07e21a24ca580bff7ef5eebef8d28bfe139c9a24da76359399ce20d33bc1", + "sha256:b73f48f85ba28c10db498bc2654678b7b9076d08ec34542101e9bfa3e209a6ee", + "sha256:b81c2d73a7b348c957aac8ee71076a80e92b29deb68db49ff941a4306cb419e8", + "sha256:bbfb02fde64b14a820a9268836103b028f20a206333fc6d637e3e663824b64ad", + "sha256:bdc829b1eecd57ee9b65c3b6c61814671683e061b21a267c64b8f1db29703bca", + "sha256:bf7921fef3e869e51734306174ed52d8ec11c8c359fcf98d72c4bee8d9fb82fc", + "sha256:bf8f13fc2d91960f94f8a8a3ad2e824cb1ca7bb49d1f905f9201327bdf9c086f", + "sha256:c2100c7b5bc813350ad8abe30f7223c9398d86ab30ebeffc7f780938fd53c009", + "sha256:c3aad9c8944a1cc2d3ac6f31fcfe164e22b1785e24f85b6f89b377667c5a5a87", + "sha256:ceb0e02a73d4908ab9aa72eb6c7fa04eec37daad2d93192892a5f3a6947264db", + "sha256:d03fe73637a798ac39adcefb18d8bb78eaa3529f79e6455ee462a1fb084adbf6", + "sha256:d1814b9185aedcb75fc7f7e02753be7fa114d18f8bb29f0e31a84507ed7d01ee", + "sha256:d6540e180eccb4e5c6df2d460df7b1b0d12a00364b73806a1df8cf1d8f1a34eb", + "sha256:d83881e4594c136301d1ec8d783f456dd6b001316588a781f16ddd20522c5d83", + "sha256:daa1239c5b388b6f5c51426eee0c70fad7f24d0668e4b461e66c8755f996d4cb", + "sha256:daa88834560f9c655231b6c3ed8ac069755a7f48ff8c3d37a5ffb88108e8c69d", + "sha256:de72f691895ee41cd720b335ab52d7dc979dd1348eb06891bd5093aa6988cfbd", + "sha256:e2f89fbe7dcd915a5bc4a53ed7be0e1640d3a84a5347db722e7249b715b8b91a", + "sha256:e5175dfe778839c6bf4e3496e4487dac0508a49c9a23c4a5b4fe29d2d1411543", + "sha256:e5b284c11eced377fa799f66fe69208d140a3ffcb29a767e57e9c66e66f061ad", + "sha256:ea6bda210224d23bef6af867adfc37bdf150fd9efdbfbdf61ba3b381b57583c5", + "sha256:ebc4ea4c48b050becdd177cf9b0a5d4be99cfa52a118fbe34f871156e5b1ad39", + "sha256:ed833c809ddff4d4ec81c878dd0b1a8a9b7de094d35dbc623b21cba707c26839", + "sha256:f30a89d673945109a64d2c3cb5bc2c707ed18efb8e018b6a9d233cb08034525d", + "sha256:f3f3d9cbd3e4032cc0b562a69cd7b2d7f7a7c96cc681871029f92bf49e99fb06", + "sha256:f4cdb4e3565d2fee759053272e6ec26ba8a7185f6bccba9e78a98d4df0ed08a2", + "sha256:fc99267064529627b28b53f8eeac64e3ac42a936c4f8c703122a6e14f77a1ea0", + "sha256:fce679c2d607ac7552516fbd08e1834ec4ef883ebcd94183daaf6190f4a2fc6b" + ], + "version": "==2.7.4" }, "bytestring-splitter": { "hashes": [ @@ -2459,28 +2485,28 @@ }, "cryptography": { "hashes": [ - "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", - "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", - "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", - "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", - "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", - "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", - "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", - "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", - "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", - "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", - "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", - "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", - "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", - "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", - "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", - "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", - "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", - "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", - "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" + "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db", + "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a", + "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039", + "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c", + "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3", + "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485", + "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c", + "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca", + "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5", + "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5", + "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3", + "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb", + "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43", + "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31", + "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc", + "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b", + "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006", + "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a", + "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699" ], - "markers": "python_version >= '3.6'", - "version": "==40.0.2" + "markers": "python_version >= '3.7'", + "version": "==41.0.1" }, "cytoolz": { "hashes": [ @@ -2612,11 +2638,11 @@ }, "deprecated": { "hashes": [ - "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d", - "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d" + "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", + "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.2.13" + "version": "==1.2.14" }, "distlib": { "hashes": [ @@ -2657,11 +2683,11 @@ }, "eth-ape": { "hashes": [ - "sha256:afc51a1b8511d0af64400b8846923d5839af56b77ee8867021aa9750bbaaa8ba", - "sha256:f186855fcc3ae2adc35c39734046fcbebbcf7f043fc5bdca1848c8a795784e3c" + "sha256:b1cc962ab330bafbe2a1f8dd63d06f91d1d51c46f148c16388a7bc782a7f9d57", + "sha256:c7153620a840fee054aabdfe2ccd49c9f33cb300b63879dadc9191bf1847774f" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.6.9" + "version": "==0.6.10" }, "eth-bloom": { "hashes": [ @@ -2727,11 +2753,11 @@ }, "ethpm-types": { "hashes": [ - "sha256:7f5637ab33e9c9895732354f632cee595cfc4ce3362bc95e9ac8a7a37cce1e9e", - "sha256:a27ceed908a24dfb5b01da51b01d90acb6f742468996f049c91b6b7c4a8c4fb2" + "sha256:5e848d26b1250c1c076b17b2eada0bc2d04543766dfcb96d790fd5d2bb771c1e", + "sha256:a1d17d7f8474948c91ce5628e1de098eae4dffaa5792a0eb585294288046d4c3" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.5.1" + "version": "==0.5.2" }, "evm-trace": { "hashes": [ @@ -2756,14 +2782,6 @@ ], "version": "==1.2.0" }, - "ferveo": { - "hashes": [ - "sha256:782e8f1745a7d38c7dcbd72936e54a1a8a9514a674095f4b60fb9e4f469b9637", - "sha256:84b4a45523f3c314d1d50e09a92d66b2b9e9d4f82f03534394123ce4e11bf8d7" - ], - "markers": "python_version >= '3.7'", - "version": "==0.1.13" - }, "filelock": { "hashes": [ "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9", @@ -2958,11 +2976,11 @@ }, "hypothesis": { "hashes": [ - "sha256:15cdadb80a7ac59087581624d266a4fb585b5cce9b7f88f506c481a9f0e583f6", - "sha256:a12bf34c29bd22757d20edf93f95805978ed0ffb8d0b22dbadc890a79dc9baa8" + "sha256:034f73dd485933b0f4c319d7c3c58230492fdd7b16e821d67d150a78138adb93", + "sha256:526657eb3e4f2076b0383f722b2e6a92fd15d1d42db532decae8c41b14cab801" ], "markers": "python_version >= '3.7'", - "version": "==6.75.3" + "version": "==6.76.0" }, "identify": { "hashes": [ @@ -3128,19 +3146,19 @@ }, "jsonschema": { "hashes": [ - "sha256:112d303b0291095108013e712d4038d85f11dfc6b0141430932fce7c33d221b8", - "sha256:e8a9b0e9245d8e9c57e2281f30f1d11e0326abb919aa6866997a016487fcaef8" + "sha256:d6a4f48fcecc06e8915c30de13076837b624999167655c4c643b50ed93c0e526", + "sha256:f1eb210cc329f9cc09bd10c5f7a287f5b1538de6d5662ef2528b9f9b428dbd85" ], "markers": "python_version >= '3.8'", - "version": "==4.18.0a7" + "version": "==4.18.0a9" }, "jsonschema-specifications": { "hashes": [ - "sha256:2914352153a22053662886c096a4d905a41e771f28baa52c86d135b359dc64ed", - "sha256:ca4c182adb268045fb70e6c09eb818ff4f9d27e762725b0f257cfdd318dffca9" + "sha256:1aefc07b022e3b8ce8bec135c78b74ae1ffd260822c67011427192b3a7525e09", + "sha256:51d2972bf690cfe21970f722f878580d863f7c127d200fce671c5dae10b88f5f" ], "markers": "python_version >= '3.8'", - "version": "==2023.5.1" + "version": "==2023.5.2" }, "lazyasd": { "hashes": [ @@ -3150,56 +3168,90 @@ }, "lru-dict": { "hashes": [ - "sha256:075b9dd46d7022b675419bc6e3631748ae184bc8af195d20365a98b4f3bb2914", - "sha256:0972d669e9e207617e06416166718b073a49bf449abbd23940d9545c0847a4d9", - "sha256:0f83cd70a6d32f9018d471be609f3af73058f700691657db4a3d3dd78d3f96dd", - "sha256:10fe823ff90b655f0b6ba124e2b576ecda8c61b8ead76b456db67831942d22f2", - "sha256:163079dbda54c3e6422b23da39fb3ecc561035d65e8496ff1950cbdb376018e1", - "sha256:1fe16ade5fd0a57e9a335f69b8055aaa6fb278fbfa250458e4f6b8255115578f", - "sha256:262a4e622010ceb960a6a5222ed011090e50954d45070fd369c0fa4d2ed7d9a9", - "sha256:2f340b61f3cdfee71f66da7dbfd9a5ea2db6974502ccff2065cdb76619840dca", - "sha256:348167f110494cfafae70c066470a6f4e4d43523933edf16ccdb8947f3b5fae0", - "sha256:3b1692755fef288b67af5cd8a973eb331d1f44cb02cbdc13660040809c2bfec6", - "sha256:3ca497cb25f19f24171f9172805f3ff135b911aeb91960bd4af8e230421ccb51", - "sha256:3d003a864899c29b0379e412709a6e516cbd6a72ee10b09d0b33226343617412", - "sha256:3fef595c4f573141d54a38bda9221b9ee3cbe0acc73d67304a1a6d5972eb2a02", - "sha256:484ac524e4615f06dc72ffbfd83f26e073c9ec256de5413634fbd024c010a8bc", - "sha256:55aeda6b6789b2d030066b4f5f6fc3596560ba2a69028f35f3682a795701b5b1", - "sha256:5a592363c93d6fc6472d5affe2819e1c7590746aecb464774a4f67e09fbefdfc", - "sha256:5b09dbe47bc4b4d45ffe56067aff190bc3c0049575da6e52127e114236e0a6a7", - "sha256:6e2a7aa9e36626fb48fdc341c7e3685a31a7b50ea4918677ea436271ad0d904d", - "sha256:70364e3cbef536adab8762b4835e18f5ca8e3fddd8bd0ec9258c42bbebd0ee77", - "sha256:720f5728e537f11a311e8b720793a224e985d20e6b7c3d34a891a391865af1a2", - "sha256:7284bdbc5579bbdc3fc8f869ed4c169f403835566ab0f84567cdbfdd05241847", - "sha256:7be1b66926277993cecdc174c15a20c8ce785c1f8b39aa560714a513eef06473", - "sha256:86d32a4498b74a75340497890a260d37bf1560ad2683969393032977dd36b088", - "sha256:878bc8ef4073e5cfb953dfc1cf4585db41e8b814c0106abde34d00ee0d0b3115", - "sha256:881104711900af45967c2e5ce3e62291dd57d5b2a224d58b7c9f60bf4ad41b8c", - "sha256:8c50ab9edaa5da5838426816a2b7bcde9d576b4fc50e6a8c062073dbc4969d78", - "sha256:8f6561f9cd5a452cb84905c6a87aa944fdfdc0f41cc057d03b71f9b29b2cc4bd", - "sha256:93336911544ebc0e466272043adab9fb9f6e9dcba6024b639c32553a3790e089", - "sha256:9447214e4857e16d14158794ef01e4501d8fad07d298d03308d9f90512df02fa", - "sha256:97c24ffc55de6013075979f440acd174e88819f30387074639fb7d7178ca253e", - "sha256:99f6cfb3e28490357a0805b409caf693e46c61f8dbb789c51355adb693c568d3", - "sha256:9be6c4039ef328676b868acea619cd100e3de1a35b3be211cf0eaf9775563b65", - "sha256:9d70257246b8207e8ef3d8b18457089f5ff0dfb087bd36eb33bce6584f2e0b3a", - "sha256:a777d48319d293b1b6a933d606c0e4899690a139b4c81173451913bbcab6f44f", - "sha256:add762163f4af7f4173fafa4092eb7c7f023cf139ef6d2015cfea867e1440d82", - "sha256:b6f64005ede008b7a866be8f3f6274dbf74e656e15e4004e9d99ad65efb01809", - "sha256:beb089c46bd95243d1ac5b2bd13627317b08bf40dd8dc16d4b7ee7ecb3cf65ca", - "sha256:c07163c9dcbb2eca377f366b1331f46302fd8b6b72ab4d603087feca00044bb0", - "sha256:c2fe692332c2f1d81fd27457db4b35143801475bfc2e57173a2403588dd82a42", - "sha256:ca8f89361e0e7aad0bf93ae03a31502e96280faeb7fb92267f4998fb230d36b2", - "sha256:d2ed4151445c3f30423c2698f72197d64b27b1cd61d8d56702ffe235584e47c2", - "sha256:db20597c4e67b4095b376ce2e83930c560f4ce481e8d05737885307ed02ba7c1", - "sha256:de972c7f4bc7b6002acff2a8de984c55fbd7f2289dba659cfd90f7a0f5d8f5d1", - "sha256:f1df1da204a9f0b5eb8393a46070f1d984fa8559435ee790d7f8f5602038fc00", - "sha256:f4d0a6d733a23865019b1c97ed6fb1fdb739be923192abf4dbb644f697a26a69", - "sha256:f874e9c2209dada1a080545331aa1277ec060a13f61684a8642788bf44b2325f", - "sha256:f877f53249c3e49bbd7612f9083127290bede6c7d6501513567ab1bf9c581381", - "sha256:f9d5815c0e85922cd0fb8344ca8b1c7cf020bf9fc45e670d34d51932c91fd7ec" + "sha256:00f6e8a3fc91481b40395316a14c94daa0f0a5de62e7e01a7d589f8d29224052", + "sha256:020b93870f8c7195774cbd94f033b96c14f51c57537969965c3af300331724fe", + "sha256:05fb8744f91f58479cbe07ed80ada6696ec7df21ea1740891d4107a8dd99a970", + "sha256:086ce993414f0b28530ded7e004c77dc57c5748fa6da488602aa6e7f79e6210e", + "sha256:0c316dfa3897fabaa1fe08aae89352a3b109e5f88b25529bc01e98ac029bf878", + "sha256:0facf49b053bf4926d92d8d5a46fe07eecd2af0441add0182c7432d53d6da667", + "sha256:1171ad3bff32aa8086778be4a3bdff595cc2692e78685bcce9cb06b96b22dcc2", + "sha256:1184d91cfebd5d1e659d47f17a60185bbf621635ca56dcdc46c6a1745d25df5c", + "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7", + "sha256:18ee88ada65bd2ffd483023be0fa1c0a6a051ef666d1cd89e921dcce134149f2", + "sha256:203b3e78d03d88f491fa134f85a42919020686b6e6f2d09759b2f5517260c651", + "sha256:20f5f411f7751ad9a2c02e80287cedf69ae032edd321fe696e310d32dd30a1f8", + "sha256:21b3090928c7b6cec509e755cc3ab742154b33660a9b433923bd12c37c448e3e", + "sha256:22147367b296be31cc858bf167c448af02435cac44806b228c9be8117f1bfce4", + "sha256:231d7608f029dda42f9610e5723614a35b1fff035a8060cf7d2be19f1711ace8", + "sha256:25f9e0bc2fe8f41c2711ccefd2871f8a5f50a39e6293b68c3dec576112937aad", + "sha256:287c2115a59c1c9ed0d5d8ae7671e594b1206c36ea9df2fca6b17b86c468ff99", + "sha256:291d13f85224551913a78fe695cde04cbca9dcb1d84c540167c443eb913603c9", + "sha256:312b6b2a30188586fe71358f0f33e4bac882d33f5e5019b26f084363f42f986f", + "sha256:34a3091abeb95e707f381a8b5b7dc8e4ee016316c659c49b726857b0d6d1bd7a", + "sha256:35a142a7d1a4fd5d5799cc4f8ab2fff50a598d8cee1d1c611f50722b3e27874f", + "sha256:3838e33710935da2ade1dd404a8b936d571e29268a70ff4ca5ba758abb3850df", + "sha256:5345bf50e127bd2767e9fd42393635bbc0146eac01f6baf6ef12c332d1a6a329", + "sha256:5919dd04446bc1ee8d6ecda2187deeebfff5903538ae71083e069bc678599446", + "sha256:59f3df78e94e07959f17764e7fa7ca6b54e9296953d2626a112eab08e1beb2db", + "sha256:5b172fce0a0ffc0fa6d282c14256d5a68b5db1e64719c2915e69084c4b6bf555", + "sha256:5c6acbd097b15bead4de8e83e8a1030bb4d8257723669097eac643a301a952f0", + "sha256:5d90a70c53b0566084447c3ef9374cc5a9be886e867b36f89495f211baabd322", + "sha256:604d07c7604b20b3130405d137cae61579578b0e8377daae4125098feebcb970", + "sha256:6b7a031e47421d4b7aa626b8c91c180a9f037f89e5d0a71c4bb7afcf4036c774", + "sha256:6da5b8099766c4da3bf1ed6e7d7f5eff1681aff6b5987d1258a13bd2ed54f0c9", + "sha256:712e71b64da181e1c0a2eaa76cd860265980cd15cb0e0498602b8aa35d5db9f8", + "sha256:71da89e134747e20ed5b8ad5b4ee93fc5b31022c2b71e8176e73c5a44699061b", + "sha256:756230c22257597b7557eaef7f90484c489e9ba78e5bb6ab5a5bcfb6b03cb075", + "sha256:7d3336e901acec897bcd318c42c2b93d5f1d038e67688f497045fc6bad2c0be7", + "sha256:7e51fa6a203fa91d415f3b2900e5748ec8e06ad75777c98cc3aeb3983ca416d7", + "sha256:877801a20f05c467126b55338a4e9fa30e2a141eb7b0b740794571b7d619ee11", + "sha256:87bbad3f5c3de8897b8c1263a9af73bbb6469fb90e7b57225dad89b8ef62cd8d", + "sha256:8bda3a9afd241ee0181661decaae25e5336ce513ac268ab57da737eacaa7871f", + "sha256:8dafc481d2defb381f19b22cc51837e8a42631e98e34b9e0892245cc96593deb", + "sha256:91d577a11b84387013815b1ad0bb6e604558d646003b44c92b3ddf886ad0f879", + "sha256:981ef3edc82da38d39eb60eae225b88a538d47b90cce2e5808846fd2cf64384b", + "sha256:987b73a06bcf5a95d7dc296241c6b1f9bc6cda42586948c9dabf386dc2bef1cd", + "sha256:9e4c85aa8844bdca3c8abac3b7f78da1531c74e9f8b3e4890c6e6d86a5a3f6c0", + "sha256:a3ea7571b6bf2090a85ff037e6593bbafe1a8598d5c3b4560eb56187bcccb4dc", + "sha256:a87bdc291718bbdf9ea4be12ae7af26cbf0706fa62c2ac332748e3116c5510a7", + "sha256:aaecd7085212d0aa4cd855f38b9d61803d6509731138bf798a9594745953245b", + "sha256:ae301c282a499dc1968dd633cfef8771dd84228ae9d40002a3ea990e4ff0c469", + "sha256:afdadd73304c9befaed02eb42f5f09fdc16288de0a08b32b8080f0f0f6350aa6", + "sha256:b20b7c9beb481e92e07368ebfaa363ed7ef61e65ffe6e0edbdbaceb33e134124", + "sha256:b30122e098c80e36d0117810d46459a46313421ce3298709170b687dc1240b02", + "sha256:b55753ee23028ba8644fd22e50de7b8f85fa60b562a0fafaad788701d6131ff8", + "sha256:b5ccfd2291c93746a286c87c3f895165b697399969d24c54804ec3ec559d4e43", + "sha256:b6613daa851745dd22b860651de930275be9d3e9373283a2164992abacb75b62", + "sha256:b710f0f4d7ec4f9fa89dfde7002f80bcd77de8024017e70706b0911ea086e2ef", + "sha256:b9ec7a4a0d6b8297102aa56758434fb1fca276a82ed7362e37817407185c3abb", + "sha256:bb12f19cdf9c4f2d9aa259562e19b188ff34afab28dd9509ff32a3f1c2c29326", + "sha256:bd2cd1b998ea4c8c1dad829fc4fa88aeed4dee555b5e03c132fc618e6123f168", + "sha256:c4da599af36618881748b5db457d937955bb2b4800db891647d46767d636c408", + "sha256:c53b12b89bd7a6c79f0536ff0d0a84fdf4ab5f6252d94b24b9b753bd9ada2ddf", + "sha256:c9617583173a29048e11397f165501edc5ae223504a404b2532a212a71ecc9ed", + "sha256:cd46c94966f631a81ffe33eee928db58e9fbee15baba5923d284aeadc0e0fa76", + "sha256:cd6806313606559e6c7adfa0dbeb30fc5ab625f00958c3d93f84831e7a32b71e", + "sha256:d0dd4cd58220351233002f910e35cc01d30337696b55c6578f71318b137770f9", + "sha256:d0f7ec902a0097ac39f1922c89be9eaccf00eb87751e28915320b4f72912d057", + "sha256:d5bb41bc74b321789803d45b124fc2145c1b3353b4ad43296d9d1d242574969b", + "sha256:d7ab0c10c4fa99dc9e26b04e6b62ac32d2bcaea3aad9b81ec8ce9a7aa32b7b1b", + "sha256:de24b47159e07833aeab517d9cb1c3c5c2d6445cc378b1c2f1d8d15fb4841d63", + "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641", + "sha256:df25a426446197488a6702954dcc1de511deee20c9db730499a2aa83fddf0df1", + "sha256:e25b2e90a032dc248213af7f3f3e975e1934b204f3b16aeeaeaff27a3b65e128", + "sha256:e707d93bae8f0a14e6df1ae8b0f076532b35f00e691995f33132d806a88e5c18", + "sha256:ea2ac3f7a7a2f32f194c84d82a034e66780057fd908b421becd2f173504d040e", + "sha256:ead83ac59a29d6439ddff46e205ce32f8b7f71a6bd8062347f77e232825e3d0a", + "sha256:edad398d5d402c43d2adada390dd83c74e46e020945ff4df801166047013617e", + "sha256:f010cfad3ab10676e44dc72a813c968cd586f37b466d27cde73d1f7f1ba158c2", + "sha256:f404dcc8172da1f28da9b1f0087009578e608a4899b96d244925c4f463201f2a", + "sha256:f54908bf91280a9b8fa6a8c8f3c2f65850ce6acae2852bbe292391628ebca42f", + "sha256:f5d5a5f976b39af73324f2b793862859902ccb9542621856d51a5993064f25e4", + "sha256:f9484016e6765bd295708cccc9def49f708ce07ac003808f69efa386633affb9", + "sha256:fbf36c5a220a85187cacc1fcb7dd87070e04b5fc28df7a43f6842f7c8224a388", + "sha256:fc42882b554a86e564e0b662da47b8a4b32fa966920bd165e27bb8079a323bc1" ], - "version": "==1.1.8" + "version": "==1.2.0" }, "mako": { "hashes": [ @@ -3211,59 +3263,59 @@ }, "markupsafe": { "hashes": [ - "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", - "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", - "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", - "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", - "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", - "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", - "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", - "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", - "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", - "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", - "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", - "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", - "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", - "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", - "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", - "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", - "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", - "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", - "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", - "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", - "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", - "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", - "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", - "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", - "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", - "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", - "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", - "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", - "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", - "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", - "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", - "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", - "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", - "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", - "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", - "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", - "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", - "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", - "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", - "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", - "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", - "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", - "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", - "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", - "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", - "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", - "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", - "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", - "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", - "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" ], "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "version": "==2.1.3" }, "marshmallow": { "hashes": [ @@ -3506,29 +3558,29 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "9305d4d76c22dee587cbc20d443c43b757e41485" + "ref": "0bbd734c64a3c3ab8caca80dbc6be155db93a5e7" }, "nucypher-core": { "hashes": [ - "sha256:28489ded2fd94fc1ac541c199624d7206ce83a9a275c40c913390977e3c18e08", - "sha256:2f85aebf29435f8359f6092cbfb7b0f754623e473107c7e2dd8a7c7c3881b2a4", - "sha256:37dade4937218fd47e7d8f3f8eabc41516f99b75b9fd09671bf4b74834fbdd2f", - "sha256:3bb1f181e5e176de74efc4cc8efa462383c8754433750fcb0a69d91b6c2e8460", - "sha256:6358879b2660602a5e1ab860d7853f0c04173392825bbec2beaec5f25040e382", - "sha256:689f9a3d996de90fd2758cd83ce75b60e5c1cfbaf3b45d36b05122eadaad962e", - "sha256:6c5bb09e1f609363edd4147a45f6d535cc29a317407ba209c9608308c27d5890", - "sha256:85411e3a33ee7c6680d88d14e221df122b2ae8c3d8a9dd388107fd4f9393431e", - "sha256:8a21482a84a7932707b9c74e3c34372559d50eb9a31f3bbd99d43bf5d3deb7c5", - "sha256:986e247a6023a859f7ad5712d8256adf385191817a45b04ea04e35d083fec02f", - "sha256:ac241d959c2f721a73ba60d0fc66ff813061baef6c6b928d199e2ed7fbcb6d26", - "sha256:be86a5d179e6873fd3e1c8917423853182cfd2b34ba54d0909494fb027a6836b", - "sha256:c7605e7a9a6dbb9577f80c59eedff576519aa5716dff4c9667a27fc116dc642e", - "sha256:caa5afb7459ccca0fe22e200204f3324373c08a68a0f7bd8f278bb628c5844b7", - "sha256:eab9c077d0c6479e56ad61e49096d1ccea22dd36d99789e19b162c7e7fd0aa39", - "sha256:f74faf208aecf1edcc83640ed2696a75315de5088fec51650c3e38d13f041587" + "sha256:05e5c3559bfe9315642d2cca14ddabd00072f28cf5949f75b6f1ea09e39cd496", + "sha256:10b5c282b1b40fc719fb14e02098b789b212fe1e8ad61260c2482dd0da279bc1", + "sha256:33dc84371e3e692a924cbd8df3be001b46ba393572016f9e9d97e951ca5b3974", + "sha256:3a4f7b4f4dc35200a3c09c9cc68f485fea58b1e153efd5ffb3ba5a5a92b7b4be", + "sha256:5e3e6ae1be94c1082ab96704d3ed3b8e938a3996c2d09f36dbf2fd756efaf063", + "sha256:6aadb27a8a1675fb5b0af720ba63d4fb9b28aad3d33bbefeb9f3f0e7f25a32e6", + "sha256:802e7e56328253080260016f40121bca889c22c2e4de55bbcd8039d7c7066703", + "sha256:8fa7003d4b9cd26a51d86cec3f34be15dd29e28565a7db63ef67496d152f71aa", + "sha256:944b27c4df95e0b0c1119bcd53786ca29e2d1bbf33c417a7511346885100a4bc", + "sha256:99710afe0df83d749b22a571ec7cddfbc3cca1e3805bf39da3707cd5ae593486", + "sha256:b1d5904308854ab51dbccd4a064347b34f001edace90d1f4521da99e0fec1e48", + "sha256:b33b7608de37c358ae544ae169d810e8e20e18f1ac87d1cecbffb99e300009ff", + "sha256:cb5b6d8fd0f8daf8011477663861b2df1919e80c8b863aed56a7ca65e024fb47", + "sha256:d239ccabd6b5d8878895ce5282ca672e17b076a372dd28ecedcd2db4cb02521d", + "sha256:d949842943acc401b2f72c681b92fb5bd3e3f1e047d3feb71096f2782127cc8d", + "sha256:e2122115e5306b88f4d522f6f4dac3ec99e266ecdbad67af7440822e1e0a91ba" ], "index": "pypi", - "version": "==0.8.0" + "version": "==0.9.0" }, "numpy": { "hashes": [ @@ -3721,11 +3773,11 @@ }, "prometheus-client": { "hashes": [ - "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab", - "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48" + "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b", + "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce" ], "markers": "python_version >= '3.6'", - "version": "==0.16.0" + "version": "==0.17.0" }, "prompt-toolkit": { "hashes": [ @@ -3737,22 +3789,22 @@ }, "protobuf": { "hashes": [ - "sha256:2036a3a1e7fc27f973fa0a7888dce712393af644f4695385f117886abc792e39", - "sha256:32e78beda26d7a101fecf15d7a4a792278a0d26a31bc327ff05564a9d68ab8ee", - "sha256:346990f634272caac1f09efbcfbbacb23098b1f606d172534c6fa2d9758bb436", - "sha256:3b8905eafe4439076e1f58e9d1fa327025fd2777cf90f14083092ae47f77b0aa", - "sha256:3ce113b3f3362493bddc9069c2163a38f240a9ed685ff83e7bcb756b05e1deb0", - "sha256:410bcc0a5b279f634d3e16082ce221dfef7c3392fac723500e2e64d1806dd2be", - "sha256:5b9cd6097e6acae48a68cb29b56bc79339be84eca65b486910bb1e7a30e2b7c1", - "sha256:65f0ac96ef67d7dd09b19a46aad81a851b6f85f89725577f16de38f2d68ad477", - "sha256:91fac0753c3c4951fbb98a93271c43cc7cf3b93cf67747b3e600bb1e5cc14d61", - "sha256:95789b569418a3e32a53f43d7763be3d490a831e9c08042539462b6d972c2d7e", - "sha256:ac50be82491369a9ec3710565777e4da87c6d2e20404e0abb1f3a8f10ffd20f0", - "sha256:decf119d54e820f298ee6d89c72d6b289ea240c32c521f00433f9dc420595f38", - "sha256:f9510cac91e764e86acd74e2b7f7bc5e6127a7f3fb646d7c8033cfb84fd1176a" + "sha256:09310bce43353b46d73ba7e3bca78273b9bc50349509b9698e64d288c6372c2a", + "sha256:20874e7ca4436f683b64ebdbee2129a5a2c301579a67d1a7dda2cdf62fb7f5f7", + "sha256:25e3370eda26469b58b602e29dff069cfaae8eaa0ef4550039cc5ef8dc004511", + "sha256:281342ea5eb631c86697e1e048cb7e73b8a4e85f3299a128c116f05f5c668f8f", + "sha256:384dd44cb4c43f2ccddd3645389a23ae61aeb8cfa15ca3a0f60e7c3ea09b28b3", + "sha256:54a533b971288af3b9926e53850c7eb186886c0c84e61daa8444385a4720297f", + "sha256:6c081863c379bb1741be8f8193e893511312b1d7329b4a75445d1ea9955be69e", + "sha256:86df87016d290143c7ce3be3ad52d055714ebaebb57cc659c387e76cfacd81aa", + "sha256:8da6070310d634c99c0db7df48f10da495cc283fd9e9234877f0cd182d43ab7f", + "sha256:b2cfab63a230b39ae603834718db74ac11e52bccaaf19bf20f5cce1a84cf76df", + "sha256:c52cfcbfba8eb791255edd675c1fe6056f723bf832fa67f0442218f8817c076e", + "sha256:ce744938406de1e64b91410f473736e815f28c3b71201302612a68bf01517fea", + "sha256:efabbbbac1ab519a514579ba9ec52f006c28ae19d97915951f69fa70da2c9e91" ], "markers": "python_version >= '3.7'", - "version": "==4.23.1" + "version": "==4.23.2" }, "ptyprocess": { "hashes": [ @@ -3995,11 +4047,11 @@ }, "pyopenssl": { "hashes": [ - "sha256:841498b9bec61623b1b6c47ebbc02367c07d60e0e195f19790817f10cc8db0b7", - "sha256:9e0c526404a210df9d2b18cd33364beadb0dc858a739b885677bc65e105d4a4c" + "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2", + "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac" ], "markers": "python_version >= '3.6'", - "version": "==23.1.1" + "version": "==23.2.0" }, "pysha3": { "hashes": [ @@ -4037,11 +4089,11 @@ }, "pytest-cov": { "hashes": [ - "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b", - "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470" + "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6", + "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a" ], "index": "pypi", - "version": "==4.0.0" + "version": "==4.1.0" }, "pytest-mock": { "hashes": [ @@ -4136,105 +4188,105 @@ }, "referencing": { "hashes": [ - "sha256:2502c83c224ec5a7e4a43031e6423b339284924c00ef69eb0044c61f74f37062", - "sha256:59c5608900564b192b8e3b3d66b976e85d6eb46108e1ef57ad8ec982f564ea30" + "sha256:54b64ae36b91827f9f50d05a5af27570a5ca9ba6a1be49809215419d5ab32253", + "sha256:bddd26f8fbb64d153334cca7bc20305c72295e287d84bbf5756afa50efdeb6ae" ], "markers": "python_version >= '3.8'", - "version": "==0.28.3" + "version": "==0.29.0" }, "regex": { "hashes": [ - "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff", - "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea", - "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9", - "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423", - "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c", - "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60", - "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764", - "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2", - "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f", - "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe", - "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2", - "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a", - "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c", - "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17", - "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426", - "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e", - "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8", - "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67", - "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e", - "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32", - "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559", - "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66", - "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e", - "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8", - "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309", - "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18", - "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a", - "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94", - "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0", - "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d", - "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80", - "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810", - "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6", - "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96", - "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a", - "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636", - "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d", - "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe", - "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b", - "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2", - "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d", - "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393", - "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac", - "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926", - "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91", - "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e", - "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a", - "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46", - "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a", - "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd", - "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3", - "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd", - "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657", - "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3", - "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2", - "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a", - "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1", - "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550", - "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833", - "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81", - "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8", - "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5", - "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19", - "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d", - "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86", - "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e", - "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008", - "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8", - "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2", - "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da", - "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053", - "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa", - "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb", - "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22", - "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc", - "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6", - "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051", - "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d", - "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468", - "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df", - "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1", - "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d", - "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479", - "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b", - "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35", - "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956", - "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2", - "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135" + "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938", + "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6", + "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef", + "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525", + "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af", + "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc", + "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54", + "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8", + "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7", + "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568", + "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c", + "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f", + "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536", + "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2", + "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb", + "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df", + "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019", + "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18", + "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f", + "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac", + "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8", + "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9", + "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697", + "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06", + "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d", + "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036", + "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1", + "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787", + "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9", + "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0", + "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7", + "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461", + "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee", + "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3", + "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0", + "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f", + "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14", + "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477", + "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd", + "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16", + "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc", + "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff", + "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd", + "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2", + "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e", + "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef", + "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07", + "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3", + "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3", + "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a", + "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7", + "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa", + "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82", + "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77", + "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222", + "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c", + "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd", + "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d", + "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68", + "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9", + "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693", + "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487", + "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06", + "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591", + "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27", + "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a", + "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969", + "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3", + "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0", + "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7", + "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751", + "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747", + "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289", + "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72", + "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777", + "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9", + "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1", + "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1", + "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e", + "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf", + "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f", + "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd", + "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2", + "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c", + "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1", + "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88", + "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9", + "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.5" + "version": "==2023.6.3" }, "requests": { "hashes": [ @@ -4298,10 +4350,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:092888f3abf7a2ea78f0bfcefc3e0465caee2b6f0efb26f538ccc60f95dca179", - "sha256:99c15556a23621be9f18c2955f7ce63321713bf1c0ad396b27b61399bac5f458" + "sha256:5be3296fc574fa8a4d9b213b4dcf8c8d0246c08f8bd78315c6286f386c37555a", + "sha256:fe85cf5d0b3d0aa3480df689f9f6dc487de783defb0a95043368375dc893645e" ], - "version": "==1.21.1" + "version": "==1.25.0" }, "service-identity": { "hashes": [ @@ -4526,11 +4578,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:6ad00b63f849b7dcc313b70b6b304ed67b2b2963b3098a33efe18056b1a9a223", - "sha256:ff6b238610c747e44c268aa4bb23c8c735d665a63726df3f9431ce707f2aa768" + "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", + "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" ], "markers": "python_version >= '3.7'", - "version": "==4.6.0" + "version": "==4.6.3" }, "tzdata": { "hashes": [ @@ -4550,11 +4602,11 @@ }, "urllib3": { "hashes": [ - "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc", - "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" + "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", + "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" ], "markers": "python_version >= '3.7'", - "version": "==2.0.2" + "version": "==2.0.3" }, "varint": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index e4e1242..0c65fc9 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -12,7 +12,7 @@ automat==22.10.0 backcall==0.2.0 backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' base58==1.0.3 -bitarray==2.7.3 +bitarray==2.7.4 bytestring-splitter==2.4.1 cached-property==1.5.2 certifi==2023.5.7 ; python_version >= '3.6' @@ -25,27 +25,27 @@ commonmark==0.9.1 constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 coverage==6.5.0 -cryptography==40.0.2 ; python_version >= '3.6' +cryptography==41.0.1 ; python_version >= '3.7' cytoolz==0.12.1 ; python_version >= '3.6' dataclassy==0.11.1 ; python_version >= '3.6' dateparser==1.1.8 ; python_version >= '3.7' decorator==5.1.1 ; python_version >= '3.5' -deprecated==1.2.13 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +deprecated==1.2.14 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' distlib==0.3.6 eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' eip712-structs==1.1.0 eth-abi==4.0.0 ; python_version >= '3.7' and python_version < '4' eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' -eth-ape==0.6.9 ; python_version >= '3.8' and python_version < '4' +eth-ape==0.6.10 ; python_version >= '3.8' and python_version < '4' eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.0b1 ; python_version < '4' and python_full_version >= '3.6.8' -eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' +eth-tester==0.9.0b1 ; python_full_version >= '3.6.8' and python_version < '4' +eth-typing==3.3.0 ; python_full_version >= '3.7.2' and python_version < '4' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ethpm-types==0.5.1 ; python_version >= '3.8' and python_version < '4' +ethpm-types==0.5.2 ; python_version >= '3.8' and python_version < '4' evm-trace==0.1.0a20 ; python_version >= '3.8' and python_version < '4' exceptiongroup==1.1.1 ; python_version >= '3.7' executing==1.2.0 @@ -57,7 +57,7 @@ hendrix==4.0.0 hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' humanize==4.6.0 ; python_version >= '3.7' hyperlink==21.0.0 -hypothesis==6.75.3 ; python_version >= '3.7' +hypothesis==6.76.0 ; python_version >= '3.7' identify==2.5.24 ; python_version >= '3.7' idna==3.4 ; python_version >= '3.5' ijson==3.2.0.post0 @@ -69,12 +69,12 @@ ipython==8.12.2 ; python_version >= '3.8' itsdangerous==2.1.2 ; python_version >= '3.7' jedi==0.18.2 ; python_version >= '3.6' jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.18.0a7 ; python_version >= '3.8' -jsonschema-specifications==2023.5.1 ; python_version >= '3.8' +jsonschema==4.18.0a9 ; python_version >= '3.8' +jsonschema-specifications==2023.5.2 ; python_version >= '3.8' lazyasd==0.1.4 -lru-dict==1.1.8 +lru-dict==1.2.0 mako==1.2.4 ; python_version >= '3.7' -markupsafe==2.1.2 ; python_version >= '3.7' +markupsafe==2.1.3 ; python_version >= '3.7' marshmallow==3.19.0 ; python_version >= '3.7' matplotlib-inline==0.1.6 ; python_version >= '3.5' maya==0.6.1 @@ -86,8 +86,8 @@ msgspec==0.15.1 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/derekpierre/nucypher.git@018b78b53fc013412c6fc8088bab05d8836f2dd2 -nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@253dfde60e6106ceeda696b86cb2f605ce3cd557#subdirectory=nucypher-core-python +nucypher @ git+https://github.com/nucypher/nucypher.git@0bbd734c64a3c3ab8caca80dbc6be155db93a5e7 +nucypher-core==0.9.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' @@ -100,9 +100,9 @@ pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' platformdirs==3.5.1 ; python_version >= '3.7' pluggy==1.0.0 ; python_version >= '3.6' pre-commit==3.3.2 -prometheus-client==0.16.0 ; python_version >= '3.6' +prometheus-client==0.17.0 ; python_version >= '3.6' prompt-toolkit==3.0.38 ; python_full_version >= '3.7.0' -protobuf==4.23.1 ; python_version >= '3.7' +protobuf==4.23.2 ; python_version >= '3.7' ptyprocess==0.7.0 pure-eval==0.2.2 py==1.11.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' @@ -125,35 +125,35 @@ pygithub==1.58.2 ; python_version >= '3.7' pygments==2.15.1 ; python_version >= '3.7' pyjwt[crypto]==2.7.0 ; python_version >= '3.7' pynacl==1.5.0 ; python_version >= '3.6' -pyopenssl==23.1.1 ; python_version >= '3.6' +pyopenssl==23.2.0 ; python_version >= '3.6' pysha3==1.0.2 pytest==6.2.5 -pytest-cov==4.0.0 +pytest-cov==4.1.0 pytest-mock==3.10.0 pytest-timeout==2.1.0 ; python_version >= '3.6' pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-baseconv==1.2.2 -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' pytz==2023.3 pyyaml==6.0 ; python_version >= '3.6' -referencing==0.28.3 ; python_version >= '3.8' -regex==2023.5.5 ; python_version >= '3.6' +referencing==0.29.0 ; python_version >= '3.8' +regex==2023.6.3 ; python_version >= '3.6' requests==2.31.0 ; python_version >= '3.7' rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.21.1 +sentry-sdk==1.25.0 service-identity==21.1.0 setuptools==67.8.0 ; python_version >= '3.7' -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' snaptime==0.2.4 sortedcontainers==2.4.0 sqlalchemy==2.0.15 ; python_version >= '3.7' stack-data==0.6.2 tabulate==0.9.0 ; python_version >= '3.7' time-machine==2.9.0 ; python_version >= '3.7' -toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3' +toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' tomli==2.0.1 ; python_version >= '3.7' toolz==0.12.0 ; python_version >= '3.5' tqdm==4.65.0 ; python_version >= '3.7' @@ -161,10 +161,10 @@ traitlets==5.9.0 ; python_version >= '3.7' trie==2.1.0 ; python_version >= '3.7' and python_version < '4' twisted==22.10.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.6.0 ; python_version >= '3.7' +typing-extensions==4.6.3 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' tzlocal==5.0.1 ; python_version >= '3.7' -urllib3==2.0.2 ; python_version >= '3.7' +urllib3==2.0.3 ; python_version >= '3.7' varint==1.0.2 virtualenv==20.23.0 ; python_version >= '3.7' watchdog==2.3.1 ; python_version >= '3.6' diff --git a/requirements.txt b/requirements.txt index a67051a..996e9d4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' -bitarray==2.7.3 +bitarray==2.7.4 bytestring-splitter==2.4.1 cached-property==1.5.2 certifi==2023.5.7 ; python_version >= '3.6' @@ -17,7 +17,7 @@ click==8.1.3 ; python_version >= '3.7' colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -cryptography==40.0.2 ; python_version >= '3.6' +cryptography==41.0.1 ; python_version >= '3.7' cytoolz==0.12.1 ; python_version >= '3.6' dateparser==1.1.8 ; python_version >= '3.7' eip712-structs==1.1.0 @@ -44,11 +44,11 @@ importlib-resources==5.12.0 ; python_version >= '3.7' incremental==22.10.0 itsdangerous==2.1.2 ; python_version >= '3.7' jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.18.0a7 ; python_version >= '3.8' -jsonschema-specifications==2023.5.1 ; python_version >= '3.8' -lru-dict==1.1.8 +jsonschema==4.18.0a9 ; python_version >= '3.8' +jsonschema-specifications==2023.5.2 ; python_version >= '3.8' +lru-dict==1.2.0 mako==1.2.4 ; python_version >= '3.7' -markupsafe==2.1.2 ; python_version >= '3.7' +markupsafe==2.1.3 ; python_version >= '3.7' marshmallow==3.19.0 ; python_version >= '3.7' maya==0.6.1 mnemonic==0.20 ; python_version >= '3.5' @@ -56,13 +56,13 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/derekpierre/nucypher.git@018b78b53fc013412c6fc8088bab05d8836f2dd2 -nucypher-core @ git+https://github.com/derekpierre/nucypher-core.git@253dfde60e6106ceeda696b86cb2f605ce3cd557#subdirectory=nucypher-core-python +nucypher @ git+https://github.com/nucypher/nucypher.git@0bbd734c64a3c3ab8caca80dbc6be155db93a5e7 +nucypher-core==0.9.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' -protobuf==4.23.1 ; python_version >= '3.7' +protobuf==4.23.2 ; python_version >= '3.7' py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' py-evm==0.7.0a2 pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' @@ -72,12 +72,12 @@ pycparser==2.21 pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' pyethash==0.1.27 pynacl==1.5.0 ; python_version >= '3.6' -pyopenssl==23.1.1 ; python_version >= '3.6' +pyopenssl==23.2.0 ; python_version >= '3.6' pysha3==1.0.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3 -referencing==0.28.3 ; python_version >= '3.8' -regex==2023.5.5 ; python_version >= '3.6' +referencing==0.29.0 ; python_version >= '3.8' +regex==2023.6.3 ; python_version >= '3.6' requests==2.31.0 ; python_version >= '3.7' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' @@ -93,10 +93,10 @@ toolz==0.12.0 ; python_version >= '3.5' trie==2.1.0 ; python_version >= '3.7' and python_version < '4' twisted==22.10.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.6.0 ; python_version >= '3.7' +typing-extensions==4.6.3 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' tzlocal==5.0.1 ; python_version >= '3.7' -urllib3==2.0.2 ; python_version >= '3.7' +urllib3==2.0.3 ; python_version >= '3.7' watchdog==2.3.1 ; python_version >= '3.6' web3==6.4.0 ; python_full_version >= '3.7.2' websockets==11.0.3 ; python_version >= '3.7' diff --git a/scripts/relock_dependencies.sh b/scripts/relock_dependencies.sh new file mode 100755 index 0000000..6ba84d7 --- /dev/null +++ b/scripts/relock_dependencies.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# Parse optional flag -k, to be used when we want to base the process on an existing Pipfile.lock +KEEP_LOCK=false +OPTIND=1 +while getopts 'k' opt; do + case $opt in + k) KEEP_LOCK=true ;; + *) echo 'Error in command line parsing' >&2 + exit 1 + esac +done +shift "$(( OPTIND - 1 ))" + +# can change output file names with relock_dependencies.sh +PREFIX=${1:-requirements} + +# these steps might fail, but that's okay. +if ! "$KEEP_LOCK"; then + echo "Removing existing Pipfile.lock file" + rm -f Pipfile.lock +fi + +echo "Removing existing requirement files" +pipenv --rm +rm -f $PREFIX.txt +rm -f dev-$PREFIX.txt + +echo "Removing pip cache" +pip cache purge + +# start enforcing failures +set -e + +echo "Building Development Requirements" +pipenv --python 3.8 lock --clear --pre --dev-only +pipenv requirements --dev-only > dev-$PREFIX.txt + +echo "Building Standard Requirements" +pipenv --python 3.8 lock --clear --pre +pipenv requirements > $PREFIX.txt + +echo "OK!" diff --git a/setup.py b/setup.py index e4a7148..95db718 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,6 @@ # -*- coding: utf-8 -*- import os -import subprocess from pathlib import Path from typing import Dict from urllib.parse import urlparse @@ -19,18 +18,17 @@ PACKAGE_NAME = 'porter' BASE_DIR = Path(__file__).parent PYPI_CLASSIFIERS = [ - "Development Status :: 3 - Alpha", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", - "Natural Language :: English", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Topic :: Security" + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", + "Natural Language :: English", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Topic :: Security", ] ABOUT: Dict[str, str] = dict() From 6763e56f9ce0f3d12d072cfae0e5cb9b0c28f100 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 7 Jun 2023 10:38:32 -0400 Subject: [PATCH 023/114] Update Porter diagrams. --- porter_diagram.png | Bin 307154 -> 302017 bytes porter_diagram.svg | 355 ++++++++++++++++++++++----------------------- 2 files changed, 176 insertions(+), 179 deletions(-) diff --git a/porter_diagram.png b/porter_diagram.png index 471833306348d57267be82c527087316ff2d4a4f..a6a360e113cc2824dd329dd7e2f08015de47f236 100644 GIT binary patch literal 302017 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%0DXA{hVa%O^UIu*u8YsLVCt^Mv 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 H^zHuuOCV~0 literal 307154 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 z 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%0Dt}QeaSaVzN_?QFKl(kw?W> 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

3g#2$%S2NTWBATIp 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 X|MjcSG*h4Oi;vSc9DVFN^Hu*3$O=sN diff --git a/porter_diagram.svg b/porter_diagram.svg index c0f8d6d..932f2ef 100644 --- a/porter_diagram.svg +++ b/porter_diagram.svg @@ -10,14 +10,14 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:export-ydpi="200" inkscape:export-xdpi="200" - inkscape:export-filename="/Users/derek/Desktop/porter-diagram.png" + inkscape:export-filename="/Users/derek/Documents/Github/repos/forks/derek/nucypher-porter/porter_diagram.png" sodipodi:docname="porter_diagram.svg" inkscape:version="1.0 (4035a4f, 2020-05-01)" version="1.1" id="svg2" - viewBox="0 0 1805.3571 1296.4285" - height="365.88095mm" - width="509.51187mm"> + viewBox="0 0 1785.7649 1194.0532" + height="336.98837mm" + width="503.98251mm"> image/svg+xml - + @@ -764,20 +764,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Date: Wed, 7 Jun 2023 11:15:39 -0400 Subject: [PATCH 024/114] Update Pipfile Co-authored-by: KPrasch --- Pipfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index 20259a7..3d938d3 100644 --- a/Pipfile +++ b/Pipfile @@ -8,7 +8,7 @@ python_version = "3" [packages] nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} -nucypher-core = ">=0.9.0" # should be the same as nucypher +nucypher-core = ">=0.9.0" # must be the same as nucypher flask-cors = "*" [dev-packages] From d4ed93a66fa3bdc511a28106036622cef7078758 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 16 Jun 2023 11:57:02 -0400 Subject: [PATCH 025/114] Update Porter to use latest `nucypher` changes for dkg-dev-6. --- Pipfile | 4 ++-- Pipfile.lock | 12 ++++++------ dev-requirements.txt | 6 +++--- porter/main.py | 1 + requirements.txt | 4 ++-- tests/conftest.py | 29 +++++++++++++++++++++++------ 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/Pipfile b/Pipfile index 3d938d3..a62b7fe 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "development"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-6"} nucypher-core = ">=0.9.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "development", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-6", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 048da59..ad08806 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7af5b35526f0d6c94255b04cafa3f3b70fcee70bad1273ab24a02a03983ef298" + "sha256": "7f80e9f10ceac1a0d579f49cea95cd12886855c6c09ef88f8f534be6dd60b430" }, "pipfile-spec": 6, "requires": { @@ -1143,7 +1143,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "0bbd734c64a3c3ab8caca80dbc6be155db93a5e7" + "ref": "4862a9a086d8e69f31f3b93f8421e810db5169ef" }, "nucypher-core": { "hashes": [ @@ -3558,7 +3558,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "0bbd734c64a3c3ab8caca80dbc6be155db93a5e7" + "ref": "4862a9a086d8e69f31f3b93f8421e810db5169ef" }, "nucypher-core": { "hashes": [ @@ -4350,10 +4350,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:5be3296fc574fa8a4d9b213b4dcf8c8d0246c08f8bd78315c6286f386c37555a", - "sha256:fe85cf5d0b3d0aa3480df689f9f6dc487de783defb0a95043368375dc893645e" + "sha256:79afb7c896014038e358401ad1d36889f97a129dfa8031c49b3f238cd1aa3935", + "sha256:aa796423eb6a2f4a8cd7a5b02ba6558cb10aab4ccdc0537f63a47b038c520c38" ], - "version": "==1.25.0" + "version": "==1.25.1" }, "service-identity": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 0c65fc9..b6eb41f 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' base58==1.0.3 bitarray==2.7.4 bytestring-splitter==2.4.1 @@ -86,7 +86,7 @@ msgspec==0.15.1 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/nucypher/nucypher.git@0bbd734c64a3c3ab8caca80dbc6be155db93a5e7 +nucypher @ git+https://github.com/nucypher/nucypher.git@4862a9a086d8e69f31f3b93f8421e810db5169ef nucypher-core==0.9.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' @@ -143,7 +143,7 @@ rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.25.0 +sentry-sdk==1.25.1 service-identity==21.1.0 setuptools==67.8.0 ; python_version >= '3.7' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' diff --git a/porter/main.py b/porter/main.py index 16fbfd8..e8e1b0f 100644 --- a/porter/main.py +++ b/porter/main.py @@ -97,6 +97,7 @@ def __init__(self, if not BlockchainInterfaceFactory.is_interface_initialized(eth_provider_uri=eth_provider_uri): BlockchainInterfaceFactory.initialize_interface(eth_provider_uri=eth_provider_uri) + self.eth_provider_uri = eth_provider_uri self.registry = registry or InMemoryContractRegistry.from_latest_publication(network=domain) self.application_agent = ContractAgency.get_agent(PREApplicationAgent, registry=self.registry) diff --git a/requirements.txt b/requirements.txt index 996e9d4..5f5efdc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.2 ; python_version >= '3.6' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' bitarray==2.7.4 bytestring-splitter==2.4.1 cached-property==1.5.2 @@ -56,7 +56,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/nucypher/nucypher.git@0bbd734c64a3c3ab8caca80dbc6be155db93a5e7 +nucypher @ git+https://github.com/nucypher/nucypher.git@4862a9a086d8e69f31f3b93f8421e810db5169ef nucypher-core==0.9.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 diff --git a/tests/conftest.py b/tests/conftest.py index d874359..55e9453 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,7 @@ import os from typing import Iterable, List, Optional, Tuple +import nucypher import pytest from click.testing import CliRunner from eth_typing import ChecksumAddress @@ -20,7 +21,8 @@ from nucypher.crypto.ferveo import dkg from nucypher.crypto.powers import DecryptingPower, RitualisticPower from nucypher.network.nodes import Learner, Teacher -from nucypher.policy.conditions.types import LingoList +from nucypher.policy.conditions.lingo import ConditionLingo +from nucypher.policy.conditions.types import Lingo from nucypher.utilities.logging import GlobalLoggerSettings from nucypher_core import HRAC, Address, TreasureMap from nucypher_core.ferveo import ( @@ -32,7 +34,7 @@ from porter.emitters import WebEmitter from porter.main import Porter -from tests.constants import MOCK_ETH_PROVIDER_URI +from tests.constants import MOCK_ETH_PROVIDER_URI, TESTERCHAIN_CHAIN_ID from tests.mock.coordinator import MockCoordinatorAgent from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager @@ -106,6 +108,16 @@ def always_use_mock(*a, **k): return mock_testerchain +@pytest.fixture(autouse=True, scope="session") +def mock_condition_blockchains(session_mocker): + """adds testerchain's chain ID to permitted conditional chains""" + session_mocker.patch.object( + nucypher.policy.conditions.evm, + "_CONDITION_CHAINS", + tuple([TESTERCHAIN_CHAIN_ID]), + ) + + @pytest.fixture(scope='module') def test_registry(): return InMemoryContractRegistry() @@ -322,13 +334,18 @@ def dkg_setup( PLAINTEXT = "peace at dawn" -CONDITIONS = [ - {"returnValueTest": {"value": "0", "comparator": ">"}, "method": "timelock"} -] +CONDITIONS = { + "version": ConditionLingo.VERSION, + "condition": { + "returnValueTest": {"value": "0", "comparator": ">"}, + "method": "blocktime", + "chain": TESTERCHAIN_CHAIN_ID, + }, +} @pytest.fixture(scope="module") -def dkg_encrypted_data(dkg_setup) -> Tuple[Ciphertext, bytes, LingoList]: +def dkg_encrypted_data(dkg_setup) -> Tuple[Ciphertext, bytes, Lingo]: _, public_key, _, _, _ = dkg_setup enrico = Enrico(encrypting_key=public_key) ciphertext = enrico.encrypt_for_dkg( From b23bf2745a0cdd2add9cd9c80268d6ece52e2de0 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 16 Jun 2023 12:02:22 -0400 Subject: [PATCH 026/114] Fix dependency for backports.zoneinfo. --- dev-requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index b6eb41f..7430484 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' base58==1.0.3 bitarray==2.7.4 bytestring-splitter==2.4.1 diff --git a/requirements.txt b/requirements.txt index 5f5efdc..25e5544 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.2 ; python_version >= '3.6' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' bitarray==2.7.4 bytestring-splitter==2.4.1 cached-property==1.5.2 From 30a2cd8dcbbd50fbf05eefa74b88c0638b797b50 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 16 Jun 2023 12:41:42 -0400 Subject: [PATCH 027/114] Provide provider_uri parameter in a few spots. --- porter/cli/main.py | 3 ++- porter/main.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/porter/cli/main.py b/porter/cli/main.py index a1ea396..370245c 100644 --- a/porter/cli/main.py +++ b/porter/cli/main.py @@ -70,7 +70,8 @@ def run(general_config, if teacher_uri: teacher = Ursula.from_teacher_uri(teacher_uri=teacher_uri, min_stake=min_stake, - registry=registry) + registry=registry, + provider_uri=eth_provider_uri) PORTER = Porter(domain=network, known_nodes={teacher} if teacher else None, diff --git a/porter/main.py b/porter/main.py index e8e1b0f..460767f 100644 --- a/porter/main.py +++ b/porter/main.py @@ -99,7 +99,7 @@ def __init__(self, self.eth_provider_uri = eth_provider_uri self.registry = registry or InMemoryContractRegistry.from_latest_publication(network=domain) - self.application_agent = ContractAgency.get_agent(PREApplicationAgent, registry=self.registry) + self.application_agent = ContractAgency.get_agent(PREApplicationAgent, registry=self.registry, provider_uri=self.eth_provider_uri) super().__init__(save_metadata=True, domain=domain, node_class=node_class, *args, **kwargs) From 717da681bbf84b67cbdbb39e08873c17be84335a Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 23 Jun 2023 09:50:33 -0400 Subject: [PATCH 028/114] No need to use JSONDict for encryption request field schema, a simple marshmallow Dict field is sufficient. --- porter/fields/base.py | 37 ---------------------- porter/schema.py | 24 ++++++-------- tests/cbd/test_cbd_specifications.py | 19 ++++------- tests/cbd/test_porter_cbd_web_interface.py | 5 ++- tests/test_fields.py | 29 ++++++----------- 5 files changed, 27 insertions(+), 87 deletions(-) diff --git a/porter/fields/base.py b/porter/fields/base.py index d6ca7d4..3a87875 100644 --- a/porter/fields/base.py +++ b/porter/fields/base.py @@ -102,40 +102,3 @@ def _deserialize(self, value, attr, data, **kwargs): f"Unexpected object type, {type(result)}; expected {self.expected_type}") return result - - -class JSONDict(BaseField, fields.Dict): - """Serializes/Deserializes Dictionaries to/from JSON strings.""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def _serialize(self, value, attr, obj, **kwargs): - try: - value = super()._serialize(value, attr, obj, **kwargs) - except Exception as e: - raise InvalidInputData( - f"Could not convert input for {self.name} to JSON: {e}" - ) - try: - value_json = json.dumps(value) - return value_json - except Exception as e: - raise InvalidInputData( - f"Could not convert input for {self.name} to JSON: {e}" - ) - - def _deserialize(self, value, attr, data, **kwargs): - try: - result = json.loads(value) - except Exception as e: - raise InvalidInputData( - f"Could not convert input for {self.name} to dictionary: {e}" - ) - - try: - return super()._deserialize(result, attr, data, **kwargs) - except Exception as e: - raise InvalidInputData( - f"Could not convert input for {self.name} to dictionary: {e}" - ) diff --git a/porter/schema.py b/porter/schema.py index d703fa5..e31ffc6 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -2,17 +2,9 @@ from marshmallow import INCLUDE, Schema from marshmallow import fields as marshmallow_fields from marshmallow import validates_schema -from marshmallow.fields import URL, Dict, String from porter.cli.types import EIP55_CHECKSUM_ADDRESS -from porter.fields.base import ( - JSON, - Base64BytesRepresentation, - Integer, - JSONDict, - PositiveInteger, - StringList, -) +from porter.fields.base import JSON, Integer, PositiveInteger, StringList from porter.fields.cbd import ( EncryptedThresholdDecryptionRequestField, EncryptedThresholdDecryptionResponseField, @@ -54,7 +46,7 @@ def option_bob_encrypting_key(): class UrsulaInfoSchema(BaseSchema): """Schema for the result of sampling of Ursulas.""" checksum_address = UrsulaChecksumAddress() - uri = URL() + uri = marshmallow_fields.URL() encrypting_key = UmbralKey() # maintain field declaration ordering @@ -132,7 +124,9 @@ class PRERetrievalOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" cfrags = marshmallow_fields.Dict(keys=UrsulaChecksumAddress(), values=CapsuleFrag()) - errors = marshmallow_fields.Dict(keys=UrsulaChecksumAddress(), values=String()) + errors = marshmallow_fields.Dict( + keys=UrsulaChecksumAddress(), values=marshmallow_fields.String() + ) # maintain field declaration ordering class Meta: @@ -211,10 +205,12 @@ class PRERetrieveCFrags(BaseSchema): class CBDDecryptionOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" - encrypted_decryption_responses = Dict( + encrypted_decryption_responses = marshmallow_fields.Dict( keys=UrsulaChecksumAddress(), values=EncryptedThresholdDecryptionResponseField() ) - errors = Dict(keys=UrsulaChecksumAddress(), values=String()) + errors = marshmallow_fields.Dict( + keys=UrsulaChecksumAddress(), values=marshmallow_fields.String() + ) # maintain field declaration ordering class Meta: @@ -233,7 +229,7 @@ class CBDDecrypt(BaseSchema): required=True ) ) - encrypted_decryption_requests = JSONDict( + encrypted_decryption_requests = marshmallow_fields.Dict( keys=UrsulaChecksumAddress(), values=EncryptedThresholdDecryptionRequestField(), required=True, diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index ce4ef1b..780a02a 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -61,7 +61,7 @@ def test_cbd_decrypt( with pytest.raises(InvalidInputData): request_data = { - "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests) + "encrypted_decryption_requests": encrypted_decryption_requests, } cbd_decrypt_schema.load(request_data) @@ -69,14 +69,14 @@ def test_cbd_decrypt( with pytest.raises(InvalidInputData): request_data = { "dkg_threshold": threshold, - "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + "encrypted_decryption_requests": encrypted_decryption_requests, } cbd_decrypt_schema.load(request_data) with pytest.raises(InvalidInputData): request_data = { "threshold": threshold, - "encrypted_dec_requests": json.dumps(encrypted_decryption_requests), + "encrypted_dec_requests": encrypted_decryption_requests, } cbd_decrypt_schema.load(request_data) @@ -84,14 +84,7 @@ def test_cbd_decrypt( with pytest.raises(InvalidInputData): request_data = { "threshold": "threshold? we don't need no stinking threshold", - "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), - } - cbd_decrypt_schema.load(request_data) - - with pytest.raises(InvalidInputData): - request_data = { - "threshold": threshold, - "encrypted_decryption_requests": encrypted_decryption_requests, # not json string + "encrypted_decryption_requests": encrypted_decryption_requests, } cbd_decrypt_schema.load(request_data) @@ -100,14 +93,14 @@ def test_cbd_decrypt( request_data = { "threshold": len(encrypted_decryption_requests) + 1, # threshold larger than number of requests - "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + "encrypted_decryption_requests": encrypted_decryption_requests, } cbd_decrypt_schema.load(request_data) # simple schema successful load request_data = { "threshold": threshold, - "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + "encrypted_decryption_requests": encrypted_decryption_requests, } cbd_decrypt_schema.load(request_data) diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index 528fe05..c69d961 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -10,7 +10,6 @@ ThresholdDecryptionRequest, ) from nucypher_core.ferveo import ( - Ciphertext, DecryptionShareSimple, combine_decryption_shares_simple, decrypt_with_shared_secret, @@ -67,7 +66,7 @@ def test_cbd_decrypt( request_data = { "threshold": threshold, - "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + "encrypted_decryption_requests": encrypted_decryption_requests, } # @@ -157,7 +156,7 @@ def test_cbd_decrypt( request_data = { "threshold": threshold, - "encrypted_decryption_requests": json.dumps(encrypted_decryption_requests), + "encrypted_decryption_requests": encrypted_decryption_requests, } response = porter_web_controller.post( "/cbd_decrypt", data=json.dumps(request_data) diff --git a/tests/test_fields.py b/tests/test_fields.py index c26e50a..5a6f34e 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -4,6 +4,7 @@ import pytest from eth_utils import to_canonical_address +from marshmallow import fields as marshmallow_fields from nucypher.crypto.ferveo.dkg import FerveoVariant from nucypher_core import ( Address, @@ -23,7 +24,6 @@ from porter.fields.base import ( JSON, Base64BytesRepresentation, - JSONDict, PositiveInteger, String, StringList, @@ -260,12 +260,12 @@ def test_json_field(): field._deserialize(value=json.dumps(d), attr=None, data=None) -def test_cbd_json_dict_field(get_random_checksum_address): +def test_cbd_dict_field(get_random_checksum_address): # test data original_data = {} expected_serialized_result = {} num_decryption_requests = 5 - for i in range(0, 5): + for i in range(0, num_decryption_requests): ursula_checksum_address = get_random_checksum_address() encrypted_decryption_request = os.urandom(32) original_data[ursula_checksum_address] = encrypted_decryption_request @@ -274,36 +274,25 @@ def test_cbd_json_dict_field(get_random_checksum_address): ).decode() # mimic usage for CBD - field = JSONDict(keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation()) + field = marshmallow_fields.Dict( + keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation() + ) serialized = field._serialize(value=original_data, attr=None, obj=None) - assert serialized == json.dumps(expected_serialized_result) + assert serialized == expected_serialized_result deserialized = field._deserialize(value=serialized, attr=None, data=None) assert deserialized == original_data with pytest.raises(InvalidInputData): # attempt to deserialize invalid key; must be checksum address - json_to_deserialize = json.dumps({"a": b64encode(os.urandom(32)).decode()}) + json_to_deserialize = {"a": b64encode(os.urandom(32)).decode()} field._deserialize(value=json_to_deserialize, attr=None, data=None) with pytest.raises(InvalidInputData): # attempt to deserialize invalid value; must be base64 string - json_to_deserialize = json.dumps({get_random_checksum_address(): 1}) + json_to_deserialize = {get_random_checksum_address(): "+_--1"} field._deserialize(value=json_to_deserialize, attr=None, data=None) - with pytest.raises(InvalidInputData): - # attempt to deserialize non-dict object - json_to_deserialize = json.dumps({get_random_checksum_address(): 1}) - field._deserialize("the hills are alive...", attr=None, data=None) - - with pytest.raises(InvalidInputData): - # non-dict object - field._serialize(value=[1, 2, 3], attr=None, obj=None) - - with pytest.raises(InvalidInputData): - # attempt to serialize invalid key; must be checksum address - field._serialize(value={"a": os.urandom(32)}, attr=None, obj=None) - def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): ritual_id, _, _, _, _ = dkg_setup From 3775bcf4d3063f786581095ac267bc3ba281247a Mon Sep 17 00:00:00 2001 From: Derek Pierre Date: Fri, 23 Jun 2023 10:03:19 -0400 Subject: [PATCH 029/114] Update tests/test_fields.py Co-authored-by: piotr-roslaniec <39299780+piotr-roslaniec@users.noreply.github.com> --- tests/test_fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_fields.py b/tests/test_fields.py index 5a6f34e..2eb51f3 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -290,7 +290,7 @@ def test_cbd_dict_field(get_random_checksum_address): with pytest.raises(InvalidInputData): # attempt to deserialize invalid value; must be base64 string - json_to_deserialize = {get_random_checksum_address(): "+_--1"} + json_to_deserialize = {get_random_checksum_address(): "✨ not a valid base64 ✨"} field._deserialize(value=json_to_deserialize, attr=None, data=None) From a7bf0210838ed106f6911a3f8e8106efbeab40da Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 23 Jun 2023 14:42:59 -0400 Subject: [PATCH 030/114] Update `nucypher` and `nucypher-core` dependencies to dkg-dev-7 and 0.10.0 respectively. --- Pipfile | 6 ++-- Pipfile.lock | 80 ++++++++++++++++++++++---------------------- dev-requirements.txt | 6 ++-- requirements.txt | 4 +-- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/Pipfile b/Pipfile index a62b7fe..1788fc5 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-6"} -nucypher-core = ">=0.9.0" # must be the same as nucypher +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-7"} +nucypher-core = ">=0.10.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-6", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-7", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index ad08806..6ff1ac2 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7f80e9f10ceac1a0d579f49cea95cd12886855c6c09ef88f8f534be6dd60b430" + "sha256": "7cf67fd37184d9215acd0ba1a0b3aa2aba114a3fadfaf68267cd601bb9fd1c12" }, "pipfile-spec": 6, "requires": { @@ -1143,29 +1143,29 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "4862a9a086d8e69f31f3b93f8421e810db5169ef" + "ref": "e9089247c1d97a4d6b146a279e34c8dbda6dfae6" }, "nucypher-core": { "hashes": [ - "sha256:05e5c3559bfe9315642d2cca14ddabd00072f28cf5949f75b6f1ea09e39cd496", - "sha256:10b5c282b1b40fc719fb14e02098b789b212fe1e8ad61260c2482dd0da279bc1", - "sha256:33dc84371e3e692a924cbd8df3be001b46ba393572016f9e9d97e951ca5b3974", - "sha256:3a4f7b4f4dc35200a3c09c9cc68f485fea58b1e153efd5ffb3ba5a5a92b7b4be", - "sha256:5e3e6ae1be94c1082ab96704d3ed3b8e938a3996c2d09f36dbf2fd756efaf063", - "sha256:6aadb27a8a1675fb5b0af720ba63d4fb9b28aad3d33bbefeb9f3f0e7f25a32e6", - "sha256:802e7e56328253080260016f40121bca889c22c2e4de55bbcd8039d7c7066703", - "sha256:8fa7003d4b9cd26a51d86cec3f34be15dd29e28565a7db63ef67496d152f71aa", - "sha256:944b27c4df95e0b0c1119bcd53786ca29e2d1bbf33c417a7511346885100a4bc", - "sha256:99710afe0df83d749b22a571ec7cddfbc3cca1e3805bf39da3707cd5ae593486", - "sha256:b1d5904308854ab51dbccd4a064347b34f001edace90d1f4521da99e0fec1e48", - "sha256:b33b7608de37c358ae544ae169d810e8e20e18f1ac87d1cecbffb99e300009ff", - "sha256:cb5b6d8fd0f8daf8011477663861b2df1919e80c8b863aed56a7ca65e024fb47", - "sha256:d239ccabd6b5d8878895ce5282ca672e17b076a372dd28ecedcd2db4cb02521d", - "sha256:d949842943acc401b2f72c681b92fb5bd3e3f1e047d3feb71096f2782127cc8d", - "sha256:e2122115e5306b88f4d522f6f4dac3ec99e266ecdbad67af7440822e1e0a91ba" + "sha256:02bb4ad202487d39b3d851b1198e73ac004972ece9953daacbfab51e897009dd", + "sha256:0eb91fd30a00a9c8bbdb5d71ef7426276ffb6a19321e903b51281922e9588ae9", + "sha256:2257c5ce1eb71757bf00b94717fdafe5bbbf32b0e298354c144d8533868962c4", + "sha256:458e3c7648721be09925bb215088b8ae28b95d46893c0a3680f656e128b33886", + "sha256:4c4cab5bb94d230dcdb5cfc79b91aba1b6e49c5c8667c3cfbfc22a9f1ab18c31", + "sha256:4f3b98448ccf21e3ff9c4b0a83d9c7a55948d7e81cb605afcaa6bd21ab55d562", + "sha256:538f95d5269eabd45fb6d96b7b184e65120be6750833d50ca9a469596a387574", + "sha256:645cba52ccaecc24566949977623a6fefed8d4212e71fe99f75004411bb84e1a", + "sha256:6b3f31b59f87d87a079ff3c995aa4a03426eed4d1e6e6de738b40ccc6bfdd8c6", + "sha256:71c57658839b60ddd9835dde2676b09f4c6c353cae1136ebd00fac8996dd8eb7", + "sha256:9d9d5db59248acc58173256a8c729401dcf2ce94390b506afb8c4d0c21643755", + "sha256:a73635dd57889fe2e74b75a06681a809ec09fb58df5a1052f5e3bca16bb7c083", + "sha256:cd9ec88fa1efaa7557b410c5d623e3cfdf40d513e9b7548469592e18d44980b0", + "sha256:ce794a79b77c8a5dc2ad513a97b76bd2945ffeb5422ea939f2831073fe022658", + "sha256:f870eb2f8660957d5a290a81d4852f60ebb1aea01c8f515734cc8d26123ac797", + "sha256:fcd3f20314695c663f2285b9d7714faaca0bf1963ea6b65b4d7fd48fb39b8aeb" ], "index": "pypi", - "version": "==0.9.0" + "version": "==0.10.0" }, "packaging": { "hashes": [ @@ -3558,29 +3558,29 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "4862a9a086d8e69f31f3b93f8421e810db5169ef" + "ref": "e9089247c1d97a4d6b146a279e34c8dbda6dfae6" }, "nucypher-core": { "hashes": [ - "sha256:05e5c3559bfe9315642d2cca14ddabd00072f28cf5949f75b6f1ea09e39cd496", - "sha256:10b5c282b1b40fc719fb14e02098b789b212fe1e8ad61260c2482dd0da279bc1", - "sha256:33dc84371e3e692a924cbd8df3be001b46ba393572016f9e9d97e951ca5b3974", - "sha256:3a4f7b4f4dc35200a3c09c9cc68f485fea58b1e153efd5ffb3ba5a5a92b7b4be", - "sha256:5e3e6ae1be94c1082ab96704d3ed3b8e938a3996c2d09f36dbf2fd756efaf063", - "sha256:6aadb27a8a1675fb5b0af720ba63d4fb9b28aad3d33bbefeb9f3f0e7f25a32e6", - "sha256:802e7e56328253080260016f40121bca889c22c2e4de55bbcd8039d7c7066703", - "sha256:8fa7003d4b9cd26a51d86cec3f34be15dd29e28565a7db63ef67496d152f71aa", - "sha256:944b27c4df95e0b0c1119bcd53786ca29e2d1bbf33c417a7511346885100a4bc", - "sha256:99710afe0df83d749b22a571ec7cddfbc3cca1e3805bf39da3707cd5ae593486", - "sha256:b1d5904308854ab51dbccd4a064347b34f001edace90d1f4521da99e0fec1e48", - "sha256:b33b7608de37c358ae544ae169d810e8e20e18f1ac87d1cecbffb99e300009ff", - "sha256:cb5b6d8fd0f8daf8011477663861b2df1919e80c8b863aed56a7ca65e024fb47", - "sha256:d239ccabd6b5d8878895ce5282ca672e17b076a372dd28ecedcd2db4cb02521d", - "sha256:d949842943acc401b2f72c681b92fb5bd3e3f1e047d3feb71096f2782127cc8d", - "sha256:e2122115e5306b88f4d522f6f4dac3ec99e266ecdbad67af7440822e1e0a91ba" + "sha256:02bb4ad202487d39b3d851b1198e73ac004972ece9953daacbfab51e897009dd", + "sha256:0eb91fd30a00a9c8bbdb5d71ef7426276ffb6a19321e903b51281922e9588ae9", + "sha256:2257c5ce1eb71757bf00b94717fdafe5bbbf32b0e298354c144d8533868962c4", + "sha256:458e3c7648721be09925bb215088b8ae28b95d46893c0a3680f656e128b33886", + "sha256:4c4cab5bb94d230dcdb5cfc79b91aba1b6e49c5c8667c3cfbfc22a9f1ab18c31", + "sha256:4f3b98448ccf21e3ff9c4b0a83d9c7a55948d7e81cb605afcaa6bd21ab55d562", + "sha256:538f95d5269eabd45fb6d96b7b184e65120be6750833d50ca9a469596a387574", + "sha256:645cba52ccaecc24566949977623a6fefed8d4212e71fe99f75004411bb84e1a", + "sha256:6b3f31b59f87d87a079ff3c995aa4a03426eed4d1e6e6de738b40ccc6bfdd8c6", + "sha256:71c57658839b60ddd9835dde2676b09f4c6c353cae1136ebd00fac8996dd8eb7", + "sha256:9d9d5db59248acc58173256a8c729401dcf2ce94390b506afb8c4d0c21643755", + "sha256:a73635dd57889fe2e74b75a06681a809ec09fb58df5a1052f5e3bca16bb7c083", + "sha256:cd9ec88fa1efaa7557b410c5d623e3cfdf40d513e9b7548469592e18d44980b0", + "sha256:ce794a79b77c8a5dc2ad513a97b76bd2945ffeb5422ea939f2831073fe022658", + "sha256:f870eb2f8660957d5a290a81d4852f60ebb1aea01c8f515734cc8d26123ac797", + "sha256:fcd3f20314695c663f2285b9d7714faaca0bf1963ea6b65b4d7fd48fb39b8aeb" ], "index": "pypi", - "version": "==0.9.0" + "version": "==0.10.0" }, "numpy": { "hashes": [ @@ -4350,10 +4350,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:79afb7c896014038e358401ad1d36889f97a129dfa8031c49b3f238cd1aa3935", - "sha256:aa796423eb6a2f4a8cd7a5b02ba6558cb10aab4ccdc0537f63a47b038c520c38" + "sha256:0c9f858337ec3781cf4851972ef42bba8c9828aea116b0dbed8f38c5f9a1896c", + "sha256:760e4fb6d01c994110507133e08ecd4bdf4d75ee4be77f296a3579796cf73134" ], - "version": "==1.25.1" + "version": "==1.26.0" }, "service-identity": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 7430484..ed1f723 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -86,8 +86,8 @@ msgspec==0.15.1 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/nucypher/nucypher.git@4862a9a086d8e69f31f3b93f8421e810db5169ef -nucypher-core==0.9.0 +nucypher @ git+https://github.com/nucypher/nucypher.git@e9089247c1d97a4d6b146a279e34c8dbda6dfae6 +nucypher-core==0.10.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' @@ -143,7 +143,7 @@ rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.25.1 +sentry-sdk==1.26.0 service-identity==21.1.0 setuptools==67.8.0 ; python_version >= '3.7' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' diff --git a/requirements.txt b/requirements.txt index 25e5544..501583e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -56,8 +56,8 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/nucypher/nucypher.git@4862a9a086d8e69f31f3b93f8421e810db5169ef -nucypher-core==0.9.0 +nucypher @ git+https://github.com/nucypher/nucypher.git@e9089247c1d97a4d6b146a279e34c8dbda6dfae6 +nucypher-core==0.10.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' From 525acc111b5717b70231da860836239bd92a72e1 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 23 Jun 2023 16:08:36 -0400 Subject: [PATCH 031/114] Fix failing tests based on removal of DkgPublicParameters from `nucypher-core`. --- tests/cbd/test_cbd_specifications.py | 2 +- tests/cbd/test_porter_cbd_python_interface.py | 3 +-- tests/cbd/test_porter_cbd_web_interface.py | 3 +-- tests/conftest.py | 10 ++++------ tests/test_fields.py | 2 +- 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index 780a02a..1e36e59 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -17,7 +17,7 @@ def test_cbd_decrypt( porter, dkg_setup, dkg_encrypted_data, get_random_checksum_address ): - ritual_id, public_key, cohort, _, threshold = dkg_setup + ritual_id, public_key, cohort, threshold = dkg_setup ciphertext, expected_plaintext, conditions = dkg_encrypted_data cbd_decrypt_schema = CBDDecrypt() diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/cbd/test_porter_cbd_python_interface.py index e7776ec..449cf4e 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -11,7 +11,7 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): - ritual_id, public_key, cohort, params, threshold = dkg_setup + ritual_id, public_key, cohort, threshold = dkg_setup ciphertext, expected_plaintext, conditions = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( @@ -73,7 +73,6 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): ciphertext, conditions, # aad combined_shares, - params, # dkg params ) assert bytes(cleartext) == expected_plaintext diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index c69d961..79a8cec 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -31,7 +31,7 @@ def test_cbd_decrypt( assert response.status_code == 400 # Setup - ritual_id, public_key, cohort, params, threshold = dkg_setup + ritual_id, public_key, cohort, threshold = dkg_setup ciphertext, expected_plaintext, conditions = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( @@ -117,7 +117,6 @@ def test_cbd_decrypt( ciphertext, json_conditions, # aad combined_shares, - params, # dkg params ) assert bytes(cleartext) == expected_plaintext diff --git a/tests/conftest.py b/tests/conftest.py index 55e9453..228951f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -28,7 +28,6 @@ from nucypher_core.ferveo import ( Ciphertext, DkgPublicKey, - DkgPublicParameters, Validator, ) @@ -252,7 +251,7 @@ def porter_web_controller(porter): @pytest.fixture(scope="module") def dkg_setup( get_random_checksum_address, ursulas, coordinator_agent -) -> Tuple[int, DkgPublicKey, List[Ursula], DkgPublicParameters, int]: +) -> Tuple[int, DkgPublicKey, List[Ursula], int]: ritual_id = 0 num_shares = 8 threshold = 5 @@ -287,7 +286,7 @@ def dkg_setup( ritual_id=ritual_id, transcript=transcript ) - aggregated_transcript, public_key, params = dkg.aggregate_transcripts( + aggregated_transcript, public_key = dkg.aggregate_transcripts( ritual_id=ritual_id, me=validators[0], shares=num_shares, @@ -299,7 +298,6 @@ def dkg_setup( ursula.dkg_storage.store_aggregated_transcript( ritual_id=ritual_id, aggregated_transcript=aggregated_transcript ) - ursula.dkg_storage.store_dkg_params(ritual_id=ritual_id, public_params=params) ursula.dkg_storage.store_public_key(ritual_id=ritual_id, public_key=public_key) ritual = CoordinatorAgent.Ritual( @@ -330,7 +328,7 @@ def dkg_setup( CoordinatorAgent.Ritual.Status.FINALIZED ) - return ritual_id, public_key, cohort, params, threshold + return ritual_id, public_key, cohort, threshold PLAINTEXT = "peace at dawn" @@ -346,7 +344,7 @@ def dkg_setup( @pytest.fixture(scope="module") def dkg_encrypted_data(dkg_setup) -> Tuple[Ciphertext, bytes, Lingo]: - _, public_key, _, _, _ = dkg_setup + _, public_key, _, _ = dkg_setup enrico = Enrico(encrypting_key=public_key) ciphertext = enrico.encrypt_for_dkg( plaintext=PLAINTEXT.encode(), conditions=CONDITIONS diff --git a/tests/test_fields.py b/tests/test_fields.py index 2eb51f3..1bdc88e 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -295,7 +295,7 @@ def test_cbd_dict_field(get_random_checksum_address): def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): - ritual_id, _, _, _, _ = dkg_setup + ritual_id, _, _, _ = dkg_setup ciphertext, expected_plaintext, conditions = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( From 6473be8115f4f73072821bb1f9a332da7d1c7121 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 26 Jun 2023 15:02:16 -0400 Subject: [PATCH 032/114] Relock dependencies for updated `nucypher` `dkg-dev-7` tag. --- Pipfile.lock | 10 +++++----- dev-requirements.txt | 2 +- requirements.txt | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 6ff1ac2..f68da8d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -629,11 +629,11 @@ }, "flask-cors": { "hashes": [ - "sha256:74efc975af1194fc7891ff5cd85b0f7478be4f7f59fe158102e91abb72bb4438", - "sha256:b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de" + "sha256:bc3492bfd6368d27cfe79c7821df5a8a319e1a6d5eab277a3794be19bdc51783", + "sha256:f268522fcb2f73e2ecdde1ef45e2fd5c71cc48fe03cffb4b441c6d1b40684eb0" ], "index": "pypi", - "version": "==3.0.10" + "version": "==4.0.0" }, "frozenlist": { "hashes": [ @@ -1143,7 +1143,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "e9089247c1d97a4d6b146a279e34c8dbda6dfae6" + "ref": "1032a2b5560ef8e5afa02097510f13812943e219" }, "nucypher-core": { "hashes": [ @@ -3558,7 +3558,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "e9089247c1d97a4d6b146a279e34c8dbda6dfae6" + "ref": "1032a2b5560ef8e5afa02097510f13812943e219" }, "nucypher-core": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index ed1f723..300b95d 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -86,7 +86,7 @@ msgspec==0.15.1 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/nucypher/nucypher.git@e9089247c1d97a4d6b146a279e34c8dbda6dfae6 +nucypher @ git+https://github.com/nucypher/nucypher.git@1032a2b5560ef8e5afa02097510f13812943e219 nucypher-core==0.10.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 501583e..b37dc8b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ eth-tester==0.9.0b1 ; python_version < '4' and python_full_version >= '3.6.8' eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' flask==2.2.5 ; python_version >= '3.7' -flask-cors==3.0.10 +flask-cors==4.0.0 frozenlist==1.3.3 ; python_version >= '3.7' hendrix==4.0.0 hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' @@ -56,7 +56,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/nucypher/nucypher.git@e9089247c1d97a4d6b146a279e34c8dbda6dfae6 +nucypher @ git+https://github.com/nucypher/nucypher.git@1032a2b5560ef8e5afa02097510f13812943e219 nucypher-core==0.10.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 From 54cdbd149ef401b8847ca91f9b46866e47a17abb Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 22 Aug 2023 20:56:25 -0400 Subject: [PATCH 033/114] Update Porter to use `nucypher-core` 0.11.0. --- Pipfile | 6 +- Pipfile.lock | 162 +++++++++++++++++++++++++++++++------------ dev-requirements.txt | 8 +-- requirements.txt | 4 +- 4 files changed, 126 insertions(+), 54 deletions(-) diff --git a/Pipfile b/Pipfile index 1788fc5..61f0264 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-7"} -nucypher-core = ">=0.10.0" # must be the same as nucypher +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-8"} +nucypher-core = ">=0.11.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-7", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-8", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index f68da8d..bff4f79 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7cf67fd37184d9215acd0ba1a0b3aa2aba114a3fadfaf68267cd601bb9fd1c12" + "sha256": "434b1f58c95522da723f380c8c1fbe4990dba34955d1c46e93ab789ea07e0228" }, "pipfile-spec": 6, "requires": { @@ -1143,29 +1143,29 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "1032a2b5560ef8e5afa02097510f13812943e219" + "ref": "788073d93cdc5a94568e004a6f7b7bf342b1805d" }, "nucypher-core": { "hashes": [ - "sha256:02bb4ad202487d39b3d851b1198e73ac004972ece9953daacbfab51e897009dd", - "sha256:0eb91fd30a00a9c8bbdb5d71ef7426276ffb6a19321e903b51281922e9588ae9", - "sha256:2257c5ce1eb71757bf00b94717fdafe5bbbf32b0e298354c144d8533868962c4", - "sha256:458e3c7648721be09925bb215088b8ae28b95d46893c0a3680f656e128b33886", - "sha256:4c4cab5bb94d230dcdb5cfc79b91aba1b6e49c5c8667c3cfbfc22a9f1ab18c31", - "sha256:4f3b98448ccf21e3ff9c4b0a83d9c7a55948d7e81cb605afcaa6bd21ab55d562", - "sha256:538f95d5269eabd45fb6d96b7b184e65120be6750833d50ca9a469596a387574", - "sha256:645cba52ccaecc24566949977623a6fefed8d4212e71fe99f75004411bb84e1a", - "sha256:6b3f31b59f87d87a079ff3c995aa4a03426eed4d1e6e6de738b40ccc6bfdd8c6", - "sha256:71c57658839b60ddd9835dde2676b09f4c6c353cae1136ebd00fac8996dd8eb7", - "sha256:9d9d5db59248acc58173256a8c729401dcf2ce94390b506afb8c4d0c21643755", - "sha256:a73635dd57889fe2e74b75a06681a809ec09fb58df5a1052f5e3bca16bb7c083", - "sha256:cd9ec88fa1efaa7557b410c5d623e3cfdf40d513e9b7548469592e18d44980b0", - "sha256:ce794a79b77c8a5dc2ad513a97b76bd2945ffeb5422ea939f2831073fe022658", - "sha256:f870eb2f8660957d5a290a81d4852f60ebb1aea01c8f515734cc8d26123ac797", - "sha256:fcd3f20314695c663f2285b9d7714faaca0bf1963ea6b65b4d7fd48fb39b8aeb" + "sha256:006760a1d0dbed873d1869040e2649d6b1e47221bc1ed34bf9615b0f8b7a268a", + "sha256:3bbd8b0fad751bcdf962598a284e02b1888186f9720216b72ebb891bcaabd88f", + "sha256:587014fb85aece07f74ed33617fec27f14a512733d989c828e7be248bc3c0242", + "sha256:5a01c175d4d2f7bb2e0b783dd3ffc578144c19eacb4567ecd8a8408c1de99e73", + "sha256:881c36f78fdd0924c7342d42819a8ca15f2ec7bdb1a48574cfd5d12d491eafd0", + "sha256:901aaafaefae7bb1b5b1057c1623f08b3ca7d1490b2e1aec8fc8f566d1464c0b", + "sha256:9b91c2efcf6fd2720e787e67f4a7f702bdc5b464adfc6c3b78ba4113547de781", + "sha256:a27125276713ea318fe5e0430e8a6a8a7dc36273753e5dae4f35f3572390f47c", + "sha256:ad80b5406a9f027f04c5beacc4dbc5c1b6faa77892ea4156c5cda592f6d33c72", + "sha256:bee4bd79d1a0be2addb4eb208667fb8dbb694b31ea8254c56d3759af361a7bc0", + "sha256:c9821eac0c76a31d9a04884e40e1d9e1322319e3169b7e6f88d2d0710efe8eaf", + "sha256:ca267e5f93ad1223f88af3487730e76f65d92b1924909a86db784fdd2353eef8", + "sha256:df06185557fab138733fbf357961ca43312bef9ac35f88c4b97347d8491daef1", + "sha256:e361ca221c4978ce5ede9a7cbcc57e5bc7f35f3accc64b3e15b6f90c56c88bd5", + "sha256:e98f55bc1a994153689c596cb2d317f1cfe0fb2ae5ff2c0811a2364d9b098877", + "sha256:e9f8885b7f4d84c75d111b202c05f9044606f25588a8fd5558011e3cbc37572d" ], "index": "pypi", - "version": "==0.10.0" + "version": "==0.11.0" }, "packaging": { "hashes": [ @@ -1537,26 +1537,62 @@ "sha256:014828cd68b4cdee84ab66adaf5bfe1f137656a7a588c31fdca04ba0768ef62d", "sha256:025b8101dbf39d77cf41ac3c737e4c713e0b2728a516443b382e66b9d492ff98", "sha256:038249d2bbaf91aa65c4108a40ee076f657654261b1a246ab99726710bfb77de", + "sha256:083990eb24bf99a0ae92505b24ab4d4c9110d2569e60437d3c721d8807403471", "sha256:0bcb162f5549408125ec986bfed1a66f2036ac2910d3fb0a6afda0f97bc6ea15", + "sha256:130cfa21a10a60f5fc8ec59fb5f8b4a649cbc26302c7f487d7798f7969a1e763", + "sha256:18cd993d5b63450abd3a9eab70af4bbecb6d315a5f167ed3b228cba6b5bc18e4", "sha256:1b6db70c2ab847229fa9cff3a5eb641c33ab3f981ee8b99d326a7deb8989e4ce", "sha256:2a5c672b1cd382973bf414518ddc9d743d06bcee751fa65256d84ba412192b0b", + "sha256:2f7fe606eb4742f2d2f0ada4e3ee168e809514a39527fce8ee33b2ce908ede00", "sha256:311a57cc972481bd220af28cf4309141c680a356b2359f163daac030d0c2318d", "sha256:33a2a15b641bc17bc6574f9600976374a085ff81ac8dddd4bde6c451e9e9e58d", "sha256:34007442d36980c4aab3f4044c1fd05a736c8ae09d47b8a42112deab5d6b5a10", + "sha256:3a5b0f8c81f89ec23d59733dce9724b244003be2367653e1e53095cf643f8c8b", + "sha256:3c1423f3cddc86b54682d5df905664737300cdf316b1a4fa3056c45b47d44790", + "sha256:453bfdf4a4c618ea24714b6c25bd56d91bfc43c6fd5a34add66c1b92737c5283", "sha256:453e62d679d8de32c5e00ba27f8c8c45a456e5d6db6fa6f67fdd3e12f1658833", + "sha256:457345279898d5156b9de9986c650847c2ee0b205b1fea3f4fe4e8e9f8fe318e", + "sha256:4b62f9f9bf523f8baea794cc996dc0ba47676bca0517860664e6419f65e533da", + "sha256:51fe912d2356f3a0e63f5557a704407357ee403cb6dbde4f86e339d50a2110b9", + "sha256:5551e5583f341867fb6499d9ca4ce3999209b8e30636c6cf48f204120415dbef", "sha256:5eda3aba0cd291de9d4bb138db45814bac24bc4c07e0f38b0544374b6104c488", + "sha256:648a6e46674764eb0179cff6312aade65bb26f370d8af6fc089ab5bf713a7870", "sha256:68e8f2cedc65198248a14d716125016fd0816f63f216a82c2209a0686d5447cf", "sha256:6d1d4078d60ca47f0eb6bdddbf79f00a72d41ee3148aba1dcf9b980f73a8d26e", + "sha256:6decbef9ca15a8fef5840ff350fe53fc2cefbabb34c81bce2576c553fdb33eba", + "sha256:737ea1ee132c89265609ef1951a29a0f4caec57c974715f305587973d63dc439", + "sha256:794ca22915fb1e4d08d4cafb81c0227d05a75f4dcd3ce463abaf851ba6b14f9c", "sha256:858604fe5d7eb50e91b1096bcbcb421f2cb3101454244afda92b4d768d0cb4ce", + "sha256:89d87f5ff7604c25795c369823531b07ac36d62b6c1b743135106f5819051147", + "sha256:97c4507d1b4aaa097f076194606bab723adf7c73c517f09c967818808fc198d4", "sha256:98b54a47e670093b8bf7d1a0222d0af26dac19314a0e79ac478e447357396a2d", + "sha256:99009264ec0992e69f478b3f59b1e411e0d75c1361cf41b1aef397f89d020666", + "sha256:9f8ab0fd88fc2a8ecc543b72c293d70ffa3f448e85e6fb7dee009629154d683e", + "sha256:9ffed319ab2adc2d426160355311686780eea3f063f2b169fa5a9a17bc24e20f", + "sha256:ad2237e4335d6d8a3d678c9106a100c228b1edc92bc5ea6af0be99d1acafd84b", + "sha256:b27301965f076257abea084d245364b3aff01f75a202b36922a09b519dc8359d", + "sha256:b442a4155631cd1c53cb1cd83b815c828cdbb8c0c9a1eb9b8791c5a19bf55692", + "sha256:b71420bbba0f04c82374196467159e960043089f2931227353d9d51d71cd65a7", + "sha256:bd15a7b913b5228711d479dd26af9db3c12280ef7df55f48037d0bc9bf042617", + "sha256:bf13f4ed0fd7691cbf10371a65cd6b4aeeed2d04f09e96f8aa52db36a794c7d4", + "sha256:c0502cec5d672b62547c3f5b1e2efc177db0b982cf7742cb23b50c2933739a4b", "sha256:c38d17af73aa03686d701686628e37c114a459650233c0d5f0492dad3a76e3e0", "sha256:c7bd3a381c4a5fe7e0fc4dff554bd1ce2b0be12ba0193c176c291b7dc1e8bea0", + "sha256:c96f87e14208058dd92dd9e726beeb4a572ead402fedeb230d151575fb39ad93", "sha256:cbdc8ab6108b8bb260ee68fb2de83fb1c481d3a77355156049a8a49ea47eacf6", "sha256:cc6ff891c3814d8cd92549cb385353a922518d433aaf1d2d0d99e98e59915370", + "sha256:d64ef19ea4f65782a09209a2287fea795ca7858375e6e9d87e955dfbbadaed15", "sha256:d940b5644f14e49b1c6e7902b9ec8a0c7584109fbf380fa18115831a641927c8", + "sha256:d9995693d151387d8a95774f6e464118002d7054fade70ea24942caa0f2dcfa8", + "sha256:de1e2eb6fe8ab72256aaf83e0d1969a39271a70fa70a27a45b53d270ecfcc7db", "sha256:e16c02923726307d960e908b61d4d833939f322877d2957c001fca23b644914e", + "sha256:e5ce9ded54dee1f179e9240a983779d5e3bef20249ae4419b671af549b077879", + "sha256:e95544c9293bd0f1fa6ecab06472d7b982acfcfaca37df6a1dce113f26e67d66", "sha256:f53f65cf56bb60355681431d04bc04dbe709452dd85eebf537035dc145bd36c9", - "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5" + "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5", + "sha256:fa7d3cc9c6684cc4e04b9c138c16ff77f4eb3a51ab1b2239964ae8a3b9456a2b", + "sha256:fdc103711cba081c8896476d99479b462fc584091f9979c3c17fedca7558d4d2", + "sha256:ffaca17ce98a61a6a7fd7b1aecfe38cc360a97f85cd7b5ffc4e6c17570bcd377" ], "markers": "python_version >= '3.8'", "version": "==0.7.1" @@ -3558,29 +3594,29 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "1032a2b5560ef8e5afa02097510f13812943e219" + "ref": "788073d93cdc5a94568e004a6f7b7bf342b1805d" }, "nucypher-core": { "hashes": [ - "sha256:02bb4ad202487d39b3d851b1198e73ac004972ece9953daacbfab51e897009dd", - "sha256:0eb91fd30a00a9c8bbdb5d71ef7426276ffb6a19321e903b51281922e9588ae9", - "sha256:2257c5ce1eb71757bf00b94717fdafe5bbbf32b0e298354c144d8533868962c4", - "sha256:458e3c7648721be09925bb215088b8ae28b95d46893c0a3680f656e128b33886", - "sha256:4c4cab5bb94d230dcdb5cfc79b91aba1b6e49c5c8667c3cfbfc22a9f1ab18c31", - "sha256:4f3b98448ccf21e3ff9c4b0a83d9c7a55948d7e81cb605afcaa6bd21ab55d562", - "sha256:538f95d5269eabd45fb6d96b7b184e65120be6750833d50ca9a469596a387574", - "sha256:645cba52ccaecc24566949977623a6fefed8d4212e71fe99f75004411bb84e1a", - "sha256:6b3f31b59f87d87a079ff3c995aa4a03426eed4d1e6e6de738b40ccc6bfdd8c6", - "sha256:71c57658839b60ddd9835dde2676b09f4c6c353cae1136ebd00fac8996dd8eb7", - "sha256:9d9d5db59248acc58173256a8c729401dcf2ce94390b506afb8c4d0c21643755", - "sha256:a73635dd57889fe2e74b75a06681a809ec09fb58df5a1052f5e3bca16bb7c083", - "sha256:cd9ec88fa1efaa7557b410c5d623e3cfdf40d513e9b7548469592e18d44980b0", - "sha256:ce794a79b77c8a5dc2ad513a97b76bd2945ffeb5422ea939f2831073fe022658", - "sha256:f870eb2f8660957d5a290a81d4852f60ebb1aea01c8f515734cc8d26123ac797", - "sha256:fcd3f20314695c663f2285b9d7714faaca0bf1963ea6b65b4d7fd48fb39b8aeb" + "sha256:006760a1d0dbed873d1869040e2649d6b1e47221bc1ed34bf9615b0f8b7a268a", + "sha256:3bbd8b0fad751bcdf962598a284e02b1888186f9720216b72ebb891bcaabd88f", + "sha256:587014fb85aece07f74ed33617fec27f14a512733d989c828e7be248bc3c0242", + "sha256:5a01c175d4d2f7bb2e0b783dd3ffc578144c19eacb4567ecd8a8408c1de99e73", + "sha256:881c36f78fdd0924c7342d42819a8ca15f2ec7bdb1a48574cfd5d12d491eafd0", + "sha256:901aaafaefae7bb1b5b1057c1623f08b3ca7d1490b2e1aec8fc8f566d1464c0b", + "sha256:9b91c2efcf6fd2720e787e67f4a7f702bdc5b464adfc6c3b78ba4113547de781", + "sha256:a27125276713ea318fe5e0430e8a6a8a7dc36273753e5dae4f35f3572390f47c", + "sha256:ad80b5406a9f027f04c5beacc4dbc5c1b6faa77892ea4156c5cda592f6d33c72", + "sha256:bee4bd79d1a0be2addb4eb208667fb8dbb694b31ea8254c56d3759af361a7bc0", + "sha256:c9821eac0c76a31d9a04884e40e1d9e1322319e3169b7e6f88d2d0710efe8eaf", + "sha256:ca267e5f93ad1223f88af3487730e76f65d92b1924909a86db784fdd2353eef8", + "sha256:df06185557fab138733fbf357961ca43312bef9ac35f88c4b97347d8491daef1", + "sha256:e361ca221c4978ce5ede9a7cbcc57e5bc7f35f3accc64b3e15b6f90c56c88bd5", + "sha256:e98f55bc1a994153689c596cb2d317f1cfe0fb2ae5ff2c0811a2364d9b098877", + "sha256:e9f8885b7f4d84c75d111b202c05f9044606f25588a8fd5558011e3cbc37572d" ], "index": "pypi", - "version": "==0.10.0" + "version": "==0.11.0" }, "numpy": { "hashes": [ @@ -3773,11 +3809,11 @@ }, "prometheus-client": { "hashes": [ - "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b", - "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce" + "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", + "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" ], "markers": "python_version >= '3.6'", - "version": "==0.17.0" + "version": "==0.17.1" }, "prompt-toolkit": { "hashes": [ @@ -4316,26 +4352,62 @@ "sha256:014828cd68b4cdee84ab66adaf5bfe1f137656a7a588c31fdca04ba0768ef62d", "sha256:025b8101dbf39d77cf41ac3c737e4c713e0b2728a516443b382e66b9d492ff98", "sha256:038249d2bbaf91aa65c4108a40ee076f657654261b1a246ab99726710bfb77de", + "sha256:083990eb24bf99a0ae92505b24ab4d4c9110d2569e60437d3c721d8807403471", "sha256:0bcb162f5549408125ec986bfed1a66f2036ac2910d3fb0a6afda0f97bc6ea15", + "sha256:130cfa21a10a60f5fc8ec59fb5f8b4a649cbc26302c7f487d7798f7969a1e763", + "sha256:18cd993d5b63450abd3a9eab70af4bbecb6d315a5f167ed3b228cba6b5bc18e4", "sha256:1b6db70c2ab847229fa9cff3a5eb641c33ab3f981ee8b99d326a7deb8989e4ce", "sha256:2a5c672b1cd382973bf414518ddc9d743d06bcee751fa65256d84ba412192b0b", + "sha256:2f7fe606eb4742f2d2f0ada4e3ee168e809514a39527fce8ee33b2ce908ede00", "sha256:311a57cc972481bd220af28cf4309141c680a356b2359f163daac030d0c2318d", "sha256:33a2a15b641bc17bc6574f9600976374a085ff81ac8dddd4bde6c451e9e9e58d", "sha256:34007442d36980c4aab3f4044c1fd05a736c8ae09d47b8a42112deab5d6b5a10", + "sha256:3a5b0f8c81f89ec23d59733dce9724b244003be2367653e1e53095cf643f8c8b", + "sha256:3c1423f3cddc86b54682d5df905664737300cdf316b1a4fa3056c45b47d44790", + "sha256:453bfdf4a4c618ea24714b6c25bd56d91bfc43c6fd5a34add66c1b92737c5283", "sha256:453e62d679d8de32c5e00ba27f8c8c45a456e5d6db6fa6f67fdd3e12f1658833", + "sha256:457345279898d5156b9de9986c650847c2ee0b205b1fea3f4fe4e8e9f8fe318e", + "sha256:4b62f9f9bf523f8baea794cc996dc0ba47676bca0517860664e6419f65e533da", + "sha256:51fe912d2356f3a0e63f5557a704407357ee403cb6dbde4f86e339d50a2110b9", + "sha256:5551e5583f341867fb6499d9ca4ce3999209b8e30636c6cf48f204120415dbef", "sha256:5eda3aba0cd291de9d4bb138db45814bac24bc4c07e0f38b0544374b6104c488", + "sha256:648a6e46674764eb0179cff6312aade65bb26f370d8af6fc089ab5bf713a7870", "sha256:68e8f2cedc65198248a14d716125016fd0816f63f216a82c2209a0686d5447cf", "sha256:6d1d4078d60ca47f0eb6bdddbf79f00a72d41ee3148aba1dcf9b980f73a8d26e", + "sha256:6decbef9ca15a8fef5840ff350fe53fc2cefbabb34c81bce2576c553fdb33eba", + "sha256:737ea1ee132c89265609ef1951a29a0f4caec57c974715f305587973d63dc439", + "sha256:794ca22915fb1e4d08d4cafb81c0227d05a75f4dcd3ce463abaf851ba6b14f9c", "sha256:858604fe5d7eb50e91b1096bcbcb421f2cb3101454244afda92b4d768d0cb4ce", + "sha256:89d87f5ff7604c25795c369823531b07ac36d62b6c1b743135106f5819051147", + "sha256:97c4507d1b4aaa097f076194606bab723adf7c73c517f09c967818808fc198d4", "sha256:98b54a47e670093b8bf7d1a0222d0af26dac19314a0e79ac478e447357396a2d", + "sha256:99009264ec0992e69f478b3f59b1e411e0d75c1361cf41b1aef397f89d020666", + "sha256:9f8ab0fd88fc2a8ecc543b72c293d70ffa3f448e85e6fb7dee009629154d683e", + "sha256:9ffed319ab2adc2d426160355311686780eea3f063f2b169fa5a9a17bc24e20f", + "sha256:ad2237e4335d6d8a3d678c9106a100c228b1edc92bc5ea6af0be99d1acafd84b", + "sha256:b27301965f076257abea084d245364b3aff01f75a202b36922a09b519dc8359d", + "sha256:b442a4155631cd1c53cb1cd83b815c828cdbb8c0c9a1eb9b8791c5a19bf55692", + "sha256:b71420bbba0f04c82374196467159e960043089f2931227353d9d51d71cd65a7", + "sha256:bd15a7b913b5228711d479dd26af9db3c12280ef7df55f48037d0bc9bf042617", + "sha256:bf13f4ed0fd7691cbf10371a65cd6b4aeeed2d04f09e96f8aa52db36a794c7d4", + "sha256:c0502cec5d672b62547c3f5b1e2efc177db0b982cf7742cb23b50c2933739a4b", "sha256:c38d17af73aa03686d701686628e37c114a459650233c0d5f0492dad3a76e3e0", "sha256:c7bd3a381c4a5fe7e0fc4dff554bd1ce2b0be12ba0193c176c291b7dc1e8bea0", + "sha256:c96f87e14208058dd92dd9e726beeb4a572ead402fedeb230d151575fb39ad93", "sha256:cbdc8ab6108b8bb260ee68fb2de83fb1c481d3a77355156049a8a49ea47eacf6", "sha256:cc6ff891c3814d8cd92549cb385353a922518d433aaf1d2d0d99e98e59915370", + "sha256:d64ef19ea4f65782a09209a2287fea795ca7858375e6e9d87e955dfbbadaed15", "sha256:d940b5644f14e49b1c6e7902b9ec8a0c7584109fbf380fa18115831a641927c8", + "sha256:d9995693d151387d8a95774f6e464118002d7054fade70ea24942caa0f2dcfa8", + "sha256:de1e2eb6fe8ab72256aaf83e0d1969a39271a70fa70a27a45b53d270ecfcc7db", "sha256:e16c02923726307d960e908b61d4d833939f322877d2957c001fca23b644914e", + "sha256:e5ce9ded54dee1f179e9240a983779d5e3bef20249ae4419b671af549b077879", + "sha256:e95544c9293bd0f1fa6ecab06472d7b982acfcfaca37df6a1dce113f26e67d66", "sha256:f53f65cf56bb60355681431d04bc04dbe709452dd85eebf537035dc145bd36c9", - "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5" + "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5", + "sha256:fa7d3cc9c6684cc4e04b9c138c16ff77f4eb3a51ab1b2239964ae8a3b9456a2b", + "sha256:fdc103711cba081c8896476d99479b462fc584091f9979c3c17fedca7558d4d2", + "sha256:ffaca17ce98a61a6a7fd7b1aecfe38cc360a97f85cd7b5ffc4e6c17570bcd377" ], "markers": "python_version >= '3.8'", "version": "==0.7.1" @@ -4350,10 +4422,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:0c9f858337ec3781cf4851972ef42bba8c9828aea116b0dbed8f38c5f9a1896c", - "sha256:760e4fb6d01c994110507133e08ecd4bdf4d75ee4be77f296a3579796cf73134" + "sha256:3e17215d8006612e2df02b0e73115eb8376c37e3f586d8436fa41644e605074d", + "sha256:a99ee105384788c3f228726a88baf515fe7b5f1d2d0f215a03d194369f158df7" ], - "version": "==1.26.0" + "version": "==1.29.2" }, "service-identity": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 300b95d..cfdd237 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -86,8 +86,8 @@ msgspec==0.15.1 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher @ git+https://github.com/nucypher/nucypher.git@1032a2b5560ef8e5afa02097510f13812943e219 -nucypher-core==0.10.0 +git+https://github.com/nucypher/nucypher.git@788073d93cdc5a94568e004a6f7b7bf342b1805d#egg=nucypher +nucypher-core==0.11.0 numpy==1.24.3 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' @@ -100,7 +100,7 @@ pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' platformdirs==3.5.1 ; python_version >= '3.7' pluggy==1.0.0 ; python_version >= '3.6' pre-commit==3.3.2 -prometheus-client==0.17.0 ; python_version >= '3.6' +prometheus-client==0.17.1 ; python_version >= '3.6' prompt-toolkit==3.0.38 ; python_full_version >= '3.7.0' protobuf==4.23.2 ; python_version >= '3.7' ptyprocess==0.7.0 @@ -143,7 +143,7 @@ rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.7.1 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.26.0 +sentry-sdk==1.29.2 service-identity==21.1.0 setuptools==67.8.0 ; python_version >= '3.7' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' diff --git a/requirements.txt b/requirements.txt index b37dc8b..bd39873 100644 --- a/requirements.txt +++ b/requirements.txt @@ -56,8 +56,8 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==0.4.4 ; python_version >= '2.7' -nucypher @ git+https://github.com/nucypher/nucypher.git@1032a2b5560ef8e5afa02097510f13812943e219 -nucypher-core==0.10.0 +git+https://github.com/nucypher/nucypher.git@788073d93cdc5a94568e004a6f7b7bf342b1805d#egg=nucypher +nucypher-core==0.11.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' From d61521bb6b8ef090ff869957bf6449aa52e2ff31 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 22 Aug 2023 21:06:43 -0400 Subject: [PATCH 034/114] Update tests to use nucypher_core.ferveo.FerveoVariant with ThresholdDecryptionRequest objects. --- tests/cbd/test_cbd_specifications.py | 4 ++-- tests/cbd/test_porter_cbd_python_interface.py | 5 ++--- tests/cbd/test_porter_cbd_web_interface.py | 6 +++--- tests/test_fields.py | 4 ++-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index 1e36e59..8ff4b8c 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -2,8 +2,8 @@ import pytest from eth_utils import to_checksum_address -from nucypher.crypto.ferveo.dkg import FerveoVariant from nucypher_core import Conditions, SessionStaticSecret, ThresholdDecryptionRequest +from nucypher_core.ferveo import FerveoVariant from porter.fields.cbd import ( EncryptedThresholdDecryptionRequestField, @@ -24,7 +24,7 @@ def test_cbd_decrypt( decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, - variant=int(FerveoVariant.SIMPLE.value), + variant=FerveoVariant.Simple, ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/cbd/test_porter_cbd_python_interface.py index 449cf4e..a9105db 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -1,12 +1,11 @@ import json -from nucypher.crypto.ferveo.dkg import FerveoVariant from nucypher_core import Conditions, SessionStaticSecret, ThresholdDecryptionRequest from nucypher_core.ferveo import ( - Ciphertext, DecryptionShareSimple, combine_decryption_shares_simple, decrypt_with_shared_secret, + FerveoVariant, ) @@ -16,7 +15,7 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, - variant=int(FerveoVariant.SIMPLE.value), + variant=FerveoVariant.Simple, ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index 79a8cec..531f375 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -2,7 +2,6 @@ from base64 import b64decode from eth_utils import to_checksum_address -from nucypher.crypto.ferveo.dkg import FerveoVariant from nucypher_core import ( Conditions, EncryptedThresholdDecryptionResponse, @@ -13,6 +12,7 @@ DecryptionShareSimple, combine_decryption_shares_simple, decrypt_with_shared_secret, + FerveoVariant, ) from porter.fields.cbd import EncryptedThresholdDecryptionRequestField @@ -36,7 +36,7 @@ def test_cbd_decrypt( decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, - variant=int(FerveoVariant.SIMPLE.value), + variant=FerveoVariant.Simple, ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) @@ -133,7 +133,7 @@ def test_cbd_decrypt( # invalid data request = ThresholdDecryptionRequest( ritual_id=999, # rando invalid ritual id - variant=int(FerveoVariant.SIMPLE.value), + variant=FerveoVariant.Simple, ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) diff --git a/tests/test_fields.py b/tests/test_fields.py index 1bdc88e..f06487a 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -5,7 +5,6 @@ import pytest from eth_utils import to_canonical_address from marshmallow import fields as marshmallow_fields -from nucypher.crypto.ferveo.dkg import FerveoVariant from nucypher_core import ( Address, Conditions, @@ -19,6 +18,7 @@ ThresholdDecryptionRequest, ThresholdDecryptionResponse, ) +from nucypher_core.ferveo import FerveoVariant from nucypher_core.umbral import SecretKey from porter.fields.base import ( @@ -300,7 +300,7 @@ def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, - variant=int(FerveoVariant.SIMPLE.value), + variant=FerveoVariant.Simple, ciphertext=ciphertext, conditions=Conditions(json.dumps(conditions)), ) From 46ba8b3e57c301305e3f9ab0c7d57fff97116dfd Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 22 Aug 2023 21:37:22 -0400 Subject: [PATCH 035/114] Use dev installaton of `nucypher` to temporarily work around prometheus import for nucypher `dkg-dev-8`. --- deploy/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index 2d14cad..42de979 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -8,6 +8,6 @@ WORKDIR /code COPY . /code # Porter requirements -RUN pip3 install . +RUN pip3 install .[dev] CMD ["/bin/bash"] From fc026565b33a13e1bc4d7901177200955d1a7687 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 18 Sep 2023 09:16:42 -0400 Subject: [PATCH 036/114] Add darker to github workflow; also update version of darker used in pre-commit hook. --- .github/workflows/darker.yml | 17 +++++++++++++++++ .github/workflows/tests.yml | 2 +- .pre-commit-config.yaml | 4 ++-- 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/darker.yml diff --git a/.github/workflows/darker.yml b/.github/workflows/darker.yml new file mode 100644 index 0000000..7c27f18 --- /dev/null +++ b/.github/workflows/darker.yml @@ -0,0 +1,17 @@ +name: 🧹 Darker + +on: [push, pull_request] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: actions/setup-python@v4 + with: + python-version: '3.8' + - uses: akaihola/darker@1.7.2 + with: + version: "1.7.2" # defaults to same version, but can be modified diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index eb43cde..c562ebe 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,7 +15,7 @@ jobs: python-version: ["3.8", "3.10"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0e9d49d..9f393a8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,9 +39,9 @@ repos: - repo: https://github.com/akaihola/darker - rev: 1.6.1 + rev: 1.7.2 hooks: - id: darker args: [--isort] additional_dependencies: - - isort~=5.9 + - isort~=5.9 From 1aff25ecea62531dbda36533bc3f9c31ffa79b48 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 8 Sep 2023 15:35:22 -0400 Subject: [PATCH 037/114] Remove PRE from Porter description and banner. --- porter/__about__.py | 2 +- porter/main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/porter/__about__.py b/porter/__about__.py index 95149b8..95b4f57 100644 --- a/porter/__about__.py +++ b/porter/__about__.py @@ -12,7 +12,7 @@ __url__ = "https://github.com/nucypher/nucypher-porter" -__summary__ = 'Pipe for PRE on Threshold Network' +__summary__ = "Pipe for TACo on Threshold Network" __version__ = "1.0.0" diff --git a/porter/main.py b/porter/main.py index 460767f..d357361 100644 --- a/porter/main.py +++ b/porter/main.py @@ -39,7 +39,7 @@ | | | |_| | | | |_( (/ /| | |_| \___/|_| \___)____)_| -the Pipe for PRE Application network operations +the Pipe for TACo Application network operations """ From 8e87b17c068a3d0d61a4ad20d71ab92bf5e95ab4 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 16 Sep 2023 07:49:19 -0400 Subject: [PATCH 038/114] Relock dependencies based on latest changes to `nucypher` (alpha-13 candidate). --- Pipfile | 6 +- Pipfile.lock | 3529 ++++++++++++++++++++++-------------------- dev-requirements.txt | 142 +- requirements.txt | 83 +- 4 files changed, 1925 insertions(+), 1835 deletions(-) diff --git a/Pipfile b/Pipfile index 61f0264..255a468 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-8"} -nucypher-core = ">=0.11.0" # must be the same as nucypher +nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "alpha-13"} +nucypher-core = "==0.12.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-8", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "alpha-13", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index bff4f79..0b9f170 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "434b1f58c95522da723f380c8c1fbe4990dba34955d1c46e93ab789ea07e0228" + "sha256": "c877fb2fde9d1e06b765df82a2f57ee10aa97d0f24dfe2c89229009a79682307" }, "pipfile-spec": 6, "requires": { @@ -126,11 +126,11 @@ }, "async-timeout": { "hashes": [ - "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15", - "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c" + "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", + "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" ], - "markers": "python_version >= '3.6'", - "version": "==4.0.2" + "markers": "python_version >= '3.7'", + "version": "==4.0.3" }, "attrs": { "hashes": [ @@ -178,95 +178,110 @@ }, "bitarray": { "hashes": [ - "sha256:0331ce777174f1f06e592b5199e056cdece817181522d75e5671ef728bb5c591", - "sha256:0474532ad832da5a6c4f4127d64de68455a5948dcb9e824aa4a3927ced87ba1f", - "sha256:05c868339a9fb6095b600a4e576b76e269710ad519b00861d6b2a319e7d24465", - "sha256:0970faa5ce3ca6601d29f242941b5920c601535ac850aa9be942bcfe99636619", - "sha256:143d4f65e1f45a533e13521be1dc557a782317ecf76520eabd5a903b26ecb187", - "sha256:168acedc8ad7b87d01b6b733d37b0414aa4da6d10e1eedebb6cf3d79389fcef2", - "sha256:19bb60f0f3f99d066d4ad75247490107f7d3f0ba8f97b4f686f71bec8b0b2a68", - "sha256:1bcc809a67b03d7950a7f01cb8bb35b9a2b7fe9361f10aaf2fdfa44073ffed0d", - "sha256:1ffd91235c8a7c7ea3e3a6f710545b578c901303d6b98b7d2ee730ebf9c2a4ff", - "sha256:21f1ae716f61bf700327dd8e47a993a1b0bce30f1e8881f6bd6243223b6bafff", - "sha256:21ff72a03a9e60c43a98cb3b0f8c246414fae1a3bbbf425af06f6f350cde30d2", - "sha256:22dc38cb226b7604dbdd2d5504cf8d0a2e645e353eb158fed56d908e3243aea1", - "sha256:2435ac2598ae7caf283bf6af6c3e03f4dc6adf5a3bfaf01ffc719bd61411647b", - "sha256:2e55ad91330c2f1ff78f4b904b897e691d623a1858466924fb39233e669b1219", - "sha256:2e8365a513c1eaab2457e7065f517221bf11bf4909231f4b3e5204844b66bcbb", - "sha256:382e76863e9ad999af9ff0e5061d2df47abebcddeaa897da7924234f772db698", - "sha256:3ac1be1f87c67dc7e3640496427b6a291684a5612ede5b9a33aa34f620395985", - "sha256:3b3d319d89ee099279ec8c3efd57c2f21cd0b8d34e2ad0b5db07f3e45c4568d8", - "sha256:3c0f8520112563a306219ce1d4d9120a09179f5c7014e6cc629aeeb821436ecb", - "sha256:3cb3d4660075ee690549034c18093b1766168dc925ca16f76ab8d64250a96120", - "sha256:4138461ffb2605515fd5c7199c1d870095b3913fe2d0a195b21492ff84901168", - "sha256:4366f2998a63013fe260b8a34051858c98d6680a8bc832529d500af9e820f991", - "sha256:44203138e5a0548f120c40cf24bf27fc7e05ca5dc698f1f8fa53bfb9bdd1b700", - "sha256:4a9e2c9b6e391a167e1a87058ed3777440f5d4db623724832b762c704fe6f062", - "sha256:509a12c3f4a8abfcee3eec02000883b5cdce3e689bb99cdc5fac3767b6b7d2c5", - "sha256:50c7bb2d950c6ec10d02f47f6fd9e786ff890a4879e04bd62c74f0204c62c419", - "sha256:5423427bb3af9b75e01a4aca6d38e84906b16ff9f62e2a64dce877c9505735a3", - "sha256:54e1bdcdf3c4541a9df432c73c117be9d195629a4d9a705c9d61a05c797fb0c1", - "sha256:553f3a4d97d7974e7632f754411d91f4f435756fd961204ee494a2af68137b4f", - "sha256:58e3ce453708f43f9666a1abed97c50e052351631d7463fdea07d8e9f50dd9bd", - "sha256:656195c2e378cab88c98fbbad723104d1b75483d6a88df6049c81ca7303e3d88", - "sha256:6b417fb3d2c5636c369eda939db33dac97115fce72a192c63e1210db78ce4e9f", - "sha256:6f502bcef6e215b837db2c84150275ada5120c78776caffda26291c4b6688646", - "sha256:70fbb07504d63a5d793107ce16b0722de7fa45aca943959153b05ddc04f41cf3", - "sha256:716fdc54eaea23029d95f285b94d1bb1954aaeaa16ceb51910f3923ea13950e5", - "sha256:72cae6daf2e56675dfe4f65caf1d63ee74295926d0bb78c27d8e1b49a91dbae2", - "sha256:74d4fb48e2463638ce7be1c20613a7e118485bb46cfd84bc2a14c7d3b098f49c", - "sha256:7dac4575632f2900e7aed2f3a75c3ff672786bdfba8c000a86e62eea62d2a018", - "sha256:84262cadabc706a11affc6a80cc7ff3a0d0f2b7bd33eef58f9d733cfe260e6da", - "sha256:857c90a35ebaa1157b280ec62571e124384ca737434681d1a59de375795cc9d9", - "sha256:8712c561d370d7667c861e14e69fcce63ca761e50fb3cc7ef79682eeeaed567b", - "sha256:90a1cd9fe75eb91534ebf5459e9f2d4c83d5399f6ec812584d3dfc84440d784c", - "sha256:90d7f4c75174ed190c60854bce461fa6be66a9005e4bc595b8f134b31601ce90", - "sha256:94fdfaa747d5fcb996ff060a1396a6cb3132a3404ba7b019748370fafe3ff1dd", - "sha256:9944648f9f12a500c46e1786088a40e9711afc9c51db2370610f974e851dac9c", - "sha256:9c2cc2ab01bd1d809e9e5b0be28b25901db2a87b6ae483d29a744764cb89988e", - "sha256:9c6ef513b8166af421178027efbbf9b51a322645a00a2fa73809f27a899c1acb", - "sha256:9f79ad4d19595f9f9dd615a33a95c2eeb1b88705de3fbf96677b057b48408039", - "sha256:a3f5defdc2d36d969febeef7508a0bf7e93cdfb3325ac95863d95d753c23c99f", - "sha256:a625129aa68d7886a86bb0d5166c72fc0849f0e34dd88e8b772be3c7fcd6fd8b", - "sha256:a7d41e52d2295f53f5a03c62efbcb6d481f3b9a8ff87c2e072d2adb879f4929e", - "sha256:a99deab760c063e200ed3267893b87534deeaaa4ffc03da54942a7833e59fe51", - "sha256:abc528163aa87642b968a06af467b4db1e7f303784b30e0b2cc120aaba4bf887", - "sha256:adb48a4bb255d69fb22ac27d7ac92280731905a3b19f377ab1f02478c309b501", - "sha256:af991272a2a20396c79d07847d96370490a2eca0c781792c9c7cd7deff863297", - "sha256:b0274bf5a568d3322052403758c7ba0e32a005474115592cdb74d54cfa2b1772", - "sha256:b07ea1bb32f7ed62f2f693dabc91bd41e0977205fefbeb4fa93733518c09273a", - "sha256:b2a70ffabcce0efe8cf6113526c5dcb70c6e7b912289c84f0ad8c4288d7b1c0f", - "sha256:b4a94c1f94a8a4ebe51a375490eccec94261aa357edd4faf5ca2398e8c30ebd1", - "sha256:b56e07e21a24ca580bff7ef5eebef8d28bfe139c9a24da76359399ce20d33bc1", - "sha256:b73f48f85ba28c10db498bc2654678b7b9076d08ec34542101e9bfa3e209a6ee", - "sha256:b81c2d73a7b348c957aac8ee71076a80e92b29deb68db49ff941a4306cb419e8", - "sha256:bbfb02fde64b14a820a9268836103b028f20a206333fc6d637e3e663824b64ad", - "sha256:bdc829b1eecd57ee9b65c3b6c61814671683e061b21a267c64b8f1db29703bca", - "sha256:bf7921fef3e869e51734306174ed52d8ec11c8c359fcf98d72c4bee8d9fb82fc", - "sha256:bf8f13fc2d91960f94f8a8a3ad2e824cb1ca7bb49d1f905f9201327bdf9c086f", - "sha256:c2100c7b5bc813350ad8abe30f7223c9398d86ab30ebeffc7f780938fd53c009", - "sha256:c3aad9c8944a1cc2d3ac6f31fcfe164e22b1785e24f85b6f89b377667c5a5a87", - "sha256:ceb0e02a73d4908ab9aa72eb6c7fa04eec37daad2d93192892a5f3a6947264db", - "sha256:d03fe73637a798ac39adcefb18d8bb78eaa3529f79e6455ee462a1fb084adbf6", - "sha256:d1814b9185aedcb75fc7f7e02753be7fa114d18f8bb29f0e31a84507ed7d01ee", - "sha256:d6540e180eccb4e5c6df2d460df7b1b0d12a00364b73806a1df8cf1d8f1a34eb", - "sha256:d83881e4594c136301d1ec8d783f456dd6b001316588a781f16ddd20522c5d83", - "sha256:daa1239c5b388b6f5c51426eee0c70fad7f24d0668e4b461e66c8755f996d4cb", - "sha256:daa88834560f9c655231b6c3ed8ac069755a7f48ff8c3d37a5ffb88108e8c69d", - "sha256:de72f691895ee41cd720b335ab52d7dc979dd1348eb06891bd5093aa6988cfbd", - "sha256:e2f89fbe7dcd915a5bc4a53ed7be0e1640d3a84a5347db722e7249b715b8b91a", - "sha256:e5175dfe778839c6bf4e3496e4487dac0508a49c9a23c4a5b4fe29d2d1411543", - "sha256:e5b284c11eced377fa799f66fe69208d140a3ffcb29a767e57e9c66e66f061ad", - "sha256:ea6bda210224d23bef6af867adfc37bdf150fd9efdbfbdf61ba3b381b57583c5", - "sha256:ebc4ea4c48b050becdd177cf9b0a5d4be99cfa52a118fbe34f871156e5b1ad39", - "sha256:ed833c809ddff4d4ec81c878dd0b1a8a9b7de094d35dbc623b21cba707c26839", - "sha256:f30a89d673945109a64d2c3cb5bc2c707ed18efb8e018b6a9d233cb08034525d", - "sha256:f3f3d9cbd3e4032cc0b562a69cd7b2d7f7a7c96cc681871029f92bf49e99fb06", - "sha256:f4cdb4e3565d2fee759053272e6ec26ba8a7185f6bccba9e78a98d4df0ed08a2", - "sha256:fc99267064529627b28b53f8eeac64e3ac42a936c4f8c703122a6e14f77a1ea0", - "sha256:fce679c2d607ac7552516fbd08e1834ec4ef883ebcd94183daaf6190f4a2fc6b" - ], - "version": "==2.7.4" + "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", + "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", + "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", + "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", + "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", + "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", + "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", + "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", + "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", + "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", + "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", + "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", + "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", + "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", + "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", + "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", + "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", + "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", + "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", + "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", + "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", + "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", + "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", + "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", + "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", + "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", + "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", + "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", + "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", + "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", + "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", + "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", + "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", + "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", + "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", + "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", + "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", + "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", + "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", + "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", + "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", + "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", + "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", + "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", + "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", + "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", + "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", + "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", + "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", + "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", + "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", + "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", + "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", + "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", + "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", + "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", + "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", + "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", + "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", + "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", + "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", + "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", + "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", + "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", + "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", + "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", + "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", + "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", + "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", + "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", + "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", + "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", + "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", + "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", + "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", + "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", + "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", + "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", + "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", + "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", + "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", + "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", + "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", + "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", + "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", + "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", + "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", + "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", + "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", + "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", + "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", + "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", + "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", + "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", + "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", + "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", + "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", + "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", + "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", + "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", + "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", + "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" + ], + "version": "==2.8.1" }, "bytestring-splitter": { "hashes": [ @@ -284,11 +299,11 @@ }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "cffi": { "hashes": [ @@ -369,11 +384,11 @@ }, "click": { "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], "markers": "python_version >= '3.7'", - "version": "==8.1.3" + "version": "==8.1.7" }, "colorama": { "hashes": [ @@ -400,132 +415,131 @@ }, "cryptography": { "hashes": [ - "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db", - "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a", - "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039", - "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c", - "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3", - "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485", - "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c", - "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca", - "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5", - "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5", - "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3", - "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb", - "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43", - "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31", - "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc", - "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b", - "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006", - "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a", - "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699" + "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306", + "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84", + "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47", + "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d", + "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116", + "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207", + "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81", + "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087", + "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd", + "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507", + "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858", + "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae", + "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34", + "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906", + "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd", + "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922", + "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7", + "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4", + "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574", + "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1", + "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c", + "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e", + "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de" ], "markers": "python_version >= '3.7'", - "version": "==41.0.1" + "version": "==41.0.3" }, "cytoolz": { "hashes": [ - "sha256:02975e2b1e61e47e9afa311f4c1783d155136fad37c54a1cebfe991c5a0798a1", - "sha256:03ab22c9aeb1535f8647d23b6520b0c3d41aaa18d04ef42b352dde1931f2e2b1", - "sha256:061387aa39b9c1576c25d0c59142513c09e77a2a07bd5d6211a43c7a758b6f45", - "sha256:06d38a40fe153f23cda0e823413fe9d9ebee89dd461827285316eff929fb121e", - "sha256:0d474dacbafbdbb44c7de986bbf71ff56ae62df0d52ab3b6fa966784dc88737a", - "sha256:117871f036926e42d3abcee587eafa9dc7383f1064ac53a806d33e76604de311", - "sha256:14f4dbc3f0ec8f6fc68865489af21dcf042ff007d2737c27bfd73296f15db544", - "sha256:1a1eae39656a1685e8b3f433eecfd72015ce5c1d7519e9c8f9402153c68331bb", - "sha256:1b6761791973b1e839b8309d5853b40eeb413368e31beaf5f2b6ed44c6fc7cf0", - "sha256:1be368623e46ad3c1ce807e7a436acb119c26001507b31f92ceb21b86e08c386", - "sha256:1c29dd04e282ddfd45b457e3551075beec9128aa9271245e58ce924bf6e055f8", - "sha256:23c3f57c48eb939d2986eba4aeaeedf930ebf94d58c91a42d4e0fc45ed5427dc", - "sha256:25ff13c468c06da9ef26651dc389e7e8bb7af548f8c1dfb96305f57f18d398a8", - "sha256:2a48940ff0449ffcf690310bf9228bb57885f7571406ed2fe05c98e299987195", - "sha256:2b245b824f4705aef0e4a03fafef3ad6cb59ef43cc564cdbf683ee28dfc11ad5", - "sha256:2ec296f01c29c809698eaf677211b6255691295c2b35caab2131e1e7eaadfbac", - "sha256:2eed428b5e68c28abf2c71195e799850e040d67a27c05f7785319c611665b86a", - "sha256:2f32452e833f0605b871626e6c61b71b0cba24233aad0e04accc3240497d4995", - "sha256:3032c0ba42dee5836d6b57a72a569b65df2c29e8ed266cb900d569003cf933a9", - "sha256:30936ae8fa68b6a1ac8ad6c4bacb5a8a00d51bc6c89f9614a1557b0105d09f8a", - "sha256:31131b54a0c72efc0eb432dc66df546c6a54f2a7d396c9a34cf65ac1c26b1df8", - "sha256:35fae4eaa0eaf9072a5fe2d244a79e65baae4e5ddbe9cc629c5037af800213a2", - "sha256:37320669c364f7d370392af33cc1034b4563da66c22cd3261e3530f4d30dbe4b", - "sha256:37c53f456a1c84566a7d911eec57c4c6280b915ab0600e7671582793cc2769fe", - "sha256:3c9a16a5b4f54d5c0a131f56b0ca65998a9a74958b5b36840c280edba4f8b907", - "sha256:3cb95d23defb2322cddf70efb4af6dac191d95edaa343e8c1f58f1afa4f92ecd", - "sha256:3d6d0b0075731832343eb88229cea4bf39e96f3fc7acbc449aadbdfec2842703", - "sha256:421b224dc4157a0d66625acb5798cf50858cfa06a5232d39a8bd6cf1fa88aca3", - "sha256:4284120c978fb7039901bf6e66832cb3e82ac1b2a107512e735bdb04fd5533ed", - "sha256:42c9e5cd2a48a257b1f2402334b48122501f249b8dcf77082f569f2680f185eb", - "sha256:4534cbfad73cdb1a6dad495530d4186d57d73089c01e9cb0558caab50e46cb3b", - "sha256:48bc2f30d1b2646d675bb8e7778ab59379bf9edc59fe06fb0e7f85ba1271bf44", - "sha256:49911cb533c96d275e31e7eaeb0742ac3f7afe386a1d8c40937814d75039a0f7", - "sha256:499af2aff04f65b4c23de1df08e1d1484a93b23ddaaa0163e44b5070b68356eb", - "sha256:4a0055943074c6c85b77fcc3f42f7c54010a3478daa2ed9d6243d0411c84a4d3", - "sha256:4d700e011156ff112966c6d77faaae125fcaf538f4cec2b9ce8957de82858f0f", - "sha256:50db41e875e36aec11881b8b12bc69c6f4836b7dd9e88a9e5bbf26c2cb3ba6cd", - "sha256:5158ae6d8dd112d003f677039a3613ca7d2592bfe35d7accf23684edb961fc26", - "sha256:56e1ebf6eb4438b8c45cbe7e7b22fc65df0c9efa97a70d3bf2f51e08b19756a5", - "sha256:59641eb1f41cb688b3cb2f98c9003c493a5024325f76b5c02333d08dd972127c", - "sha256:5af43ca7026ead3dd08b261e4f7163cd2cf3ceaa74fa5a81f7b7ea5d445e41d6", - "sha256:5c59bb4ca88e1c69931468bf21f91c8f64d8bf1999eb163b7a2df336f60c304a", - "sha256:633f19d1990b1cf9c67dce9c28bf8b5a18e42785d15548607a100e1236384d5d", - "sha256:6716855f9c669c9e25a185d88e0f169839bf8553d16496796325acd114607c11", - "sha256:6805b007af3557ee6c20dab491b6e55a8177f5b6845d9e6c653374d540366ba7", - "sha256:695dd8231e4f1bfb9a2363775a6e4e56ad9d2058058f817203a49614f4bfe33b", - "sha256:6fa7009c843667868aa8bdb3d68e5ef3d6356dd418b17ed5ca4e1340e82483a5", - "sha256:794cce219bbcb2f36ca220f27d5afd64eaa854e04901bd6f240be156a578b607", - "sha256:7b60caf0fa5f1b49f1062f7dc0f66c7b23e2736bad50fa8296bfb845995e3051", - "sha256:7e903df991f0957e2b271a37bb25d28e0d260c52825ae67507d15ca55a935961", - "sha256:7eb9e6fa8a82c3d2f519f7d3942898a97792e3895569e9501b9431048289b82f", - "sha256:816c2038008ebf50d81171ddfae377f1af9e71d504ec609469dcb0906bfcf2ae", - "sha256:849f461bffa1e7700ccfcb5186df29cd4cdcc9efdb7199cb8b5681dc37045d72", - "sha256:8506d1863f30d26f577c4ed59d2cfd03d2f39569f9cbaa02a764a9de73d312d5", - "sha256:867bebe6be30ee36a836f9b835790762a74f46be8cc339ea57b68dcecdbc1133", - "sha256:97a24c0d0806fcf9a6e75fc18aeb95adc37eb0baf6451f10a2de23ffd815329d", - "sha256:980e7eb7205e01816a92f3290cfc80507957e64656b9271a0dfebb85fe3718c0", - "sha256:9bae431a5985cdb2014be09d37206c288e0d063940cf9539e9769bd2ec26b220", - "sha256:9bebe58f7a160db7838eb70990c704db4bdc2d58bd364290fd69be0587be8bac", - "sha256:9e324a94856d88ecf10f34c102d0ded67d7c3cf644153d77e34a29720ce6aa47", - "sha256:a6e63fc67b23830947b51e0a488992e3c904fce825ead565f3904dcf621d05f7", - "sha256:a72440305f634604827f96810e4469877b89f5c060d6852267650a49b0e3768c", - "sha256:a734511144309ea6e105406633affb74e303a3df07d8a3954f9b01946e27ecb1", - "sha256:a816bff6bf424753e1ac2441902ceaf37ae6718b745a53f6aa1a60c617fb4f5f", - "sha256:a8a7a325b8fe885a6dd91093616c703134f2dacbd869bc519970df3849c2a15b", - "sha256:aa61e3da751a2dfe95aeca603f3ef510071a136ba9905f61ae6cb5d0696271ad", - "sha256:ac5895d5f78dbd8646fe37266655ba4995f9cfec38a86595282fee69e41787da", - "sha256:ac6784cc43aec51a86cf9058a2a343084f8cf46a9281bea5762bfa608127c53b", - "sha256:b1bd8017ef0da935a20106272c5f5ff6b1114add1ccb09cfed1ff7ec5cc01c6d", - "sha256:b2ac288f27a2689d9e39f4cf4df5437a8eb038eaae515169586c77f9f8fb343a", - "sha256:b30cd083ef8af4ba66d9fe5cc75c653ede3f2655f97a032db1a14cc8a006719c", - "sha256:b46ebc463bb45f278a2b94e630061c26e10077cb68d4c93583d8f4199699a5ef", - "sha256:b575393dd431b8e211de35bd593d831dac870172b16e2b7934f3566b8fc89377", - "sha256:b6569f6038133909cd658dbdcc6fc955f791dc47a7f5b55d2066f742253dcbfe", - "sha256:b8b8f88251b84b3877254cdd59c86a1dc6b2b39a03c6c9c067d344ef879562e0", - "sha256:b8eceaa12b7f152b046b67cb053ec2b5b00f73593983de69bc5e63a8aca4a7a8", - "sha256:ba74c239fc6cb6e962eabc420967c7565f3f363b776c89b3df5234caecf1f463", - "sha256:be5a454a95797343d0fb1ed02caecae73a023b1393c112951c84f17ec9f4076c", - "sha256:bef934bd3e024d512c6c0ad1c66eb173f61d9ccb4dbca8d75f727a5604f7c2f6", - "sha256:c1964dcb5f250fd13fac210944b20810d61ef4094a17fbbe502ab7a7eaeeace7", - "sha256:c34e69be4429633fc614febe3127fa03aa418a1abb9252f29d9ba5b3394573a5", - "sha256:c576bd63495150385b8d05eaae775387f378be2fd9805d3ffb4d17c87271fbad", - "sha256:cb8b10405960a8e6801a4702af98ea640130ec6ecfc1208195762de3f5503ba9", - "sha256:cc3645cf6b9246cb8e179db2803e4f0d148211d2a2cf22d5c9b5219111cd91a0", - "sha256:cd35c0be4c46274129dd1678bb911dd4e93d23968b26f4e39cd55bc7cb3b1bac", - "sha256:d540e9c34a61b53b6a374ea108794a48388178f7889d772e364cdbd6df37774c", - "sha256:d72415b0110f7958dd3a5ee98a70166f47bd42ede85e3535669c794d06f57406", - "sha256:dbae37d48ef5a0ab90cfaf2b9312d96f034b1c828208a9cbe25377a1b19ba129", - "sha256:e1c5434db53f3a94a37ad8aedb231901e001995d899af6ed1165f3d27fa04a6a", - "sha256:e75e287787e6adafed9d8c3d3e7647c0b5eb460221f9f92d7dfe48b45ba77c0d", - "sha256:e797c4afb1b7962d3205b1959e1051f7e6bfbba29da44042a9efc2391f1feb38", - "sha256:efd1b2da3ee577fcfa723a214f73186aef9674dd5b28242d90443c7a82722b0f", - "sha256:f5b43ce952a5a31441556c55f5f5f5a8e62c28581a0ff2a2c31c04ef992d73bd", - "sha256:f7194a22a4a24f3561cb6ad1cca9c9b2f2cf34cc8d4bce6d6a24c80960323fa8", - "sha256:f8101ab6de5aa0b26a2b5032bc488d430010c91863e701812d65836b03a12f61", - "sha256:fc33909397481c90de3cec831bfb88d97e220dc91939d996920202f184b4648e", - "sha256:fcc378fa97f02fbcef090b3611305425d72bd1c0afdd13ef4a82dc67d40638b6", - "sha256:ff478682e8ee6dbaa37201bb71bf4a6eee744006ab000e8f5cea05066fc7c845" + "sha256:00547da587f124b32b072ce52dd5e4b37cf199fedcea902e33c67548523e4678", + "sha256:0295289c4510efa41174850e75bc9188f82b72b1b54d0ea57d1781729c2924d5", + "sha256:03b58f843f09e73414e82e57f7e8d88f087eaabf8f276b866a40661161da6c51", + "sha256:0568d4da0a9ee9f9f5ab318f6501557f1cfe26d18c96c8e0dac7332ae04c6717", + "sha256:08a0e03f287e45eb694998bb55ac1643372199c659affa8319dfbbdec7f7fb3c", + "sha256:0a9d12436fd64937bd2c9609605f527af7f1a8db6e6637639b44121c0fe715d6", + "sha256:101b5bd32badfc8b1f9c7be04ba3ae04fb47f9c8736590666ce9449bff76e0b1", + "sha256:14108cafb140dd68fdda610c2bbc6a37bf052cd48cfebf487ed44145f7a2b67f", + "sha256:18580d060fa637ff01541640ecde6de832a248df02b8fb57e6dd578f189d62c7", + "sha256:18a0f838677f9510aef0330c0096778dd6406d21d4ff9504bf79d85235a18460", + "sha256:1ce324d1b413636ea5ee929f79637821f13c9e55e9588f38228947294944d2ed", + "sha256:246368e983eaee9851b15d7755f82030eab4aa82098d2a34f6bef9c689d33fcc", + "sha256:24c0d71e9ac91f4466b1bd280f7de43aa4d94682daaf34d85d867a9b479b87cc", + "sha256:275d53fd769df2102d6c9fc98e553bd8a9a38926f54d6b20cf29f0dd00bf3b75", + "sha256:294d24edc747ef4e1b28e54365f713becb844e7898113fafbe3e9165dc44aeea", + "sha256:2fb740482794a72e2e5fec58e4d9b00dcd5a60a8cef68431ff12f2ba0e0d9a7e", + "sha256:31d4b0455d72d914645f803d917daf4f314d115c70de0578d3820deb8b101f66", + "sha256:388f840fd911d61a96e9e595eaf003f9dc39e847c9060b8e623ab29e556f009b", + "sha256:3e993804e6b04113d61fdb9541b6df2f096ec265a506dad7437517470919c90f", + "sha256:4180b2785d1278e6abb36a72ac97c92432db53fa2df00ee943d2c15a33627d31", + "sha256:4416ee86a87180b6a28e7483102c92debc077bec59c67eda8cc63fc52a218ac0", + "sha256:45c7b4eac7571707269ebc2893facdf87e359cd5c7cfbfa9e6bd8b33fb1079c5", + "sha256:460c05238fbfe6d848141669d17a751a46c923f9f0c9fd8a3a462ab737623a44", + "sha256:478051e5ef8278b2429864c8d148efcebdc2be948a61c9a44757cd8c816c98f5", + "sha256:481e3129a76ea01adcc0e7097ccb8dbddab1cfc40b6f0e32c670153512957c0f", + "sha256:48425107fbb1af3f0f2410c004f16be10ffc9374358e5600b57fa543f46f8def", + "sha256:4a7d8b869ded171f6cdf584fc2fc6ae03b30a0e1e37a9daf213a59857a62ed90", + "sha256:4bff49986c9bae127928a2f9fd6313146a342bfae8292f63e562f872bd01b871", + "sha256:51d3495235af09f21aa92a7cdd51504bda640b108b6be834448b774f52852c09", + "sha256:5556acde785a61d4cf8b8534ae109b023cbd2f9df65ee2afbe070be47c410f8c", + "sha256:55e94124af9c8fbb1df54195cc092688fdad0765641b738970b6f1d5ea72e776", + "sha256:5616d386dfbfba7c39e9418ba668c734f6ceaacc0130877e8a100cad11e6838b", + "sha256:57233e1600560ceb719bed759dc78393edd541b9a3e7fefc3079abd83c26a6ea", + "sha256:593e89e2518eaf81e96edcc9ef2c5fca666e8fc922b03d5cb7a7b8964dbee336", + "sha256:5998f81bf6a2b28a802521efe14d9fc119f74b64e87b62ad1b0e7c3d8366d0c7", + "sha256:5e4e612b7ecc9596e7c859cd9e0cd085e6d0c576b4f0d917299595eb56bf9c05", + "sha256:5fef7b602ccf8a3c77ab483479ccd7a952a8c5bb1c263156671ba7aaa24d1035", + "sha256:63b31345e20afda2ae30dba246955517a4264464d75e071fc2fa641e88c763ec", + "sha256:663911786dcde3e4a5d88215c722c531c7548903dc07d418418c0d1c768072c0", + "sha256:673d6e9e3aa86949343b46ac2b7be266c36e07ce77fa1d40f349e6987a814d6e", + "sha256:68ae7091cc73a752f0b938f15bb193de80ca5edf5ae2ea6360d93d3e9228357b", + "sha256:698da4fa1f7baeea0607738cb1f9877ed1ba50342b29891b0223221679d6f729", + "sha256:6a93644d7996fd696ab7f1f466cd75d718d0a00d5c8118b9fe8c64231dc1f85e", + "sha256:6c8d0dff4865da54ae825d43e1721925721b19f3b9aca8e730c2ce73dee2c630", + "sha256:732d08228fa8d366fec284f7032cc868d28a99fa81fc71e3adf7ecedbcf33a0f", + "sha256:735147aa41b8eeb104da186864b55e2a6623c758000081d19c93d759cd9523e3", + "sha256:7a92aab8dd1d427ac9bc7480cfd3481dbab0ef024558f2f5a47de672d8a5ffaa", + "sha256:7d352d4de060604e605abdc5c8a5d0429d5f156cb9866609065d3003454d4cea", + "sha256:81074edf3c74bc9bd250d223408a5df0ff745d1f7a462597536cd26b9390e2d6", + "sha256:81e6a9a8fda78a2f4901d2915b25bf620f372997ca1f20a14f7cefef5ad6f6f4", + "sha256:843500cd3e4884b92fd4037912bc42d5f047108d2c986d36352e880196d465b0", + "sha256:89247ac220031a4f9f689688bcee42b38fd770d4cce294e5d914afc53b630abe", + "sha256:8bb624dbaef4661f5e3625c1e39ad98ecceef281d1380e2774d8084ad0810275", + "sha256:9007bb1290c79402be6b84bcf9e7a622a073859d61fcee146dc7bc47afe328f3", + "sha256:9070ae35c410d644e6df98a8f69f3ed2807e657d0df2a26b2643127cbf6944a5", + "sha256:908c13f305d34322e11b796de358edaeea47dd2d115c33ca22909c5e8fb036fd", + "sha256:9480b4b327be83c4d29cb88bcace761b11f5e30198ffe2287889455c6819e934", + "sha256:960d85ebaa974ecea4e71fa56d098378fa51fd670ee744614cbb95bf95e28fc7", + "sha256:96796594c770bc6587376e74ddc7d9c982d68f47116bb69d90873db5e0ea88b6", + "sha256:97cf514a9f3426228d8daf880f56488330e4b2948a6d183a106921217850d9eb", + "sha256:997b7e0960072f6bb445402da162f964ea67387b9f18bda2361edcc026e13597", + "sha256:9b28787eaf2174e68f0acb3c66f9c6b98bdfeb0930c0d0b08e1941c7aedc8d27", + "sha256:9bf51354e15520715f068853e6ab8190e77139940e8b8b633bdb587956a08fb0", + "sha256:9e5075e30be626ef0f9bedf7a15f55ed4d7209e832bc314fdc232dbd61dcbf44", + "sha256:a08b4346350660799d81d4016e748bcb134a9083301d41f9618f64a6077f89f2", + "sha256:a67f75cc51a2dc7229a8ac84291e4d61dc5abfc8940befcf37a2836d95873340", + "sha256:a973f5286758f76824ecf19ae1999f6697371a9121c8f163295d181d19a819d7", + "sha256:ab911033e5937fc221a2c165acce7f66ae5ac9d3e54bec56f3c9c197a96be574", + "sha256:ad92e37be0b106fdbc575a3a669b43b364a5ef334495c9764de4c2d7541f7a99", + "sha256:ad9ea4a50d2948738351790047d45f2b1a023facc01bf0361988109b177e8b2f", + "sha256:b029bdd5a8b6c9a7c0e8fdbe4fc25ffaa2e09b77f6f3462314696e3a20511829", + "sha256:b41a85b9b9a2530b72b0d3d10e383fc3c2647ae88169d557d5e216f881860318", + "sha256:baf020f4b708f800b353259cd7575e335a79f1ac912d9dda55b2aa0bf3616e42", + "sha256:c08094b9e5d1b6dfb0845a0253cc2655ca64ce70d15162dfdb102e28c8993493", + "sha256:c26805b6c8dc8565ed91045c44040bf6c0fe5cb5b390c78cd1d9400d08a6cd39", + "sha256:c6ee222671eed5c5b16a5ad2aea07f0a715b8b199ee534834bc1dd2798f1ade7", + "sha256:c820608e7077416f766b148d75e158e454881961881b657cff808529d261dd24", + "sha256:cb081b2b02bf4405c804de1ece6f904916838ab0e057f1446e4ac12fac827960", + "sha256:cbe038bb78d599b5a29d09c438905defaa615a522bc7e12f8016823179439497", + "sha256:cd461e402e24929d866f05061d2f8337e3a8456e75e21b72c125abff2477c7f7", + "sha256:cde6dbb788a4cbc4a80a72aa96386ba4c2b17bdfff3ace0709799adbe16d6476", + "sha256:ce7889dc3701826d519ede93cdff11940fb5567dbdc165dce0e78047eece02b7", + "sha256:d0086ba8d41d73647b13087a3ca9c020f6bfec338335037e8f5172b4c7c8dce5", + "sha256:d29988bde28a90a00367edcf92afa1a2f7ecf43ea3ae383291b7da6d380ccc25", + "sha256:d494befe648c13c98c0f3d56d05489c839c9228a32f58e9777305deb6c2c1cee", + "sha256:df4e32badb2ccf1773e1e74020b7e3b8caf9e92f842c6be7d14888ecdefc2c6c", + "sha256:e6de6a4bdfaee382c2de2a3580b3ae76fce6105da202bbd835e5efbeae6a9c6e", + "sha256:f039c5373f7b314b151432c73219216857b19ab9cb834f0eb5d880f74fc7851c", + "sha256:f6e86ac2b45a95f75c6f744147483e0fc9697ce7dfe1726083324c236f873f8b", + "sha256:f9c690b359f503f18bf1c46a6456370e4f6f3fc4320b8774ae69c4f85ecc6c94", + "sha256:fa436abd4ac9ca71859baf5794614e6ec8fa27362f0162baedcc059048da55f7", + "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", + "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], "markers": "python_version >= '3.6'", - "version": "==0.12.1" + "version": "==0.12.2" }, "dateparser": { "hashes": [ @@ -535,19 +549,13 @@ "markers": "python_version >= '3.7'", "version": "==1.1.8" }, - "eip712-structs": { - "hashes": [ - "sha256:b24400aef07b4d0287fb9bf8ce02b0abbe80c476d1b67222a7c5158df3a3e38d" - ], - "version": "==1.1.0" - }, "eth-abi": { "hashes": [ - "sha256:6949baba61a2c453f0719309ca145e8876a1cbae7ba377c991e67240c13ec7fc", - "sha256:79d258669f3505319e53638d644a75e1c816db552a1ab1927c3063763cc41031" + "sha256:0d50469de2f9948bacd764fc3f8f337a090bbb6ac3a759ef22c094bf56c1e6d9", + "sha256:a9adae5e0c2b9a35703b76856d6db3a0498effdf1243011b2d56280165db1cdd" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==4.0.0" + "markers": "python_version < '4' and python_full_version >= '3.7.2'", + "version": "==4.2.0" }, "eth-account": { "hashes": [ @@ -567,11 +575,11 @@ }, "eth-hash": { "hashes": [ - "sha256:4d992e885f3ae3901abbe98bd776ba62d0f6335f98c6e9fc60a39b9d114dfb5a", - "sha256:9805075f653e114a31a99678e93b257fb4082337696f4eff7b4371fe65158409" + "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e", + "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.5.1" + "version": "==0.5.2" }, "eth-keyfile": { "hashes": [ @@ -597,27 +605,27 @@ }, "eth-tester": { "hashes": [ - "sha256:9cf8742896e26c53e03a79ca6c3a008bf64527f042659bcad306d87fbf2fa79a", - "sha256:d7db78d21bb33bc645d6172dd5ad259eab52399f2b62d4e9fcab075baf8a6877" + "sha256:0e4367d99ae242efdb8c1d18ed99d1ff3f03149abb0a4c2427bc6d333ebef13b", + "sha256:b9cbc93d0b17a6e8acbb52294dad214ee223cf88209fa5be66ead353937d274c" ], "markers": "python_version < '4' and python_full_version >= '3.6.8'", - "version": "==0.9.0b1" + "version": "==0.9.1b1" }, "eth-typing": { "hashes": [ - "sha256:323111b3b76c8ceaff01619367aa52806f0264ca0ec1a70d4b9a42e44360f554", - "sha256:e9535e9d524d4c7a0cbd3d9832093cc5001a3e31869e72645674d24c6376d196" + "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5", + "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f" ], "markers": "python_version < '4' and python_full_version >= '3.7.2'", - "version": "==3.3.0" + "version": "==3.4.0" }, "eth-utils": { "hashes": [ - "sha256:63901e54ec9e4ac16ae0a0d28e1dc48b968c20184d22f2727e5f3ca24b6250bc", - "sha256:fcb4c3c1b32947ba92970963f9aaf40da73b04ea1034964ff8c0e70595127138" + "sha256:7f1a9e10400ee332432a778c321f446abaedb8f538df550e7c9964f446f7e265", + "sha256:d6e107d522f83adff31237a95bdcc329ac0819a3ac698fe43c8a56fd80813eab" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.1.0" + "version": "==2.2.0" }, "flask": { "hashes": [ @@ -637,83 +645,70 @@ }, "frozenlist": { "hashes": [ - "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c", - "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f", - "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a", - "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784", - "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27", - "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d", - "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3", - "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678", - "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a", - "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483", - "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8", - "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf", - "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99", - "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c", - "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48", - "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5", - "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56", - "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e", - "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1", - "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401", - "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4", - "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e", - "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649", - "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a", - "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d", - "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0", - "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6", - "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d", - "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b", - "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6", - "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf", - "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef", - "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7", - "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842", - "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba", - "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420", - "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b", - "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d", - "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332", - "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936", - "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816", - "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91", - "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420", - "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448", - "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411", - "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4", - "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32", - "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b", - "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0", - "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530", - "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669", - "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7", - "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1", - "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5", - "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce", - "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4", - "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e", - "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2", - "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d", - "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9", - "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642", - "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0", - "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703", - "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb", - "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1", - "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13", - "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab", - "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38", - "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb", - "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb", - "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81", - "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8", - "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd", - "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4" + "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", + "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", + "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", + "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", + "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", + "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", + "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", + "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", + "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", + "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", + "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", + "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", + "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", + "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", + "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", + "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", + "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", + "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", + "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", + "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", + "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", + "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", + "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", + "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", + "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", + "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", + "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", + "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", + "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", + "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", + "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", + "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", + "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", + "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", + "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", + "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", + "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", + "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", + "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", + "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", + "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", + "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", + "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", + "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", + "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", + "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", + "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", + "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", + "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", + "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", + "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", + "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", + "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", + "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", + "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", + "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", + "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", + "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", + "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", + "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", + "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" ], - "markers": "python_version >= '3.7'", - "version": "==1.3.3" + "markers": "python_version >= '3.8'", + "version": "==1.4.0" }, "hendrix": { "hashes": [ @@ -724,19 +719,19 @@ }, "hexbytes": { "hashes": [ - "sha256:21c3a5bd00a383097f0369c387174e79839d75c4ccc3a7edda315c9644f4458a", - "sha256:afeebfb800f5f15a3ca5bab52e49eabcb4b6dac06ec8ff01a94fdb890c6c0712" + "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59", + "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.3.0" + "version": "==0.3.1" }, "humanize": { "hashes": [ - "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50", - "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916" + "sha256:8bc9e2bb9315e61ec06bf690151ae35aeb65651ab091266941edf97c90836404", + "sha256:9783373bf1eec713a770ecaa7c2d7a7902c98398009dfa3d8a2df91eec9311e8" ], - "markers": "python_version >= '3.7'", - "version": "==4.6.0" + "markers": "python_version >= '3.8'", + "version": "==4.8.0" }, "hyperlink": { "hashes": [ @@ -755,19 +750,19 @@ }, "importlib-metadata": { "hashes": [ - "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed", - "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705" + "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", + "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" ], - "markers": "python_version >= '3.7'", - "version": "==6.6.0" + "markers": "python_version >= '3.8'", + "version": "==6.8.0" }, "importlib-resources": { "hashes": [ - "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", - "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a" + "sha256:82d5c6cca930697dbbd86c93333bb2c2e72861d4789a11c2662b933e5ad2b528", + "sha256:9f7bd0c97b79972a6cce36a366356d16d5e13b09679c11a58f1014bfdf8e64b2" ], - "markers": "python_version >= '3.7'", - "version": "==5.12.0" + "markers": "python_version >= '3.8'", + "version": "==5.13.0" }, "incremental": { "hashes": [ @@ -794,19 +789,19 @@ }, "jsonschema": { "hashes": [ - "sha256:d6a4f48fcecc06e8915c30de13076837b624999167655c4c643b50ed93c0e526", - "sha256:f1eb210cc329f9cc09bd10c5f7a287f5b1538de6d5662ef2528b9f9b428dbd85" + "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb", + "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f" ], "markers": "python_version >= '3.8'", - "version": "==4.18.0a9" + "version": "==4.19.0" }, "jsonschema-specifications": { "hashes": [ - "sha256:1aefc07b022e3b8ce8bec135c78b74ae1ffd260822c67011427192b3a7525e09", - "sha256:51d2972bf690cfe21970f722f878580d863f7c127d200fce671c5dae10b88f5f" + "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", + "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" ], "markers": "python_version >= '3.8'", - "version": "==2023.5.2" + "version": "==2023.7.1" }, "lru-dict": { "hashes": [ @@ -909,8 +904,11 @@ "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", @@ -918,6 +916,7 @@ "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", @@ -926,6 +925,7 @@ "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", @@ -933,9 +933,12 @@ "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", @@ -954,18 +957,20 @@ "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", - "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" ], "markers": "python_version >= '3.7'", "version": "==2.1.3" }, "marshmallow": { "hashes": [ - "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78", - "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b" + "sha256:5d2371bbe42000f2b3fb5eaa065224df7d8f8597bc19a1bbfa5bfe7fba8da889", + "sha256:684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c" ], - "markers": "python_version >= '3.7'", - "version": "==3.19.0" + "markers": "python_version >= '3.8'", + "version": "==3.20.1" }, "maya": { "hashes": [ @@ -1136,36 +1141,37 @@ }, "mypy-extensions": { "hashes": [ - "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd" + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" ], - "markers": "python_version >= '2.7'", - "version": "==0.4.4" + "markers": "python_version >= '3.5'", + "version": "==1.0.0" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "788073d93cdc5a94568e004a6f7b7bf342b1805d" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "c92302dbbed84854a413d4f3177fdb244c62822c" }, "nucypher-core": { "hashes": [ - "sha256:006760a1d0dbed873d1869040e2649d6b1e47221bc1ed34bf9615b0f8b7a268a", - "sha256:3bbd8b0fad751bcdf962598a284e02b1888186f9720216b72ebb891bcaabd88f", - "sha256:587014fb85aece07f74ed33617fec27f14a512733d989c828e7be248bc3c0242", - "sha256:5a01c175d4d2f7bb2e0b783dd3ffc578144c19eacb4567ecd8a8408c1de99e73", - "sha256:881c36f78fdd0924c7342d42819a8ca15f2ec7bdb1a48574cfd5d12d491eafd0", - "sha256:901aaafaefae7bb1b5b1057c1623f08b3ca7d1490b2e1aec8fc8f566d1464c0b", - "sha256:9b91c2efcf6fd2720e787e67f4a7f702bdc5b464adfc6c3b78ba4113547de781", - "sha256:a27125276713ea318fe5e0430e8a6a8a7dc36273753e5dae4f35f3572390f47c", - "sha256:ad80b5406a9f027f04c5beacc4dbc5c1b6faa77892ea4156c5cda592f6d33c72", - "sha256:bee4bd79d1a0be2addb4eb208667fb8dbb694b31ea8254c56d3759af361a7bc0", - "sha256:c9821eac0c76a31d9a04884e40e1d9e1322319e3169b7e6f88d2d0710efe8eaf", - "sha256:ca267e5f93ad1223f88af3487730e76f65d92b1924909a86db784fdd2353eef8", - "sha256:df06185557fab138733fbf357961ca43312bef9ac35f88c4b97347d8491daef1", - "sha256:e361ca221c4978ce5ede9a7cbcc57e5bc7f35f3accc64b3e15b6f90c56c88bd5", - "sha256:e98f55bc1a994153689c596cb2d317f1cfe0fb2ae5ff2c0811a2364d9b098877", - "sha256:e9f8885b7f4d84c75d111b202c05f9044606f25588a8fd5558011e3cbc37572d" + "sha256:1db0b61cb3974eb1269283e193e3d6fb7abbc572e64b57f2952cf7008782574e", + "sha256:21c0b01a59621302a5b1e9cfe2ec107066ff10e3776664143fd2b994eab52359", + "sha256:42220d3c7be16ff32d0cf3a44f96d13ab61dd2ea2d69154341a163f129c13fee", + "sha256:63779e467c6012fa8b2bc0cfdddc4091d516593b08ad5b79b7f7b2022064c298", + "sha256:706991adc220b65d6e46a0d3d1f39021fbe8c7a5fd7a819aa1f2ca494ca779ab", + "sha256:7fba3befa5713975af5a5172b35832502078b74bb85d99be450bb1334e744297", + "sha256:8cb5718bc7511265f9721c342d703b2343bf6aa7091a0cc4463046f1edf35496", + "sha256:92767dcdef27a7697d155bd56dd408bfd290705bac7f299a0a62089b7883ed11", + "sha256:9df6f21de95add612c5b07dea88704023ad6dcb76cc93affdd30caaf3b841433", + "sha256:a10cbe550597561fde8c5d211998d34d259fff88ae5b42845c28bb48ef07ad8f", + "sha256:afa30ce0d4f5b874d512f38da996f896980172f6d0b9c6ebddd55b8bd262e5e5", + "sha256:b51017b852870235decba18c0d32bba42bedea2b67a09b3c0ef0a3dd18759ab6", + "sha256:b602880eadf8a12b8477a8d5b6ff041ad1200eca330b9c49e03e984808be932b", + "sha256:d903768cd804f84674c1ceb1f8631fb93d753b2545f9685ddbdc78603b603d48", + "sha256:f2e69196f93fa66409b97b641ab43723da55d1a30efed4dc30d646b6823e52ce", + "sha256:fcf17020e8037c09166d2c748514dbcc5b4a8bd3201c9cdaa951768930980a8a" ], "index": "pypi", - "version": "==0.11.0" + "version": "==0.12.0" }, "packaging": { "hashes": [ @@ -1245,22 +1251,22 @@ }, "protobuf": { "hashes": [ - "sha256:09310bce43353b46d73ba7e3bca78273b9bc50349509b9698e64d288c6372c2a", - "sha256:20874e7ca4436f683b64ebdbee2129a5a2c301579a67d1a7dda2cdf62fb7f5f7", - "sha256:25e3370eda26469b58b602e29dff069cfaae8eaa0ef4550039cc5ef8dc004511", - "sha256:281342ea5eb631c86697e1e048cb7e73b8a4e85f3299a128c116f05f5c668f8f", - "sha256:384dd44cb4c43f2ccddd3645389a23ae61aeb8cfa15ca3a0f60e7c3ea09b28b3", - "sha256:54a533b971288af3b9926e53850c7eb186886c0c84e61daa8444385a4720297f", - "sha256:6c081863c379bb1741be8f8193e893511312b1d7329b4a75445d1ea9955be69e", - "sha256:86df87016d290143c7ce3be3ad52d055714ebaebb57cc659c387e76cfacd81aa", - "sha256:8da6070310d634c99c0db7df48f10da495cc283fd9e9234877f0cd182d43ab7f", - "sha256:b2cfab63a230b39ae603834718db74ac11e52bccaaf19bf20f5cce1a84cf76df", - "sha256:c52cfcbfba8eb791255edd675c1fe6056f723bf832fa67f0442218f8817c076e", - "sha256:ce744938406de1e64b91410f473736e815f28c3b71201302612a68bf01517fea", - "sha256:efabbbbac1ab519a514579ba9ec52f006c28ae19d97915951f69fa70da2c9e91" + "sha256:237b9a50bd3b7307d0d834c1b0eb1a6cd47d3f4c2da840802cd03ea288ae8880", + "sha256:25ae91d21e3ce8d874211110c2f7edd6384816fb44e06b2867afe35139e1fd1c", + "sha256:2b23bd6e06445699b12f525f3e92a916f2dcf45ffba441026357dea7fa46f42b", + "sha256:3b7b170d3491ceed33f723bbf2d5a260f8a4e23843799a3906f16ef736ef251e", + "sha256:4e69965e7e54de4db989289a9b971a099e626f6167a9351e9d112221fc691bc1", + "sha256:58e12d2c1aa428ece2281cef09bbaa6938b083bcda606db3da4e02e991a0d924", + "sha256:6bd26c1fa9038b26c5c044ee77e0ecb18463e957fefbaeb81a3feb419313a54e", + "sha256:77700b55ba41144fc64828e02afb41901b42497b8217b558e4a001f18a85f2e3", + "sha256:7fda70797ddec31ddfa3576cbdcc3ddbb6b3078b737a1a87ab9136af0570cd6e", + "sha256:839952e759fc40b5d46be319a265cf94920174d88de31657d5622b5d8d6be5cd", + "sha256:bb7aa97c252279da65584af0456f802bd4b2de429eb945bbc9b3d61a42a8cd16", + "sha256:c00c3c7eb9ad3833806e21e86dca448f46035242a680f81c3fe068ff65e79c74", + "sha256:c5cdd486af081bf752225b26809d2d0a85e575b80a84cde5172a05bbb1990099" ], "markers": "python_version >= '3.7'", - "version": "==4.23.2" + "version": "==4.24.2" }, "py-ecc": { "hashes": [ @@ -1272,10 +1278,10 @@ }, "py-evm": { "hashes": [ - "sha256:5d23d441a5afe8543e0a90966c61bcce8c6d9d1c9303a536f85d237a264b8e4d", - "sha256:844f1858f9c92633a862de8b466313174fb4d5a67c6e62d3cad3be34587ebddc" + "sha256:1bf7b293faa70c03727358ae3e5cb0abf7282391461d9b52b82decd6ed18c2f7", + "sha256:d40b6ac950485111dc7ad7bd29e3f61e00d5f81dc919e8c2b3afca30f228dc05" ], - "version": "==0.7.0a2" + "version": "==0.7.0a4" }, "pyasn1": { "hashes": [ @@ -1374,32 +1380,6 @@ "markers": "python_version >= '3.6'", "version": "==23.2.0" }, - "pysha3": { - "hashes": [ - "sha256:0060a66be16665d90c432f55a0ba1f6480590cfb7d2ad389e688a399183474f0", - "sha256:11a2ba7a2e1d9669d0052fc8fb30f5661caed5512586ecbeeaf6bf9478ab5c48", - "sha256:386998ee83e313b6911327174e088021f9f2061cbfa1651b97629b761e9ef5c4", - "sha256:41be70b06c8775a9e4d4eeb52f2f6a3f356f17539a54eac61f43a29e42fd453d", - "sha256:4416f16b0f1605c25f627966f76873e432971824778b369bd9ce1bb63d6566d9", - "sha256:571a246308a7b63f15f5aa9651f99cf30f2a6acba18eddf28f1510935968b603", - "sha256:59111c08b8f34495575d12e5f2ce3bafb98bea470bc81e70c8b6df99aef0dd2f", - "sha256:5ec8da7c5c70a53b5fa99094af3ba8d343955b212bc346a0d25f6ff75853999f", - "sha256:684cb01d87ed6ff466c135f1c83e7e4042d0fc668fa20619f581e6add1d38d77", - "sha256:68c3a60a39f9179b263d29e221c1bd6e01353178b14323c39cc70593c30f21c5", - "sha256:6e6a84efb7856f5d760ee55cd2b446972cb7b835676065f6c4f694913ea8f8d9", - "sha256:827b308dc025efe9b6b7bae36c2e09ed0118a81f792d888548188e97b9bf9a3d", - "sha256:93abd775dac570cb9951c4e423bcb2bc6303a9d1dc0dc2b7afa2dd401d195b24", - "sha256:9c778fa8b161dc9348dc5cc361e94d54aa5ff18413788f4641f6600d4893a608", - "sha256:9fdd28884c5d0b4edfed269b12badfa07f1c89dbc5c9c66dd279833894a9896b", - "sha256:c7c2adcc43836223680ebdf91f1d3373543dc32747c182c8ca2e02d1b69ce030", - "sha256:c93a2676e6588abcfaecb73eb14485c81c63b94fca2000a811a7b4fb5937b8e8", - "sha256:cd5c961b603bd2e6c2b5ef9976f3238a561c58569945d4165efb9b9383b050ef", - "sha256:f9046d59b3e72aa84f6dae83a040bd1184ebd7fef4e822d38186a8158c89e3cf", - "sha256:fd7e66999060d079e9c0e8893e78d8017dad4f59721f6fe0be6307cd32127a07", - "sha256:fe988e73f2ce6d947220624f04d467faf05f1bbdbc64b0a201296bb3af92739e" - ], - "version": "==1.0.2" - }, "python-dateutil": { "hashes": [ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", @@ -1415,107 +1395,114 @@ ], "version": "==2023.3" }, + "pyunormalize": { + "hashes": [ + "sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302" + ], + "markers": "python_version >= '3.6'", + "version": "==15.0.0" + }, "referencing": { "hashes": [ - "sha256:54b64ae36b91827f9f50d05a5af27570a5ca9ba6a1be49809215419d5ab32253", - "sha256:bddd26f8fbb64d153334cca7bc20305c72295e287d84bbf5756afa50efdeb6ae" + "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", + "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" ], "markers": "python_version >= '3.8'", - "version": "==0.29.0" + "version": "==0.30.2" }, "regex": { "hashes": [ - "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938", - "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6", - "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef", - "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525", - "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af", - "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc", - "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54", - "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8", - "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7", - "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568", - "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c", - "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f", - "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536", - "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2", - "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb", - "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df", - "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019", - "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18", - "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f", - "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac", - "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8", - "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9", - "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697", - "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06", - "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d", - "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036", - "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1", - "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787", - "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9", - "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0", - "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7", - "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461", - "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee", - "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3", - "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0", - "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f", - "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14", - "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477", - "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd", - "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16", - "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc", - "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff", - "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd", - "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2", - "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e", - "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef", - "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07", - "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3", - "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3", - "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a", - "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7", - "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa", - "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82", - "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77", - "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222", - "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c", - "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd", - "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d", - "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68", - "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9", - "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693", - "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487", - "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06", - "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591", - "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27", - "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a", - "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969", - "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3", - "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0", - "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7", - "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751", - "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747", - "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289", - "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72", - "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777", - "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9", - "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1", - "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1", - "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e", - "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf", - "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f", - "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd", - "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2", - "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c", - "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1", - "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88", - "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9", - "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23" + "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf", + "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46", + "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18", + "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7", + "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7", + "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9", + "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559", + "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71", + "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280", + "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898", + "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684", + "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3", + "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9", + "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8", + "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca", + "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c", + "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c", + "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab", + "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd", + "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56", + "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586", + "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7", + "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103", + "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac", + "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177", + "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109", + "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033", + "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb", + "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61", + "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800", + "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb", + "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8", + "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570", + "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34", + "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e", + "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4", + "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb", + "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7", + "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208", + "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc", + "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb", + "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3", + "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504", + "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb", + "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57", + "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b", + "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601", + "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116", + "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8", + "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6", + "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6", + "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93", + "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09", + "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a", + "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921", + "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a", + "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495", + "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6", + "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7", + "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236", + "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235", + "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470", + "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b", + "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5", + "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61", + "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c", + "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db", + "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be", + "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96", + "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a", + "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2", + "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63", + "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef", + "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739", + "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e", + "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217", + "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90", + "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4", + "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8", + "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3", + "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357", + "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4", + "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b", + "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882", + "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a", + "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675", + "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", + "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" ], "markers": "python_version >= '3.6'", - "version": "==2023.6.3" + "version": "==2023.8.8" }, "requests": { "hashes": [ @@ -1534,68 +1521,106 @@ }, "rpds-py": { "hashes": [ - "sha256:014828cd68b4cdee84ab66adaf5bfe1f137656a7a588c31fdca04ba0768ef62d", - "sha256:025b8101dbf39d77cf41ac3c737e4c713e0b2728a516443b382e66b9d492ff98", - "sha256:038249d2bbaf91aa65c4108a40ee076f657654261b1a246ab99726710bfb77de", - "sha256:083990eb24bf99a0ae92505b24ab4d4c9110d2569e60437d3c721d8807403471", - "sha256:0bcb162f5549408125ec986bfed1a66f2036ac2910d3fb0a6afda0f97bc6ea15", - "sha256:130cfa21a10a60f5fc8ec59fb5f8b4a649cbc26302c7f487d7798f7969a1e763", - "sha256:18cd993d5b63450abd3a9eab70af4bbecb6d315a5f167ed3b228cba6b5bc18e4", - "sha256:1b6db70c2ab847229fa9cff3a5eb641c33ab3f981ee8b99d326a7deb8989e4ce", - "sha256:2a5c672b1cd382973bf414518ddc9d743d06bcee751fa65256d84ba412192b0b", - "sha256:2f7fe606eb4742f2d2f0ada4e3ee168e809514a39527fce8ee33b2ce908ede00", - "sha256:311a57cc972481bd220af28cf4309141c680a356b2359f163daac030d0c2318d", - "sha256:33a2a15b641bc17bc6574f9600976374a085ff81ac8dddd4bde6c451e9e9e58d", - "sha256:34007442d36980c4aab3f4044c1fd05a736c8ae09d47b8a42112deab5d6b5a10", - "sha256:3a5b0f8c81f89ec23d59733dce9724b244003be2367653e1e53095cf643f8c8b", - "sha256:3c1423f3cddc86b54682d5df905664737300cdf316b1a4fa3056c45b47d44790", - "sha256:453bfdf4a4c618ea24714b6c25bd56d91bfc43c6fd5a34add66c1b92737c5283", - "sha256:453e62d679d8de32c5e00ba27f8c8c45a456e5d6db6fa6f67fdd3e12f1658833", - "sha256:457345279898d5156b9de9986c650847c2ee0b205b1fea3f4fe4e8e9f8fe318e", - "sha256:4b62f9f9bf523f8baea794cc996dc0ba47676bca0517860664e6419f65e533da", - "sha256:51fe912d2356f3a0e63f5557a704407357ee403cb6dbde4f86e339d50a2110b9", - "sha256:5551e5583f341867fb6499d9ca4ce3999209b8e30636c6cf48f204120415dbef", - "sha256:5eda3aba0cd291de9d4bb138db45814bac24bc4c07e0f38b0544374b6104c488", - "sha256:648a6e46674764eb0179cff6312aade65bb26f370d8af6fc089ab5bf713a7870", - "sha256:68e8f2cedc65198248a14d716125016fd0816f63f216a82c2209a0686d5447cf", - "sha256:6d1d4078d60ca47f0eb6bdddbf79f00a72d41ee3148aba1dcf9b980f73a8d26e", - "sha256:6decbef9ca15a8fef5840ff350fe53fc2cefbabb34c81bce2576c553fdb33eba", - "sha256:737ea1ee132c89265609ef1951a29a0f4caec57c974715f305587973d63dc439", - "sha256:794ca22915fb1e4d08d4cafb81c0227d05a75f4dcd3ce463abaf851ba6b14f9c", - "sha256:858604fe5d7eb50e91b1096bcbcb421f2cb3101454244afda92b4d768d0cb4ce", - "sha256:89d87f5ff7604c25795c369823531b07ac36d62b6c1b743135106f5819051147", - "sha256:97c4507d1b4aaa097f076194606bab723adf7c73c517f09c967818808fc198d4", - "sha256:98b54a47e670093b8bf7d1a0222d0af26dac19314a0e79ac478e447357396a2d", - "sha256:99009264ec0992e69f478b3f59b1e411e0d75c1361cf41b1aef397f89d020666", - "sha256:9f8ab0fd88fc2a8ecc543b72c293d70ffa3f448e85e6fb7dee009629154d683e", - "sha256:9ffed319ab2adc2d426160355311686780eea3f063f2b169fa5a9a17bc24e20f", - "sha256:ad2237e4335d6d8a3d678c9106a100c228b1edc92bc5ea6af0be99d1acafd84b", - "sha256:b27301965f076257abea084d245364b3aff01f75a202b36922a09b519dc8359d", - "sha256:b442a4155631cd1c53cb1cd83b815c828cdbb8c0c9a1eb9b8791c5a19bf55692", - "sha256:b71420bbba0f04c82374196467159e960043089f2931227353d9d51d71cd65a7", - "sha256:bd15a7b913b5228711d479dd26af9db3c12280ef7df55f48037d0bc9bf042617", - "sha256:bf13f4ed0fd7691cbf10371a65cd6b4aeeed2d04f09e96f8aa52db36a794c7d4", - "sha256:c0502cec5d672b62547c3f5b1e2efc177db0b982cf7742cb23b50c2933739a4b", - "sha256:c38d17af73aa03686d701686628e37c114a459650233c0d5f0492dad3a76e3e0", - "sha256:c7bd3a381c4a5fe7e0fc4dff554bd1ce2b0be12ba0193c176c291b7dc1e8bea0", - "sha256:c96f87e14208058dd92dd9e726beeb4a572ead402fedeb230d151575fb39ad93", - "sha256:cbdc8ab6108b8bb260ee68fb2de83fb1c481d3a77355156049a8a49ea47eacf6", - "sha256:cc6ff891c3814d8cd92549cb385353a922518d433aaf1d2d0d99e98e59915370", - "sha256:d64ef19ea4f65782a09209a2287fea795ca7858375e6e9d87e955dfbbadaed15", - "sha256:d940b5644f14e49b1c6e7902b9ec8a0c7584109fbf380fa18115831a641927c8", - "sha256:d9995693d151387d8a95774f6e464118002d7054fade70ea24942caa0f2dcfa8", - "sha256:de1e2eb6fe8ab72256aaf83e0d1969a39271a70fa70a27a45b53d270ecfcc7db", - "sha256:e16c02923726307d960e908b61d4d833939f322877d2957c001fca23b644914e", - "sha256:e5ce9ded54dee1f179e9240a983779d5e3bef20249ae4419b671af549b077879", - "sha256:e95544c9293bd0f1fa6ecab06472d7b982acfcfaca37df6a1dce113f26e67d66", - "sha256:f53f65cf56bb60355681431d04bc04dbe709452dd85eebf537035dc145bd36c9", - "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5", - "sha256:fa7d3cc9c6684cc4e04b9c138c16ff77f4eb3a51ab1b2239964ae8a3b9456a2b", - "sha256:fdc103711cba081c8896476d99479b462fc584091f9979c3c17fedca7558d4d2", - "sha256:ffaca17ce98a61a6a7fd7b1aecfe38cc360a97f85cd7b5ffc4e6c17570bcd377" + "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a", + "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e", + "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e", + "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225", + "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d", + "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775", + "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c", + "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59", + "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5", + "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173", + "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74", + "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640", + "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef", + "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474", + "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370", + "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b", + "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5", + "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa", + "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a", + "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3", + "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5", + "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48", + "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17", + "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397", + "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6", + "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd", + "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3", + "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca", + "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a", + "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e", + "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c", + "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24", + "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86", + "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f", + "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e", + "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f", + "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83", + "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882", + "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e", + "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00", + "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212", + "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1", + "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309", + "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c", + "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf", + "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517", + "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696", + "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa", + "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582", + "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3", + "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291", + "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a", + "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b", + "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727", + "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b", + "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878", + "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d", + "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279", + "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07", + "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012", + "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b", + "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453", + "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12", + "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09", + "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795", + "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04", + "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c", + "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8", + "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1", + "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060", + "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb", + "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2", + "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6", + "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31", + "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da", + "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af", + "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4", + "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685", + "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186", + "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103", + "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f", + "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b", + "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d", + "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a", + "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f", + "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0", + "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe", + "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d", + "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2", + "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055", + "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47", + "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514", + "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7", + "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41", + "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b", + "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910", + "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc" ], "markers": "python_version >= '3.8'", - "version": "==0.7.1" + "version": "==0.10.0" }, "semantic-version": { "hashes": [ @@ -1607,18 +1632,19 @@ }, "service-identity": { "hashes": [ - "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34", - "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db" + "sha256:87415a691d52fcad954a500cb81f424d0273f8e7e3ee7d766128f4575080f383", + "sha256:ecb33cd96307755041e978ab14f8b14e13b40f1fbd525a4dc78f46d2b986431d" ], - "version": "==21.1.0" + "markers": "python_version >= '3.8'", + "version": "==23.1.0" }, "setuptools": { "hashes": [ - "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", - "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" + "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d", + "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b" ], - "markers": "python_version >= '3.7'", - "version": "==67.8.0" + "markers": "python_version >= '3.8'", + "version": "==68.1.2" }, "six": { "hashes": [ @@ -1651,62 +1677,65 @@ }, "time-machine": { "hashes": [ - "sha256:010a58a8de1120308befae19e6c9de2ef5ca5206635cea33cb264998725cc027", - "sha256:0b9c36240876622b7f2f9e11bf72f100857c0a1e1a59af2da3d5067efea62c37", - "sha256:1d0ab46ce8a60baf9d86525694bf698fed9efefd22b8cbe1ca3e74abbb3239e1", - "sha256:2f080f6f7ca8cfca43bc5639288aebd0a273b4b5bd0acff609c2318728b13a18", - "sha256:359c806e5b9a7a3c73dbb808d19dca297f5504a5eefdc5d031db8d918f43e364", - "sha256:36dde844d28549929fab171d683c28a8db1c206547bcf6b7aca77319847d2046", - "sha256:372a97da01db89533d2f4ce50bbd908e5c56df7b8cfd6a005b177d0b14dc2938", - "sha256:3ce445775fcf7cb4040cfdba4b7c4888e7fd98bbcccfe1dc3fa8a798ed1f1d24", - "sha256:3ff5148e2e73392db8418a1fe2f0b06f4a0e76772933502fb61e4c3000b5324e", - "sha256:49df5eea2160068e5b2bf28c22fc4c5aea00862ad88ddc3b62fc0f0683e97538", - "sha256:4b55654aaeaba380fcd6c004b8ada2978fdd4ece1e61e6b9717c6d4cc7fbbcd9", - "sha256:4f3755d9342ca1f1019418db52072272dfd75eb818fa4726fa8aabe208b38c26", - "sha256:5657e0e6077cf15b37f0d8cf78e868113bbb3ecccc60064c40fe52d8166ca8b1", - "sha256:60222d43f6e93a926adc36ed37a54bc8e4d0d8d1c4d449096afcfe85086129c2", - "sha256:6211beee9f5dace08b1bbbb1fb09e34a69c52d87eea676729f14c8660481dff6", - "sha256:6463e302c96eb8c691c4340e281bd54327a213b924fa189aea81accf7e7f78df", - "sha256:68ec8b83197db32c7a12da5f6b83c91271af3ed7f5dc122d2900a8de01dff9f0", - "sha256:69898aed9b2315a90f5855343d9aa34d05fa06032e2e3bb14f2528941ec89dc1", - "sha256:6b632d60aa0883dc7292ac3d32050604d26ec2bbd5c4d42fb0de3b4ef17343e2", - "sha256:728263611d7940fda34d21573bd2b3f1491bdb52dbf75c5fe6c226dfe4655201", - "sha256:748d701228e646c224f2adfa6a11b986cd4aa90f1b8c13ef4534a3919c796bc0", - "sha256:8367fd03f2d7349c7fc20f14de186974eaca2502c64b948212de663742c8fd11", - "sha256:8670cb5cfda99f483d60de6ce56ceb0ec5d359193e79e4688e1c3c9db3937383", - "sha256:8830510adbf0a231184da277db9de1d55ef93ed228a575d217aaee295505abf1", - "sha256:8976b7b1f7de13598b655d459f5640f90f3cd587283e1b914a22e45946c5485b", - "sha256:8bcc86b5a07ea9745f26dfad958dde0a4f56748c2ae0c9a96200a334d1b55055", - "sha256:8e2a90b8300812d8d774f2d2fc216fec3c7d94132ac589e062489c395061f16c", - "sha256:8e797e5a2a99d1b237183e52251abfc1ad85c376278b39d1aca76a451a97861a", - "sha256:948ca690f9770ad4a93fa183061c11346505598f5f0b721965bc85ec83bb103d", - "sha256:9ba5fc2655749066d68986de8368984dad4082db2fbeade78f40506dc5b65672", - "sha256:9ee553f7732fa51e019e3329a6984593184c4e0410af1e73d91ce38a5d4b34ab", - "sha256:a2cf80e5deaaa68c6cefb25303a4c870490b4e7591ed8e2435a65728920bc097", - "sha256:ae4e3f02ab5dabb35adca606237c7e1a515c86d69c0b7092bbe0e1cfe5cffc61", - "sha256:b16a2129f9146faa080bfd1b53447761f7386ec5c72890c827a65f33ab200336", - "sha256:b32addbf56639a9a8261fb62f8ea83473447671c83ca2c017ab1eabf4841157f", - "sha256:b8faff03231ee55d5a216ce3e9171c5205459f866f54d4b5ee8aa1d860e4ce11", - "sha256:bb15b2b79b00d3f6cf7d62096f5e782fa740ecedfe0540c09f1d1e4d3d7b81ba", - "sha256:bdbe785e046d124f73cca603ee37d5fae0b15dc4c13702488ad19de56aae08ba", - "sha256:bfa82614a98ecee70272bb6038d210b2ad7b2a6b8a678b400c34bdaf776802a7", - "sha256:c01dbc3671d0649023daf623e952f9f0b4d904d57ab546d6d35a4aeb14915e8d", - "sha256:c5dbc8b87cdc7be070a499f2bd1cd405c7f647abeb3447dfd397639df040bc64", - "sha256:cb51432652ad663b4cbd631c73c90f9e94f463382b86c0b6b854173700512a70", - "sha256:cc6bf01211b5ea40f633d5502c5aa495b415ebaff66e041820997dae70a508e1", - "sha256:d329578abe47ce95baa015ef3825acebb1b73b5fa6f818fdf2d4685a00ca457f", - "sha256:d4380bd6697cc7db3c9e6843f24779ac0550affa9d9a8e5f9e5d5cc139cb6583", - "sha256:d79d374e32488c76cdb06fbdd4464083aeaa715ddca3e864bac7c7760eb03729", - "sha256:eaf334477bc0a9283d5150a56be8670a07295ef676e5b5a7f086952929d1a56b", - "sha256:f6e79643368828d4651146a486be5a662846ac223ab5e2c73ddd519acfcc243c", - "sha256:f92d5d2eb119a6518755c4c9170112094c706d1c604460f50afc1308eeb97f0e", - "sha256:f97ed8bc5b517844a71030f74e9561de92f4902c306e6ccc8331a5b0c8dd0e00", - "sha256:fcdef7687aed5c4331c9808f4a414a41987441c3e7a2ba554e4dccfa4218e788", - "sha256:fd72c0b2e7443fff6e4481991742b72c17f73735e5fdd176406ca48df187a5c9", - "sha256:fe013942ab7f3241fcbe66ee43222d47f499d1e0cb69e913791c52e638ddd7f0" + "sha256:05f7320851edb3e887d79a5c797966c8c1b64458fb8b8ee74982c6593606a387", + "sha256:0613aef850db722f2ceee1923d67fc050ae8d6a09fa2cd1ca1dae0748864e6d7", + "sha256:0f9c48f19a6af887ac769740e914f8eb8e406a3d33a651e107f28bba1adc3796", + "sha256:156fdd17fde2a3ea9c41a8108b8ac877e4f90a7ac5e6db533ab6ecb86f723891", + "sha256:1e3b07d7aa993a2f24e3a2ef5a216869f0a1fcaaba6227ad73b265c4f15feca5", + "sha256:26d2be6009151de7aa210e8569c49eece6563b8beb7e290ebd4a10b2b8d2fc5c", + "sha256:2a0a3fb0c316c23b0d79810cf7a158c7d4671acc02a5dfa5cda7aa673478a0dc", + "sha256:2b84449a2b170ed51c26a725a2ca983bc98490c5f23d28e9473402adc7e694ba", + "sha256:328266ea13f0c517cdf758c16a2d83f0118516b8ac7910bba4eba6d4d3b3b2f1", + "sha256:33ee51c6f9f02d7b1d792d379b42321a3d13b819ecd8d136fb287be4adc7b9da", + "sha256:353b6b43e43aee22df79194584c587225ec1a06a2f444099ada2096d806d602e", + "sha256:35ec4170e5045ac0d5dfb1255320e301d5b6fc359f9cf36010007bf572888e73", + "sha256:3992b9285c75c6f74fabfdb0ca7f17f12e22d0fc631ff43d0e110ccd53382569", + "sha256:43a4a5d722f7a6b6ee8f1d3cdeffe6d7c3421452219dce0d22778e6810fb645c", + "sha256:47dc877f3a475d0e818b31a6ad6fc1fbe40f334dcd73d2cb076057aff4d73beb", + "sha256:496a47e2eef78893eb6915d0a5215c59346ebe29d5c88a56301ed74deebe45cc", + "sha256:4bd89a8bf7756b50de180258517004f30857deea82c1841f291a2c8e25cfaa83", + "sha256:4cf10267610244d4398312c4eea5cfc2f68f9a0286260d2157d45d1a54dcc6b2", + "sha256:5240e1cb013826449a5065062b47a46ce3d431fc47cbddc938e3c05e3fe4a951", + "sha256:58ec76d58dcc3ab6a3d7951ae08ae99c7b413a40c7e8255c106b5df4f768f8dd", + "sha256:5e62e45a71674b5df9f9275ffbb342c78ba026c9b556478d0b4bc4470e9f2b4b", + "sha256:669437542e9027db55e06ff05e848a9cb0e88d1fc6e659b412e9721be227b9be", + "sha256:715956ef123645ef22d1c7a13963bb9bc50c02b8578797704715a410bfa49575", + "sha256:786efcc336edc196e5a854a73ff714be198bc57da6856064083677a188c8e018", + "sha256:796968ca8e770ee1121fe209a18cee9bd462bc0cacf57e2b1d528df08c6f18d6", + "sha256:81095391ccef01c56b6061248216da4e2d749b543952fce199b628b8a8ce5ca2", + "sha256:8176eba6b182f88fa8afd9a964c9391b73f3456f6c2f59bb2514957ec6269724", + "sha256:81b88ac04e61c772854fa85b8e04428e3068fe690487a50b69bb07dda2168c36", + "sha256:82062eef6096c42ce14c7c07a7898caa3d696ac189fdb1586f59562893f6abf4", + "sha256:8676471983482522f3e124ad2c8fe38d6d6ed957379504910d2ea0c646d96cb4", + "sha256:8c764bd6690b83a72b4294934774044c8cea4356cb9b103b7dbb8232242b3047", + "sha256:8ec623cff18e328781ab7a6251f1ee77e225f14e1f5a26633028a14b7d90ed82", + "sha256:93c84850c9e529433613af2b2097634d27b30e9853271b6ea1384ee00be5424a", + "sha256:9ac560499086184142b0a0b28eca0ea1d245e9df1c008ef3356b0e3ea6cb1536", + "sha256:9b255feaa4f3c46c7ebd1319a630ee1e3aa87078c9b428f9428980597c3ce830", + "sha256:9c389ef8508f787ff1ec963b473838616773db8e00bc043cab9374f36d9e8201", + "sha256:a1b7b1b758de72de73fcf063be8ae9e2e98dd4bab0e6cd8b32c8e7d0462d78b0", + "sha256:a525dd4fd6f7a2ecf2b54fce3c8b9982650dc570992ca6e38987c3922684099a", + "sha256:a5304de3e41c33cd6e4be7b85f09409b1059b9ff6a8289482352c42fb50b4e42", + "sha256:a9f13f8c8dc72541654830d16efcc6249969bac1cbe591bee4a0ac19490592e2", + "sha256:b3fe070414ef05359c55bbbf94b7a895d532af726705e6f33e6f2eeb26326042", + "sha256:b535a2524e1adbac3c8028c49cdceb764f800ca95c2f7421aad11c5d4c274ed7", + "sha256:b9dec9619ff5e89798e9cfb5e2a53e1eed18afa1b20460d7158fa2db94dd2d3b", + "sha256:bb60d061978487db5cba8a20fb84b3ae29af5ca004a0e991cd5eaa31b0851b59", + "sha256:d09aaa1d323c4a4b5b4569f44a02bb24ba5030b55adc9710a895843796363c0c", + "sha256:d365d6e0faaf6bcddacfb71d8c033011b7a65f1a94142350a1bc9da3c85bfb8e", + "sha256:d4f546b262e0d955376bf0af9a4de13a910f5f27c5e44e4db46ceea61b4c4a7d", + "sha256:d7442e9cffccd76115521f8d64c270e923e566e9487ba9da9824149653cf0641", + "sha256:dfe8b2478b4c3556a913b187ce598ad2afd07e6acfcf652be8e5a56dee2bf200", + "sha256:e0c98003096624cc70caa5743fe6a1fd0e97ffeaf9b44560e4158b0e1a38168e", + "sha256:e45505414fba93a15957a43ff52bbf737c3ef7905464eb16ef45e1395e95206d", + "sha256:e8d5ae0f0a25b3aa7207688edf23de514f918a91ea05edbeffdbdd56d8497c13", + "sha256:ead6c3a1858c551b4edbba781d48892a487fda6ef6416c87f8ed559bfb29c904", + "sha256:fafb423453e711ea95a669373bdaf628e9e8a0c606c1366499835f3e446554dc", + "sha256:fc80ba01ff5663c74ce74c9ee2267dbf900ee8e8d18d55937b5e83eb1e179998", + "sha256:fcb41d70da706e14a805fcbf42bdb17435d4a91420bd5b6a88f8f61beb95b862" ], - "markers": "python_version >= '3.7'", - "version": "==2.9.0" + "markers": "python_version >= '3.8'", + "version": "==2.12.0" }, "toolz": { "hashes": [ @@ -1718,19 +1747,19 @@ }, "trie": { "hashes": [ - "sha256:0729a159ddef4bfa4c05478017b93a7a1af4e65e8a7b7628676bad13199ffe39", - "sha256:e3f3691e1d48006b466c9b4cd0ee586c32e0f54d13b2497f263688188c77b0fe" + "sha256:1c7fa6f4a3088e083764cf4e32a07a69c672fcf15ad922e03f51158d64a855cf", + "sha256:c1a5fc17b37a75008a4517e4f297ad8026dce777eb0eed63ee6335c66d7437b7" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.1.0" + "version": "==2.1.1" }, "twisted": { "hashes": [ - "sha256:32acbd40a94f5f46e7b42c109bfae2b302250945561783a8b7a059048f2d4d31", - "sha256:86c55f712cc5ab6f6d64e02503352464f0400f66d4f079096d744080afcccbd0" + "sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24", + "sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd" ], "markers": "python_full_version >= '3.7.1'", - "version": "==22.10.0" + "version": "==23.8.0" }, "txaio": { "hashes": [ @@ -1742,11 +1771,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", - "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" ], "markers": "python_version >= '3.7'", - "version": "==4.6.3" + "version": "==4.7.1" }, "tzdata": { "hashes": [ @@ -1766,53 +1795,52 @@ }, "urllib3": { "hashes": [ - "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", - "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" + "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", + "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" ], "markers": "python_version >= '3.7'", - "version": "==2.0.3" + "version": "==2.0.4" }, "watchdog": { "hashes": [ - "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190", - "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43", - "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d", - "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256", - "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd", - "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96", - "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5", - "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad", - "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42", - "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225", - "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb", - "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc", - "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79", - "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf", - "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44", - "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc", - "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131", - "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c", - "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565", - "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab", - "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed", - "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16", - "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf", - "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375", - "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697", - "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906", - "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b", - "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f" + "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a", + "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100", + "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8", + "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc", + "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae", + "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41", + "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0", + "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f", + "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c", + "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9", + "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3", + "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709", + "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83", + "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759", + "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9", + "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3", + "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7", + "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f", + "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346", + "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674", + "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397", + "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96", + "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d", + "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a", + "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64", + "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44", + "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33" ], - "markers": "python_version >= '3.6'", - "version": "==2.3.1" + "markers": "python_version >= '3.7'", + "version": "==3.0.0" }, "web3": { "hashes": [ - "sha256:b9fcc2372e7cac27d96621c169be40174eccbb93346bba2ab45ad791140d47fe", - "sha256:c86889b9c0b8f9f5ce5f5f0bb9f9bfc551cf775aeaf903964ddf28d303b85c62" + "sha256:3bc95043ee9fc6ee0b13a4766d4975b9f7cae069db136430a3799ed18743e608", + "sha256:cb454d0180e63ba1d83143dccf7c623581ba58e222edb006f48252d8a7b948e0" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.4.0" + "version": "==6.9.0" }, "websockets": { "hashes": [ @@ -1892,11 +1920,11 @@ }, "werkzeug": { "hashes": [ - "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76", - "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f" + "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8", + "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528" ], "markers": "python_version >= '3.8'", - "version": "==2.3.4" + "version": "==2.3.7" }, "yarl": { "hashes": [ @@ -1980,13 +2008,13 @@ }, "zipp": { "hashes": [ - "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", - "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" + "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0", + "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147" ], - "markers": "python_version >= '3.7'", - "version": "==3.15.0" + "markers": "python_version >= '3.8'", + "version": "==3.16.2" }, - "zope.interface": { + "zope-interface": { "hashes": [ "sha256:0326cc72f232167498eb4814232c960881bd8eb5e1f7e92ed07ea7afbf21dbb0", "sha256:04ab70d12e46f54f2c614e9ca12f3d29de41101f05563f7c9bd3351fcf6d85c3", @@ -2132,11 +2160,11 @@ }, "ape-solidity": { "hashes": [ - "sha256:015f895bf338e921b632b40d18279e5969e85972125ae468f4ada00d900a2bf7", - "sha256:904f7f22d2f2dd5c3351c847072294115df47e38ce4939f680aff4ae86249fad" + "sha256:aaf28e01f4dd366551f5e8c3624ca1c9612ef7afc2980a226cf9d098321c8e07", + "sha256:f192cfb06836b57ac9b12dda59cac5f4463de62c3fb054774e9e5104b2e8b714" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.6.5" + "version": "==0.6.8" }, "appdirs": { "hashes": [ @@ -2161,11 +2189,11 @@ }, "async-timeout": { "hashes": [ - "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15", - "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c" + "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", + "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" ], - "markers": "python_version >= '3.6'", - "version": "==4.0.2" + "markers": "python_version >= '3.7'", + "version": "==4.0.3" }, "attrs": { "hashes": [ @@ -2228,95 +2256,110 @@ }, "bitarray": { "hashes": [ - "sha256:0331ce777174f1f06e592b5199e056cdece817181522d75e5671ef728bb5c591", - "sha256:0474532ad832da5a6c4f4127d64de68455a5948dcb9e824aa4a3927ced87ba1f", - "sha256:05c868339a9fb6095b600a4e576b76e269710ad519b00861d6b2a319e7d24465", - "sha256:0970faa5ce3ca6601d29f242941b5920c601535ac850aa9be942bcfe99636619", - "sha256:143d4f65e1f45a533e13521be1dc557a782317ecf76520eabd5a903b26ecb187", - "sha256:168acedc8ad7b87d01b6b733d37b0414aa4da6d10e1eedebb6cf3d79389fcef2", - "sha256:19bb60f0f3f99d066d4ad75247490107f7d3f0ba8f97b4f686f71bec8b0b2a68", - "sha256:1bcc809a67b03d7950a7f01cb8bb35b9a2b7fe9361f10aaf2fdfa44073ffed0d", - "sha256:1ffd91235c8a7c7ea3e3a6f710545b578c901303d6b98b7d2ee730ebf9c2a4ff", - "sha256:21f1ae716f61bf700327dd8e47a993a1b0bce30f1e8881f6bd6243223b6bafff", - "sha256:21ff72a03a9e60c43a98cb3b0f8c246414fae1a3bbbf425af06f6f350cde30d2", - "sha256:22dc38cb226b7604dbdd2d5504cf8d0a2e645e353eb158fed56d908e3243aea1", - "sha256:2435ac2598ae7caf283bf6af6c3e03f4dc6adf5a3bfaf01ffc719bd61411647b", - "sha256:2e55ad91330c2f1ff78f4b904b897e691d623a1858466924fb39233e669b1219", - "sha256:2e8365a513c1eaab2457e7065f517221bf11bf4909231f4b3e5204844b66bcbb", - "sha256:382e76863e9ad999af9ff0e5061d2df47abebcddeaa897da7924234f772db698", - "sha256:3ac1be1f87c67dc7e3640496427b6a291684a5612ede5b9a33aa34f620395985", - "sha256:3b3d319d89ee099279ec8c3efd57c2f21cd0b8d34e2ad0b5db07f3e45c4568d8", - "sha256:3c0f8520112563a306219ce1d4d9120a09179f5c7014e6cc629aeeb821436ecb", - "sha256:3cb3d4660075ee690549034c18093b1766168dc925ca16f76ab8d64250a96120", - "sha256:4138461ffb2605515fd5c7199c1d870095b3913fe2d0a195b21492ff84901168", - "sha256:4366f2998a63013fe260b8a34051858c98d6680a8bc832529d500af9e820f991", - "sha256:44203138e5a0548f120c40cf24bf27fc7e05ca5dc698f1f8fa53bfb9bdd1b700", - "sha256:4a9e2c9b6e391a167e1a87058ed3777440f5d4db623724832b762c704fe6f062", - "sha256:509a12c3f4a8abfcee3eec02000883b5cdce3e689bb99cdc5fac3767b6b7d2c5", - "sha256:50c7bb2d950c6ec10d02f47f6fd9e786ff890a4879e04bd62c74f0204c62c419", - "sha256:5423427bb3af9b75e01a4aca6d38e84906b16ff9f62e2a64dce877c9505735a3", - "sha256:54e1bdcdf3c4541a9df432c73c117be9d195629a4d9a705c9d61a05c797fb0c1", - "sha256:553f3a4d97d7974e7632f754411d91f4f435756fd961204ee494a2af68137b4f", - "sha256:58e3ce453708f43f9666a1abed97c50e052351631d7463fdea07d8e9f50dd9bd", - "sha256:656195c2e378cab88c98fbbad723104d1b75483d6a88df6049c81ca7303e3d88", - "sha256:6b417fb3d2c5636c369eda939db33dac97115fce72a192c63e1210db78ce4e9f", - "sha256:6f502bcef6e215b837db2c84150275ada5120c78776caffda26291c4b6688646", - "sha256:70fbb07504d63a5d793107ce16b0722de7fa45aca943959153b05ddc04f41cf3", - "sha256:716fdc54eaea23029d95f285b94d1bb1954aaeaa16ceb51910f3923ea13950e5", - "sha256:72cae6daf2e56675dfe4f65caf1d63ee74295926d0bb78c27d8e1b49a91dbae2", - "sha256:74d4fb48e2463638ce7be1c20613a7e118485bb46cfd84bc2a14c7d3b098f49c", - "sha256:7dac4575632f2900e7aed2f3a75c3ff672786bdfba8c000a86e62eea62d2a018", - "sha256:84262cadabc706a11affc6a80cc7ff3a0d0f2b7bd33eef58f9d733cfe260e6da", - "sha256:857c90a35ebaa1157b280ec62571e124384ca737434681d1a59de375795cc9d9", - "sha256:8712c561d370d7667c861e14e69fcce63ca761e50fb3cc7ef79682eeeaed567b", - "sha256:90a1cd9fe75eb91534ebf5459e9f2d4c83d5399f6ec812584d3dfc84440d784c", - "sha256:90d7f4c75174ed190c60854bce461fa6be66a9005e4bc595b8f134b31601ce90", - "sha256:94fdfaa747d5fcb996ff060a1396a6cb3132a3404ba7b019748370fafe3ff1dd", - "sha256:9944648f9f12a500c46e1786088a40e9711afc9c51db2370610f974e851dac9c", - "sha256:9c2cc2ab01bd1d809e9e5b0be28b25901db2a87b6ae483d29a744764cb89988e", - "sha256:9c6ef513b8166af421178027efbbf9b51a322645a00a2fa73809f27a899c1acb", - "sha256:9f79ad4d19595f9f9dd615a33a95c2eeb1b88705de3fbf96677b057b48408039", - "sha256:a3f5defdc2d36d969febeef7508a0bf7e93cdfb3325ac95863d95d753c23c99f", - "sha256:a625129aa68d7886a86bb0d5166c72fc0849f0e34dd88e8b772be3c7fcd6fd8b", - "sha256:a7d41e52d2295f53f5a03c62efbcb6d481f3b9a8ff87c2e072d2adb879f4929e", - "sha256:a99deab760c063e200ed3267893b87534deeaaa4ffc03da54942a7833e59fe51", - "sha256:abc528163aa87642b968a06af467b4db1e7f303784b30e0b2cc120aaba4bf887", - "sha256:adb48a4bb255d69fb22ac27d7ac92280731905a3b19f377ab1f02478c309b501", - "sha256:af991272a2a20396c79d07847d96370490a2eca0c781792c9c7cd7deff863297", - "sha256:b0274bf5a568d3322052403758c7ba0e32a005474115592cdb74d54cfa2b1772", - "sha256:b07ea1bb32f7ed62f2f693dabc91bd41e0977205fefbeb4fa93733518c09273a", - "sha256:b2a70ffabcce0efe8cf6113526c5dcb70c6e7b912289c84f0ad8c4288d7b1c0f", - "sha256:b4a94c1f94a8a4ebe51a375490eccec94261aa357edd4faf5ca2398e8c30ebd1", - "sha256:b56e07e21a24ca580bff7ef5eebef8d28bfe139c9a24da76359399ce20d33bc1", - "sha256:b73f48f85ba28c10db498bc2654678b7b9076d08ec34542101e9bfa3e209a6ee", - "sha256:b81c2d73a7b348c957aac8ee71076a80e92b29deb68db49ff941a4306cb419e8", - "sha256:bbfb02fde64b14a820a9268836103b028f20a206333fc6d637e3e663824b64ad", - "sha256:bdc829b1eecd57ee9b65c3b6c61814671683e061b21a267c64b8f1db29703bca", - "sha256:bf7921fef3e869e51734306174ed52d8ec11c8c359fcf98d72c4bee8d9fb82fc", - "sha256:bf8f13fc2d91960f94f8a8a3ad2e824cb1ca7bb49d1f905f9201327bdf9c086f", - "sha256:c2100c7b5bc813350ad8abe30f7223c9398d86ab30ebeffc7f780938fd53c009", - "sha256:c3aad9c8944a1cc2d3ac6f31fcfe164e22b1785e24f85b6f89b377667c5a5a87", - "sha256:ceb0e02a73d4908ab9aa72eb6c7fa04eec37daad2d93192892a5f3a6947264db", - "sha256:d03fe73637a798ac39adcefb18d8bb78eaa3529f79e6455ee462a1fb084adbf6", - "sha256:d1814b9185aedcb75fc7f7e02753be7fa114d18f8bb29f0e31a84507ed7d01ee", - "sha256:d6540e180eccb4e5c6df2d460df7b1b0d12a00364b73806a1df8cf1d8f1a34eb", - "sha256:d83881e4594c136301d1ec8d783f456dd6b001316588a781f16ddd20522c5d83", - "sha256:daa1239c5b388b6f5c51426eee0c70fad7f24d0668e4b461e66c8755f996d4cb", - "sha256:daa88834560f9c655231b6c3ed8ac069755a7f48ff8c3d37a5ffb88108e8c69d", - "sha256:de72f691895ee41cd720b335ab52d7dc979dd1348eb06891bd5093aa6988cfbd", - "sha256:e2f89fbe7dcd915a5bc4a53ed7be0e1640d3a84a5347db722e7249b715b8b91a", - "sha256:e5175dfe778839c6bf4e3496e4487dac0508a49c9a23c4a5b4fe29d2d1411543", - "sha256:e5b284c11eced377fa799f66fe69208d140a3ffcb29a767e57e9c66e66f061ad", - "sha256:ea6bda210224d23bef6af867adfc37bdf150fd9efdbfbdf61ba3b381b57583c5", - "sha256:ebc4ea4c48b050becdd177cf9b0a5d4be99cfa52a118fbe34f871156e5b1ad39", - "sha256:ed833c809ddff4d4ec81c878dd0b1a8a9b7de094d35dbc623b21cba707c26839", - "sha256:f30a89d673945109a64d2c3cb5bc2c707ed18efb8e018b6a9d233cb08034525d", - "sha256:f3f3d9cbd3e4032cc0b562a69cd7b2d7f7a7c96cc681871029f92bf49e99fb06", - "sha256:f4cdb4e3565d2fee759053272e6ec26ba8a7185f6bccba9e78a98d4df0ed08a2", - "sha256:fc99267064529627b28b53f8eeac64e3ac42a936c4f8c703122a6e14f77a1ea0", - "sha256:fce679c2d607ac7552516fbd08e1834ec4ef883ebcd94183daaf6190f4a2fc6b" - ], - "version": "==2.7.4" + "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", + "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", + "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", + "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", + "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", + "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", + "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", + "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", + "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", + "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", + "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", + "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", + "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", + "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", + "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", + "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", + "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", + "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", + "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", + "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", + "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", + "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", + "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", + "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", + "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", + "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", + "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", + "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", + "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", + "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", + "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", + "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", + "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", + "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", + "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", + "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", + "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", + "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", + "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", + "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", + "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", + "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", + "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", + "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", + "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", + "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", + "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", + "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", + "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", + "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", + "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", + "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", + "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", + "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", + "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", + "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", + "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", + "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", + "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", + "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", + "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", + "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", + "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", + "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", + "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", + "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", + "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", + "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", + "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", + "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", + "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", + "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", + "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", + "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", + "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", + "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", + "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", + "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", + "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", + "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", + "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", + "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", + "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", + "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", + "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", + "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", + "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", + "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", + "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", + "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", + "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", + "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", + "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", + "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", + "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", + "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", + "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", + "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", + "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", + "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", + "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", + "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" + ], + "version": "==2.8.1" }, "bytestring-splitter": { "hashes": [ @@ -2334,11 +2377,11 @@ }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "cffi": { "hashes": [ @@ -2411,11 +2454,11 @@ }, "cfgv": { "hashes": [ - "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426", - "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736" + "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", + "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560" ], - "markers": "python_full_version >= '3.6.1'", - "version": "==3.3.1" + "markers": "python_version >= '3.8'", + "version": "==3.4.0" }, "charset-normalizer": { "hashes": [ @@ -2427,11 +2470,11 @@ }, "click": { "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], "markers": "python_version >= '3.7'", - "version": "==8.1.3" + "version": "==8.1.7" }, "colorama": { "hashes": [ @@ -2521,132 +2564,131 @@ }, "cryptography": { "hashes": [ - "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db", - "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a", - "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039", - "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c", - "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3", - "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485", - "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c", - "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca", - "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5", - "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5", - "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3", - "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb", - "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43", - "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31", - "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc", - "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b", - "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006", - "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a", - "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699" + "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306", + "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84", + "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47", + "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d", + "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116", + "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207", + "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81", + "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087", + "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd", + "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507", + "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858", + "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae", + "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34", + "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906", + "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd", + "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922", + "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7", + "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4", + "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574", + "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1", + "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c", + "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e", + "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de" ], "markers": "python_version >= '3.7'", - "version": "==41.0.1" + "version": "==41.0.3" }, "cytoolz": { "hashes": [ - "sha256:02975e2b1e61e47e9afa311f4c1783d155136fad37c54a1cebfe991c5a0798a1", - "sha256:03ab22c9aeb1535f8647d23b6520b0c3d41aaa18d04ef42b352dde1931f2e2b1", - "sha256:061387aa39b9c1576c25d0c59142513c09e77a2a07bd5d6211a43c7a758b6f45", - "sha256:06d38a40fe153f23cda0e823413fe9d9ebee89dd461827285316eff929fb121e", - "sha256:0d474dacbafbdbb44c7de986bbf71ff56ae62df0d52ab3b6fa966784dc88737a", - "sha256:117871f036926e42d3abcee587eafa9dc7383f1064ac53a806d33e76604de311", - "sha256:14f4dbc3f0ec8f6fc68865489af21dcf042ff007d2737c27bfd73296f15db544", - "sha256:1a1eae39656a1685e8b3f433eecfd72015ce5c1d7519e9c8f9402153c68331bb", - "sha256:1b6761791973b1e839b8309d5853b40eeb413368e31beaf5f2b6ed44c6fc7cf0", - "sha256:1be368623e46ad3c1ce807e7a436acb119c26001507b31f92ceb21b86e08c386", - "sha256:1c29dd04e282ddfd45b457e3551075beec9128aa9271245e58ce924bf6e055f8", - "sha256:23c3f57c48eb939d2986eba4aeaeedf930ebf94d58c91a42d4e0fc45ed5427dc", - "sha256:25ff13c468c06da9ef26651dc389e7e8bb7af548f8c1dfb96305f57f18d398a8", - "sha256:2a48940ff0449ffcf690310bf9228bb57885f7571406ed2fe05c98e299987195", - "sha256:2b245b824f4705aef0e4a03fafef3ad6cb59ef43cc564cdbf683ee28dfc11ad5", - "sha256:2ec296f01c29c809698eaf677211b6255691295c2b35caab2131e1e7eaadfbac", - "sha256:2eed428b5e68c28abf2c71195e799850e040d67a27c05f7785319c611665b86a", - "sha256:2f32452e833f0605b871626e6c61b71b0cba24233aad0e04accc3240497d4995", - "sha256:3032c0ba42dee5836d6b57a72a569b65df2c29e8ed266cb900d569003cf933a9", - "sha256:30936ae8fa68b6a1ac8ad6c4bacb5a8a00d51bc6c89f9614a1557b0105d09f8a", - "sha256:31131b54a0c72efc0eb432dc66df546c6a54f2a7d396c9a34cf65ac1c26b1df8", - "sha256:35fae4eaa0eaf9072a5fe2d244a79e65baae4e5ddbe9cc629c5037af800213a2", - "sha256:37320669c364f7d370392af33cc1034b4563da66c22cd3261e3530f4d30dbe4b", - "sha256:37c53f456a1c84566a7d911eec57c4c6280b915ab0600e7671582793cc2769fe", - "sha256:3c9a16a5b4f54d5c0a131f56b0ca65998a9a74958b5b36840c280edba4f8b907", - "sha256:3cb95d23defb2322cddf70efb4af6dac191d95edaa343e8c1f58f1afa4f92ecd", - "sha256:3d6d0b0075731832343eb88229cea4bf39e96f3fc7acbc449aadbdfec2842703", - "sha256:421b224dc4157a0d66625acb5798cf50858cfa06a5232d39a8bd6cf1fa88aca3", - "sha256:4284120c978fb7039901bf6e66832cb3e82ac1b2a107512e735bdb04fd5533ed", - "sha256:42c9e5cd2a48a257b1f2402334b48122501f249b8dcf77082f569f2680f185eb", - "sha256:4534cbfad73cdb1a6dad495530d4186d57d73089c01e9cb0558caab50e46cb3b", - "sha256:48bc2f30d1b2646d675bb8e7778ab59379bf9edc59fe06fb0e7f85ba1271bf44", - "sha256:49911cb533c96d275e31e7eaeb0742ac3f7afe386a1d8c40937814d75039a0f7", - "sha256:499af2aff04f65b4c23de1df08e1d1484a93b23ddaaa0163e44b5070b68356eb", - "sha256:4a0055943074c6c85b77fcc3f42f7c54010a3478daa2ed9d6243d0411c84a4d3", - "sha256:4d700e011156ff112966c6d77faaae125fcaf538f4cec2b9ce8957de82858f0f", - "sha256:50db41e875e36aec11881b8b12bc69c6f4836b7dd9e88a9e5bbf26c2cb3ba6cd", - "sha256:5158ae6d8dd112d003f677039a3613ca7d2592bfe35d7accf23684edb961fc26", - "sha256:56e1ebf6eb4438b8c45cbe7e7b22fc65df0c9efa97a70d3bf2f51e08b19756a5", - "sha256:59641eb1f41cb688b3cb2f98c9003c493a5024325f76b5c02333d08dd972127c", - "sha256:5af43ca7026ead3dd08b261e4f7163cd2cf3ceaa74fa5a81f7b7ea5d445e41d6", - "sha256:5c59bb4ca88e1c69931468bf21f91c8f64d8bf1999eb163b7a2df336f60c304a", - "sha256:633f19d1990b1cf9c67dce9c28bf8b5a18e42785d15548607a100e1236384d5d", - "sha256:6716855f9c669c9e25a185d88e0f169839bf8553d16496796325acd114607c11", - "sha256:6805b007af3557ee6c20dab491b6e55a8177f5b6845d9e6c653374d540366ba7", - "sha256:695dd8231e4f1bfb9a2363775a6e4e56ad9d2058058f817203a49614f4bfe33b", - "sha256:6fa7009c843667868aa8bdb3d68e5ef3d6356dd418b17ed5ca4e1340e82483a5", - "sha256:794cce219bbcb2f36ca220f27d5afd64eaa854e04901bd6f240be156a578b607", - "sha256:7b60caf0fa5f1b49f1062f7dc0f66c7b23e2736bad50fa8296bfb845995e3051", - "sha256:7e903df991f0957e2b271a37bb25d28e0d260c52825ae67507d15ca55a935961", - "sha256:7eb9e6fa8a82c3d2f519f7d3942898a97792e3895569e9501b9431048289b82f", - "sha256:816c2038008ebf50d81171ddfae377f1af9e71d504ec609469dcb0906bfcf2ae", - "sha256:849f461bffa1e7700ccfcb5186df29cd4cdcc9efdb7199cb8b5681dc37045d72", - "sha256:8506d1863f30d26f577c4ed59d2cfd03d2f39569f9cbaa02a764a9de73d312d5", - "sha256:867bebe6be30ee36a836f9b835790762a74f46be8cc339ea57b68dcecdbc1133", - "sha256:97a24c0d0806fcf9a6e75fc18aeb95adc37eb0baf6451f10a2de23ffd815329d", - "sha256:980e7eb7205e01816a92f3290cfc80507957e64656b9271a0dfebb85fe3718c0", - "sha256:9bae431a5985cdb2014be09d37206c288e0d063940cf9539e9769bd2ec26b220", - "sha256:9bebe58f7a160db7838eb70990c704db4bdc2d58bd364290fd69be0587be8bac", - "sha256:9e324a94856d88ecf10f34c102d0ded67d7c3cf644153d77e34a29720ce6aa47", - "sha256:a6e63fc67b23830947b51e0a488992e3c904fce825ead565f3904dcf621d05f7", - "sha256:a72440305f634604827f96810e4469877b89f5c060d6852267650a49b0e3768c", - "sha256:a734511144309ea6e105406633affb74e303a3df07d8a3954f9b01946e27ecb1", - "sha256:a816bff6bf424753e1ac2441902ceaf37ae6718b745a53f6aa1a60c617fb4f5f", - "sha256:a8a7a325b8fe885a6dd91093616c703134f2dacbd869bc519970df3849c2a15b", - "sha256:aa61e3da751a2dfe95aeca603f3ef510071a136ba9905f61ae6cb5d0696271ad", - "sha256:ac5895d5f78dbd8646fe37266655ba4995f9cfec38a86595282fee69e41787da", - "sha256:ac6784cc43aec51a86cf9058a2a343084f8cf46a9281bea5762bfa608127c53b", - "sha256:b1bd8017ef0da935a20106272c5f5ff6b1114add1ccb09cfed1ff7ec5cc01c6d", - "sha256:b2ac288f27a2689d9e39f4cf4df5437a8eb038eaae515169586c77f9f8fb343a", - "sha256:b30cd083ef8af4ba66d9fe5cc75c653ede3f2655f97a032db1a14cc8a006719c", - "sha256:b46ebc463bb45f278a2b94e630061c26e10077cb68d4c93583d8f4199699a5ef", - "sha256:b575393dd431b8e211de35bd593d831dac870172b16e2b7934f3566b8fc89377", - "sha256:b6569f6038133909cd658dbdcc6fc955f791dc47a7f5b55d2066f742253dcbfe", - "sha256:b8b8f88251b84b3877254cdd59c86a1dc6b2b39a03c6c9c067d344ef879562e0", - "sha256:b8eceaa12b7f152b046b67cb053ec2b5b00f73593983de69bc5e63a8aca4a7a8", - "sha256:ba74c239fc6cb6e962eabc420967c7565f3f363b776c89b3df5234caecf1f463", - "sha256:be5a454a95797343d0fb1ed02caecae73a023b1393c112951c84f17ec9f4076c", - "sha256:bef934bd3e024d512c6c0ad1c66eb173f61d9ccb4dbca8d75f727a5604f7c2f6", - "sha256:c1964dcb5f250fd13fac210944b20810d61ef4094a17fbbe502ab7a7eaeeace7", - "sha256:c34e69be4429633fc614febe3127fa03aa418a1abb9252f29d9ba5b3394573a5", - "sha256:c576bd63495150385b8d05eaae775387f378be2fd9805d3ffb4d17c87271fbad", - "sha256:cb8b10405960a8e6801a4702af98ea640130ec6ecfc1208195762de3f5503ba9", - "sha256:cc3645cf6b9246cb8e179db2803e4f0d148211d2a2cf22d5c9b5219111cd91a0", - "sha256:cd35c0be4c46274129dd1678bb911dd4e93d23968b26f4e39cd55bc7cb3b1bac", - "sha256:d540e9c34a61b53b6a374ea108794a48388178f7889d772e364cdbd6df37774c", - "sha256:d72415b0110f7958dd3a5ee98a70166f47bd42ede85e3535669c794d06f57406", - "sha256:dbae37d48ef5a0ab90cfaf2b9312d96f034b1c828208a9cbe25377a1b19ba129", - "sha256:e1c5434db53f3a94a37ad8aedb231901e001995d899af6ed1165f3d27fa04a6a", - "sha256:e75e287787e6adafed9d8c3d3e7647c0b5eb460221f9f92d7dfe48b45ba77c0d", - "sha256:e797c4afb1b7962d3205b1959e1051f7e6bfbba29da44042a9efc2391f1feb38", - "sha256:efd1b2da3ee577fcfa723a214f73186aef9674dd5b28242d90443c7a82722b0f", - "sha256:f5b43ce952a5a31441556c55f5f5f5a8e62c28581a0ff2a2c31c04ef992d73bd", - "sha256:f7194a22a4a24f3561cb6ad1cca9c9b2f2cf34cc8d4bce6d6a24c80960323fa8", - "sha256:f8101ab6de5aa0b26a2b5032bc488d430010c91863e701812d65836b03a12f61", - "sha256:fc33909397481c90de3cec831bfb88d97e220dc91939d996920202f184b4648e", - "sha256:fcc378fa97f02fbcef090b3611305425d72bd1c0afdd13ef4a82dc67d40638b6", - "sha256:ff478682e8ee6dbaa37201bb71bf4a6eee744006ab000e8f5cea05066fc7c845" + "sha256:00547da587f124b32b072ce52dd5e4b37cf199fedcea902e33c67548523e4678", + "sha256:0295289c4510efa41174850e75bc9188f82b72b1b54d0ea57d1781729c2924d5", + "sha256:03b58f843f09e73414e82e57f7e8d88f087eaabf8f276b866a40661161da6c51", + "sha256:0568d4da0a9ee9f9f5ab318f6501557f1cfe26d18c96c8e0dac7332ae04c6717", + "sha256:08a0e03f287e45eb694998bb55ac1643372199c659affa8319dfbbdec7f7fb3c", + "sha256:0a9d12436fd64937bd2c9609605f527af7f1a8db6e6637639b44121c0fe715d6", + "sha256:101b5bd32badfc8b1f9c7be04ba3ae04fb47f9c8736590666ce9449bff76e0b1", + "sha256:14108cafb140dd68fdda610c2bbc6a37bf052cd48cfebf487ed44145f7a2b67f", + "sha256:18580d060fa637ff01541640ecde6de832a248df02b8fb57e6dd578f189d62c7", + "sha256:18a0f838677f9510aef0330c0096778dd6406d21d4ff9504bf79d85235a18460", + "sha256:1ce324d1b413636ea5ee929f79637821f13c9e55e9588f38228947294944d2ed", + "sha256:246368e983eaee9851b15d7755f82030eab4aa82098d2a34f6bef9c689d33fcc", + "sha256:24c0d71e9ac91f4466b1bd280f7de43aa4d94682daaf34d85d867a9b479b87cc", + "sha256:275d53fd769df2102d6c9fc98e553bd8a9a38926f54d6b20cf29f0dd00bf3b75", + "sha256:294d24edc747ef4e1b28e54365f713becb844e7898113fafbe3e9165dc44aeea", + "sha256:2fb740482794a72e2e5fec58e4d9b00dcd5a60a8cef68431ff12f2ba0e0d9a7e", + "sha256:31d4b0455d72d914645f803d917daf4f314d115c70de0578d3820deb8b101f66", + "sha256:388f840fd911d61a96e9e595eaf003f9dc39e847c9060b8e623ab29e556f009b", + "sha256:3e993804e6b04113d61fdb9541b6df2f096ec265a506dad7437517470919c90f", + "sha256:4180b2785d1278e6abb36a72ac97c92432db53fa2df00ee943d2c15a33627d31", + "sha256:4416ee86a87180b6a28e7483102c92debc077bec59c67eda8cc63fc52a218ac0", + "sha256:45c7b4eac7571707269ebc2893facdf87e359cd5c7cfbfa9e6bd8b33fb1079c5", + "sha256:460c05238fbfe6d848141669d17a751a46c923f9f0c9fd8a3a462ab737623a44", + "sha256:478051e5ef8278b2429864c8d148efcebdc2be948a61c9a44757cd8c816c98f5", + "sha256:481e3129a76ea01adcc0e7097ccb8dbddab1cfc40b6f0e32c670153512957c0f", + "sha256:48425107fbb1af3f0f2410c004f16be10ffc9374358e5600b57fa543f46f8def", + "sha256:4a7d8b869ded171f6cdf584fc2fc6ae03b30a0e1e37a9daf213a59857a62ed90", + "sha256:4bff49986c9bae127928a2f9fd6313146a342bfae8292f63e562f872bd01b871", + "sha256:51d3495235af09f21aa92a7cdd51504bda640b108b6be834448b774f52852c09", + "sha256:5556acde785a61d4cf8b8534ae109b023cbd2f9df65ee2afbe070be47c410f8c", + "sha256:55e94124af9c8fbb1df54195cc092688fdad0765641b738970b6f1d5ea72e776", + "sha256:5616d386dfbfba7c39e9418ba668c734f6ceaacc0130877e8a100cad11e6838b", + "sha256:57233e1600560ceb719bed759dc78393edd541b9a3e7fefc3079abd83c26a6ea", + "sha256:593e89e2518eaf81e96edcc9ef2c5fca666e8fc922b03d5cb7a7b8964dbee336", + "sha256:5998f81bf6a2b28a802521efe14d9fc119f74b64e87b62ad1b0e7c3d8366d0c7", + "sha256:5e4e612b7ecc9596e7c859cd9e0cd085e6d0c576b4f0d917299595eb56bf9c05", + "sha256:5fef7b602ccf8a3c77ab483479ccd7a952a8c5bb1c263156671ba7aaa24d1035", + "sha256:63b31345e20afda2ae30dba246955517a4264464d75e071fc2fa641e88c763ec", + "sha256:663911786dcde3e4a5d88215c722c531c7548903dc07d418418c0d1c768072c0", + "sha256:673d6e9e3aa86949343b46ac2b7be266c36e07ce77fa1d40f349e6987a814d6e", + "sha256:68ae7091cc73a752f0b938f15bb193de80ca5edf5ae2ea6360d93d3e9228357b", + "sha256:698da4fa1f7baeea0607738cb1f9877ed1ba50342b29891b0223221679d6f729", + "sha256:6a93644d7996fd696ab7f1f466cd75d718d0a00d5c8118b9fe8c64231dc1f85e", + "sha256:6c8d0dff4865da54ae825d43e1721925721b19f3b9aca8e730c2ce73dee2c630", + "sha256:732d08228fa8d366fec284f7032cc868d28a99fa81fc71e3adf7ecedbcf33a0f", + "sha256:735147aa41b8eeb104da186864b55e2a6623c758000081d19c93d759cd9523e3", + "sha256:7a92aab8dd1d427ac9bc7480cfd3481dbab0ef024558f2f5a47de672d8a5ffaa", + "sha256:7d352d4de060604e605abdc5c8a5d0429d5f156cb9866609065d3003454d4cea", + "sha256:81074edf3c74bc9bd250d223408a5df0ff745d1f7a462597536cd26b9390e2d6", + "sha256:81e6a9a8fda78a2f4901d2915b25bf620f372997ca1f20a14f7cefef5ad6f6f4", + "sha256:843500cd3e4884b92fd4037912bc42d5f047108d2c986d36352e880196d465b0", + "sha256:89247ac220031a4f9f689688bcee42b38fd770d4cce294e5d914afc53b630abe", + "sha256:8bb624dbaef4661f5e3625c1e39ad98ecceef281d1380e2774d8084ad0810275", + "sha256:9007bb1290c79402be6b84bcf9e7a622a073859d61fcee146dc7bc47afe328f3", + "sha256:9070ae35c410d644e6df98a8f69f3ed2807e657d0df2a26b2643127cbf6944a5", + "sha256:908c13f305d34322e11b796de358edaeea47dd2d115c33ca22909c5e8fb036fd", + "sha256:9480b4b327be83c4d29cb88bcace761b11f5e30198ffe2287889455c6819e934", + "sha256:960d85ebaa974ecea4e71fa56d098378fa51fd670ee744614cbb95bf95e28fc7", + "sha256:96796594c770bc6587376e74ddc7d9c982d68f47116bb69d90873db5e0ea88b6", + "sha256:97cf514a9f3426228d8daf880f56488330e4b2948a6d183a106921217850d9eb", + "sha256:997b7e0960072f6bb445402da162f964ea67387b9f18bda2361edcc026e13597", + "sha256:9b28787eaf2174e68f0acb3c66f9c6b98bdfeb0930c0d0b08e1941c7aedc8d27", + "sha256:9bf51354e15520715f068853e6ab8190e77139940e8b8b633bdb587956a08fb0", + "sha256:9e5075e30be626ef0f9bedf7a15f55ed4d7209e832bc314fdc232dbd61dcbf44", + "sha256:a08b4346350660799d81d4016e748bcb134a9083301d41f9618f64a6077f89f2", + "sha256:a67f75cc51a2dc7229a8ac84291e4d61dc5abfc8940befcf37a2836d95873340", + "sha256:a973f5286758f76824ecf19ae1999f6697371a9121c8f163295d181d19a819d7", + "sha256:ab911033e5937fc221a2c165acce7f66ae5ac9d3e54bec56f3c9c197a96be574", + "sha256:ad92e37be0b106fdbc575a3a669b43b364a5ef334495c9764de4c2d7541f7a99", + "sha256:ad9ea4a50d2948738351790047d45f2b1a023facc01bf0361988109b177e8b2f", + "sha256:b029bdd5a8b6c9a7c0e8fdbe4fc25ffaa2e09b77f6f3462314696e3a20511829", + "sha256:b41a85b9b9a2530b72b0d3d10e383fc3c2647ae88169d557d5e216f881860318", + "sha256:baf020f4b708f800b353259cd7575e335a79f1ac912d9dda55b2aa0bf3616e42", + "sha256:c08094b9e5d1b6dfb0845a0253cc2655ca64ce70d15162dfdb102e28c8993493", + "sha256:c26805b6c8dc8565ed91045c44040bf6c0fe5cb5b390c78cd1d9400d08a6cd39", + "sha256:c6ee222671eed5c5b16a5ad2aea07f0a715b8b199ee534834bc1dd2798f1ade7", + "sha256:c820608e7077416f766b148d75e158e454881961881b657cff808529d261dd24", + "sha256:cb081b2b02bf4405c804de1ece6f904916838ab0e057f1446e4ac12fac827960", + "sha256:cbe038bb78d599b5a29d09c438905defaa615a522bc7e12f8016823179439497", + "sha256:cd461e402e24929d866f05061d2f8337e3a8456e75e21b72c125abff2477c7f7", + "sha256:cde6dbb788a4cbc4a80a72aa96386ba4c2b17bdfff3ace0709799adbe16d6476", + "sha256:ce7889dc3701826d519ede93cdff11940fb5567dbdc165dce0e78047eece02b7", + "sha256:d0086ba8d41d73647b13087a3ca9c020f6bfec338335037e8f5172b4c7c8dce5", + "sha256:d29988bde28a90a00367edcf92afa1a2f7ecf43ea3ae383291b7da6d380ccc25", + "sha256:d494befe648c13c98c0f3d56d05489c839c9228a32f58e9777305deb6c2c1cee", + "sha256:df4e32badb2ccf1773e1e74020b7e3b8caf9e92f842c6be7d14888ecdefc2c6c", + "sha256:e6de6a4bdfaee382c2de2a3580b3ae76fce6105da202bbd835e5efbeae6a9c6e", + "sha256:f039c5373f7b314b151432c73219216857b19ab9cb834f0eb5d880f74fc7851c", + "sha256:f6e86ac2b45a95f75c6f744147483e0fc9697ce7dfe1726083324c236f873f8b", + "sha256:f9c690b359f503f18bf1c46a6456370e4f6f3fc4320b8774ae69c4f85ecc6c94", + "sha256:fa436abd4ac9ca71859baf5794614e6ec8fa27362f0162baedcc059048da55f7", + "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", + "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], "markers": "python_version >= '3.6'", - "version": "==0.12.1" + "version": "==0.12.2" }, "dataclassy": { "hashes": [ @@ -2682,10 +2724,10 @@ }, "distlib": { "hashes": [ - "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46", - "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e" + "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", + "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" ], - "version": "==0.3.6" + "version": "==0.3.7" }, "eip712": { "hashes": [ @@ -2695,19 +2737,13 @@ "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.2.1" }, - "eip712-structs": { - "hashes": [ - "sha256:b24400aef07b4d0287fb9bf8ce02b0abbe80c476d1b67222a7c5158df3a3e38d" - ], - "version": "==1.1.0" - }, "eth-abi": { "hashes": [ - "sha256:6949baba61a2c453f0719309ca145e8876a1cbae7ba377c991e67240c13ec7fc", - "sha256:79d258669f3505319e53638d644a75e1c816db552a1ab1927c3063763cc41031" + "sha256:0d50469de2f9948bacd764fc3f8f337a090bbb6ac3a759ef22c094bf56c1e6d9", + "sha256:a9adae5e0c2b9a35703b76856d6db3a0498effdf1243011b2d56280165db1cdd" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==4.0.0" + "markers": "python_version < '4' and python_full_version >= '3.7.2'", + "version": "==4.2.0" }, "eth-account": { "hashes": [ @@ -2719,11 +2755,11 @@ }, "eth-ape": { "hashes": [ - "sha256:b1cc962ab330bafbe2a1f8dd63d06f91d1d51c46f148c16388a7bc782a7f9d57", - "sha256:c7153620a840fee054aabdfe2ccd49c9f33cb300b63879dadc9191bf1847774f" + "sha256:78001209dfdf8c7973c649b8cbba73d3399cd649aeee4223d0b29078ae997201", + "sha256:f6c5137a10edcc2a37a8f8736882e412b2fb3b326d00d8128538e73dc031f89b" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.6.10" + "version": "==0.6.19" }, "eth-bloom": { "hashes": [ @@ -2735,11 +2771,11 @@ }, "eth-hash": { "hashes": [ - "sha256:4d992e885f3ae3901abbe98bd776ba62d0f6335f98c6e9fc60a39b9d114dfb5a", - "sha256:9805075f653e114a31a99678e93b257fb4082337696f4eff7b4371fe65158409" + "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e", + "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.5.1" + "version": "==0.5.2" }, "eth-keyfile": { "hashes": [ @@ -2765,51 +2801,51 @@ }, "eth-tester": { "hashes": [ - "sha256:9cf8742896e26c53e03a79ca6c3a008bf64527f042659bcad306d87fbf2fa79a", - "sha256:d7db78d21bb33bc645d6172dd5ad259eab52399f2b62d4e9fcab075baf8a6877" + "sha256:0e4367d99ae242efdb8c1d18ed99d1ff3f03149abb0a4c2427bc6d333ebef13b", + "sha256:b9cbc93d0b17a6e8acbb52294dad214ee223cf88209fa5be66ead353937d274c" ], "markers": "python_version < '4' and python_full_version >= '3.6.8'", - "version": "==0.9.0b1" + "version": "==0.9.1b1" }, "eth-typing": { "hashes": [ - "sha256:323111b3b76c8ceaff01619367aa52806f0264ca0ec1a70d4b9a42e44360f554", - "sha256:e9535e9d524d4c7a0cbd3d9832093cc5001a3e31869e72645674d24c6376d196" + "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5", + "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f" ], "markers": "python_version < '4' and python_full_version >= '3.7.2'", - "version": "==3.3.0" + "version": "==3.4.0" }, "eth-utils": { "hashes": [ - "sha256:63901e54ec9e4ac16ae0a0d28e1dc48b968c20184d22f2727e5f3ca24b6250bc", - "sha256:fcb4c3c1b32947ba92970963f9aaf40da73b04ea1034964ff8c0e70595127138" + "sha256:7f1a9e10400ee332432a778c321f446abaedb8f538df550e7c9964f446f7e265", + "sha256:d6e107d522f83adff31237a95bdcc329ac0819a3ac698fe43c8a56fd80813eab" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.1.0" + "version": "==2.2.0" }, "ethpm-types": { "hashes": [ - "sha256:5e848d26b1250c1c076b17b2eada0bc2d04543766dfcb96d790fd5d2bb771c1e", - "sha256:a1d17d7f8474948c91ce5628e1de098eae4dffaa5792a0eb585294288046d4c3" + "sha256:6d18b5e37f77d6d5326ee6e5d87caecf9ccb5cba2efd978e22dac3a945b7b169", + "sha256:93e393583bf7271b312430c9ec864bec07a78794d922875d44fe3240bf536f06" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.5.2" + "version": "==0.5.4" }, "evm-trace": { "hashes": [ - "sha256:afb47b727e4322ede8fbf266a0b4cb4e0fc2a29d6a166b27a46244669b1613c0", - "sha256:ddd82bcfebc5ec6eff636b38eef6411fe45acf5319f0e20446b27d9db4650934" + "sha256:0bc0cee185807b8e950d3d3009e5e8680e252054e11611694d632416c8b9d96a", + "sha256:34fbdfdef480066602d8dd8334fd72c6c7dab3d272c1371b7842bc2199918124" ], "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.1.0a20" + "version": "==0.1.0a24" }, "exceptiongroup": { "hashes": [ - "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e", - "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785" + "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", + "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" ], "markers": "python_version >= '3.7'", - "version": "==1.1.1" + "version": "==1.1.3" }, "executing": { "hashes": [ @@ -2820,11 +2856,11 @@ }, "filelock": { "hashes": [ - "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9", - "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718" + "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d", + "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb" ], - "markers": "python_version >= '3.7'", - "version": "==3.12.0" + "markers": "python_version >= '3.8'", + "version": "==3.12.3" }, "flask": { "hashes": [ @@ -2836,149 +2872,135 @@ }, "frozenlist": { "hashes": [ - "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c", - "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f", - "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a", - "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784", - "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27", - "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d", - "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3", - "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678", - "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a", - "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483", - "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8", - "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf", - "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99", - "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c", - "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48", - "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5", - "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56", - "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e", - "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1", - "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401", - "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4", - "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e", - "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649", - "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a", - "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d", - "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0", - "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6", - "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d", - "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b", - "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6", - "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf", - "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef", - "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7", - "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842", - "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba", - "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420", - "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b", - "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d", - "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332", - "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936", - "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816", - "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91", - "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420", - "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448", - "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411", - "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4", - "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32", - "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b", - "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0", - "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530", - "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669", - "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7", - "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1", - "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5", - "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce", - "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4", - "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e", - "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2", - "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d", - "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9", - "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642", - "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0", - "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703", - "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb", - "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1", - "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13", - "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab", - "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38", - "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb", - "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb", - "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81", - "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8", - "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd", - "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4" + "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", + "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", + "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", + "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", + "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", + "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", + "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", + "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", + "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", + "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", + "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", + "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", + "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", + "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", + "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", + "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", + "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", + "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", + "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", + "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", + "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", + "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", + "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", + "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", + "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", + "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", + "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", + "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", + "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", + "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", + "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", + "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", + "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", + "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", + "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", + "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", + "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", + "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", + "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", + "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", + "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", + "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", + "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", + "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", + "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", + "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", + "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", + "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", + "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", + "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", + "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", + "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", + "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", + "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", + "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", + "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", + "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", + "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", + "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", + "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", + "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" ], - "markers": "python_version >= '3.7'", - "version": "==1.3.3" + "markers": "python_version >= '3.8'", + "version": "==1.4.0" }, "greenlet": { "hashes": [ - "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a", - "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a", - "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43", - "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33", - "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8", - "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088", - "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca", - "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343", - "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645", - "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db", - "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df", - "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3", - "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86", - "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2", - "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a", - "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf", - "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7", - "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394", - "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40", - "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3", - "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6", - "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74", - "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0", - "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3", - "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91", - "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5", - "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9", - "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8", - "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b", - "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6", - "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb", - "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73", - "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b", - "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df", - "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9", - "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f", - "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0", - "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857", - "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a", - "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249", - "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30", - "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292", - "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b", - "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d", - "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b", - "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c", - "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca", - "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7", - "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75", - "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae", - "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b", - "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470", - "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564", - "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9", - "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099", - "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0", - "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5", - "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19", - "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1", - "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526" + "sha256:0a9dfcadc1d79696e90ccb1275c30ad4ec5fd3d1ab3ae6671286fac78ef33435", + "sha256:0f313771cb8ee0a04dfdf586b7d4076180d80c94be09049daeea018089b5b957", + "sha256:17503397bf6cbb5e364217143b6150c540020c51a3f6b08f9a20cd67c25e2ca8", + "sha256:180ec55cb127bc745669eddc9793ffab6e0cf7311e67e1592f183d6ca00d88c1", + "sha256:1b3f3568478bc21b85968e8038c4f98f4bf0039a692791bc324b5e0d1522f4b1", + "sha256:1bd4ea36f0aeb14ca335e0c9594a5aaefa1ac4e2db7d86ba38f0be96166b3102", + "sha256:21ebcb570e0d8501457d6a2695a44c5af3b6c2143dc6644ec73574beba067c90", + "sha256:24071eee113d75fedebaeb86264d94f04b5a24e311c5ba3e8003c07d00112a7e", + "sha256:270432cfdd6a50016b8259b3bbf398a3f7c06a06f2c68c7b93e49f53bc193bcf", + "sha256:271ed380389d2f7e4c1545b6e0837986e62504ab561edbaff05da9c9f3f98f96", + "sha256:2840187a94e258445e62ff1545e34f0b1a14aef4d0078e5c88246688d2b6515e", + "sha256:2cda110faee67613fed221f90467003f477088ef1cc84c8fc88537785a5b4de9", + "sha256:2e160a65cc6023a237be870f2072513747d512a1d018efa083acce0b673cccc0", + "sha256:2fcf7af83516db35af3d0ed5d182dea8585eddd891977adff1b74212f4bfd2fd", + "sha256:36cebce1f30964d5672fd956860e7e7b69772da69658d5743cb676b442eeff36", + "sha256:42bfe67824a9b53e73f568f982f0d1d4c7ac0f587d2e702a23f8a7b505d7b7c2", + "sha256:450a7e52a515402fd110ba807f1a7d464424bfa703be4effbcb97e1dfbfcc621", + "sha256:463d63ca5d8c236788284a9a44b9715372a64d5318a6b5eee36815df1ea0ba3d", + "sha256:4d0c0ffd732466ff324ced144fad55ed5deca36f6036c1d8f04cec69b084c9d6", + "sha256:4ff2a765f4861fc018827eab4df1992f7508d06c62de5d2fe8a6ac2233d4f1d0", + "sha256:53abf19b7dc62795c67b8d0a3d8ef866db166b21017632fff2624cf8fbf3481c", + "sha256:5552d7be37d878e9b6359bbffa0512d857bb9703616a4c0656b49c10739d5971", + "sha256:585810056a8adacd3152945ebfcd25deb58335d41f16ae4e0f3d768918957f9a", + "sha256:5942b1d6ba447cff1ec23a21ec525dde2288f00464950bc647f4e0f03bd537d1", + "sha256:5c355c99be5bb23e85d899b059a4f22fdf8a0741c57e7029425ee63eb436f689", + "sha256:5f61df4fe07864561f49b45c8bd4d2c42e3f03d2872ed05c844902a58b875028", + "sha256:665942d3a954c3e4c976581715f57fb3b86f4cf6bae3ac30b133f8ff777ac6c7", + "sha256:68368e908f14887fb202a81960bfbe3a02d97e6d3fa62b821556463084ffb131", + "sha256:6aac94ff957b5dea0216af71ab59c602e1b947b394e4f5e878a5a65643090038", + "sha256:889934aa8d72b6bfc46babd1dc4b817a56c97ec0f4a10ae7551fb60ab1f96fae", + "sha256:a00550757fca1b9cbc479f8eb1cf3514dbc0103b3f76eae46341c26ddcca67a9", + "sha256:a4a2d6ed0515c05afd5cc435361ced0baabd9ba4536ddfe8ad9a95bcb702c8ce", + "sha256:a8dd92fd76a61af2abc8ccad0c6c6069b3c4ebd4727ecc9a7c33aae37651c8c7", + "sha256:ab81f9ff3e3c2ca65e824454214c10985a846cd9bee5f4d04e15cd875d9fe13b", + "sha256:ac10196b8cde7a082e4e371ff171407270d3337c8d57ed43030094eb01d9c95c", + "sha256:b767930af686551dc96a5eb70af3736709d547ffa275c11a5e820bfb3ae61d8d", + "sha256:b9a1f4d256b81f59ba87bb7a29b9b38b1c018e052dba60a543cb0ddb5062d159", + "sha256:ba94c08321b5d345100fc64eb1ab235f42faf9aabba805cface55ebe677f1c2c", + "sha256:bab71f73001cd15723c4e2ca398f2f48e0a3f584c619eefddb1525e8986e06eb", + "sha256:bce5cf2b0f0b29680396c5c98ab39a011bd70f2dfa8b8a6811a69ee6d920cf9f", + "sha256:c02e514c72e745e49a3ae7e672a1018ba9b68460c21e0361054e956e5d595bc6", + "sha256:c3fb459ced6c5e3b2a895f23f1400f93e9b24d85c30fbe2d637d4f7706a1116b", + "sha256:cd31ab223e43ac64fd23f8f5dad249addadac2a459f040546200acbf7e84e353", + "sha256:ce70aa089ec589b5d5fab388af9f8c9f9dfe8fe4ad844820a92eb240d8628ddf", + "sha256:d47b2e1ad1429da9aa459ef189fbcd8a74ec28a16bc4c3f5f3cf3f88e36535eb", + "sha256:d61bad421c1f496f9fb6114dbd7c30a1dac0e9ff90e9be06f4472cbd8f7a1704", + "sha256:d7ba2e5cb119eddbc10874b41047ad99525e39e397f7aef500e6da0d6f46ab91", + "sha256:dde0ab052c7a1deee8d13d72c37f2afecee30ebdf6eb139790157eaddf04dd61", + "sha256:df34b52aa50a38d7a79f3abc9fda7e400791447aa0400ed895f275f6d8b0bb1f", + "sha256:e0fc20e6e6b298861035a5fc5dcf9fbaa0546318e8bda81112591861a7dcc28f", + "sha256:e20d5e8dc76b73db9280464d6e81bea05e51a99f4d4dd29c5f78dc79f294a5d3", + "sha256:e31d1a33dc9006b278f72cb0aacfe397606c2693aa2fdc0c2f2dcddbad9e0b53", + "sha256:e3a99f890f2cc5535e1b3a90049c6ca9ff9da9ec251cc130c8d269997f9d32ee", + "sha256:e7b192c3df761d0fdd17c2d42d41c28460f124f5922e8bd524018f1d35610682", + "sha256:ed0f4fad4c3656e34d20323a789b6a2d210a6bb82647d9c86dded372f55c58a1", + "sha256:f34ec09702be907727fd479046193725441aaaf7ed4636ca042734f469bb7451", + "sha256:f3530c0ec1fc98c43d5b7061781a8c55bd0db44f789f8152e19d9526cbed6021", + "sha256:f5672082576d0e9f52fa0fa732ff57254d65faeb4a471bc339fe54b58b3e79d2", + "sha256:ffb9f8969789771e95d3c982a36be81f0adfaa7302a1d56e29f168ca15e284b8" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.0.2" + "markers": "python_version >= '3.7'", + "version": "==3.0.0a1" }, "hendrix": { "hashes": [ @@ -2989,19 +3011,19 @@ }, "hexbytes": { "hashes": [ - "sha256:21c3a5bd00a383097f0369c387174e79839d75c4ccc3a7edda315c9644f4458a", - "sha256:afeebfb800f5f15a3ca5bab52e49eabcb4b6dac06ec8ff01a94fdb890c6c0712" + "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59", + "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.3.0" + "version": "==0.3.1" }, "humanize": { "hashes": [ - "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50", - "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916" + "sha256:8bc9e2bb9315e61ec06bf690151ae35aeb65651ab091266941edf97c90836404", + "sha256:9783373bf1eec713a770ecaa7c2d7a7902c98398009dfa3d8a2df91eec9311e8" ], - "markers": "python_version >= '3.7'", - "version": "==4.6.0" + "markers": "python_version >= '3.8'", + "version": "==4.8.0" }, "hyperlink": { "hashes": [ @@ -3012,19 +3034,19 @@ }, "hypothesis": { "hashes": [ - "sha256:034f73dd485933b0f4c319d7c3c58230492fdd7b16e821d67d150a78138adb93", - "sha256:526657eb3e4f2076b0383f722b2e6a92fd15d1d42db532decae8c41b14cab801" + "sha256:229af1b2a9cbe291d5f984f1e08fca9c5ee71487d4e74fd74e912ae1743fe0b5", + "sha256:427e4bfd3dee94bc6bbc3a51c0b17f0d06d5bb966e944e03daee894e70ef3920" ], - "markers": "python_version >= '3.7'", - "version": "==6.76.0" + "markers": "python_version >= '3.8'", + "version": "==6.83.0" }, "identify": { "hashes": [ - "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4", - "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d" + "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733", + "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba" ], - "markers": "python_version >= '3.7'", - "version": "==2.5.24" + "markers": "python_version >= '3.8'", + "version": "==2.5.27" }, "idna": { "hashes": [ @@ -3036,102 +3058,102 @@ }, "ijson": { "hashes": [ - "sha256:00594ed3ef2218fee8c652d9e7f862fb39f8251b67c6379ef12f7e044bf6bbf3", - "sha256:03dfd4c8ed19e704d04b0ad4f34f598dc569fd3f73089f80eed698e7f6069233", - "sha256:09fe3a53e00c59de33b825ba8d6d39f544a7d7180983cd3d6bd2c3794ae35442", - "sha256:0eb838b4e4360e65c00aa13c78b35afc2477759d423b602b60335af5bed3de5b", - "sha256:11bb84a53c37e227e733c6dffad2037391cf0b3474bff78596dc4373b02008a0", - "sha256:11dfd64633fe1382c4237477ac3836f682ca17e25e0d0799e84737795b0611df", - "sha256:1302dc6490da7d44c3a76a5f0b87d8bec9f918454c6d6e6bf4ed922e47da58bb", - "sha256:13f2939db983327dd0492f6c1c0e77be3f2cbf9b620c92c7547d1d2cd6ef0486", - "sha256:158494bfe89ccb32618d0e53b471364080ceb975462ec464d9f9f37d9832b653", - "sha256:183841b8d033ca95457f61fb0719185dc7f51a616070bdf1dcaf03473bed05b2", - "sha256:1a75cfb34217b41136b714985be645f12269e4345da35d7b48aabd317c82fd10", - "sha256:1d64ffaab1d006a4fa9584a4c723e95cc9609bf6c3365478e250cd0bffaaadf3", - "sha256:25919b444426f58dcc62f763d1c6be6297f309da85ecab55f51da6ca86fc9fdf", - "sha256:26b57838e712b8852c40ec6d74c6de8bb226446440e1af1354c077a6f81b9142", - "sha256:27409ba44cfd006901971063d37699f72e092b5efaa1586288b5067d80c6b5bd", - "sha256:2d50b2ad9c6c51ca160aa60de7f4dacd1357c38d0e503f51aed95c1c1945ff53", - "sha256:2f204f6d4cedeb28326c230a0b046968b5263c234c65a5b18cee22865800fff7", - "sha256:2f9d449f86f8971c24609e319811f7f3b6b734f0218c4a0e799debe19300d15b", - "sha256:3b21b1ecd20ed2f918f6f99cdfa68284a416c0f015ffa64b68fa933df1b24d40", - "sha256:3ccc4d4b947549f9c431651c02b95ef571412c78f88ded198612a41d5c5701a0", - "sha256:41e955e173f77f54337fecaaa58a35c464b75e232b1f939b282497134a4d4f0e", - "sha256:424232c2bf3e8181f1b572db92c179c2376b57eba9fc8931453fba975f48cb80", - "sha256:434e57e7ec5c334ccb0e67bb4d9e60c264dcb2a3843713dbeb12cb19fe42a668", - "sha256:47a56e3628c227081a2aa58569cbf2af378bad8af648aa904080e87cd6644cfb", - "sha256:4d4e143908f47307042c9678803d27706e0e2099d0a6c1988c6cae1da07760bf", - "sha256:4e7c4fdc7d24747c8cc7d528c145afda4de23210bf4054bd98cd63bf07e4882d", - "sha256:51c1db80d7791fb761ad9a6c70f521acd2c4b0e5afa2fe0d813beb2140d16c37", - "sha256:5242cb2313ba3ece307b426efa56424ac13cc291c36f292b501d412a98ad0703", - "sha256:535665a77408b6bea56eb828806fae125846dff2e2e0ed4cb2e0a8e36244d753", - "sha256:535a59d61b9aef6fc2a3d01564c1151e38e5a44b92cd6583cb4e8ccf0f58043f", - "sha256:53f1a13eb99ab514c562869513172135d4b55a914b344e6518ba09ad3ef1e503", - "sha256:5418066666b25b05f2b8ae2698408daa0afa68f07b0b217f2ab24465b7e9cbd9", - "sha256:56500dac8f52989ef7c0075257a8b471cbea8ef77f1044822742b3cbf2246e8b", - "sha256:5809752045ef74c26adf159ed03df7fb7e7a8d656992fd7562663ed47d6d39d9", - "sha256:5c93ae4d49d8cf8accfedc8a8e7815851f56ceb6e399b0c186754a68fed22844", - "sha256:5d365df54d18076f1d5f2ffb1eef2ac7f0d067789838f13d393b5586fbb77b02", - "sha256:6def9ac8d73b76cb02e9e9837763f27f71e5e67ec0afae5f1f4cf8f61c39b1ac", - "sha256:6ee9537e8a8aa15dd2d0912737aeb6265e781e74f7f7cad8165048fcb5f39230", - "sha256:6eed1ddd3147de49226db4f213851cf7860493a7b6c7bd5e62516941c007094c", - "sha256:6fd55f7a46429de95383fc0d0158c1bfb798e976d59d52830337343c2d9bda5c", - "sha256:775444a3b647350158d0b3c6c39c88b4a0995643a076cb104bf25042c9aedcf8", - "sha256:79b94662c2e9d366ab362c2c5858097eae0da100dea0dfd340db09ab28c8d5e8", - "sha256:7e0d1713a9074a7677eb8e43f424b731589d1c689d4676e2f57a5ce59d089e89", - "sha256:80a5bd7e9923cab200701f67ad2372104328b99ddf249dbbe8834102c852d316", - "sha256:830de03f391f7e72b8587bb178c22d534da31153e9ee4234d54ef82cde5ace5e", - "sha256:84eed88177f6c243c52b280cb094f751de600d98d2221e0dec331920894889ec", - "sha256:8f20072376e338af0e51ccecb02335b4e242d55a9218a640f545be7fc64cca99", - "sha256:93aaec00cbde65c192f15c21f3ee44d2ab0c11eb1a35020b5c4c2676f7fe01d0", - "sha256:9829a17f6f78d7f4d0aeff28c126926a1e5f86828ebb60d6a0acfa0d08457f9f", - "sha256:986a0347fe19e5117a5241276b72add570839e5bcdc7a6dac4b538c5928eeff5", - "sha256:992e9e68003df32e2aa0f31eb82c0a94f21286203ab2f2b2c666410e17b59d2f", - "sha256:9ecbf85a6d73fc72f6534c38f7d92ed15d212e29e0dbe9810a465d61c8a66d23", - "sha256:a340413a9bf307fafd99254a4dd4ac6c567b91a205bf896dde18888315fd7fcd", - "sha256:a4465c90b25ca7903410fabe4145e7b45493295cc3b84ec1216653fbe9021276", - "sha256:a7698bc480df76073067017f73ba4139dbaae20f7a6c9a0c7855b9c5e9a62124", - "sha256:a8af68fe579f6f0b9a8b3f033d10caacfed6a4b89b8c7a1d9478a8f5d8aba4a1", - "sha256:a8c84dff2d60ae06d5280ec87cd63050bbd74a90c02bfc7c390c803cfc8ac8fc", - "sha256:b3456cd5b16ec9db3ef23dd27f37bf5a14f765e8272e9af3e3de9ee9a4cba867", - "sha256:b3bdd2e12d9b9a18713dd6f3c5ef3734fdab25b79b177054ba9e35ecc746cb6e", - "sha256:b3c6cf18b61b94db9590f86af0dd60edbccb36e151643152b8688066f677fbc9", - "sha256:b3e8d46c1004afcf2bf513a8fb575ee2ec3d8009a2668566b5926a2dcf7f1a45", - "sha256:bced6cd5b09d4d002dda9f37292dd58d26eb1c4d0d179b820d3708d776300bb4", - "sha256:bed8dcb7dbfdb98e647ad47676045e0891f610d38095dcfdae468e1e1efb2766", - "sha256:c85892d68895ba7a0b16a0e6b7d9f9a0e30e86f2b1e0f6986243473ba8735432", - "sha256:c8646eb81eec559d7d8b1e51a5087299d06ecab3bc7da54c01f7df94350df135", - "sha256:cd0450e76b9c629b7f86e7d5b91b7cc9c281dd719630160a992b19a856f7bdbd", - "sha256:ce4be2beece2629bd24bcab147741d1532bd5ed40fb52f2b4fcde5c5bf606df0", - "sha256:d3e255ef05b434f20fc9d4b18ea15733d1038bec3e4960d772b06216fa79e82d", - "sha256:dcec67fc15e5978ad286e8cc2a3f9347076e28e0e01673b5ace18c73da64e3ff", - "sha256:e97e6e07851cefe7baa41f1ebf5c0899d2d00d94bfef59825752e4c784bebbe8", - "sha256:eb167ee21d9c413d6b0ab65ec12f3e7ea0122879da8b3569fa1063526f9f03a8", - "sha256:efee1e9b4f691e1086730f3010e31c55625bc2e0f7db292a38a2cdf2774c2e13", - "sha256:f349bee14d0a4a72ba41e1b1cce52af324ebf704f5066c09e3dd04cfa6f545f0", - "sha256:f470f3d750e00df86e03254fdcb422d2f726f4fb3a0d8eeee35e81343985e58a", - "sha256:f6464242f7895268d3086d7829ef031b05c77870dad1e13e51ef79d0a9cfe029", - "sha256:f6785ba0f65eb64b1ce3b7fcfec101085faf98f4e77b234f14287fd4138ffb25", - "sha256:fd218b338ac68213c997d4c88437c0e726f16d301616bf837e1468901934042c", - "sha256:fe7f414edd69dd9199b0dfffa0ada22f23d8009e10fe2a719e0993b7dcc2e6e2" - ], - "version": "==3.2.0.post0" + "sha256:06f9707da06a19b01013f8c65bf67db523662a9b4a4ff027e946e66c261f17f0", + "sha256:0974444c1f416e19de1e9f567a4560890095e71e81623c509feff642114c1e53", + "sha256:0a4ae076bf97b0430e4e16c9cb635a6b773904aec45ed8dcbc9b17211b8569ba", + "sha256:0b9d1141cfd1e6d6643aa0b4876730d0d28371815ce846d2e4e84a2d4f471cf3", + "sha256:0e0243d166d11a2a47c17c7e885debf3b19ed136be2af1f5d1c34212850236ac", + "sha256:10294e9bf89cb713da05bc4790bdff616610432db561964827074898e174f917", + "sha256:1844c5b57da21466f255a0aeddf89049e730d7f3dfc4d750f0e65c36e6a61a7c", + "sha256:211124cff9d9d139dd0dfced356f1472860352c055d2481459038b8205d7d742", + "sha256:2a80c0bb1053055d1599e44dc1396f713e8b3407000e6390add72d49633ff3bb", + "sha256:2cc04fc0a22bb945cd179f614845c8b5106c0b3939ee0d84ce67c7a61ac1a936", + "sha256:2ec3e5ff2515f1c40ef6a94983158e172f004cd643b9e4b5302017139b6c96e4", + "sha256:35194e0b8a2bda12b4096e2e792efa5d4801a0abb950c48ade351d479cd22ba5", + "sha256:396338a655fb9af4ac59dd09c189885b51fa0eefc84d35408662031023c110d1", + "sha256:39f551a6fbeed4433c85269c7c8778e2aaea2501d7ebcb65b38f556030642c17", + "sha256:3b14d322fec0de7af16f3ef920bf282f0dd747200b69e0b9628117f381b7775b", + "sha256:3c0d526ccb335c3c13063c273637d8611f32970603dfb182177b232d01f14c23", + "sha256:3dcc33ee56f92a77f48776014ddb47af67c33dda361e84371153c4f1ed4434e1", + "sha256:4252e48c95cd8ceefc2caade310559ab61c37d82dfa045928ed05328eb5b5f65", + "sha256:455d7d3b7a6aacfb8ab1ebcaf697eedf5be66e044eac32508fccdc633d995f0e", + "sha256:46bafb1b9959872a1f946f8dd9c6f1a30a970fc05b7bfae8579da3f1f988e598", + "sha256:4a3a6a2fbbe7550ffe52d151cf76065e6b89cfb3e9d0463e49a7e322a25d0426", + "sha256:4b2ec8c2a3f1742cbd5f36b65e192028e541b5fd8c7fd97c1fc0ca6c427c704a", + "sha256:4fc35d569eff3afa76bfecf533f818ecb9390105be257f3f83c03204661ace70", + "sha256:545a30b3659df2a3481593d30d60491d1594bc8005f99600e1bba647bb44cbb5", + "sha256:644f4f03349ff2731fd515afd1c91b9e439e90c9f8c28292251834154edbffca", + "sha256:674e585361c702fad050ab4c153fd168dc30f5980ef42b64400bc84d194e662d", + "sha256:6a4db2f7fb9acfb855c9ae1aae602e4648dd1f88804a0d5cfb78c3639bcf156c", + "sha256:6bd3e7e91d031f1e8cea7ce53f704ab74e61e505e8072467e092172422728b22", + "sha256:6c32c18a934c1dc8917455b0ce478fd7a26c50c364bd52c5a4fb0fc6bb516af7", + "sha256:6f662dc44362a53af3084d3765bb01cd7b4734d1f484a6095cad4cb0cbfe5374", + "sha256:713a919e0220ac44dab12b5fed74f9130f3480e55e90f9d80f58de129ea24f83", + "sha256:7596b42f38c3dcf9d434dddd50f46aeb28e96f891444c2b4b1266304a19a2c09", + "sha256:7851a341429b12d4527ca507097c959659baf5106c7074d15c17c387719ffbcd", + "sha256:7b8064a85ec1b0beda7dd028e887f7112670d574db606f68006c72dd0bb0e0e2", + "sha256:7ce4c70c23521179d6da842bb9bc2e36bb9fad1e0187e35423ff0f282890c9ca", + "sha256:7dc357da4b4ebd8903e77dbcc3ce0555ee29ebe0747c3c7f56adda423df8ec89", + "sha256:81815b4184b85ce124bfc4c446d5f5e5e643fc119771c5916f035220ada29974", + "sha256:85afdb3f3a5d0011584d4fa8e6dccc5936be51c27e84cd2882fe904ca3bd04c5", + "sha256:86b3c91fdcb8ffb30556c9669930f02b7642de58ca2987845b04f0d7fe46d9a8", + "sha256:904f77dd3d87736ff668884fe5197a184748eb0c3e302ded61706501d0327465", + "sha256:916acdc5e504f8b66c3e287ada5d4b39a3275fc1f2013c4b05d1ab9933671a6c", + "sha256:923131f5153c70936e8bd2dd9dcfcff43c67a3d1c789e9c96724747423c173eb", + "sha256:92dc4d48e9f6a271292d6079e9fcdce33c83d1acf11e6e12696fb05c5889fe74", + "sha256:96190d59f015b5a2af388a98446e411f58ecc6a93934e036daa75f75d02386a0", + "sha256:9680e37a10fedb3eab24a4a7e749d8a73f26f1a4c901430e7aa81b5da15f7307", + "sha256:98c6799925a5d1988da4cd68879b8eeab52c6e029acc45e03abb7921a4715c4b", + "sha256:9c2a12dcdb6fa28f333bf10b3a0f80ec70bc45280d8435be7e19696fab2bc706", + "sha256:9e0a27db6454edd6013d40a956d008361aac5bff375a9c04ab11fc8c214250b5", + "sha256:a4d7fe3629de3ecb088bff6dfe25f77be3e8261ed53d5e244717e266f8544305", + "sha256:a729b0c8fb935481afe3cf7e0dadd0da3a69cc7f145dbab8502e2f1e01d85a7c", + "sha256:ab4db9fee0138b60e31b3c02fff8a4c28d7b152040553b6a91b60354aebd4b02", + "sha256:b49fd5fe1cd9c1c8caf6c59f82b08117dd6bea2ec45b641594e25948f48f4169", + "sha256:b4eb2304573c9fdf448d3fa4a4fdcb727b93002b5c5c56c14a5ffbbc39f64ae4", + "sha256:ba33c764afa9ecef62801ba7ac0319268a7526f50f7601370d9f8f04e77fc02b", + "sha256:bcc51c84bb220ac330122468fe526a7777faa6464e3b04c15b476761beea424f", + "sha256:be8495f7c13fa1f622a2c6b64e79ac63965b89caf664cc4e701c335c652d15f2", + "sha256:c1a4b8eb69b6d7b4e94170aa991efad75ba156b05f0de2a6cd84f991def12ff9", + "sha256:c63f3d57dbbac56cead05b12b81e8e1e259f14ce7f233a8cbe7fa0996733b628", + "sha256:ccd6be56335cbb845f3d3021b1766299c056c70c4c9165fb2fbe2d62258bae3f", + "sha256:cfced0a6ec85916eb8c8e22415b7267ae118eaff2a860c42d2cc1261711d0d31", + "sha256:d052417fd7ce2221114f8d3b58f05a83c1a2b6b99cafe0b86ac9ed5e2fc889df", + "sha256:d1053fb5f0b010ee76ca515e6af36b50d26c1728ad46be12f1f147a835341083", + "sha256:d31e0d771d82def80cd4663a66de277c3b44ba82cd48f630526b52f74663c639", + "sha256:d34e049992d8a46922f96483e96b32ac4c9cffd01a5c33a928e70a283710cd58", + "sha256:d6ea7c7e3ec44742e867c72fd750c6a1e35b112f88a917615332c4476e718d40", + "sha256:db2d6341f9cb538253e7fe23311d59252f124f47165221d3c06a7ed667ecd595", + "sha256:db3bf1b42191b5cc9b6441552fdcb3b583594cb6b19e90d1578b7cbcf80d0fae", + "sha256:e641814793a037175f7ec1b717ebb68f26d89d82cfd66f36e588f32d7e488d5f", + "sha256:e84d27d1acb60d9102728d06b9650e5b7e5cb0631bd6e3dfadba8fb6a80d6c2f", + "sha256:e9fd906f0c38e9f0bfd5365e1bed98d649f506721f76bb1a9baa5d7374f26f19", + "sha256:eaac293853f1342a8d2a45ac1f723c860f700860e7743fb97f7b76356df883a8", + "sha256:eeb286639649fb6bed37997a5e30eefcacddac79476d24128348ec890b2a0ccb", + "sha256:f05ed49f434ce396ddcf99e9fd98245328e99f991283850c309f5e3182211a79", + "sha256:f4bc87e69d1997c6a55fff5ee2af878720801ff6ab1fb3b7f94adda050651e37", + "sha256:f8d54b624629f9903005c58d9321a036c72f5c212701bbb93d1a520ecd15e370", + "sha256:fa8b98be298efbb2588f883f9953113d8a0023ab39abe77fe734b71b46b1220a", + "sha256:fbac4e9609a1086bbad075beb2ceec486a3b138604e12d2059a33ce2cba93051", + "sha256:fd12e42b9cb9c0166559a3ffa276b4f9fc9d5b4c304e5a13668642d34b48b634" + ], + "version": "==3.2.3" }, "importlib-metadata": { "hashes": [ - "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed", - "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705" + "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", + "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" ], - "markers": "python_version >= '3.7'", - "version": "==6.6.0" + "markers": "python_version >= '3.8'", + "version": "==6.8.0" }, "importlib-resources": { "hashes": [ - "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", - "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a" + "sha256:82d5c6cca930697dbbd86c93333bb2c2e72861d4789a11c2662b933e5ad2b528", + "sha256:9f7bd0c97b79972a6cce36a366356d16d5e13b09679c11a58f1014bfdf8e64b2" ], - "markers": "python_version >= '3.7'", - "version": "==5.12.0" + "markers": "python_version >= '3.8'", + "version": "==5.13.0" }, "incremental": { "hashes": [ @@ -3166,11 +3188,11 @@ }, "jedi": { "hashes": [ - "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e", - "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612" + "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4", + "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e" ], "markers": "python_version >= '3.6'", - "version": "==0.18.2" + "version": "==0.19.0" }, "jinja2": { "hashes": [ @@ -3182,19 +3204,19 @@ }, "jsonschema": { "hashes": [ - "sha256:d6a4f48fcecc06e8915c30de13076837b624999167655c4c643b50ed93c0e526", - "sha256:f1eb210cc329f9cc09bd10c5f7a287f5b1538de6d5662ef2528b9f9b428dbd85" + "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb", + "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f" ], "markers": "python_version >= '3.8'", - "version": "==4.18.0a9" + "version": "==4.19.0" }, "jsonschema-specifications": { "hashes": [ - "sha256:1aefc07b022e3b8ce8bec135c78b74ae1ffd260822c67011427192b3a7525e09", - "sha256:51d2972bf690cfe21970f722f878580d863f7c127d200fce671c5dae10b88f5f" + "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", + "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" ], "markers": "python_version >= '3.8'", - "version": "==2023.5.2" + "version": "==2023.7.1" }, "lazyasd": { "hashes": [ @@ -3303,8 +3325,11 @@ "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", @@ -3312,6 +3337,7 @@ "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", @@ -3320,6 +3346,7 @@ "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", @@ -3327,9 +3354,12 @@ "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", @@ -3348,18 +3378,20 @@ "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", - "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" ], "markers": "python_version >= '3.7'", "version": "==2.1.3" }, "marshmallow": { "hashes": [ - "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78", - "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b" + "sha256:5d2371bbe42000f2b3fb5eaa065224df7d8f8597bc19a1bbfa5bfe7fba8da889", + "sha256:684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c" ], - "markers": "python_version >= '3.7'", - "version": "==3.19.0" + "markers": "python_version >= '3.8'", + "version": "==3.20.1" }, "matplotlib-inline": { "hashes": [ @@ -3466,38 +3498,38 @@ }, "msgspec": { "hashes": [ - "sha256:09aad00f25fc8f37bd118554a46c448f028bbf67fb048cd3f09671f634c5315c", - "sha256:0af2ae0f398ffe1b88fd1540d64bd23b490434d632305700aa7e54d90e5fb618", - "sha256:0c0c4706ee200b61b510f76f505e03730abc6fbdd4336f6fdc99538798df7ddc", - "sha256:1016f241013f5569716bb7ae28897bc2f7d72ea1f0120673afa8ceb9823f9fd6", - "sha256:154a790227c32ab66671df48af991b288a97456cc488d21b1eea63f390eae617", - "sha256:18a3870c6348dee8a2f315a7c95219707123550e4fa648b7a2ec9f327e96e46c", - "sha256:1d8104ee7b6babba778c9b73771964189ab0bf95f3fe513e26425f9b4ff58d10", - "sha256:1d8c6ef247ca5178f161288a46654b88849975e4c24adff9ad7c778f77b0f2e1", - "sha256:217fa8a0eba122401c3fae3d07e1444556447ba3b9d65fc6647421b35430f2e2", - "sha256:2c67ed9bec9da6fc42255f6351fc423447ee535f0c9834b678bb1e049ab37e69", - "sha256:3df96499ec70b714896d9941ae0bd8d1ff267abb39f85f9984e6e7d4e5176863", - "sha256:46e275ad73531b0a8d8c4b36c2f1fd7c286b89545b806e10da8443c8f4b258ca", - "sha256:50ebfe068e6330afcb32bbc6863984175b99c1988a7ede5e8f6f898f5270e815", - "sha256:51b11b0da147348500c54a7be4f804d63accce9c74410e15e994f6ec69177bdc", - "sha256:5f01e7388de0bb2d30ac5dfdce9a63f8643d1bc9657e24efb1f7e2ffdf70732b", - "sha256:5fc1971fb06ba4a282a7dd5c7dab95d53c7785203d1f9100a0b8ade041605714", - "sha256:6652d4152091266150ba238ba674db59a2349c0b3548401c9881f3702d6ee6fc", - "sha256:7afb2719019c8e304c7abc6c30d3f0516f43ace563a0b223805de19ae500cbab", - "sha256:80d753014680dfdf4a8f8a133f6e6a64e4a8f16f1722652512277a360ee9e66c", - "sha256:8d288240680f3e0153a735f411a22ae16e47498d501b4dfa0434a1f888173b26", - "sha256:9074e743f538297a30ee043b5cd31c6fcd4d99a1995f619c01137d83ec0e5963", - "sha256:9e95dec734d2b8efaf8c9a3bbb6e162336c9b3ffc58a2b34001c05a0f6e8e581", - "sha256:a515af7c8b25e7f38475f91d7b733c711d128dbe7febb9fa3621d8386893cae6", - "sha256:ba8744d0f51f5a169c28545e98087c10039d7ee93c92f97209f7ec69a926470a", - "sha256:cd1ae653ad3e3914dafa11156243e92a594e2c916a19dbbcf72102a1bef812c2", - "sha256:d365daaa42e8a42691046d0eead11ffc26ff1e72b0eb291488ddd2cd5e642513", - "sha256:d4edb271657402cb31935d573b176f088fa2b77abf5aa8c4e2dceaf113bf5970", - "sha256:e0b6ef1a716f9232ca9d9934ef06bd0fd3dc2ace5df7b96fa7971d1d72ec15cc", - "sha256:ef239496d2d75d94ac89a54016e92c94d7486d19a4ab9dca7f11f8a837cccdb3" + "sha256:1535855b0db1bee4e5c79384010861de2a23391b45095785e84ec9489abc56cd", + "sha256:23e65efaef864bf66a4ddfae9c2200c40ce1a50411f454de1757f3651e5762cd", + "sha256:25f7e3adaf1ca5d80455057576785069475b1d941eb877dbd0ae738cc5d1fefa", + "sha256:2ad4f4704045a0fb1b5226769d9cdc00a4a69adec2e6770064f3db73bb91bbf9", + "sha256:35420ae8afaa90498733541c0d8b2a73c70548a8a4d86da11201ed6df557e98f", + "sha256:358c2b908f1ed63419ccc5f185150c0caa3fc49599f4582504637cbfd5ff6242", + "sha256:3996bf1fc252658a7e028a0c263d28ac4dc48476e35f6fd8ebaf461a39459825", + "sha256:3bfc55d5ca60b3aa2c2287191aa9e943c54eb0aef16d4babb92fddcc047093b1", + "sha256:3f71c33efda990ecddc878ea2bb37f22e941d4264ded83e1b2309f86d335cde7", + "sha256:4c1ee8b9667fde3b5d7e0e0b555a8b70e2fa7bf2e02e9e8673af262c82c7b691", + "sha256:595f14f628825d9d79eeea6e08514144a3d516eb014f0c6191f91899c83a6836", + "sha256:70fa7f008008e2c823ecc1a143258bb2820ac76010cf6003091fa3832b6334c9", + "sha256:78a593bc0db95416d633b28cff00af0465f04590d53ff1a80a33d7e2728820ad", + "sha256:7b065995f3a41e4c8274a86e1ee84ac432969918373c777de239ef14f9537d80", + "sha256:80e57102469ee0d2186c72d42fa9460981ccd4252bdb997bf04ef2af0818984f", + "sha256:84cc7932f78aeec6ef014cca4bb4ecea8469bc05f13c9eacdfa27baa785e54b9", + "sha256:84fcf74b6371494aa536bf438ef96b08ce8f6e40483a01ed305535a40113136b", + "sha256:a75c4efa7565048f81e709a366e14b9dc10752b3fb5ea1f3c8de5abfca3db3c2", + "sha256:abcb92ffbca77bcfbedd5b29b68629628948982aafb994658e7abfad6e15913c", + "sha256:ade3959577bff46c7d9476962d2d7aa086b2820f3da03ee000e9be4958404829", + "sha256:b56cc7b9956daefb309447bbbb2581c84e5d5e3b89d573b1d5a25647522d2e43", + "sha256:b90a44550f19ee0b8c37dbca75f96473299275001af2a00273d736b7347ead6d", + "sha256:b9b3ed82f71816cddf0a9cdaae30a1d1addf8fe56ec09e7368db93ce43b29a81", + "sha256:baaba2411003f2e7a4328b5a58eba9efeb4c5e6a27e8ffd2adaccdc8feb0a805", + "sha256:c79ac853409b0000727f4c3e5fb32fe38122ad94b9e074f992fa9ea7f00eb498", + "sha256:ccaddb764b5abe457c0eded4a252f5fbeb8b04a946b46a06a7e6ca299c35dcb1", + "sha256:d127bf90f29f1211520f1baa897b10f2a9c05b8648ce7dc89dfc9ca45599be53", + "sha256:e03ff009f3a2e1fe883703f98098d12aea6b30934707b404fd994e9ea1c1bfa7", + "sha256:eb80befd343f3b378c8abad0367154703c74bde02fc62cbcf1a0e6b5fa779459" ], "markers": "python_version >= '3.8'", - "version": "==0.15.1" + "version": "==0.18.2" }, "multidict": { "hashes": [ @@ -3579,10 +3611,11 @@ }, "mypy-extensions": { "hashes": [ - "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd" + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" ], - "markers": "python_version >= '2.7'", - "version": "==0.4.4" + "markers": "python_version >= '3.5'", + "version": "==1.0.0" }, "nodeenv": { "hashes": [ @@ -3593,64 +3626,64 @@ "version": "==1.8.0" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "788073d93cdc5a94568e004a6f7b7bf342b1805d" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "c92302dbbed84854a413d4f3177fdb244c62822c" }, "nucypher-core": { "hashes": [ - "sha256:006760a1d0dbed873d1869040e2649d6b1e47221bc1ed34bf9615b0f8b7a268a", - "sha256:3bbd8b0fad751bcdf962598a284e02b1888186f9720216b72ebb891bcaabd88f", - "sha256:587014fb85aece07f74ed33617fec27f14a512733d989c828e7be248bc3c0242", - "sha256:5a01c175d4d2f7bb2e0b783dd3ffc578144c19eacb4567ecd8a8408c1de99e73", - "sha256:881c36f78fdd0924c7342d42819a8ca15f2ec7bdb1a48574cfd5d12d491eafd0", - "sha256:901aaafaefae7bb1b5b1057c1623f08b3ca7d1490b2e1aec8fc8f566d1464c0b", - "sha256:9b91c2efcf6fd2720e787e67f4a7f702bdc5b464adfc6c3b78ba4113547de781", - "sha256:a27125276713ea318fe5e0430e8a6a8a7dc36273753e5dae4f35f3572390f47c", - "sha256:ad80b5406a9f027f04c5beacc4dbc5c1b6faa77892ea4156c5cda592f6d33c72", - "sha256:bee4bd79d1a0be2addb4eb208667fb8dbb694b31ea8254c56d3759af361a7bc0", - "sha256:c9821eac0c76a31d9a04884e40e1d9e1322319e3169b7e6f88d2d0710efe8eaf", - "sha256:ca267e5f93ad1223f88af3487730e76f65d92b1924909a86db784fdd2353eef8", - "sha256:df06185557fab138733fbf357961ca43312bef9ac35f88c4b97347d8491daef1", - "sha256:e361ca221c4978ce5ede9a7cbcc57e5bc7f35f3accc64b3e15b6f90c56c88bd5", - "sha256:e98f55bc1a994153689c596cb2d317f1cfe0fb2ae5ff2c0811a2364d9b098877", - "sha256:e9f8885b7f4d84c75d111b202c05f9044606f25588a8fd5558011e3cbc37572d" + "sha256:1db0b61cb3974eb1269283e193e3d6fb7abbc572e64b57f2952cf7008782574e", + "sha256:21c0b01a59621302a5b1e9cfe2ec107066ff10e3776664143fd2b994eab52359", + "sha256:42220d3c7be16ff32d0cf3a44f96d13ab61dd2ea2d69154341a163f129c13fee", + "sha256:63779e467c6012fa8b2bc0cfdddc4091d516593b08ad5b79b7f7b2022064c298", + "sha256:706991adc220b65d6e46a0d3d1f39021fbe8c7a5fd7a819aa1f2ca494ca779ab", + "sha256:7fba3befa5713975af5a5172b35832502078b74bb85d99be450bb1334e744297", + "sha256:8cb5718bc7511265f9721c342d703b2343bf6aa7091a0cc4463046f1edf35496", + "sha256:92767dcdef27a7697d155bd56dd408bfd290705bac7f299a0a62089b7883ed11", + "sha256:9df6f21de95add612c5b07dea88704023ad6dcb76cc93affdd30caaf3b841433", + "sha256:a10cbe550597561fde8c5d211998d34d259fff88ae5b42845c28bb48ef07ad8f", + "sha256:afa30ce0d4f5b874d512f38da996f896980172f6d0b9c6ebddd55b8bd262e5e5", + "sha256:b51017b852870235decba18c0d32bba42bedea2b67a09b3c0ef0a3dd18759ab6", + "sha256:b602880eadf8a12b8477a8d5b6ff041ad1200eca330b9c49e03e984808be932b", + "sha256:d903768cd804f84674c1ceb1f8631fb93d753b2545f9685ddbdc78603b603d48", + "sha256:f2e69196f93fa66409b97b641ab43723da55d1a30efed4dc30d646b6823e52ce", + "sha256:fcf17020e8037c09166d2c748514dbcc5b4a8bd3201c9cdaa951768930980a8a" ], "index": "pypi", - "version": "==0.11.0" + "version": "==0.12.0" }, "numpy": { "hashes": [ - "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187", - "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812", - "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7", - "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4", - "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6", - "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0", - "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4", - "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570", - "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4", - "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f", - "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80", - "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289", - "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385", - "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078", - "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c", - "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463", - "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3", - "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950", - "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155", - "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7", - "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c", - "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096", - "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17", - "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf", - "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4", - "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02", - "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c", - "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b" + "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f", + "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61", + "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7", + "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400", + "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef", + "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2", + "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d", + "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc", + "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835", + "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706", + "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5", + "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4", + "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6", + "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463", + "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a", + "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f", + "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e", + "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e", + "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694", + "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8", + "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64", + "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d", + "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc", + "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254", + "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2", + "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1", + "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", + "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" ], "markers": "python_version >= '3.8'", - "version": "==1.24.3" + "version": "==1.24.4" }, "packaging": { "hashes": [ @@ -3785,27 +3818,27 @@ }, "platformdirs": { "hashes": [ - "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f", - "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5" + "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", + "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" ], "markers": "python_version >= '3.7'", - "version": "==3.5.1" + "version": "==3.10.0" }, "pluggy": { "hashes": [ - "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", - "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", + "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" + "markers": "python_version >= '3.8'", + "version": "==1.3.0" }, "pre-commit": { "hashes": [ - "sha256:66e37bec2d882de1f17f88075047ef8962581f83c234ac08da21a0c58953d1f0", - "sha256:8056bc52181efadf4aac792b1f4f255dfd2fb5a350ded7335d251a68561e8cb6" + "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb", + "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023" ], "index": "pypi", - "version": "==3.3.2" + "version": "==3.3.3" }, "prometheus-client": { "hashes": [ @@ -3817,30 +3850,30 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b", - "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f" + "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", + "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.0.38" + "version": "==3.0.39" }, "protobuf": { "hashes": [ - "sha256:09310bce43353b46d73ba7e3bca78273b9bc50349509b9698e64d288c6372c2a", - "sha256:20874e7ca4436f683b64ebdbee2129a5a2c301579a67d1a7dda2cdf62fb7f5f7", - "sha256:25e3370eda26469b58b602e29dff069cfaae8eaa0ef4550039cc5ef8dc004511", - "sha256:281342ea5eb631c86697e1e048cb7e73b8a4e85f3299a128c116f05f5c668f8f", - "sha256:384dd44cb4c43f2ccddd3645389a23ae61aeb8cfa15ca3a0f60e7c3ea09b28b3", - "sha256:54a533b971288af3b9926e53850c7eb186886c0c84e61daa8444385a4720297f", - "sha256:6c081863c379bb1741be8f8193e893511312b1d7329b4a75445d1ea9955be69e", - "sha256:86df87016d290143c7ce3be3ad52d055714ebaebb57cc659c387e76cfacd81aa", - "sha256:8da6070310d634c99c0db7df48f10da495cc283fd9e9234877f0cd182d43ab7f", - "sha256:b2cfab63a230b39ae603834718db74ac11e52bccaaf19bf20f5cce1a84cf76df", - "sha256:c52cfcbfba8eb791255edd675c1fe6056f723bf832fa67f0442218f8817c076e", - "sha256:ce744938406de1e64b91410f473736e815f28c3b71201302612a68bf01517fea", - "sha256:efabbbbac1ab519a514579ba9ec52f006c28ae19d97915951f69fa70da2c9e91" + "sha256:237b9a50bd3b7307d0d834c1b0eb1a6cd47d3f4c2da840802cd03ea288ae8880", + "sha256:25ae91d21e3ce8d874211110c2f7edd6384816fb44e06b2867afe35139e1fd1c", + "sha256:2b23bd6e06445699b12f525f3e92a916f2dcf45ffba441026357dea7fa46f42b", + "sha256:3b7b170d3491ceed33f723bbf2d5a260f8a4e23843799a3906f16ef736ef251e", + "sha256:4e69965e7e54de4db989289a9b971a099e626f6167a9351e9d112221fc691bc1", + "sha256:58e12d2c1aa428ece2281cef09bbaa6938b083bcda606db3da4e02e991a0d924", + "sha256:6bd26c1fa9038b26c5c044ee77e0ecb18463e957fefbaeb81a3feb419313a54e", + "sha256:77700b55ba41144fc64828e02afb41901b42497b8217b558e4a001f18a85f2e3", + "sha256:7fda70797ddec31ddfa3576cbdcc3ddbb6b3078b737a1a87ab9136af0570cd6e", + "sha256:839952e759fc40b5d46be319a265cf94920174d88de31657d5622b5d8d6be5cd", + "sha256:bb7aa97c252279da65584af0456f802bd4b2de429eb945bbc9b3d61a42a8cd16", + "sha256:c00c3c7eb9ad3833806e21e86dca448f46035242a680f81c3fe068ff65e79c74", + "sha256:c5cdd486af081bf752225b26809d2d0a85e575b80a84cde5172a05bbb1990099" ], "markers": "python_version >= '3.7'", - "version": "==4.23.2" + "version": "==4.24.2" }, "ptyprocess": { "hashes": [ @@ -3881,18 +3914,18 @@ }, "py-evm": { "hashes": [ - "sha256:5d23d441a5afe8543e0a90966c61bcce8c6d9d1c9303a536f85d237a264b8e4d", - "sha256:844f1858f9c92633a862de8b466313174fb4d5a67c6e62d3cad3be34587ebddc" + "sha256:1bf7b293faa70c03727358ae3e5cb0abf7282391461d9b52b82decd6ed18c2f7", + "sha256:d40b6ac950485111dc7ad7bd29e3f61e00d5f81dc919e8c2b3afca30f228dc05" ], - "version": "==0.7.0a2" + "version": "==0.7.0a4" }, "py-geth": { "hashes": [ - "sha256:584ba92f227249c65f102f5734e48fc80e48702889e16623d5db2b43ba69a11c", - "sha256:9faca7562912fd1d43ac829b5f19f2055cd94ea49c4532b50699d74d7b8a1782" + "sha256:1eb9c1d05b51133a6961889ec508cdcb19d24d32888704c4e034cae86a3accad", + "sha256:f3563e2de8e78599cb9c69ee5bf3bded858ac6cf59891a04177f2353c425fdb7" ], - "markers": "python_version >= '3'", - "version": "==3.12.0" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==3.13.0" }, "py-multibase": { "hashes": [ @@ -3992,45 +4025,45 @@ }, "pydantic": { "hashes": [ - "sha256:052d8654cb65174d6f9490cc9b9a200083a82cf5c3c5d3985db765757eb3b375", - "sha256:0c6fafa0965b539d7aab0a673a046466d23b86e4b0e8019d25fd53f4df62c277", - "sha256:1243d28e9b05003a89d72e7915fdb26ffd1d39bdd39b00b7dbe4afae4b557f9d", - "sha256:12f7b0bf8553e310e530e9f3a2f5734c68699f42218bf3568ef49cd9b0e44df4", - "sha256:1410275520dfa70effadf4c21811d755e7ef9bb1f1d077a21958153a92c8d9ca", - "sha256:16f8c3e33af1e9bb16c7a91fc7d5fa9fe27298e9f299cff6cb744d89d573d62c", - "sha256:17aef11cc1b997f9d574b91909fed40761e13fac438d72b81f902226a69dac01", - "sha256:191ba419b605f897ede9892f6c56fb182f40a15d309ef0142212200a10af4c18", - "sha256:1952526ba40b220b912cdc43c1c32bcf4a58e3f192fa313ee665916b26befb68", - "sha256:1ced8375969673929809d7f36ad322934c35de4af3b5e5b09ec967c21f9f7887", - "sha256:2e4148e635994d57d834be1182a44bdb07dd867fa3c2d1b37002000646cc5459", - "sha256:34d327c81e68a1ecb52fe9c8d50c8a9b3e90d3c8ad991bfc8f953fb477d42fb4", - "sha256:35db5301b82e8661fa9c505c800d0990bc14e9f36f98932bb1d248c0ac5cada5", - "sha256:3e59417ba8a17265e632af99cc5f35ec309de5980c440c255ab1ca3ae96a3e0e", - "sha256:42aa0c4b5c3025483240a25b09f3c09a189481ddda2ea3a831a9d25f444e03c1", - "sha256:666bdf6066bf6dbc107b30d034615d2627e2121506c555f73f90b54a463d1f33", - "sha256:66a703d1983c675a6e0fed8953b0971c44dba48a929a2000a493c3772eb61a5a", - "sha256:6a82d6cda82258efca32b40040228ecf43a548671cb174a1e81477195ed3ed56", - "sha256:6f2e754d5566f050954727c77f094e01793bcb5725b663bf628fa6743a5a9108", - "sha256:7456eb22ed9aaa24ff3e7b4757da20d9e5ce2a81018c1b3ebd81a0b88a18f3b2", - "sha256:7b1f6cb446470b7ddf86c2e57cd119a24959af2b01e552f60705910663af09a4", - "sha256:7d5b8641c24886d764a74ec541d2fc2c7fb19f6da2a4001e6d580ba4a38f7878", - "sha256:84d80219c3f8d4cad44575e18404099c76851bc924ce5ab1c4c8bb5e2a2227d0", - "sha256:88f195f582851e8db960b4a94c3e3ad25692c1c1539e2552f3df7a9e972ef60e", - "sha256:93e6bcfccbd831894a6a434b0aeb1947f9e70b7468f274154d03d71fabb1d7c6", - "sha256:93e766b4a8226e0708ef243e843105bf124e21331694367f95f4e3b4a92bbb3f", - "sha256:ab523c31e22943713d80d8d342d23b6f6ac4b792a1e54064a8d0cf78fd64e800", - "sha256:bb14388ec45a7a0dc429e87def6396f9e73c8c77818c927b6a60706603d5f2ea", - "sha256:c0ab53b609c11dfc0c060d94335993cc2b95b2150e25583bec37a49b2d6c6c3f", - "sha256:c33b60054b2136aef8cf190cd4c52a3daa20b2263917c49adad20eaf381e823b", - "sha256:ceb6a23bf1ba4b837d0cfe378329ad3f351b5897c8d4914ce95b85fba96da5a1", - "sha256:d532bf00f381bd6bc62cabc7d1372096b75a33bc197a312b03f5838b4fb84edd", - "sha256:df7800cb1984d8f6e249351139667a8c50a379009271ee6236138a22a0c0f319", - "sha256:e82d4566fcd527eae8b244fa952d99f2ca3172b7e97add0b43e2d97ee77f81ab", - "sha256:f90c1e29f447557e9e26afb1c4dbf8768a10cc676e3781b6a577841ade126b85", - "sha256:f9613fadad06b4f3bc5db2653ce2f22e0de84a7c6c293909b48f6ed37b83c61f" + "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", + "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", + "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", + "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", + "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", + "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", + "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", + "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", + "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", + "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", + "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", + "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", + "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", + "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", + "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", + "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", + "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", + "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", + "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", + "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", + "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", + "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", + "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", + "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", + "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", + "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", + "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", + "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", + "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", + "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", + "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", + "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", + "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", + "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", + "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", + "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" ], "markers": "python_version >= '3.7'", - "version": "==1.10.8" + "version": "==1.10.12" }, "pyethash": { "hashes": [ @@ -4040,30 +4073,30 @@ }, "pygithub": { "hashes": [ - "sha256:1e6b1b7afe31f75151fb81f7ab6b984a7188a852bdb123dbb9ae90023c3ce60f", - "sha256:f435884af617c6debaa76cbc355372d1027445a56fbc39972a3b9ed4968badc8" + "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9", + "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217" ], "markers": "python_version >= '3.7'", - "version": "==1.58.2" + "version": "==1.59.1" }, "pygments": { "hashes": [ - "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c", - "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1" + "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", + "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" ], "markers": "python_version >= '3.7'", - "version": "==2.15.1" + "version": "==2.16.1" }, "pyjwt": { "extras": [ "crypto" ], "hashes": [ - "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1", - "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074" + "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", + "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" ], "markers": "python_version >= '3.7'", - "version": "==2.7.0" + "version": "==2.8.0" }, "pynacl": { "hashes": [ @@ -4133,11 +4166,11 @@ }, "pytest-mock": { "hashes": [ - "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b", - "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f" + "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39", + "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f" ], "index": "pypi", - "version": "==3.10.0" + "version": "==3.11.1" }, "pytest-timeout": { "hashes": [ @@ -4176,153 +4209,170 @@ ], "version": "==2023.3" }, + "pyunormalize": { + "hashes": [ + "sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302" + ], + "markers": "python_version >= '3.6'", + "version": "==15.0.0" + }, "pyyaml": { "hashes": [ - "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", - "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", - "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", - "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", - "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", - "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", - "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", - "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", - "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", - "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", - "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", - "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", - "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", - "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", - "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", - "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", - "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", - "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", - "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", - "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", - "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", - "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", - "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", - "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", - "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", - "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", - "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", - "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", - "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", - "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", - "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", - "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", - "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", - "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", - "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", - "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", - "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", - "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", - "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", - "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" ], "markers": "python_version >= '3.6'", - "version": "==6.0" + "version": "==6.0.1" }, "referencing": { "hashes": [ - "sha256:54b64ae36b91827f9f50d05a5af27570a5ca9ba6a1be49809215419d5ab32253", - "sha256:bddd26f8fbb64d153334cca7bc20305c72295e287d84bbf5756afa50efdeb6ae" + "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", + "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" ], "markers": "python_version >= '3.8'", - "version": "==0.29.0" + "version": "==0.30.2" }, "regex": { "hashes": [ - "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938", - "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6", - "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef", - "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525", - "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af", - "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc", - "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54", - "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8", - "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7", - "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568", - "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c", - "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f", - "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536", - "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2", - "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb", - "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df", - "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019", - "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18", - "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f", - "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac", - "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8", - "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9", - "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697", - "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06", - "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d", - "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036", - "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1", - "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787", - "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9", - "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0", - "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7", - "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461", - "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee", - "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3", - "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0", - "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f", - "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14", - "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477", - "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd", - "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16", - "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc", - "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff", - "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd", - "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2", - "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e", - "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef", - "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07", - "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3", - "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3", - "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a", - "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7", - "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa", - "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82", - "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77", - "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222", - "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c", - "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd", - "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d", - "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68", - "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9", - "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693", - "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487", - "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06", - "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591", - "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27", - "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a", - "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969", - "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3", - "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0", - "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7", - "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751", - "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747", - "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289", - "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72", - "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777", - "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9", - "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1", - "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1", - "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e", - "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf", - "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f", - "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd", - "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2", - "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c", - "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1", - "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88", - "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9", - "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23" + "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf", + "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46", + "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18", + "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7", + "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7", + "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9", + "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559", + "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71", + "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280", + "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898", + "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684", + "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3", + "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9", + "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8", + "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca", + "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c", + "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c", + "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab", + "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd", + "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56", + "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586", + "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7", + "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103", + "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac", + "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177", + "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109", + "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033", + "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb", + "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61", + "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800", + "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb", + "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8", + "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570", + "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34", + "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e", + "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4", + "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb", + "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7", + "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208", + "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc", + "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb", + "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3", + "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504", + "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb", + "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57", + "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b", + "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601", + "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116", + "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8", + "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6", + "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6", + "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93", + "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09", + "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a", + "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921", + "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a", + "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495", + "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6", + "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7", + "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236", + "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235", + "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470", + "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b", + "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5", + "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61", + "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c", + "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db", + "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be", + "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96", + "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a", + "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2", + "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63", + "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef", + "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739", + "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e", + "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217", + "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90", + "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4", + "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8", + "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3", + "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357", + "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4", + "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b", + "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882", + "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a", + "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675", + "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", + "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" ], "markers": "python_version >= '3.6'", - "version": "==2023.6.3" + "version": "==2023.8.8" }, "requests": { "hashes": [ @@ -4349,68 +4399,106 @@ }, "rpds-py": { "hashes": [ - "sha256:014828cd68b4cdee84ab66adaf5bfe1f137656a7a588c31fdca04ba0768ef62d", - "sha256:025b8101dbf39d77cf41ac3c737e4c713e0b2728a516443b382e66b9d492ff98", - "sha256:038249d2bbaf91aa65c4108a40ee076f657654261b1a246ab99726710bfb77de", - "sha256:083990eb24bf99a0ae92505b24ab4d4c9110d2569e60437d3c721d8807403471", - "sha256:0bcb162f5549408125ec986bfed1a66f2036ac2910d3fb0a6afda0f97bc6ea15", - "sha256:130cfa21a10a60f5fc8ec59fb5f8b4a649cbc26302c7f487d7798f7969a1e763", - "sha256:18cd993d5b63450abd3a9eab70af4bbecb6d315a5f167ed3b228cba6b5bc18e4", - "sha256:1b6db70c2ab847229fa9cff3a5eb641c33ab3f981ee8b99d326a7deb8989e4ce", - "sha256:2a5c672b1cd382973bf414518ddc9d743d06bcee751fa65256d84ba412192b0b", - "sha256:2f7fe606eb4742f2d2f0ada4e3ee168e809514a39527fce8ee33b2ce908ede00", - "sha256:311a57cc972481bd220af28cf4309141c680a356b2359f163daac030d0c2318d", - "sha256:33a2a15b641bc17bc6574f9600976374a085ff81ac8dddd4bde6c451e9e9e58d", - "sha256:34007442d36980c4aab3f4044c1fd05a736c8ae09d47b8a42112deab5d6b5a10", - "sha256:3a5b0f8c81f89ec23d59733dce9724b244003be2367653e1e53095cf643f8c8b", - "sha256:3c1423f3cddc86b54682d5df905664737300cdf316b1a4fa3056c45b47d44790", - "sha256:453bfdf4a4c618ea24714b6c25bd56d91bfc43c6fd5a34add66c1b92737c5283", - "sha256:453e62d679d8de32c5e00ba27f8c8c45a456e5d6db6fa6f67fdd3e12f1658833", - "sha256:457345279898d5156b9de9986c650847c2ee0b205b1fea3f4fe4e8e9f8fe318e", - "sha256:4b62f9f9bf523f8baea794cc996dc0ba47676bca0517860664e6419f65e533da", - "sha256:51fe912d2356f3a0e63f5557a704407357ee403cb6dbde4f86e339d50a2110b9", - "sha256:5551e5583f341867fb6499d9ca4ce3999209b8e30636c6cf48f204120415dbef", - "sha256:5eda3aba0cd291de9d4bb138db45814bac24bc4c07e0f38b0544374b6104c488", - "sha256:648a6e46674764eb0179cff6312aade65bb26f370d8af6fc089ab5bf713a7870", - "sha256:68e8f2cedc65198248a14d716125016fd0816f63f216a82c2209a0686d5447cf", - "sha256:6d1d4078d60ca47f0eb6bdddbf79f00a72d41ee3148aba1dcf9b980f73a8d26e", - "sha256:6decbef9ca15a8fef5840ff350fe53fc2cefbabb34c81bce2576c553fdb33eba", - "sha256:737ea1ee132c89265609ef1951a29a0f4caec57c974715f305587973d63dc439", - "sha256:794ca22915fb1e4d08d4cafb81c0227d05a75f4dcd3ce463abaf851ba6b14f9c", - "sha256:858604fe5d7eb50e91b1096bcbcb421f2cb3101454244afda92b4d768d0cb4ce", - "sha256:89d87f5ff7604c25795c369823531b07ac36d62b6c1b743135106f5819051147", - "sha256:97c4507d1b4aaa097f076194606bab723adf7c73c517f09c967818808fc198d4", - "sha256:98b54a47e670093b8bf7d1a0222d0af26dac19314a0e79ac478e447357396a2d", - "sha256:99009264ec0992e69f478b3f59b1e411e0d75c1361cf41b1aef397f89d020666", - "sha256:9f8ab0fd88fc2a8ecc543b72c293d70ffa3f448e85e6fb7dee009629154d683e", - "sha256:9ffed319ab2adc2d426160355311686780eea3f063f2b169fa5a9a17bc24e20f", - "sha256:ad2237e4335d6d8a3d678c9106a100c228b1edc92bc5ea6af0be99d1acafd84b", - "sha256:b27301965f076257abea084d245364b3aff01f75a202b36922a09b519dc8359d", - "sha256:b442a4155631cd1c53cb1cd83b815c828cdbb8c0c9a1eb9b8791c5a19bf55692", - "sha256:b71420bbba0f04c82374196467159e960043089f2931227353d9d51d71cd65a7", - "sha256:bd15a7b913b5228711d479dd26af9db3c12280ef7df55f48037d0bc9bf042617", - "sha256:bf13f4ed0fd7691cbf10371a65cd6b4aeeed2d04f09e96f8aa52db36a794c7d4", - "sha256:c0502cec5d672b62547c3f5b1e2efc177db0b982cf7742cb23b50c2933739a4b", - "sha256:c38d17af73aa03686d701686628e37c114a459650233c0d5f0492dad3a76e3e0", - "sha256:c7bd3a381c4a5fe7e0fc4dff554bd1ce2b0be12ba0193c176c291b7dc1e8bea0", - "sha256:c96f87e14208058dd92dd9e726beeb4a572ead402fedeb230d151575fb39ad93", - "sha256:cbdc8ab6108b8bb260ee68fb2de83fb1c481d3a77355156049a8a49ea47eacf6", - "sha256:cc6ff891c3814d8cd92549cb385353a922518d433aaf1d2d0d99e98e59915370", - "sha256:d64ef19ea4f65782a09209a2287fea795ca7858375e6e9d87e955dfbbadaed15", - "sha256:d940b5644f14e49b1c6e7902b9ec8a0c7584109fbf380fa18115831a641927c8", - "sha256:d9995693d151387d8a95774f6e464118002d7054fade70ea24942caa0f2dcfa8", - "sha256:de1e2eb6fe8ab72256aaf83e0d1969a39271a70fa70a27a45b53d270ecfcc7db", - "sha256:e16c02923726307d960e908b61d4d833939f322877d2957c001fca23b644914e", - "sha256:e5ce9ded54dee1f179e9240a983779d5e3bef20249ae4419b671af549b077879", - "sha256:e95544c9293bd0f1fa6ecab06472d7b982acfcfaca37df6a1dce113f26e67d66", - "sha256:f53f65cf56bb60355681431d04bc04dbe709452dd85eebf537035dc145bd36c9", - "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5", - "sha256:fa7d3cc9c6684cc4e04b9c138c16ff77f4eb3a51ab1b2239964ae8a3b9456a2b", - "sha256:fdc103711cba081c8896476d99479b462fc584091f9979c3c17fedca7558d4d2", - "sha256:ffaca17ce98a61a6a7fd7b1aecfe38cc360a97f85cd7b5ffc4e6c17570bcd377" + "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a", + "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e", + "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e", + "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225", + "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d", + "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775", + "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c", + "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59", + "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5", + "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173", + "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74", + "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640", + "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef", + "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474", + "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370", + "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b", + "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5", + "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa", + "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a", + "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3", + "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5", + "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48", + "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17", + "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397", + "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6", + "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd", + "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3", + "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca", + "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a", + "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e", + "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c", + "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24", + "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86", + "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f", + "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e", + "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f", + "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83", + "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882", + "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e", + "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00", + "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212", + "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1", + "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309", + "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c", + "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf", + "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517", + "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696", + "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa", + "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582", + "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3", + "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291", + "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a", + "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b", + "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727", + "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b", + "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878", + "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d", + "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279", + "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07", + "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012", + "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b", + "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453", + "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12", + "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09", + "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795", + "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04", + "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c", + "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8", + "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1", + "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060", + "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb", + "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2", + "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6", + "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31", + "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da", + "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af", + "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4", + "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685", + "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186", + "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103", + "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f", + "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b", + "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d", + "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a", + "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f", + "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0", + "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe", + "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d", + "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2", + "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055", + "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47", + "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514", + "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7", + "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41", + "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b", + "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910", + "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc" ], "markers": "python_version >= '3.8'", - "version": "==0.7.1" + "version": "==0.10.0" }, "semantic-version": { "hashes": [ @@ -4422,25 +4510,26 @@ }, "sentry-sdk": { "hashes": [ - "sha256:3e17215d8006612e2df02b0e73115eb8376c37e3f586d8436fa41644e605074d", - "sha256:a99ee105384788c3f228726a88baf515fe7b5f1d2d0f215a03d194369f158df7" + "sha256:64a7141005fb775b9db298a30de93e3b83e0ddd1232dc6f36eb38aebc1553291", + "sha256:6de2e88304873484207fed836388e422aeff000609b104c802749fd89d56ba5b" ], - "version": "==1.29.2" + "version": "==1.31.0" }, "service-identity": { "hashes": [ - "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34", - "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db" + "sha256:87415a691d52fcad954a500cb81f424d0273f8e7e3ee7d766128f4575080f383", + "sha256:ecb33cd96307755041e978ab14f8b14e13b40f1fbd525a4dc78f46d2b986431d" ], - "version": "==21.1.0" + "markers": "python_version >= '3.8'", + "version": "==23.1.0" }, "setuptools": { "hashes": [ - "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", - "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" + "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d", + "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b" ], - "markers": "python_version >= '3.7'", - "version": "==67.8.0" + "markers": "python_version >= '3.8'", + "version": "==68.1.2" }, "six": { "hashes": [ @@ -4465,50 +4554,50 @@ }, "sqlalchemy": { "hashes": [ - "sha256:1a0754c2d9f0c7982bec0a31138e495ed1f6b8435d7e677c45be60ec18370acf", - "sha256:1d6320a1d175447dce63618ec997a53836de48ed3b44bbe952f0b4b399b19941", - "sha256:1e885dacb167077df15af2f9ccdacbd7f5dd0d538a6d74b94074f2cefc7bb589", - "sha256:201a99f922ac8c780b3929128fbd9df901418877c70e160e19adb05665e51c31", - "sha256:21c89044fc48a25c2184eba332edeffbbf9367913bb065cd31538235d828f06f", - "sha256:256b2b9660e51ad7055a9835b12717416cf7288afcf465107413917b6bb2316f", - "sha256:2e940a8659ef870ae10e0d9e2a6d5aaddf0ff6e91f7d0d7732afc9e8c4be9bbc", - "sha256:3fb5d09f1d51480f711b69fe28ad42e4f8b08600a85ab2473baee669e1257800", - "sha256:435f6807fa6a0597d84741470f19db204a7d34625ea121abd63e8d95f673f0c4", - "sha256:4670ce853cb25f72115a1bbe366ae13cf3f28fc5c87222df14f8d3d55d51816e", - "sha256:4a75fdb9a84072521bb2ebd31eefe1165d4dccea3039dda701a864f4b5daa17f", - "sha256:4d61731a35eddb0f667774fe15e5a4831e444d066081d1e809e1b8a0e3f97cae", - "sha256:51b19887c96d405599880da6a7cbdf8545a7e78ec5683e46a43bac8885e32d0f", - "sha256:536c86ec81ca89291d533ff41a3a05f9e4e88e01906dcee0751fc7082f3e8d6c", - "sha256:55ec62ddc0200b4fee94d11abbec7aa25948d5d21cb8df8807f4bdd3c51ba44b", - "sha256:5cc48a7fda2b5c5b8860494d6c575db3a101a68416492105fed6591dc8a2728a", - "sha256:670ecf74ee2e70b917028a06446ad26ff9b1195e84b09c3139c215123d57dc30", - "sha256:6a3f8020e013e9b3b7941dcf20b0fc8f7429daaf7158760846731cbd8caa5e45", - "sha256:6b42913a0259267e9ee335da0c36498077799e59c5e332d506e72b4f32de781d", - "sha256:6f5784dfb2d45c19cde03c45c04a54bf47428610106197ed6e6fa79f33bc63d3", - "sha256:6f80a9c9a9af0e4bd5080cc0955ce70274c28e9b931ad7e0fb07021afcd32af6", - "sha256:78303719c6f72af97814b0072ad18bee72e70adca8d95cf8fecd59c5e1ddb040", - "sha256:788d1772fb8dcd12091ca82809eef504ce0f2c423e45284bc351b872966ff554", - "sha256:79bfe728219239bdc493950ea4a4d15b02138ecb304771f9024d0d6f5f4e3706", - "sha256:810199d1c5b43603a9e815ae9487aef3ab1ade7ed9c0c485e12519358929fbfe", - "sha256:88ab245ed2c96265441ed2818977be28c840cfa5204ba167425d6c26eb67b7e7", - "sha256:933d30273861fe61f014ce2a7e3c364915f5efe9ed250ec1066ca6ea5942c0bd", - "sha256:994a75b197662e0608b6a76935d7c345f7fd874eac0b7093d561033db61b0e8c", - "sha256:9b31ebde27575b3b0708673ec14f0c305c4564d995b545148ab7ac0f4d9b847a", - "sha256:9d810b4aacd5ef4e293aa4ea01f19fca53999e9edcfc4a8ef1146238b30bdc28", - "sha256:ae1d8deb391ab39cc8f0d5844e588a115ae3717e607d91482023917f920f777f", - "sha256:bc5c2b0da46c26c5f73f700834f871d0723e1e882641932468d56833bab09775", - "sha256:cea7c4a3dfc2ca61f88a2b1ddd6b0bfbd116c9b1a361b3b66fd826034b833142", - "sha256:d14282bf5b4de87f922db3c70858953fd081ef4f05dba6cca3dd705daffe1cc9", - "sha256:d6b17cb86908e7f88be14007d6afe7d2ab11966e373044137f96a6a4d83eb21c", - "sha256:da7381a883aee20b7d2ffda17d909b38134b6a625920e65239a1c681881df800", - "sha256:db269f67ed17b07e80aaa8fba1f650c0d84aa0bdd9d5352e4ac38d5bf47ac568", - "sha256:df25052b92bd514357a9b370d74f240db890ea79aaa428fb893520e10ee5bc18", - "sha256:e17fdcb8971e77c439113642ca8861f9465e21fc693bd3916654ceef3ac26883", - "sha256:f6fd3c88ea4b170d13527e93be1945e69facd917661d3725a63470eb683fbffe", - "sha256:f7f994a53c0e6b44a2966fd6bfc53e37d34b7dca34e75b6be295de6db598255e" + "sha256:1506e988ebeaaf316f183da601f24eedd7452e163010ea63dbe52dc91c7fc70e", + "sha256:1a58052b5a93425f656675673ef1f7e005a3b72e3f2c91b8acca1b27ccadf5f4", + "sha256:1b74eeafaa11372627ce94e4dc88a6751b2b4d263015b3523e2b1e57291102f0", + "sha256:1be86ccea0c965a1e8cd6ccf6884b924c319fcc85765f16c69f1ae7148eba64b", + "sha256:1d35d49a972649b5080557c603110620a86aa11db350d7a7cb0f0a3f611948a0", + "sha256:243d0fb261f80a26774829bc2cee71df3222587ac789b7eaf6555c5b15651eed", + "sha256:26a3399eaf65e9ab2690c07bd5cf898b639e76903e0abad096cd609233ce5208", + "sha256:27d554ef5d12501898d88d255c54eef8414576f34672e02fe96d75908993cf53", + "sha256:3364b7066b3c7f4437dd345d47271f1251e0cfb0aba67e785343cdbdb0fff08c", + "sha256:3423dc2a3b94125094897118b52bdf4d37daf142cbcf26d48af284b763ab90e9", + "sha256:3c6aceebbc47db04f2d779db03afeaa2c73ea3f8dcd3987eb9efdb987ffa09a3", + "sha256:3ce5e81b800a8afc870bb8e0a275d81957e16f8c4b62415a7b386f29a0cb9763", + "sha256:411e7f140200c02c4b953b3dbd08351c9f9818d2bd591b56d0fa0716bd014f1e", + "sha256:4cde2e1096cbb3e62002efdb7050113aa5f01718035ba9f29f9d89c3758e7e4e", + "sha256:5768c268df78bacbde166b48be788b83dddaa2a5974b8810af422ddfe68a9bc8", + "sha256:599ccd23a7146e126be1c7632d1d47847fa9f333104d03325c4e15440fc7d927", + "sha256:5ed61e3463021763b853628aef8bc5d469fe12d95f82c74ef605049d810f3267", + "sha256:63a368231c53c93e2b67d0c5556a9836fdcd383f7e3026a39602aad775b14acf", + "sha256:63e73da7fb030ae0a46a9ffbeef7e892f5def4baf8064786d040d45c1d6d1dc5", + "sha256:6eb6d77c31e1bf4268b4d61b549c341cbff9842f8e115ba6904249c20cb78a61", + "sha256:6f8a934f9dfdf762c844e5164046a9cea25fabbc9ec865c023fe7f300f11ca4a", + "sha256:6fe7d61dc71119e21ddb0094ee994418c12f68c61b3d263ebaae50ea8399c4d4", + "sha256:759b51346aa388c2e606ee206c0bc6f15a5299f6174d1e10cadbe4530d3c7a98", + "sha256:76fdfc0f6f5341987474ff48e7a66c3cd2b8a71ddda01fa82fedb180b961630a", + "sha256:77d37c1b4e64c926fa3de23e8244b964aab92963d0f74d98cbc0783a9e04f501", + "sha256:79543f945be7a5ada9943d555cf9b1531cfea49241809dd1183701f94a748624", + "sha256:79fde625a0a55220d3624e64101ed68a059c1c1f126c74f08a42097a72ff66a9", + "sha256:7d3f175410a6db0ad96b10bfbb0a5530ecd4fcf1e2b5d83d968dd64791f810ed", + "sha256:8dd77fd6648b677d7742d2c3cc105a66e2681cc5e5fb247b88c7a7b78351cf74", + "sha256:a3f0dd6d15b6dc8b28a838a5c48ced7455c3e1fb47b89da9c79cc2090b072a50", + "sha256:bcb04441f370cbe6e37c2b8d79e4af9e4789f626c595899d94abebe8b38f9a4d", + "sha256:c3d99ba99007dab8233f635c32b5cd24fb1df8d64e17bc7df136cedbea427897", + "sha256:ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6", + "sha256:cb0d3e94c2a84215532d9bcf10229476ffd3b08f481c53754113b794afb62d14", + "sha256:d1b09ba72e4e6d341bb5bdd3564f1cea6095d4c3632e45dc69375a1dbe4e26ec", + "sha256:d32b5ffef6c5bcb452723a496bad2d4c52b346240c59b3e6dba279f6dcc06c14", + "sha256:d3793dcf5bc4d74ae1e9db15121250c2da476e1af8e45a1d9a52b1513a393459", + "sha256:dd81466bdbc82b060c3c110b2937ab65ace41dfa7b18681fdfad2f37f27acdd7", + "sha256:e4e571af672e1bb710b3cc1a9794b55bce1eae5aed41a608c0401885e3491179", + "sha256:ea8186be85da6587456c9ddc7bf480ebad1a0e6dcbad3967c4821233a4d4df57", + "sha256:eefebcc5c555803065128401a1e224a64607259b5eb907021bf9b175f315d2a6" ], "markers": "python_version >= '3.7'", - "version": "==2.0.15" + "version": "==2.0.20" }, "stack-data": { "hashes": [ @@ -4527,62 +4616,65 @@ }, "time-machine": { "hashes": [ - "sha256:010a58a8de1120308befae19e6c9de2ef5ca5206635cea33cb264998725cc027", - "sha256:0b9c36240876622b7f2f9e11bf72f100857c0a1e1a59af2da3d5067efea62c37", - "sha256:1d0ab46ce8a60baf9d86525694bf698fed9efefd22b8cbe1ca3e74abbb3239e1", - "sha256:2f080f6f7ca8cfca43bc5639288aebd0a273b4b5bd0acff609c2318728b13a18", - "sha256:359c806e5b9a7a3c73dbb808d19dca297f5504a5eefdc5d031db8d918f43e364", - "sha256:36dde844d28549929fab171d683c28a8db1c206547bcf6b7aca77319847d2046", - "sha256:372a97da01db89533d2f4ce50bbd908e5c56df7b8cfd6a005b177d0b14dc2938", - "sha256:3ce445775fcf7cb4040cfdba4b7c4888e7fd98bbcccfe1dc3fa8a798ed1f1d24", - "sha256:3ff5148e2e73392db8418a1fe2f0b06f4a0e76772933502fb61e4c3000b5324e", - "sha256:49df5eea2160068e5b2bf28c22fc4c5aea00862ad88ddc3b62fc0f0683e97538", - "sha256:4b55654aaeaba380fcd6c004b8ada2978fdd4ece1e61e6b9717c6d4cc7fbbcd9", - "sha256:4f3755d9342ca1f1019418db52072272dfd75eb818fa4726fa8aabe208b38c26", - "sha256:5657e0e6077cf15b37f0d8cf78e868113bbb3ecccc60064c40fe52d8166ca8b1", - "sha256:60222d43f6e93a926adc36ed37a54bc8e4d0d8d1c4d449096afcfe85086129c2", - "sha256:6211beee9f5dace08b1bbbb1fb09e34a69c52d87eea676729f14c8660481dff6", - "sha256:6463e302c96eb8c691c4340e281bd54327a213b924fa189aea81accf7e7f78df", - "sha256:68ec8b83197db32c7a12da5f6b83c91271af3ed7f5dc122d2900a8de01dff9f0", - "sha256:69898aed9b2315a90f5855343d9aa34d05fa06032e2e3bb14f2528941ec89dc1", - "sha256:6b632d60aa0883dc7292ac3d32050604d26ec2bbd5c4d42fb0de3b4ef17343e2", - "sha256:728263611d7940fda34d21573bd2b3f1491bdb52dbf75c5fe6c226dfe4655201", - "sha256:748d701228e646c224f2adfa6a11b986cd4aa90f1b8c13ef4534a3919c796bc0", - "sha256:8367fd03f2d7349c7fc20f14de186974eaca2502c64b948212de663742c8fd11", - "sha256:8670cb5cfda99f483d60de6ce56ceb0ec5d359193e79e4688e1c3c9db3937383", - "sha256:8830510adbf0a231184da277db9de1d55ef93ed228a575d217aaee295505abf1", - "sha256:8976b7b1f7de13598b655d459f5640f90f3cd587283e1b914a22e45946c5485b", - "sha256:8bcc86b5a07ea9745f26dfad958dde0a4f56748c2ae0c9a96200a334d1b55055", - "sha256:8e2a90b8300812d8d774f2d2fc216fec3c7d94132ac589e062489c395061f16c", - "sha256:8e797e5a2a99d1b237183e52251abfc1ad85c376278b39d1aca76a451a97861a", - "sha256:948ca690f9770ad4a93fa183061c11346505598f5f0b721965bc85ec83bb103d", - "sha256:9ba5fc2655749066d68986de8368984dad4082db2fbeade78f40506dc5b65672", - "sha256:9ee553f7732fa51e019e3329a6984593184c4e0410af1e73d91ce38a5d4b34ab", - "sha256:a2cf80e5deaaa68c6cefb25303a4c870490b4e7591ed8e2435a65728920bc097", - "sha256:ae4e3f02ab5dabb35adca606237c7e1a515c86d69c0b7092bbe0e1cfe5cffc61", - "sha256:b16a2129f9146faa080bfd1b53447761f7386ec5c72890c827a65f33ab200336", - "sha256:b32addbf56639a9a8261fb62f8ea83473447671c83ca2c017ab1eabf4841157f", - "sha256:b8faff03231ee55d5a216ce3e9171c5205459f866f54d4b5ee8aa1d860e4ce11", - "sha256:bb15b2b79b00d3f6cf7d62096f5e782fa740ecedfe0540c09f1d1e4d3d7b81ba", - "sha256:bdbe785e046d124f73cca603ee37d5fae0b15dc4c13702488ad19de56aae08ba", - "sha256:bfa82614a98ecee70272bb6038d210b2ad7b2a6b8a678b400c34bdaf776802a7", - "sha256:c01dbc3671d0649023daf623e952f9f0b4d904d57ab546d6d35a4aeb14915e8d", - "sha256:c5dbc8b87cdc7be070a499f2bd1cd405c7f647abeb3447dfd397639df040bc64", - "sha256:cb51432652ad663b4cbd631c73c90f9e94f463382b86c0b6b854173700512a70", - "sha256:cc6bf01211b5ea40f633d5502c5aa495b415ebaff66e041820997dae70a508e1", - "sha256:d329578abe47ce95baa015ef3825acebb1b73b5fa6f818fdf2d4685a00ca457f", - "sha256:d4380bd6697cc7db3c9e6843f24779ac0550affa9d9a8e5f9e5d5cc139cb6583", - "sha256:d79d374e32488c76cdb06fbdd4464083aeaa715ddca3e864bac7c7760eb03729", - "sha256:eaf334477bc0a9283d5150a56be8670a07295ef676e5b5a7f086952929d1a56b", - "sha256:f6e79643368828d4651146a486be5a662846ac223ab5e2c73ddd519acfcc243c", - "sha256:f92d5d2eb119a6518755c4c9170112094c706d1c604460f50afc1308eeb97f0e", - "sha256:f97ed8bc5b517844a71030f74e9561de92f4902c306e6ccc8331a5b0c8dd0e00", - "sha256:fcdef7687aed5c4331c9808f4a414a41987441c3e7a2ba554e4dccfa4218e788", - "sha256:fd72c0b2e7443fff6e4481991742b72c17f73735e5fdd176406ca48df187a5c9", - "sha256:fe013942ab7f3241fcbe66ee43222d47f499d1e0cb69e913791c52e638ddd7f0" + "sha256:05f7320851edb3e887d79a5c797966c8c1b64458fb8b8ee74982c6593606a387", + "sha256:0613aef850db722f2ceee1923d67fc050ae8d6a09fa2cd1ca1dae0748864e6d7", + "sha256:0f9c48f19a6af887ac769740e914f8eb8e406a3d33a651e107f28bba1adc3796", + "sha256:156fdd17fde2a3ea9c41a8108b8ac877e4f90a7ac5e6db533ab6ecb86f723891", + "sha256:1e3b07d7aa993a2f24e3a2ef5a216869f0a1fcaaba6227ad73b265c4f15feca5", + "sha256:26d2be6009151de7aa210e8569c49eece6563b8beb7e290ebd4a10b2b8d2fc5c", + "sha256:2a0a3fb0c316c23b0d79810cf7a158c7d4671acc02a5dfa5cda7aa673478a0dc", + "sha256:2b84449a2b170ed51c26a725a2ca983bc98490c5f23d28e9473402adc7e694ba", + "sha256:328266ea13f0c517cdf758c16a2d83f0118516b8ac7910bba4eba6d4d3b3b2f1", + "sha256:33ee51c6f9f02d7b1d792d379b42321a3d13b819ecd8d136fb287be4adc7b9da", + "sha256:353b6b43e43aee22df79194584c587225ec1a06a2f444099ada2096d806d602e", + "sha256:35ec4170e5045ac0d5dfb1255320e301d5b6fc359f9cf36010007bf572888e73", + "sha256:3992b9285c75c6f74fabfdb0ca7f17f12e22d0fc631ff43d0e110ccd53382569", + "sha256:43a4a5d722f7a6b6ee8f1d3cdeffe6d7c3421452219dce0d22778e6810fb645c", + "sha256:47dc877f3a475d0e818b31a6ad6fc1fbe40f334dcd73d2cb076057aff4d73beb", + "sha256:496a47e2eef78893eb6915d0a5215c59346ebe29d5c88a56301ed74deebe45cc", + "sha256:4bd89a8bf7756b50de180258517004f30857deea82c1841f291a2c8e25cfaa83", + "sha256:4cf10267610244d4398312c4eea5cfc2f68f9a0286260d2157d45d1a54dcc6b2", + "sha256:5240e1cb013826449a5065062b47a46ce3d431fc47cbddc938e3c05e3fe4a951", + "sha256:58ec76d58dcc3ab6a3d7951ae08ae99c7b413a40c7e8255c106b5df4f768f8dd", + "sha256:5e62e45a71674b5df9f9275ffbb342c78ba026c9b556478d0b4bc4470e9f2b4b", + "sha256:669437542e9027db55e06ff05e848a9cb0e88d1fc6e659b412e9721be227b9be", + "sha256:715956ef123645ef22d1c7a13963bb9bc50c02b8578797704715a410bfa49575", + "sha256:786efcc336edc196e5a854a73ff714be198bc57da6856064083677a188c8e018", + "sha256:796968ca8e770ee1121fe209a18cee9bd462bc0cacf57e2b1d528df08c6f18d6", + "sha256:81095391ccef01c56b6061248216da4e2d749b543952fce199b628b8a8ce5ca2", + "sha256:8176eba6b182f88fa8afd9a964c9391b73f3456f6c2f59bb2514957ec6269724", + "sha256:81b88ac04e61c772854fa85b8e04428e3068fe690487a50b69bb07dda2168c36", + "sha256:82062eef6096c42ce14c7c07a7898caa3d696ac189fdb1586f59562893f6abf4", + "sha256:8676471983482522f3e124ad2c8fe38d6d6ed957379504910d2ea0c646d96cb4", + "sha256:8c764bd6690b83a72b4294934774044c8cea4356cb9b103b7dbb8232242b3047", + "sha256:8ec623cff18e328781ab7a6251f1ee77e225f14e1f5a26633028a14b7d90ed82", + "sha256:93c84850c9e529433613af2b2097634d27b30e9853271b6ea1384ee00be5424a", + "sha256:9ac560499086184142b0a0b28eca0ea1d245e9df1c008ef3356b0e3ea6cb1536", + "sha256:9b255feaa4f3c46c7ebd1319a630ee1e3aa87078c9b428f9428980597c3ce830", + "sha256:9c389ef8508f787ff1ec963b473838616773db8e00bc043cab9374f36d9e8201", + "sha256:a1b7b1b758de72de73fcf063be8ae9e2e98dd4bab0e6cd8b32c8e7d0462d78b0", + "sha256:a525dd4fd6f7a2ecf2b54fce3c8b9982650dc570992ca6e38987c3922684099a", + "sha256:a5304de3e41c33cd6e4be7b85f09409b1059b9ff6a8289482352c42fb50b4e42", + "sha256:a9f13f8c8dc72541654830d16efcc6249969bac1cbe591bee4a0ac19490592e2", + "sha256:b3fe070414ef05359c55bbbf94b7a895d532af726705e6f33e6f2eeb26326042", + "sha256:b535a2524e1adbac3c8028c49cdceb764f800ca95c2f7421aad11c5d4c274ed7", + "sha256:b9dec9619ff5e89798e9cfb5e2a53e1eed18afa1b20460d7158fa2db94dd2d3b", + "sha256:bb60d061978487db5cba8a20fb84b3ae29af5ca004a0e991cd5eaa31b0851b59", + "sha256:d09aaa1d323c4a4b5b4569f44a02bb24ba5030b55adc9710a895843796363c0c", + "sha256:d365d6e0faaf6bcddacfb71d8c033011b7a65f1a94142350a1bc9da3c85bfb8e", + "sha256:d4f546b262e0d955376bf0af9a4de13a910f5f27c5e44e4db46ceea61b4c4a7d", + "sha256:d7442e9cffccd76115521f8d64c270e923e566e9487ba9da9824149653cf0641", + "sha256:dfe8b2478b4c3556a913b187ce598ad2afd07e6acfcf652be8e5a56dee2bf200", + "sha256:e0c98003096624cc70caa5743fe6a1fd0e97ffeaf9b44560e4158b0e1a38168e", + "sha256:e45505414fba93a15957a43ff52bbf737c3ef7905464eb16ef45e1395e95206d", + "sha256:e8d5ae0f0a25b3aa7207688edf23de514f918a91ea05edbeffdbdd56d8497c13", + "sha256:ead6c3a1858c551b4edbba781d48892a487fda6ef6416c87f8ed559bfb29c904", + "sha256:fafb423453e711ea95a669373bdaf628e9e8a0c606c1366499835f3e446554dc", + "sha256:fc80ba01ff5663c74ce74c9ee2267dbf900ee8e8d18d55937b5e83eb1e179998", + "sha256:fcb41d70da706e14a805fcbf42bdb17435d4a91420bd5b6a88f8f61beb95b862" ], - "markers": "python_version >= '3.7'", - "version": "==2.9.0" + "markers": "python_version >= '3.8'", + "version": "==2.12.0" }, "toml": { "hashes": [ @@ -4610,11 +4702,11 @@ }, "tqdm": { "hashes": [ - "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5", - "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671" + "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", + "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" ], "markers": "python_version >= '3.7'", - "version": "==4.65.0" + "version": "==4.66.1" }, "traitlets": { "hashes": [ @@ -4626,19 +4718,19 @@ }, "trie": { "hashes": [ - "sha256:0729a159ddef4bfa4c05478017b93a7a1af4e65e8a7b7628676bad13199ffe39", - "sha256:e3f3691e1d48006b466c9b4cd0ee586c32e0f54d13b2497f263688188c77b0fe" + "sha256:1c7fa6f4a3088e083764cf4e32a07a69c672fcf15ad922e03f51158d64a855cf", + "sha256:c1a5fc17b37a75008a4517e4f297ad8026dce777eb0eed63ee6335c66d7437b7" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.1.0" + "version": "==2.1.1" }, "twisted": { "hashes": [ - "sha256:32acbd40a94f5f46e7b42c109bfae2b302250945561783a8b7a059048f2d4d31", - "sha256:86c55f712cc5ab6f6d64e02503352464f0400f66d4f079096d744080afcccbd0" + "sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24", + "sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd" ], "markers": "python_full_version >= '3.7.1'", - "version": "==22.10.0" + "version": "==23.8.0" }, "txaio": { "hashes": [ @@ -4650,11 +4742,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", - "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" ], "markers": "python_version >= '3.7'", - "version": "==4.6.3" + "version": "==4.7.1" }, "tzdata": { "hashes": [ @@ -4674,11 +4766,11 @@ }, "urllib3": { "hashes": [ - "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", - "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" + "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", + "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" ], "markers": "python_version >= '3.7'", - "version": "==2.0.3" + "version": "==2.0.4" }, "varint": { "hashes": [ @@ -4688,45 +4780,44 @@ }, "virtualenv": { "hashes": [ - "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e", - "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924" + "sha256:29c70bb9b88510f6414ac3e55c8b413a1f96239b6b789ca123437d5e892190cb", + "sha256:772b05bfda7ed3b8ecd16021ca9716273ad9f4467c801f27e83ac73430246dca" ], "markers": "python_version >= '3.7'", - "version": "==20.23.0" + "version": "==20.24.4" }, "watchdog": { "hashes": [ - "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190", - "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43", - "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d", - "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256", - "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd", - "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96", - "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5", - "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad", - "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42", - "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225", - "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb", - "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc", - "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79", - "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf", - "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44", - "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc", - "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131", - "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c", - "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565", - "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab", - "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed", - "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16", - "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf", - "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375", - "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697", - "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906", - "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b", - "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f" + "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a", + "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100", + "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8", + "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc", + "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae", + "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41", + "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0", + "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f", + "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c", + "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9", + "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3", + "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709", + "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83", + "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759", + "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9", + "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3", + "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7", + "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f", + "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346", + "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674", + "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397", + "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96", + "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d", + "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a", + "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64", + "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44", + "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33" ], - "markers": "python_version >= '3.6'", - "version": "==2.3.1" + "markers": "python_version >= '3.7'", + "version": "==3.0.0" }, "wcwidth": { "hashes": [ @@ -4737,11 +4828,11 @@ }, "web3": { "hashes": [ - "sha256:b9fcc2372e7cac27d96621c169be40174eccbb93346bba2ab45ad791140d47fe", - "sha256:c86889b9c0b8f9f5ce5f5f0bb9f9bfc551cf775aeaf903964ddf28d303b85c62" + "sha256:3bc95043ee9fc6ee0b13a4766d4975b9f7cae069db136430a3799ed18743e608", + "sha256:cb454d0180e63ba1d83143dccf7c623581ba58e222edb006f48252d8a7b948e0" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.4.0" + "version": "==6.9.0" }, "websockets": { "hashes": [ @@ -4821,11 +4912,11 @@ }, "werkzeug": { "hashes": [ - "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76", - "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f" + "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8", + "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528" ], "markers": "python_version >= '3.8'", - "version": "==2.3.4" + "version": "==2.3.7" }, "wrapt": { "hashes": [ @@ -4990,13 +5081,13 @@ }, "zipp": { "hashes": [ - "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", - "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" + "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0", + "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147" ], - "markers": "python_version >= '3.7'", - "version": "==3.15.0" + "markers": "python_version >= '3.8'", + "version": "==3.16.2" }, - "zope.interface": { + "zope-interface": { "hashes": [ "sha256:0326cc72f232167498eb4814232c960881bd8eb5e1f7e92ed07ea7afbf21dbb0", "sha256:04ab70d12e46f54f2c614e9ca12f3d29de41101f05563f7c9bd3351fcf6d85c3", diff --git a/dev-requirements.txt b/dev-requirements.txt index cfdd237..959d52e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,94 +1,93 @@ -i https://pypi.python.org/simple aiohttp==3.8.2 ; python_version >= '3.6' aiosignal==1.3.1 ; python_version >= '3.7' -ape-solidity==0.6.5 ; python_version >= '3.8' and python_version < '4' +ape-solidity==0.6.8 ; python_version >= '3.8' and python_version < '4' appdirs==1.4.4 appnope==0.1.3 asttokens==2.2.1 -async-timeout==4.0.2 ; python_version >= '3.6' +async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' base58==1.0.3 -bitarray==2.7.4 +bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.5.7 ; python_version >= '3.6' +certifi==2023.7.22 ; python_version >= '3.6' cffi==1.15.1 -cfgv==3.3.1 ; python_full_version >= '3.6.1' +cfgv==3.4.0 ; python_version >= '3.8' charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.3 ; python_version >= '3.7' +click==8.1.7 ; python_version >= '3.7' colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' commonmark==0.9.1 constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 coverage==6.5.0 -cryptography==41.0.1 ; python_version >= '3.7' -cytoolz==0.12.1 ; python_version >= '3.6' +cryptography==41.0.3 ; python_version >= '3.7' +cytoolz==0.12.2 ; python_version >= '3.6' dataclassy==0.11.1 ; python_version >= '3.6' dateparser==1.1.8 ; python_version >= '3.7' decorator==5.1.1 ; python_version >= '3.5' deprecated==1.2.14 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -distlib==0.3.6 +distlib==0.3.7 eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' -eip712-structs==1.1.0 -eth-abi==4.0.0 ; python_version >= '3.7' and python_version < '4' +eth-abi==4.2.0 ; python_full_version >= '3.7.2' and python_version < '4' eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' -eth-ape==0.6.10 ; python_version >= '3.8' and python_version < '4' +eth-ape==0.6.19 ; python_version >= '3.8' and python_version < '4' eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' -eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' +eth-hash==0.5.2 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.0b1 ; python_full_version >= '3.6.8' and python_version < '4' -eth-typing==3.3.0 ; python_full_version >= '3.7.2' and python_version < '4' -eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' -ethpm-types==0.5.2 ; python_version >= '3.8' and python_version < '4' -evm-trace==0.1.0a20 ; python_version >= '3.8' and python_version < '4' -exceptiongroup==1.1.1 ; python_version >= '3.7' +eth-tester==0.9.1b1 ; python_full_version >= '3.6.8' and python_version < '4' +eth-typing==3.4.0 ; python_full_version >= '3.7.2' and python_version < '4' +eth-utils==2.2.0 ; python_version >= '3.7' and python_version < '4' +ethpm-types==0.5.4 ; python_version >= '3.8' and python_version < '4' +evm-trace==0.1.0a24 ; python_version >= '3.8' and python_version < '4' +exceptiongroup==1.1.3 ; python_version >= '3.7' executing==1.2.0 -filelock==3.12.0 ; python_version >= '3.7' +filelock==3.12.3 ; python_version >= '3.8' flask==2.2.5 ; python_version >= '3.7' -frozenlist==1.3.3 ; python_version >= '3.7' -greenlet==2.0.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +frozenlist==1.4.0 ; python_version >= '3.8' +greenlet==3.0.0a1 ; python_version >= '3.7' hendrix==4.0.0 -hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' -humanize==4.6.0 ; python_version >= '3.7' +hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' +humanize==4.8.0 ; python_version >= '3.8' hyperlink==21.0.0 -hypothesis==6.76.0 ; python_version >= '3.7' -identify==2.5.24 ; python_version >= '3.7' +hypothesis==6.83.0 ; python_version >= '3.8' +identify==2.5.27 ; python_version >= '3.8' idna==3.4 ; python_version >= '3.5' -ijson==3.2.0.post0 -importlib-metadata==6.6.0 ; python_version >= '3.7' -importlib-resources==5.12.0 ; python_version >= '3.7' +ijson==3.2.3 +importlib-metadata==6.8.0 ; python_version >= '3.8' +importlib-resources==5.13.0 ; python_version >= '3.8' incremental==22.10.0 iniconfig==2.0.0 ; python_version >= '3.7' ipython==8.12.2 ; python_version >= '3.8' itsdangerous==2.1.2 ; python_version >= '3.7' -jedi==0.18.2 ; python_version >= '3.6' +jedi==0.19.0 ; python_version >= '3.6' jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.18.0a9 ; python_version >= '3.8' -jsonschema-specifications==2023.5.2 ; python_version >= '3.8' +jsonschema==4.19.0 ; python_version >= '3.8' +jsonschema-specifications==2023.7.1 ; python_version >= '3.8' lazyasd==0.1.4 lru-dict==1.2.0 mako==1.2.4 ; python_version >= '3.7' markupsafe==2.1.3 ; python_version >= '3.7' -marshmallow==3.19.0 ; python_version >= '3.7' +marshmallow==3.20.1 ; python_version >= '3.8' matplotlib-inline==0.1.6 ; python_version >= '3.5' maya==0.6.1 mnemonic==0.20 ; python_version >= '3.5' morphys==1.0 msgpack==1.0.5 msgpack-python==0.5.6 -msgspec==0.15.1 ; python_version >= '3.8' +msgspec==0.18.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' -mypy-extensions==0.4.4 ; python_version >= '2.7' +mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/nucypher/nucypher.git@788073d93cdc5a94568e004a6f7b7bf342b1805d#egg=nucypher -nucypher-core==0.11.0 -numpy==1.24.3 ; python_version >= '3.8' +git+https://github.com/derekpierre/nucypher.git@c92302dbbed84854a413d4f3177fdb244c62822c#egg=nucypher +nucypher-core==0.12.0 +numpy==1.24.4 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' parsimonious==0.9.0 @@ -97,19 +96,19 @@ pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' pexpect==4.8.0 pickleshare==0.7.5 pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' -platformdirs==3.5.1 ; python_version >= '3.7' -pluggy==1.0.0 ; python_version >= '3.6' -pre-commit==3.3.2 +platformdirs==3.10.0 ; python_version >= '3.7' +pluggy==1.3.0 ; python_version >= '3.8' +pre-commit==3.3.3 prometheus-client==0.17.1 ; python_version >= '3.6' -prompt-toolkit==3.0.38 ; python_full_version >= '3.7.0' -protobuf==4.23.2 ; python_version >= '3.7' +prompt-toolkit==3.0.39 ; python_full_version >= '3.7.0' +protobuf==4.24.2 ; python_version >= '3.7' ptyprocess==0.7.0 pure-eval==0.2.2 py==1.11.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' py-cid==0.3.0 py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' -py-evm==0.7.0a2 -py-geth==3.12.0 ; python_version >= '3' +py-evm==0.7.0a4 +py-geth==3.13.0 ; python_version >= '3.7' and python_version < '4' py-multibase==1.0.3 py-multicodec==0.2.1 py-multihash==0.2.3 @@ -119,60 +118,61 @@ pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, pychalk==2.0.1 pycparser==2.21 pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -pydantic==1.10.8 ; python_version >= '3.7' +pydantic==1.10.12 ; python_version >= '3.7' pyethash==0.1.27 -pygithub==1.58.2 ; python_version >= '3.7' -pygments==2.15.1 ; python_version >= '3.7' -pyjwt[crypto]==2.7.0 ; python_version >= '3.7' +pygithub==1.59.1 ; python_version >= '3.7' +pygments==2.16.1 ; python_version >= '3.7' +pyjwt[crypto]==2.8.0 ; python_version >= '3.7' pynacl==1.5.0 ; python_version >= '3.6' pyopenssl==23.2.0 ; python_version >= '3.6' pysha3==1.0.2 pytest==6.2.5 pytest-cov==4.1.0 -pytest-mock==3.10.0 +pytest-mock==3.11.1 pytest-timeout==2.1.0 ; python_version >= '3.6' pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-baseconv==1.2.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' pytz==2023.3 -pyyaml==6.0 ; python_version >= '3.6' -referencing==0.29.0 ; python_version >= '3.8' -regex==2023.6.3 ; python_version >= '3.6' +pyunormalize==15.0.0 ; python_version >= '3.6' +pyyaml==6.0.1 ; python_version >= '3.6' +referencing==0.30.2 ; python_version >= '3.8' +regex==2023.8.8 ; python_version >= '3.6' requests==2.31.0 ; python_version >= '3.7' rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 -rpds-py==0.7.1 ; python_version >= '3.8' +rpds-py==0.10.0 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.29.2 -service-identity==21.1.0 -setuptools==67.8.0 ; python_version >= '3.7' +sentry-sdk==1.31.0 +service-identity==23.1.0 ; python_version >= '3.8' +setuptools==68.1.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' snaptime==0.2.4 sortedcontainers==2.4.0 -sqlalchemy==2.0.15 ; python_version >= '3.7' +sqlalchemy==2.0.20 ; python_version >= '3.7' stack-data==0.6.2 tabulate==0.9.0 ; python_version >= '3.7' -time-machine==2.9.0 ; python_version >= '3.7' +time-machine==2.12.0 ; python_version >= '3.8' toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' tomli==2.0.1 ; python_version >= '3.7' toolz==0.12.0 ; python_version >= '3.5' -tqdm==4.65.0 ; python_version >= '3.7' +tqdm==4.66.1 ; python_version >= '3.7' traitlets==5.9.0 ; python_version >= '3.7' -trie==2.1.0 ; python_version >= '3.7' and python_version < '4' -twisted==22.10.0 ; python_full_version >= '3.7.1' +trie==2.1.1 ; python_version >= '3.7' and python_version < '4' +twisted==23.8.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.6.3 ; python_version >= '3.7' +typing-extensions==4.7.1 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' tzlocal==5.0.1 ; python_version >= '3.7' -urllib3==2.0.3 ; python_version >= '3.7' +urllib3==2.0.4 ; python_version >= '3.7' varint==1.0.2 -virtualenv==20.23.0 ; python_version >= '3.7' -watchdog==2.3.1 ; python_version >= '3.6' +virtualenv==20.24.4 ; python_version >= '3.7' +watchdog==3.0.0 ; python_version >= '3.7' wcwidth==0.2.6 -web3==6.4.0 ; python_full_version >= '3.7.2' +web3==6.9.0 ; python_full_version >= '3.7.2' websockets==11.0.3 ; python_version >= '3.7' -werkzeug==2.3.4 ; python_version >= '3.8' +werkzeug==2.3.7 ; python_version >= '3.8' wrapt==1.15.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' yarl==1.9.2 ; python_version >= '3.7' -zipp==3.15.0 ; python_version >= '3.7' -zope.interface==6.1a2 ; python_version >= '3.7' +zipp==3.16.2 ; python_version >= '3.8' +zope-interface==6.1a2 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index bd39873..47e2b9c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,69 +2,68 @@ aiohttp==3.8.2 ; python_version >= '3.6' aiosignal==1.3.1 ; python_version >= '3.7' appdirs==1.4.4 -async-timeout==4.0.2 ; python_version >= '3.6' +async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' -bitarray==2.7.4 +backports.zoneinfo==0.2.1 ; python_version >= '3.6' +bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.5.7 ; python_version >= '3.6' +certifi==2023.7.22 ; python_version >= '3.6' cffi==1.15.1 charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.3 ; python_version >= '3.7' +click==8.1.7 ; python_version >= '3.7' colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -cryptography==41.0.1 ; python_version >= '3.7' -cytoolz==0.12.1 ; python_version >= '3.6' +cryptography==41.0.3 ; python_version >= '3.7' +cytoolz==0.12.2 ; python_version >= '3.6' dateparser==1.1.8 ; python_version >= '3.7' -eip712-structs==1.1.0 -eth-abi==4.0.0 ; python_version >= '3.7' and python_version < '4' +eth-abi==4.2.0 ; python_version < '4' and python_full_version >= '3.7.2' eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' -eth-hash==0.5.1 ; python_version >= '3.7' and python_version < '4' +eth-hash==0.5.2 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.0b1 ; python_version < '4' and python_full_version >= '3.6.8' -eth-typing==3.3.0 ; python_version < '4' and python_full_version >= '3.7.2' -eth-utils==2.1.0 ; python_version >= '3.7' and python_version < '4' +eth-tester==0.9.1b1 ; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.4.0 ; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.2.0 ; python_version >= '3.7' and python_version < '4' flask==2.2.5 ; python_version >= '3.7' flask-cors==4.0.0 -frozenlist==1.3.3 ; python_version >= '3.7' +frozenlist==1.4.0 ; python_version >= '3.8' hendrix==4.0.0 -hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' -humanize==4.6.0 ; python_version >= '3.7' +hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' +humanize==4.8.0 ; python_version >= '3.8' hyperlink==21.0.0 idna==3.4 ; python_version >= '3.5' -importlib-metadata==6.6.0 ; python_version >= '3.7' -importlib-resources==5.12.0 ; python_version >= '3.7' +importlib-metadata==6.8.0 ; python_version >= '3.8' +importlib-resources==5.13.0 ; python_version >= '3.8' incremental==22.10.0 itsdangerous==2.1.2 ; python_version >= '3.7' jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.18.0a9 ; python_version >= '3.8' -jsonschema-specifications==2023.5.2 ; python_version >= '3.8' +jsonschema==4.19.0 ; python_version >= '3.8' +jsonschema-specifications==2023.7.1 ; python_version >= '3.8' lru-dict==1.2.0 mako==1.2.4 ; python_version >= '3.7' markupsafe==2.1.3 ; python_version >= '3.7' -marshmallow==3.19.0 ; python_version >= '3.7' +marshmallow==3.20.1 ; python_version >= '3.8' maya==0.6.1 mnemonic==0.20 ; python_version >= '3.5' msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' -mypy-extensions==0.4.4 ; python_version >= '2.7' -git+https://github.com/nucypher/nucypher.git@788073d93cdc5a94568e004a6f7b7bf342b1805d#egg=nucypher -nucypher-core==0.11.0 +mypy-extensions==1.0.0 ; python_version >= '3.5' +git+https://github.com/derekpierre/nucypher.git@c92302dbbed84854a413d4f3177fdb244c62822c#egg=nucypher +nucypher-core==0.12.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' -protobuf==4.23.2 ; python_version >= '3.7' +protobuf==4.24.2 ; python_version >= '3.7' py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' -py-evm==0.7.0a2 +py-evm==0.7.0a4 pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 @@ -73,34 +72,34 @@ pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3 pyethash==0.1.27 pynacl==1.5.0 ; python_version >= '3.6' pyopenssl==23.2.0 ; python_version >= '3.6' -pysha3==1.0.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3 -referencing==0.29.0 ; python_version >= '3.8' -regex==2023.6.3 ; python_version >= '3.6' +pyunormalize==15.0.0 ; python_version >= '3.6' +referencing==0.30.2 ; python_version >= '3.8' +regex==2023.8.8 ; python_version >= '3.6' requests==2.31.0 ; python_version >= '3.7' rlp==3.0.0 -rpds-py==0.7.1 ; python_version >= '3.8' +rpds-py==0.10.0 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -service-identity==21.1.0 -setuptools==67.8.0 ; python_version >= '3.7' +service-identity==23.1.0 ; python_version >= '3.8' +setuptools==68.1.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 tabulate==0.9.0 ; python_version >= '3.7' -time-machine==2.9.0 ; python_version >= '3.7' +time-machine==2.12.0 ; python_version >= '3.8' toolz==0.12.0 ; python_version >= '3.5' -trie==2.1.0 ; python_version >= '3.7' and python_version < '4' -twisted==22.10.0 ; python_full_version >= '3.7.1' +trie==2.1.1 ; python_version >= '3.7' and python_version < '4' +twisted==23.8.0 ; python_full_version >= '3.7.1' txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.6.3 ; python_version >= '3.7' +typing-extensions==4.7.1 ; python_version >= '3.7' tzdata==2023.3 ; python_version >= '2' tzlocal==5.0.1 ; python_version >= '3.7' -urllib3==2.0.3 ; python_version >= '3.7' -watchdog==2.3.1 ; python_version >= '3.6' -web3==6.4.0 ; python_full_version >= '3.7.2' +urllib3==2.0.4 ; python_version >= '3.7' +watchdog==3.0.0 ; python_version >= '3.7' +web3==6.9.0 ; python_full_version >= '3.7.2' websockets==11.0.3 ; python_version >= '3.7' -werkzeug==2.3.4 ; python_version >= '3.8' +werkzeug==2.3.7 ; python_version >= '3.8' yarl==1.9.2 ; python_version >= '3.7' -zipp==3.15.0 ; python_version >= '3.7' -zope.interface==6.1a2 ; python_version >= '3.7' +zipp==3.16.2 ; python_version >= '3.8' +zope-interface==6.1a2 ; python_version >= '3.7' From fbf81a85d83dfd659229bc30d1b74b67cbc53cdc Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 16 Sep 2023 08:16:39 -0400 Subject: [PATCH 039/114] Manually adjust requirements for backports info. --- dev-requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 959d52e..27309e0 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' base58==1.0.3 bitarray==2.8.1 bytestring-splitter==2.4.1 diff --git a/requirements.txt b/requirements.txt index 47e2b9c..b40fa08 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 From ccb2180b5b5196aa9acf204adba13d7c81aefd3c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 16 Sep 2023 08:01:18 -0400 Subject: [PATCH 040/114] Use TACoApplicationAgent instead of PREApplicationAgent. --- porter/main.py | 4 ++-- tests/conftest.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/porter/main.py b/porter/main.py index d357361..b6bf5bd 100644 --- a/porter/main.py +++ b/porter/main.py @@ -5,7 +5,7 @@ from eth_typing import ChecksumAddress from eth_utils import to_checksum_address from flask import Response, request -from nucypher.blockchain.eth.agents import ContractAgency, PREApplicationAgent +from nucypher.blockchain.eth.agents import ContractAgency, TACoApplicationAgent from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import ( BaseContractRegistry, @@ -99,7 +99,7 @@ def __init__(self, self.eth_provider_uri = eth_provider_uri self.registry = registry or InMemoryContractRegistry.from_latest_publication(network=domain) - self.application_agent = ContractAgency.get_agent(PREApplicationAgent, registry=self.registry, provider_uri=self.eth_provider_uri) + self.application_agent = ContractAgency.get_agent(TACoApplicationAgent, registry=self.registry, provider_uri=self.eth_provider_uri) super().__init__(save_metadata=True, domain=domain, node_class=node_class, *args, **kwargs) diff --git a/tests/conftest.py b/tests/conftest.py index 228951f..9e7b76d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,7 +11,7 @@ from nucypher.blockchain.eth.agents import ( ContractAgency, CoordinatorAgent, - PREApplicationAgent, + TACoApplicationAgent, StakingProvidersReservoir, ) from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory @@ -181,7 +181,7 @@ def mock_reservoir( } return StakingProvidersReservoir(addresses) - mock_agent = mock_contract_agency.get_agent(PREApplicationAgent) + mock_agent = mock_contract_agency.get_agent(TACoApplicationAgent) mock_agent.get_staking_provider_reservoir = mock_reservoir From eea628b44ecfb48a5d60c3aae45c31e3f6b94ccc Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 16 Sep 2023 08:03:04 -0400 Subject: [PATCH 041/114] Add condition type to time condition for tests. --- tests/conftest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/conftest.py b/tests/conftest.py index 9e7b76d..534b8f9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -335,6 +335,7 @@ def dkg_setup( CONDITIONS = { "version": ConditionLingo.VERSION, "condition": { + "conditionType": "time", "returnValueTest": {"value": "0", "comparator": ">"}, "method": "blocktime", "chain": TESTERCHAIN_CHAIN_ID, From 4a3dd1fd730a982bcac8ab529d0f85b980b8c6a6 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 16 Sep 2023 08:05:00 -0400 Subject: [PATCH 042/114] Enrico now needs to sign encrypted data, and returns a ThresholdMessageKit; accommodate changes for tests. Update condition blockchain test set up. Update test Ritual information based on changes to Coordinator contract. --- tests/conftest.py | 73 +++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 534b8f9..888cfb2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import os from typing import Iterable, List, Optional, Tuple +from unittest.mock import MagicMock -import nucypher import pytest from click.testing import CliRunner from eth_typing import ChecksumAddress @@ -11,30 +11,27 @@ from nucypher.blockchain.eth.agents import ( ContractAgency, CoordinatorAgent, - TACoApplicationAgent, StakingProvidersReservoir, + TACoApplicationAgent, ) from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory +from nucypher.blockchain.eth.networks import NetworksInventory from nucypher.blockchain.eth.registry import InMemoryContractRegistry +from nucypher.blockchain.eth.signers.software import Web3Signer from nucypher.characters.lawful import Enrico, Ursula from nucypher.config.constants import TEMPORARY_DOMAIN from nucypher.crypto.ferveo import dkg from nucypher.crypto.powers import DecryptingPower, RitualisticPower from nucypher.network.nodes import Learner, Teacher from nucypher.policy.conditions.lingo import ConditionLingo -from nucypher.policy.conditions.types import Lingo from nucypher.utilities.logging import GlobalLoggerSettings -from nucypher_core import HRAC, Address, TreasureMap -from nucypher_core.ferveo import ( - Ciphertext, - DkgPublicKey, - Validator, -) +from nucypher_core import HRAC, Address, ThresholdMessageKit, TreasureMap +from nucypher_core.ferveo import DkgPublicKey, Validator from porter.emitters import WebEmitter from porter.main import Porter from tests.constants import MOCK_ETH_PROVIDER_URI, TESTERCHAIN_CHAIN_ID -from tests.mock.coordinator import MockCoordinatorAgent +from tests.mock.agents import MockContractAgent from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager # Crash on server error by default @@ -107,19 +104,27 @@ def always_use_mock(*a, **k): return mock_testerchain -@pytest.fixture(autouse=True, scope="session") +@pytest.fixture(scope="session", autouse=True) def mock_condition_blockchains(session_mocker): """adds testerchain's chain ID to permitted conditional chains""" + session_mocker.patch.dict( + "nucypher.policy.conditions.evm._CONDITION_CHAINS", + {TESTERCHAIN_CHAIN_ID: "eth-tester/pyevm"}, + ) + session_mocker.patch.object( - nucypher.policy.conditions.evm, - "_CONDITION_CHAINS", - tuple([TESTERCHAIN_CHAIN_ID]), + NetworksInventory, "get_polygon_chain_id", return_value=TESTERCHAIN_CHAIN_ID + ) + + session_mocker.patch.object( + NetworksInventory, "get_ethereum_chain_id", return_value=TESTERCHAIN_CHAIN_ID ) @pytest.fixture(scope='module') def test_registry(): - return InMemoryContractRegistry() + registry = InMemoryContractRegistry() + return registry @pytest.fixture(scope="module", autouse=True) @@ -162,13 +167,20 @@ def mock_contract_agency(module_mocker, application_economics): @pytest.fixture(scope="module") -def coordinator_agent(mock_contract_agency) -> MockCoordinatorAgent: - coordinator_agent: CoordinatorAgent = mock_contract_agency.get_agent( - CoordinatorAgent, registry=None +def coordinator_agent(mock_contract_agency) -> MockContractAgent: + coordinator_agent = mock_contract_agency.get_agent( + CoordinatorAgent, registry=None, provider_uri=None # parameters don't matter ) return coordinator_agent +@pytest.fixture(scope="module", autouse=True) +def mock_condition_provider_configuration(module_mocker, testerchain): + module_mocker.patch.object( + Operator, "_make_condition_provider", return_value=testerchain.provider + ) + + @pytest.fixture(scope="module", autouse=True) def mock_sample_reservoir(testerchain, mock_contract_agency): def mock_reservoir( @@ -195,8 +207,16 @@ def mock_substantiate_stamp(module_mocker, monkeymodule): @pytest.fixture(scope='module') def test_registry_source_manager(test_registry): - with mock_registry_source_manager(test_registry=test_registry): - yield + with mock_registry_source_manager(test_registry=test_registry) as real_inventory: + yield real_inventory + + +@pytest.fixture(scope="module") +def mock_signer(get_random_checksum_address): + signer = MagicMock(spec=Web3Signer) + signer.sign_message.return_value = os.urandom(32) + signer.accounts = [get_random_checksum_address()] + return signer @pytest.fixture(scope="module") @@ -302,8 +322,12 @@ def dkg_setup( ritual = CoordinatorAgent.Ritual( initiator=get_random_checksum_address(), + authority=get_random_checksum_address(), + access_controller=get_random_checksum_address(), dkg_size=num_shares, init_timestamp=123456, + end_timestamp=1234567, + threshold=threshold, total_transcripts=num_shares, total_aggregations=num_shares, public_key=CoordinatorAgent.Ritual.G1Point.from_dkg_public_key(public_key), @@ -343,12 +367,13 @@ def dkg_setup( } +@pytest.mark.usefixtures("mock_rpc_condition") @pytest.fixture(scope="module") -def dkg_encrypted_data(dkg_setup) -> Tuple[Ciphertext, bytes, Lingo]: +def dkg_encrypted_data(dkg_setup, mock_signer) -> Tuple[ThresholdMessageKit, bytes]: _, public_key, _, _ = dkg_setup - enrico = Enrico(encrypting_key=public_key) - ciphertext = enrico.encrypt_for_dkg( + enrico = Enrico(encrypting_key=public_key, signer=mock_signer) + threshold_message_kit = enrico.encrypt_for_dkg( plaintext=PLAINTEXT.encode(), conditions=CONDITIONS ) - return ciphertext, PLAINTEXT.encode(), CONDITIONS + return threshold_message_kit, PLAINTEXT.encode() From 96c013ce7ca5815f9078ab868a1d44d7774ae18f Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 16 Sep 2023 08:06:40 -0400 Subject: [PATCH 043/114] Use ThresholdMessageKit instead of Ciphertext. Create ThresholdDecryptionRequest using CiphertextHeader and AccessControlPolicy which are obtained from the ThresholdMessageKit. --- tests/cbd/test_cbd_specifications.py | 15 ++++++------ tests/cbd/test_porter_cbd_python_interface.py | 20 +++++----------- tests/cbd/test_porter_cbd_web_interface.py | 24 +++++++------------ tests/test_fields.py | 7 +++--- tests/test_porter_cli.py | 9 +++---- 5 files changed, 28 insertions(+), 47 deletions(-) diff --git a/tests/cbd/test_cbd_specifications.py b/tests/cbd/test_cbd_specifications.py index 8ff4b8c..7123aac 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/cbd/test_cbd_specifications.py @@ -1,8 +1,6 @@ -import json - import pytest from eth_utils import to_checksum_address -from nucypher_core import Conditions, SessionStaticSecret, ThresholdDecryptionRequest +from nucypher_core import SessionStaticSecret, ThresholdDecryptionRequest from nucypher_core.ferveo import FerveoVariant from porter.fields.cbd import ( @@ -18,15 +16,16 @@ def test_cbd_decrypt( porter, dkg_setup, dkg_encrypted_data, get_random_checksum_address ): ritual_id, public_key, cohort, threshold = dkg_setup - ciphertext, expected_plaintext, conditions = dkg_encrypted_data + threshold_message_kit, expected_plaintext = dkg_encrypted_data cbd_decrypt_schema = CBDDecrypt() decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, variant=FerveoVariant.Simple, - ciphertext=ciphertext, - conditions=Conditions(json.dumps(conditions)), + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, + context=None, ) requester_secret_key = SessionStaticSecret.random() @@ -124,11 +123,11 @@ def test_cbd_decrypt( cbd_outcome = porter.cbd_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) - cbd_outcome_schema = CBDDecryptionOutcomeSchema() + assert len(cbd_outcome.errors) == 0, f"{cbd_outcome.errors}" assert len(cbd_outcome.encrypted_decryption_responses) >= threshold - assert len(cbd_outcome.errors) == 0 + cbd_outcome_schema = CBDDecryptionOutcomeSchema() outcome_json = cbd_outcome_schema.dump(cbd_outcome) output = cbd_decrypt_schema.dump(obj={"decryption_results": cbd_outcome}) assert ( diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/cbd/test_porter_cbd_python_interface.py index a9105db..689307c 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/cbd/test_porter_cbd_python_interface.py @@ -1,23 +1,20 @@ -import json - -from nucypher_core import Conditions, SessionStaticSecret, ThresholdDecryptionRequest +from nucypher_core import SessionStaticSecret, ThresholdDecryptionRequest from nucypher_core.ferveo import ( DecryptionShareSimple, - combine_decryption_shares_simple, - decrypt_with_shared_secret, FerveoVariant, + combine_decryption_shares_simple, ) def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): ritual_id, public_key, cohort, threshold = dkg_setup - ciphertext, expected_plaintext, conditions = dkg_encrypted_data + threshold_message_kit, expected_plaintext = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, variant=FerveoVariant.Simple, - ciphertext=ciphertext, - conditions=Conditions(json.dumps(conditions)), + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, ) requester_secret_key = SessionStaticSecret.random() @@ -67,12 +64,7 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): decryption_shares.append(decryption_share) combined_shares = combine_decryption_shares_simple(decryption_shares) - conditions = json.dumps(conditions).encode() # aad - cleartext = decrypt_with_shared_secret( - ciphertext, - conditions, # aad - combined_shares, - ) + cleartext = threshold_message_kit.decrypt_with_shared_secret(combined_shares) assert bytes(cleartext) == expected_plaintext # diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/cbd/test_porter_cbd_web_interface.py index 531f375..18613bc 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/cbd/test_porter_cbd_web_interface.py @@ -3,7 +3,6 @@ from eth_utils import to_checksum_address from nucypher_core import ( - Conditions, EncryptedThresholdDecryptionResponse, SessionStaticSecret, ThresholdDecryptionRequest, @@ -11,7 +10,6 @@ from nucypher_core.ferveo import ( DecryptionShareSimple, combine_decryption_shares_simple, - decrypt_with_shared_secret, FerveoVariant, ) @@ -32,13 +30,13 @@ def test_cbd_decrypt( # Setup ritual_id, public_key, cohort, threshold = dkg_setup - ciphertext, expected_plaintext, conditions = dkg_encrypted_data + threshold_message_kit, expected_plaintext = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, variant=FerveoVariant.Simple, - ciphertext=ciphertext, - conditions=Conditions(json.dumps(conditions)), + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, ) requester_secret_key = SessionStaticSecret.random() @@ -82,12 +80,13 @@ def test_cbd_decrypt( decryption_results = response_data["result"]["decryption_results"] assert decryption_results + errors = decryption_results["errors"] + assert len(errors) == 0, f"{errors}" # no errors + assert len(decryption_results["encrypted_decryption_responses"]) >= threshold cohort_addresses = [to_checksum_address(ursula.checksum_address) for ursula in cohort] - errors = decryption_results["errors"] - assert len(errors) == 0 # no errors encrypted_decryption_responses = decryption_results[ "encrypted_decryption_responses" @@ -112,12 +111,7 @@ def test_cbd_decrypt( decryption_shares.append(decryption_share) combined_shares = combine_decryption_shares_simple(decryption_shares) - json_conditions = json.dumps(conditions).encode() # aad - cleartext = decrypt_with_shared_secret( - ciphertext, - json_conditions, # aad - combined_shares, - ) + cleartext = threshold_message_kit.decrypt_with_shared_secret(combined_shares) assert bytes(cleartext) == expected_plaintext # @@ -134,8 +128,8 @@ def test_cbd_decrypt( request = ThresholdDecryptionRequest( ritual_id=999, # rando invalid ritual id variant=FerveoVariant.Simple, - ciphertext=ciphertext, - conditions=Conditions(json.dumps(conditions)), + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, ) ursula_decryption_request_static_key = cohort[ diff --git a/tests/test_fields.py b/tests/test_fields.py index f06487a..66ff280 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -7,7 +7,6 @@ from marshmallow import fields as marshmallow_fields from nucypher_core import ( Address, - Conditions, EncryptedThresholdDecryptionRequest, EncryptedThresholdDecryptionResponse, MessageKit, @@ -296,13 +295,13 @@ def test_cbd_dict_field(get_random_checksum_address): def test_encrypted_threshold_decryption_request(dkg_setup, dkg_encrypted_data): ritual_id, _, _, _ = dkg_setup - ciphertext, expected_plaintext, conditions = dkg_encrypted_data + threshold_message_kit, expected_plaintext = dkg_encrypted_data decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, variant=FerveoVariant.Simple, - ciphertext=ciphertext, - conditions=Conditions(json.dumps(conditions)), + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, ) field = EncryptedThresholdDecryptionRequestField() diff --git a/tests/test_porter_cli.py b/tests/test_porter_cli.py index fd29b0f..10d00c0 100644 --- a/tests/test_porter_cli.py +++ b/tests/test_porter_cli.py @@ -1,16 +1,13 @@ import pytest from nucypher.characters.lawful import Ursula from nucypher.config.constants import TEMPORARY_DOMAIN -from tests.utils.ursula import select_test_port -from porter.cli.literature import ( - PORTER_RUN_MESSAGE, - PORTER_CORS_ALLOWED_ORIGINS -) +from porter.cli.literature import PORTER_CORS_ALLOWED_ORIGINS, PORTER_RUN_MESSAGE from porter.cli.main import porter_cli from porter.main import Porter +from tests.constants import TEST_ETH_PROVIDER_URI +from tests.utils.ursula import select_test_port -TEST_ETH_PROVIDER_URI = "tester://pyevm" @pytest.fixture(scope="function") def teacher_uri(mocker, ursulas, test_registry_source_manager): From 84eda452d1933c0dc34d5476503614bd376ed25d Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 18 Sep 2023 08:58:56 -0400 Subject: [PATCH 044/114] Mock that encryption is authorized for tests. --- tests/conftest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/conftest.py b/tests/conftest.py index 888cfb2..36843c3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -351,6 +351,7 @@ def dkg_setup( coordinator_agent.get_ritual_status.return_value = ( CoordinatorAgent.Ritual.Status.FINALIZED ) + coordinator_agent.is_encryption_authorized.return_value = True return ritual_id, public_key, cohort, threshold From 800dc02bbe36c1d6f988043941e3f14eddb21161 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 18 Sep 2023 09:38:00 -0400 Subject: [PATCH 045/114] Fix linter error. --- porter/main.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/porter/main.py b/porter/main.py index b6bf5bd..2e4cfac 100644 --- a/porter/main.py +++ b/porter/main.py @@ -98,8 +98,14 @@ def __init__(self, BlockchainInterfaceFactory.initialize_interface(eth_provider_uri=eth_provider_uri) self.eth_provider_uri = eth_provider_uri - self.registry = registry or InMemoryContractRegistry.from_latest_publication(network=domain) - self.application_agent = ContractAgency.get_agent(TACoApplicationAgent, registry=self.registry, provider_uri=self.eth_provider_uri) + self.registry = registry or InMemoryContractRegistry.from_latest_publication( + network=domain + ) + self.application_agent = ContractAgency.get_agent( + TACoApplicationAgent, + registry=self.registry, + provider_uri=self.eth_provider_uri, + ) super().__init__(save_metadata=True, domain=domain, node_class=node_class, *args, **kwargs) From b0e5edcbd4331a33fd508da0274050bec53a7757 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 16:09:52 -0400 Subject: [PATCH 046/114] Relock dependencies to latest `nucypher/nucypher` changes and contract registry updates. --- Pipfile | 4 ++-- Pipfile.lock | 6 +++--- dev-requirements.txt | 4 ++-- requirements.txt | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Pipfile b/Pipfile index 255a468..649efce 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "alpha-13"} +nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "mock-polygon"} nucypher-core = "==0.12.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "alpha-13", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "mock-polygon", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 0b9f170..d85bc69 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "c877fb2fde9d1e06b765df82a2f57ee10aa97d0f24dfe2c89229009a79682307" + "sha256": "afb6cfb5f36951953c84003b2e73f986087cada3fa2a63f3b2d86bcc4cc134e0" }, "pipfile-spec": 6, "requires": { @@ -1149,7 +1149,7 @@ }, "nucypher": { "git": "https://github.com/derekpierre/nucypher.git", - "ref": "c92302dbbed84854a413d4f3177fdb244c62822c" + "ref": "4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5" }, "nucypher-core": { "hashes": [ @@ -3627,7 +3627,7 @@ }, "nucypher": { "git": "https://github.com/derekpierre/nucypher.git", - "ref": "c92302dbbed84854a413d4f3177fdb244c62822c" + "ref": "4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5" }, "nucypher-core": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 27309e0..c034ee0 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' base58==1.0.3 bitarray==2.8.1 bytestring-splitter==2.4.1 @@ -85,7 +85,7 @@ msgspec==0.18.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/derekpierre/nucypher.git@c92302dbbed84854a413d4f3177fdb244c62822c#egg=nucypher +git+https://github.com/derekpierre/nucypher.git@4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5#egg=nucypher nucypher-core==0.12.0 numpy==1.24.4 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index b40fa08..c36f28b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 @@ -55,7 +55,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/derekpierre/nucypher.git@c92302dbbed84854a413d4f3177fdb244c62822c#egg=nucypher +git+https://github.com/derekpierre/nucypher.git@4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5#egg=nucypher nucypher-core==0.12.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 From 1a5741c3f9bf73f871ddd02e821504a1752745c4 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 16:10:30 -0400 Subject: [PATCH 047/114] Remove use of Economics/EconomicsFactory. --- tests/conftest.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 36843c3..c266d51 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,7 +6,6 @@ from click.testing import CliRunner from eth_typing import ChecksumAddress from eth_utils import to_checksum_address -from nucypher.blockchain.economics import Economics, EconomicsFactory from nucypher.blockchain.eth.actors import Operator from nucypher.blockchain.eth.agents import ( ContractAgency, @@ -138,18 +137,8 @@ def faked(self, *args, **kwargs): return testerchain.stake_providers_accounts -@pytest.fixture(scope='module') -def application_economics(): - economics = Economics() - return economics - - @pytest.fixture(scope='module', autouse=True) -def mock_contract_agency(module_mocker, application_economics): - - # Patch - module_mocker.patch.object(EconomicsFactory, 'get_economics', return_value=application_economics) - +def mock_contract_agency(): from tests.mock.agents import MockContractAgency # Monkeypatch # TODO: Use better tooling for this monkeypatch? From a4df7b4ee174140db3b8a11940644ea9622e6e76 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 16:15:38 -0400 Subject: [PATCH 048/114] Fix python version limitation for `backports.zoneinfo` for [dev]requirements.txt. --- dev-requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index c034ee0..caf8020 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' base58==1.0.3 bitarray==2.8.1 bytestring-splitter==2.4.1 diff --git a/requirements.txt b/requirements.txt index c36f28b..6b83e1f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 From 011421ba04f78c712dcdeb293914bfeaa97c7f81 Mon Sep 17 00:00:00 2001 From: piotr-roslaniec <39299780+piotr-roslaniec@users.noreply.github.com> Date: Wed, 27 Sep 2023 09:56:58 +0200 Subject: [PATCH 049/114] Create PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..fba3a32 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,25 @@ +**Type of PR:** +- [ ] Bugfix +- [ ] Feature +- [ ] Documentation +- [ ] Other + +**Required reviews:** +- [ ] 1 +- [ ] 2 +- [X] 3 + +**What this does:** +> High-level idea of the changes introduced in this PR. +> List relevant API changes (if any), as well as related PRs and issues. + +**Issues fixed/closed:** +> - Fixes #... + +**Why it's needed:** +> Explain how this PR fits in the greater context of the NuCypher Network. +> E.g., if this PR addresses a `nucypher/productdev` issue, let reviewers know! + +**Notes for reviewers:** +> What should reviewers focus on? +> Is there a particular commit/function/section of your PR that requires more attention from reviewers? From 70e24f8be26391691b00b7dfb60ccd7fabd67419 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 28 Sep 2023 13:40:56 -0400 Subject: [PATCH 050/114] Update Porter to use nucypher dkg-dev-14 tagged dependency. --- Pipfile | 4 ++-- Pipfile.lock | 10 +++++----- dev-requirements.txt | 2 +- requirements.txt | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Pipfile b/Pipfile index 649efce..05293eb 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "mock-polygon"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-14"} nucypher-core = "==0.12.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "mock-polygon", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-14", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index d85bc69..9c5bb14 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "afb6cfb5f36951953c84003b2e73f986087cada3fa2a63f3b2d86bcc4cc134e0" + "sha256": "5a78283d498833f09287cb9264c9283b009ca49a0cd380168bf6b34e2f749b55" }, "pipfile-spec": 6, "requires": { @@ -1148,8 +1148,8 @@ "version": "==1.0.0" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "6ea73db2c4585da8b52c51fac071a0bc07f8f406" }, "nucypher-core": { "hashes": [ @@ -3626,8 +3626,8 @@ "version": "==1.8.0" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "6ea73db2c4585da8b52c51fac071a0bc07f8f406" }, "nucypher-core": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index caf8020..9d05d6d 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -85,7 +85,7 @@ msgspec==0.18.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/derekpierre/nucypher.git@4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5#egg=nucypher +git+https://github.com/nucypher/nucypher.git@6ea73db2c4585da8b52c51fac071a0bc07f8f406#egg=nucypher nucypher-core==0.12.0 numpy==1.24.4 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 6b83e1f..b09c019 100644 --- a/requirements.txt +++ b/requirements.txt @@ -55,7 +55,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/derekpierre/nucypher.git@4e9cc2c445bd4eb8f6aeae5d020c04898c6139b5#egg=nucypher +git+https://github.com/nucypher/nucypher.git@6ea73db2c4585da8b52c51fac071a0bc07f8f406#egg=nucypher nucypher-core==0.12.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 From 1a4ea618411114f5e76152af804c99e939e29a81 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 29 Sep 2023 09:14:00 -0400 Subject: [PATCH 051/114] Remove [dev] extra when building docker container for Porter. The dev build is no longer necessary. --- deploy/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index 42de979..2d14cad 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -8,6 +8,6 @@ WORKDIR /code COPY . /code # Porter requirements -RUN pip3 install .[dev] +RUN pip3 install . CMD ["/bin/bash"] From d3929bd53445f41608ee992e7feda85f26652cd0 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 6 Oct 2023 16:25:52 -0400 Subject: [PATCH 052/114] Relock Porter dependencies to use nucypher dkg-dev-15. --- Pipfile | 4 ++-- Pipfile.lock | 6 +++--- dev-requirements.txt | 4 ++-- requirements.txt | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Pipfile b/Pipfile index 05293eb..dba427a 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,12 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-14"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-15"} nucypher-core = "==0.12.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-14", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-15", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 9c5bb14..0fcf43d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "5a78283d498833f09287cb9264c9283b009ca49a0cd380168bf6b34e2f749b55" + "sha256": "e62871d5c144c01492108b21ad223fbb149ac4fc5d7fdfd347375d79896041c8" }, "pipfile-spec": 6, "requires": { @@ -1149,7 +1149,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "6ea73db2c4585da8b52c51fac071a0bc07f8f406" + "ref": "ff383dc663c7100cf2ae6f899ed268213b6c653d" }, "nucypher-core": { "hashes": [ @@ -3627,7 +3627,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "6ea73db2c4585da8b52c51fac071a0bc07f8f406" + "ref": "ff383dc663c7100cf2ae6f899ed268213b6c653d" }, "nucypher-core": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 9d05d6d..eb058f1 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' base58==1.0.3 bitarray==2.8.1 bytestring-splitter==2.4.1 @@ -85,7 +85,7 @@ msgspec==0.18.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/nucypher/nucypher.git@6ea73db2c4585da8b52c51fac071a0bc07f8f406#egg=nucypher +git+https://github.com/nucypher/nucypher.git@ff383dc663c7100cf2ae6f899ed268213b6c653d#egg=nucypher nucypher-core==0.12.0 numpy==1.24.4 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index b09c019..800cb9b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 @@ -55,7 +55,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/nucypher/nucypher.git@6ea73db2c4585da8b52c51fac071a0bc07f8f406#egg=nucypher +git+https://github.com/nucypher/nucypher.git@ff383dc663c7100cf2ae6f899ed268213b6c653d#egg=nucypher nucypher-core==0.12.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 From f7c4161a980dd99815ac87567b8931f30ddbb711 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 6 Oct 2023 16:26:50 -0400 Subject: [PATCH 053/114] Update eth_provider_uri -> eth_endpoint, network -> domain, use ContractRegistry, update test fixtures. --- deploy/docker/docker-compose.yml | 4 +- deploy/docker/nginx/docker-compose.yml | 4 +- porter/cli/main.py | 125 +++++++++++++++---------- porter/main.py | 42 +++++---- tests/conftest.py | 61 ++++++------ tests/test_porter_cli.py | 101 ++++++++++++-------- 6 files changed, 197 insertions(+), 140 deletions(-) diff --git a/deploy/docker/docker-compose.yml b/deploy/docker/docker-compose.yml index 4ae49be..a077432 100644 --- a/deploy/docker/docker-compose.yml +++ b/deploy/docker/docker-compose.yml @@ -15,6 +15,6 @@ services: - .:/code - ~/.local/share/nucypher:/nucypher command: ["nucypher-porter", "run", - "--eth-provider", "${WEB3_PROVIDER_URI}", - "--network", "${NUCYPHER_NETWORK}", + "--eth-endpoint", "${WEB3_PROVIDER_URI}", + "--domain", "${NUCYPHER_NETWORK}", "--allow-origins", "${PORTER_CORS_ALLOW_ORIGINS}"] # empty string if env var not defined which translates to CORS not enabled by default diff --git a/deploy/docker/nginx/docker-compose.yml b/deploy/docker/nginx/docker-compose.yml index 418c3a0..3834eb3 100644 --- a/deploy/docker/nginx/docker-compose.yml +++ b/deploy/docker/nginx/docker-compose.yml @@ -29,8 +29,8 @@ services: - .:/code - ~/.local/share/nucypher:/nucypher command: [ "nucypher-porter", "run", - "--eth-provider", "${WEB3_PROVIDER_URI}", - "--network", "${NUCYPHER_NETWORK}" ] + "--eth-domain", "${WEB3_PROVIDER_URI}", + "--domain", "${NUCYPHER_NETWORK}" ] environment: - VIRTUAL_HOST=porter.local - VIRTUAL_PORT=9155 diff --git a/porter/cli/main.py b/porter/cli/main.py index 370245c..0fb3a77 100644 --- a/porter/cli/main.py +++ b/porter/cli/main.py @@ -1,24 +1,20 @@ import click -from nucypher.blockchain.eth.networks import NetworksInventory +from nucypher.blockchain.eth.domains import TACoDomain from nucypher.characters.lawful import Ursula from nucypher.cli.config import group_general_config from nucypher.cli.options import ( - option_network, - option_eth_provider_uri, - option_teacher_uri, + option_domain, + option_eth_endpoint, + option_min_stake, option_registry_filepath, - option_min_stake + option_teacher_uri, ) from nucypher.cli.types import NETWORK_PORT -from nucypher.cli.utils import setup_emitter, get_registry -from nucypher.config.constants import TEMPORARY_DOMAIN +from nucypher.cli.utils import get_registry, setup_emitter -from porter.cli.help import echo_version, echo_config_root_path, echo_logging_root_path -from porter.cli.literature import ( - PORTER_CORS_ALLOWED_ORIGINS, - PORTER_RUN_MESSAGE -) -from porter.main import Porter, BANNER +from porter.cli.help import echo_config_root_path, echo_logging_root_path, echo_version +from porter.cli.literature import PORTER_CORS_ALLOWED_ORIGINS, PORTER_RUN_MESSAGE +from porter.main import BANNER, Porter @click.group() @@ -34,53 +30,86 @@ def porter_cli(): @porter_cli.command() @group_general_config -@option_network(default=NetworksInventory.DEFAULT, validate=True, required=False) -@option_eth_provider_uri(required=False) +@option_domain(default=TACoDomain.DEFAULT_DOMAIN_NAME, validate=True, required=False) +@option_eth_endpoint(required=False) @option_teacher_uri @option_registry_filepath @option_min_stake -@click.option('--http-port', help="Porter HTTP/HTTPS port for JSON endpoint", type=NETWORK_PORT, default=Porter.DEFAULT_PORT) -@click.option('--allow-origins', help="The CORS origin(s) comma-delimited list of strings/regexes for origins to allow - no origins allowed by default", type=click.STRING) -@click.option('--dry-run', '-x', help="Execute normally without actually starting Porter", is_flag=True) -@click.option('--eager', help="Start learning and scraping the network before starting up other services", is_flag=True, default=True) -def run(general_config, - network, - eth_provider_uri, - teacher_uri, - registry_filepath, - min_stake, - http_port, - allow_origins, - dry_run, - eager): +@click.option( + "--http-port", + help="Porter HTTP/HTTPS port for JSON endpoint", + type=NETWORK_PORT, + default=Porter.DEFAULT_PORT, +) +@click.option( + "--allow-origins", + help="The CORS origin(s) comma-delimited list of strings/regexes for origins to allow - no origins allowed by default", + type=click.STRING, +) +@click.option( + "--dry-run", + "-x", + help="Execute normally without actually starting Porter", + is_flag=True, +) +@click.option( + "--eager", + help="Start learning and scraping the domain before starting up other services", + is_flag=True, + default=True, +) +def run( + general_config, + domain, + eth_endpoint, + teacher_uri, + registry_filepath, + min_stake, + http_port, + allow_origins, + dry_run, + eager, +): """Start Porter's Web controller.""" emitter = setup_emitter(general_config, banner=BANNER) # HTTP/HTTPS - if not eth_provider_uri: - raise click.BadOptionUsage(option_name='--eth-provider', - message=click.style("--eth-provider is required for decentralized porter.", fg="red")) - if not network: - # should never happen - network defaults to 'mainnet' if not specified - raise click.BadOptionUsage(option_name='--network', - message=click.style("--network is required for decentralized porter.", "red")) + if not eth_endpoint: + raise click.BadOptionUsage( + option_name="--eth-endpoint", + message=click.style( + "--eth-endpoint is required for decentralized porter.", fg="red" + ), + ) + if not domain: + # should never happen - domain defaults to 'mainnet' if not specified + raise click.BadOptionUsage( + option_name="--domain", + message=click.style( + "--domain is required for decentralized porter.", "red" + ), + ) - registry = get_registry(network=network, registry_filepath=registry_filepath) + registry = get_registry(domain=domain, registry_filepath=registry_filepath) teacher = None if teacher_uri: - teacher = Ursula.from_teacher_uri(teacher_uri=teacher_uri, - min_stake=min_stake, - registry=registry, - provider_uri=eth_provider_uri) + teacher = Ursula.from_teacher_uri( + teacher_uri=teacher_uri, + min_stake=min_stake, + registry=registry, + eth_endpoint=eth_endpoint, + ) - PORTER = Porter(domain=network, - known_nodes={teacher} if teacher else None, - registry=registry, - start_learning_now=eager, - eth_provider_uri=eth_provider_uri) + PORTER = Porter( + domain=domain, + known_nodes={teacher} if teacher else None, + registry=registry, + start_learning_now=eager, + eth_endpoint=eth_endpoint, + ) - emitter.message(f"Network: {PORTER.domain.capitalize()}", color='green') - emitter.message(f"ETH Provider URI: {eth_provider_uri}", color='green') + emitter.message(f"TACo Domain: {PORTER.domain.capitalize()}", color="green") + emitter.message(f"ETH Endpoint URI: {eth_endpoint}", color="green") # firm up falsy status (i.e. change specified empty string to None) allow_origins = allow_origins if allow_origins else None diff --git a/porter/main.py b/porter/main.py index 2e4cfac..aaaa725 100644 --- a/porter/main.py +++ b/porter/main.py @@ -7,10 +7,7 @@ from flask import Response, request from nucypher.blockchain.eth.agents import ContractAgency, TACoApplicationAgent from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory -from nucypher.blockchain.eth.registry import ( - BaseContractRegistry, - InMemoryContractRegistry, -) +from nucypher.blockchain.eth.registry import ContractRegistry from nucypher.characters.lawful import Ursula from nucypher.crypto.powers import DecryptingPower from nucypher.network.decryption import ThresholdDecryptionClient @@ -39,7 +36,7 @@ | | | |_| | | | |_( (/ /| | |_| \___/|_| \___)____)_| -the Pipe for TACo Application network operations +the Pipe for TACo Application operations """ @@ -83,28 +80,33 @@ class CBDDecryptionOutcome(NamedTuple): ] errors: Dict[ChecksumAddress, str] - def __init__(self, - domain: str = None, - registry: BaseContractRegistry = None, - controller: bool = True, - node_class: object = Ursula, - eth_provider_uri: str = None, - execution_timeout: int = DEFAULT_EXECUTION_TIMEOUT, - *args, **kwargs): - if not eth_provider_uri: + def __init__( + self, + domain: str = None, + registry: ContractRegistry = None, + controller: bool = True, + node_class: object = Ursula, + eth_endpoint: str = None, + execution_timeout: int = DEFAULT_EXECUTION_TIMEOUT, + *args, + **kwargs, + ): + if not eth_endpoint: raise ValueError('ETH Provider URI is required for decentralized Porter.') - if not BlockchainInterfaceFactory.is_interface_initialized(eth_provider_uri=eth_provider_uri): - BlockchainInterfaceFactory.initialize_interface(eth_provider_uri=eth_provider_uri) + if not BlockchainInterfaceFactory.is_interface_initialized( + endpoint=eth_endpoint + ): + BlockchainInterfaceFactory.initialize_interface(endpoint=eth_endpoint) - self.eth_provider_uri = eth_provider_uri - self.registry = registry or InMemoryContractRegistry.from_latest_publication( - network=domain + self.eth_endpoint = eth_endpoint + self.registry = registry or ContractRegistry.from_latest_publication( + domain=domain ) self.application_agent = ContractAgency.get_agent( TACoApplicationAgent, registry=self.registry, - provider_uri=self.eth_provider_uri, + blockchain_endpoint=self.eth_endpoint, ) super().__init__(save_metadata=True, domain=domain, node_class=node_class, *args, **kwargs) diff --git a/tests/conftest.py b/tests/conftest.py index c266d51..6d0bbb6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,9 +13,9 @@ StakingProvidersReservoir, TACoApplicationAgent, ) +from nucypher.blockchain.eth.domains import DomainInfo, TACoDomain from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory -from nucypher.blockchain.eth.networks import NetworksInventory -from nucypher.blockchain.eth.registry import InMemoryContractRegistry +from nucypher.blockchain.eth.registry import ContractRegistry from nucypher.blockchain.eth.signers.software import Web3Signer from nucypher.characters.lawful import Enrico, Ursula from nucypher.config.constants import TEMPORARY_DOMAIN @@ -29,9 +29,14 @@ from porter.emitters import WebEmitter from porter.main import Porter -from tests.constants import MOCK_ETH_PROVIDER_URI, TESTERCHAIN_CHAIN_ID +from tests.constants import ( + MOCK_ETH_PROVIDER_URI, + TESTERCHAIN_CHAIN_ID, + TESTERCHAIN_CHAIN_INFO, +) from tests.mock.agents import MockContractAgent -from tests.mock.interfaces import MockBlockchain, mock_registry_source_manager +from tests.mock.interfaces import MockBlockchain +from tests.utils.registry import MockRegistrySource, mock_registry_sources # Crash on server error by default WebEmitter._crash_on_error_default = True @@ -103,27 +108,29 @@ def always_use_mock(*a, **k): return mock_testerchain -@pytest.fixture(scope="session", autouse=True) -def mock_condition_blockchains(session_mocker): +@pytest.fixture(scope="module", autouse=True) +def mock_condition_blockchains(module_mocker): """adds testerchain's chain ID to permitted conditional chains""" - session_mocker.patch.dict( + module_mocker.patch.dict( "nucypher.policy.conditions.evm._CONDITION_CHAINS", {TESTERCHAIN_CHAIN_ID: "eth-tester/pyevm"}, ) - session_mocker.patch.object( - NetworksInventory, "get_polygon_chain_id", return_value=TESTERCHAIN_CHAIN_ID + test_domain_info = DomainInfo( + TEMPORARY_DOMAIN, TESTERCHAIN_CHAIN_INFO, TESTERCHAIN_CHAIN_INFO ) - session_mocker.patch.object( - NetworksInventory, "get_ethereum_chain_id", return_value=TESTERCHAIN_CHAIN_ID + module_mocker.patch.object( + TACoDomain, "get_domain_info", return_value=test_domain_info ) @pytest.fixture(scope='module') -def test_registry(): - registry = InMemoryContractRegistry() - return registry +def test_registry(module_mocker): + with mock_registry_sources(mocker=module_mocker): + mock_source = MockRegistrySource(domain=TEMPORARY_DOMAIN) + registry = ContractRegistry(source=mock_source) + yield registry @pytest.fixture(scope="module", autouse=True) @@ -194,12 +201,6 @@ def mock_substantiate_stamp(module_mocker, monkeymodule): module_mocker.patch.object(Teacher, "validate_operator") -@pytest.fixture(scope='module') -def test_registry_source_manager(test_registry): - with mock_registry_source_manager(test_registry=test_registry) as real_inventory: - yield real_inventory - - @pytest.fixture(scope="module") def mock_signer(get_random_checksum_address): signer = MagicMock(spec=Web3Signer) @@ -211,15 +212,17 @@ def mock_signer(get_random_checksum_address): @pytest.fixture(scope="module") @pytest.mark.usefixtures('testerchain', 'agency') def porter(ursulas, mock_rest_middleware, test_registry): - porter = Porter(domain=TEMPORARY_DOMAIN, - eth_provider_uri=MOCK_ETH_PROVIDER_URI, - registry=test_registry, - abort_on_learning_error=True, - start_learning_now=True, - known_nodes=ursulas, - verify_node_bonding=False, - execution_timeout=2, - network_middleware=mock_rest_middleware) + porter = Porter( + domain=TEMPORARY_DOMAIN, + eth_endpoint=MOCK_ETH_PROVIDER_URI, + registry=test_registry, + abort_on_learning_error=True, + start_learning_now=True, + known_nodes=ursulas, + verify_node_bonding=False, + execution_timeout=2, + network_middleware=mock_rest_middleware, + ) yield porter porter.stop_learning_loop() diff --git a/tests/test_porter_cli.py b/tests/test_porter_cli.py index 10d00c0..eaf9a15 100644 --- a/tests/test_porter_cli.py +++ b/tests/test_porter_cli.py @@ -10,78 +10,101 @@ @pytest.fixture(scope="function") -def teacher_uri(mocker, ursulas, test_registry_source_manager): +def teacher_uri(mocker, ursulas): teacher = list(ursulas)[0] teacher_uri = teacher.seed_node_metadata(as_teacher_uri=True) mocker.patch.object(Ursula, 'from_teacher_uri', return_value=teacher) yield teacher_uri -def test_porter_cli_run_simple(click_runner, teacher_uri, test_registry_source_manager): - porter_run_command = ('run', - '--dry-run', - '--network', TEMPORARY_DOMAIN, - '--eth-provider', TEST_ETH_PROVIDER_URI, - '--teacher', teacher_uri) +def test_porter_cli_run_simple(click_runner, teacher_uri): + porter_run_command = ( + "run", + "--dry-run", + "--domain", + TEMPORARY_DOMAIN, + "--eth-endpoint", + TEST_ETH_PROVIDER_URI, + "--teacher", + teacher_uri, + ) result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code == 0, result.output output = result.output - assert f"Network: {TEMPORARY_DOMAIN}" in output + assert f"Domain: {TEMPORARY_DOMAIN}" in output assert PORTER_RUN_MESSAGE.format(http_port=Porter.DEFAULT_PORT) in output # Non-default port non_default_port = select_test_port() - porter_run_command = ('run', - '--dry-run', - '--network', TEMPORARY_DOMAIN, - '--eth-provider', TEST_ETH_PROVIDER_URI, - '--http-port', non_default_port, - '--teacher', teacher_uri) + porter_run_command = ( + "run", + "--dry-run", + "--domain", + TEMPORARY_DOMAIN, + "--eth-endpoint", + TEST_ETH_PROVIDER_URI, + "--http-port", + non_default_port, + "--teacher", + teacher_uri, + ) result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code == 0, result.output output = result.output - assert f"Network: {TEMPORARY_DOMAIN}" in output + assert f"Domain: {TEMPORARY_DOMAIN}" in output assert PORTER_RUN_MESSAGE.format(http_port=non_default_port) in output -def test_porter_cli_run_eth_provider_must_be_provided(click_runner, teacher_uri, test_registry_source_manager): - porter_run_command = ('run', - '--dry-run', - '--network', TEMPORARY_DOMAIN, - '--teacher', teacher_uri) +def test_porter_cli_run_eth_provider_must_be_provided(click_runner, teacher_uri): + porter_run_command = ( + "run", + "--dry-run", + "--domain", + TEMPORARY_DOMAIN, + "--teacher", + teacher_uri, + ) result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code != 0, result.output - assert f"--eth-provider is required" in result.output + assert f"--eth-endpoint is required" in result.output -def test_cli_run_with_cors_origin(click_runner, - teacher_uri, - test_registry_source_manager): +def test_cli_run_with_cors_origin(click_runner, teacher_uri): allow_origins = ".*\.example\.com,.*\.otherexample\.org" - porter_run_command = ('run', - '--dry-run', - '--network', TEMPORARY_DOMAIN, - '--eth-provider', TEST_ETH_PROVIDER_URI, - '--teacher', teacher_uri, - '--allow-origins', allow_origins) + porter_run_command = ( + "run", + "--dry-run", + "--domain", + TEMPORARY_DOMAIN, + "--eth-endpoint", + TEST_ETH_PROVIDER_URI, + "--teacher", + teacher_uri, + "--allow-origins", + allow_origins, + ) result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code == 0, result.output assert PORTER_RUN_MESSAGE.format(http_port=Porter.DEFAULT_PORT) in result.output assert PORTER_CORS_ALLOWED_ORIGINS.format(allow_origins=allow_origins.split(",")) in result.output -def test_cli_run_with_empty_string_cors_origin(click_runner, - teacher_uri, - test_registry_source_manager): +def test_cli_run_with_empty_string_cors_origin(click_runner, teacher_uri): empty_string_allow_origins = "" - porter_run_command = ('run', - '--dry-run', - '--network', TEMPORARY_DOMAIN, - '--eth-provider', TEST_ETH_PROVIDER_URI, - '--teacher', teacher_uri, - '--allow-origins', empty_string_allow_origins) + porter_run_command = ( + "run", + "--dry-run", + "--domain", + TEMPORARY_DOMAIN, + "--eth-endpoint", + TEST_ETH_PROVIDER_URI, + "--teacher", + teacher_uri, + "--allow-origins", + empty_string_allow_origins, + ) result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code == 0, result.output assert PORTER_RUN_MESSAGE.format(http_port=Porter.DEFAULT_PORT) in result.output From b954791f3305fc8eb86ef9309cf3e72429b72468 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 6 Oct 2023 16:44:20 -0400 Subject: [PATCH 054/114] Update backports.zoneinfo dependency python restriction. --- dev-requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index eb058f1..66de4fa 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,7 +10,7 @@ attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' base58==1.0.3 bitarray==2.8.1 bytestring-splitter==2.4.1 diff --git a/requirements.txt b/requirements.txt index 800cb9b..82e55f0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' autobahn==23.1.2 ; python_version >= '3.7' automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' +backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 From cad94c64d9183939976a4b8986a3450cb1a49796 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 13 Oct 2023 11:41:10 -0400 Subject: [PATCH 055/114] Relock dependencies for `nucypher` v7.0.0-rc.1. --- Pipfile | 5 +++-- Pipfile.lock | 23 +++++++++++++++++------ dev-requirements.txt | 4 ++-- requirements.txt | 2 +- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/Pipfile b/Pipfile index dba427a..ef209d2 100644 --- a/Pipfile +++ b/Pipfile @@ -7,18 +7,19 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "dkg-dev-15"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.1"} nucypher-core = "==0.12.0" # must be the same as nucypher flask-cors = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "dkg-dev-15", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.1", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" # Tools pre-commit = "2.12.1" coverage = "<=6.5.0" +maya = "*" [pipenv] diff --git a/Pipfile.lock b/Pipfile.lock index 0fcf43d..64197cb 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "e62871d5c144c01492108b21ad223fbb149ac4fc5d7fdfd347375d79896041c8" + "sha256": "72b8b70f712c143d3c2033cd48c82283d82abce68b46f63e1225c7ec3dd6099e" }, "pipfile-spec": 6, "requires": { @@ -1149,7 +1149,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "ff383dc663c7100cf2ae6f899ed268213b6c653d" + "ref": "2b1c7d6df207ecd239db4331f452332dbcd6a8a9" }, "nucypher-core": { "hashes": [ @@ -3058,12 +3058,15 @@ }, "ijson": { "hashes": [ + "sha256:055b71bbc37af5c3c5861afe789e15211d2d3d06ac51ee5a647adf4def19c0ea", + "sha256:0567e8c833825b119e74e10a7c29761dc65fcd155f5d4cb10f9d3b8916ef9912", "sha256:06f9707da06a19b01013f8c65bf67db523662a9b4a4ff027e946e66c261f17f0", "sha256:0974444c1f416e19de1e9f567a4560890095e71e81623c509feff642114c1e53", "sha256:0a4ae076bf97b0430e4e16c9cb635a6b773904aec45ed8dcbc9b17211b8569ba", "sha256:0b9d1141cfd1e6d6643aa0b4876730d0d28371815ce846d2e4e84a2d4f471cf3", "sha256:0e0243d166d11a2a47c17c7e885debf3b19ed136be2af1f5d1c34212850236ac", "sha256:10294e9bf89cb713da05bc4790bdff616610432db561964827074898e174f917", + "sha256:105c314fd624e81ed20f925271ec506523b8dd236589ab6c0208b8707d652a0e", "sha256:1844c5b57da21466f255a0aeddf89049e730d7f3dfc4d750f0e65c36e6a61a7c", "sha256:211124cff9d9d139dd0dfced356f1472860352c055d2481459038b8205d7d742", "sha256:2a80c0bb1053055d1599e44dc1396f713e8b3407000e6390add72d49633ff3bb", @@ -3077,6 +3080,7 @@ "sha256:3dcc33ee56f92a77f48776014ddb47af67c33dda361e84371153c4f1ed4434e1", "sha256:4252e48c95cd8ceefc2caade310559ab61c37d82dfa045928ed05328eb5b5f65", "sha256:455d7d3b7a6aacfb8ab1ebcaf697eedf5be66e044eac32508fccdc633d995f0e", + "sha256:457f8a5fc559478ac6b06b6d37ebacb4811f8c5156e997f0d87d708b0d8ab2ae", "sha256:46bafb1b9959872a1f946f8dd9c6f1a30a970fc05b7bfae8579da3f1f988e598", "sha256:4a3a6a2fbbe7550ffe52d151cf76065e6b89cfb3e9d0463e49a7e322a25d0426", "sha256:4b2ec8c2a3f1742cbd5f36b65e192028e541b5fd8c7fd97c1fc0ca6c427c704a", @@ -3103,19 +3107,25 @@ "sha256:92dc4d48e9f6a271292d6079e9fcdce33c83d1acf11e6e12696fb05c5889fe74", "sha256:96190d59f015b5a2af388a98446e411f58ecc6a93934e036daa75f75d02386a0", "sha256:9680e37a10fedb3eab24a4a7e749d8a73f26f1a4c901430e7aa81b5da15f7307", + "sha256:9788f0c915351f41f0e69ec2618b81ebfcf9f13d9d67c6d404c7f5afda3e4afb", "sha256:98c6799925a5d1988da4cd68879b8eeab52c6e029acc45e03abb7921a4715c4b", "sha256:9c2a12dcdb6fa28f333bf10b3a0f80ec70bc45280d8435be7e19696fab2bc706", "sha256:9e0a27db6454edd6013d40a956d008361aac5bff375a9c04ab11fc8c214250b5", + "sha256:a2973ce57afb142d96f35a14e9cfec08308ef178a2c76b8b5e1e98f3960438bf", "sha256:a4d7fe3629de3ecb088bff6dfe25f77be3e8261ed53d5e244717e266f8544305", "sha256:a729b0c8fb935481afe3cf7e0dadd0da3a69cc7f145dbab8502e2f1e01d85a7c", "sha256:ab4db9fee0138b60e31b3c02fff8a4c28d7b152040553b6a91b60354aebd4b02", + "sha256:ac44781de5e901ce8339352bb5594fcb3b94ced315a34dbe840b4cff3450e23b", "sha256:b49fd5fe1cd9c1c8caf6c59f82b08117dd6bea2ec45b641594e25948f48f4169", "sha256:b4eb2304573c9fdf448d3fa4a4fdcb727b93002b5c5c56c14a5ffbbc39f64ae4", "sha256:ba33c764afa9ecef62801ba7ac0319268a7526f50f7601370d9f8f04e77fc02b", "sha256:bcc51c84bb220ac330122468fe526a7777faa6464e3b04c15b476761beea424f", + "sha256:bdd0dc5da4f9dc6d12ab6e8e0c57d8b41d3c8f9ceed31a99dae7b2baf9ea769a", "sha256:be8495f7c13fa1f622a2c6b64e79ac63965b89caf664cc4e701c335c652d15f2", + "sha256:c075a547de32f265a5dd139ab2035900fef6653951628862e5cdce0d101af557", "sha256:c1a4b8eb69b6d7b4e94170aa991efad75ba156b05f0de2a6cd84f991def12ff9", "sha256:c63f3d57dbbac56cead05b12b81e8e1e259f14ce7f233a8cbe7fa0996733b628", + "sha256:c6beb80df19713e39e68dc5c337b5c76d36ccf69c30b79034634e5e4c14d6904", "sha256:ccd6be56335cbb845f3d3021b1766299c056c70c4c9165fb2fbe2d62258bae3f", "sha256:cfced0a6ec85916eb8c8e22415b7267ae118eaff2a860c42d2cc1261711d0d31", "sha256:d052417fd7ce2221114f8d3b58f05a83c1a2b6b99cafe0b86ac9ed5e2fc889df", @@ -3133,6 +3143,7 @@ "sha256:f05ed49f434ce396ddcf99e9fd98245328e99f991283850c309f5e3182211a79", "sha256:f4bc87e69d1997c6a55fff5ee2af878720801ff6ab1fb3b7f94adda050651e37", "sha256:f8d54b624629f9903005c58d9321a036c72f5c212701bbb93d1a520ecd15e370", + "sha256:fa234ab7a6a33ed51494d9d2197fb96296f9217ecae57f5551a55589091e7853", "sha256:fa8b98be298efbb2588f883f9953113d8a0023ab39abe77fe734b71b46b1220a", "sha256:fbac4e9609a1086bbad075beb2ceec486a3b138604e12d2059a33ce2cba93051", "sha256:fd12e42b9cb9c0166559a3ffa276b4f9fc9d5b4c304e5a13668642d34b48b634" @@ -3627,7 +3638,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "ff383dc663c7100cf2ae6f899ed268213b6c653d" + "ref": "2b1c7d6df207ecd239db4331f452332dbcd6a8a9" }, "nucypher-core": { "hashes": [ @@ -4510,10 +4521,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:64a7141005fb775b9db298a30de93e3b83e0ddd1232dc6f36eb38aebc1553291", - "sha256:6de2e88304873484207fed836388e422aeff000609b104c802749fd89d56ba5b" + "sha256:935e8fbd7787a3702457393b74b13d89a5afb67185bc0af85c00cb27cbd42e7c", + "sha256:eeb0b3550536f3bbc05bb1c7e0feb3a78d74acb43b607159a606ed2ec0a33a4d" ], - "version": "==1.31.0" + "version": "==1.32.0" }, "service-identity": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 66de4fa..f2256e3 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -85,7 +85,7 @@ msgspec==0.18.2 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/nucypher/nucypher.git@ff383dc663c7100cf2ae6f899ed268213b6c653d#egg=nucypher +git+https://github.com/nucypher/nucypher.git@2b1c7d6df207ecd239db4331f452332dbcd6a8a9#egg=nucypher nucypher-core==0.12.0 numpy==1.24.4 ; python_version >= '3.8' packaging==23.1 ; python_version >= '3.7' @@ -143,7 +143,7 @@ rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.10.0 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.31.0 +sentry-sdk==1.32.0 service-identity==23.1.0 ; python_version >= '3.8' setuptools==68.1.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' diff --git a/requirements.txt b/requirements.txt index 82e55f0..6e88e26 100644 --- a/requirements.txt +++ b/requirements.txt @@ -55,7 +55,7 @@ msgpack==1.0.5 msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/nucypher/nucypher.git@ff383dc663c7100cf2ae6f899ed268213b6c653d#egg=nucypher +git+https://github.com/nucypher/nucypher.git@2b1c7d6df207ecd239db4331f452332dbcd6a8a9#egg=nucypher nucypher-core==0.12.0 packaging==23.1 ; python_version >= '3.7' parsimonious==0.9.0 From 5ea4251fcbd9888026836b9817cd27a548ba94b8 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 13 Oct 2023 11:41:31 -0400 Subject: [PATCH 056/114] Fix test now that expired rituals are actually invalid. --- tests/conftest.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 6d0bbb6..6714fee 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,6 +2,7 @@ from typing import Iterable, List, Optional, Tuple from unittest.mock import MagicMock +import maya import pytest from click.testing import CliRunner from eth_typing import ChecksumAddress @@ -312,13 +313,14 @@ def dkg_setup( ) ursula.dkg_storage.store_public_key(ritual_id=ritual_id, public_key=public_key) + now = maya.now() ritual = CoordinatorAgent.Ritual( initiator=get_random_checksum_address(), authority=get_random_checksum_address(), access_controller=get_random_checksum_address(), dkg_size=num_shares, - init_timestamp=123456, - end_timestamp=1234567, + init_timestamp=now.epoch, + end_timestamp=now.add(days=1).epoch, threshold=threshold, total_transcripts=num_shares, total_aggregations=num_shares, From b7c0678befcb06560adb25e60e1a17c7f52f084e Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 10 Oct 2023 14:50:09 -0400 Subject: [PATCH 057/114] Update Porter README and diagrams. --- README.rst | 397 ++++++++++++++++----------------------------- porter/main.py | 1 + porter_diagram.png | Bin 302017 -> 505245 bytes porter_diagram.svg | 251 ++++++++++------------------ 4 files changed, 227 insertions(+), 422 deletions(-) diff --git a/README.rst b/README.rst index df57f55..ffa28ba 100644 --- a/README.rst +++ b/README.rst @@ -7,103 +7,70 @@ Porter Overview -------- -NuCypher Porter can be described as the *“Infura for NuCypher”*. Porter is a web-based service that performs -nucypher-based protocol operations on behalf of applications. +Porter can be described as the *“Infura for TACo”*. Porter is a +web-based service that performs TACo-based protocol operations for +applications. -Its goal is to simplify and abstract the complexities surrounding the nucypher protocol to negate the need for -applications to interact with the network directly. Porter enables applications to behave like a "light-client" -by delegating network intensive operations like peering and node discovery to Porter. Porter facilitates cross-platform -support for the `nucypher protocol `_. +Its goal is to simplify and abstract the complexities surrounding the +TACo protocol to negate the need for applications to interact with it +via a Python client. Porter introduces the TACo protocol to +cross-platform functionality, including web and mobile applications. .. image:: ./porter_diagram.png :target: ./porter_diagram.png -Running Porter --------------- +Any publicly available Porter can be used to interface with the +Threshold Network, or some application developers opt to run their +own. -There are a variety of possible infrastructure setups for running the Porter service, and two scenarios for running -the Porter service are provided here: +Running a Porter Instance +------------------------- -#. Run the Porter service directly via docker, docker-compose, or the CLI (see `Run Porter Directly`_) -#. Run the Porter service with a reverse proxy via docker-compose (see `Run Porter with Reverse Proxy`_) +Security Considerations +*********************** +- **HTTPS:** To run the Porter service over HTTPS, it will require a + TLS key and a TLS certificate. +- **CORS:** Allowed origins for `Cross-Origin Resource Sharing + (CORS) `_ +- **Authentication:** Usage restriction via authentication protocols, + e.g. basic authentication etc. -Run Porter Directly -******************* .. note:: - If running the Porter service using Docker or Docker Compose, it will run on port 80 (HTTP). If - running via the CLI the default port is 9155, unless specified otherwise via the ``--http-port`` option. + Ideally, you would run Porter behind a reverse proxy (e.g. `nginx `_) for additional + functionality such as HTTPS, CORS, authentication etc. -Security -^^^^^^^^ -* **CORS:** Allowed origins for `Cross-Origin Resource Sharing (CORS) `_ - is not enabled by default and can be enabled either via the ``--allow-origins`` option for the CLI, - or the ``PORTER_CORS_ALLOW_ORIGINS`` environment variable for docker-compose. +Run via Docker +************** - The value is expected to be a comma-delimited list of strings/regular expressions for origins to allow requests from. To allow all origins, - simply use "*". +By default, Porter runs on port ``9155``. - .. note:: - - Origin values can be a string (for exact matches) or regular expressions (for more complex matches). - - As part of CORS, the scheme (``https`` or ``http``) is also checked, so using only ``example.com`` is incorrect - to allow an origin from that specific domain. For exact matches, you can use ``https://example.com`` for HTTPS or - ``http://example.com`` for HTTP. For non-default ports (i.e. not 443 or 80), the ports should be specified - e.g. ``https://example.com:8000`` or ``http://example.com:8001``. - - For regular expressions, to allow all sub-domains of ``example.com``, you could use ``.*\.example\.com$`` which - incorporates wildcards for scheme and sub-domain. To allow multiple top-level domains you could use - ``.*\.example\.(com|org)$`` which allows any origins from both ``example.com`` and ``example.org`` domains. - -via Docker -^^^^^^^^^^ - -Run Porter within Docker without acquiring or installing the ``nucypher-porter`` codebase. - -#. Get the latest image: +#. Get the latest ``porter`` image: .. code:: bash $ docker pull nucypher/porter:latest -#. Run Porter service - - For HTTP service (on default port 80): +#. Run Porter HTTP Service on port 80 .. code:: bash $ docker run -d --rm \ - --name porter-http \ + --name porter \ -v ~/.local/share/nucypher/:/root/.local/share/nucypher \ -p 80:9155 \ + --restart=unless-stopped \ nucypher/porter:latest \ nucypher-porter run \ - --eth-provider \ - --network - - * With CORS enabled to allow all origins: + --eth-endpoint \ + --domain - .. code:: bash - - $ docker run -d --rm \ - --name porter-http-cors \ - -v ~/.local/share/nucypher/:/root/.local/share/nucypher \ - -v :/etc/porter/tls \ - -p 443:9155 \ - nucypher/porter:latest \ - nucypher-porter run \ - --eth-provider \ - --network \ - --allow-origins "*" - - .. note:: - - The commands above are for illustrative purposes and can be modified as necessary. + The command above is for illustrative purposes and can be modified as + necessary. #. Porter will be available on default port 80 (HTTP). @@ -111,74 +78,17 @@ Run Porter within Docker without acquiring or installing the ``nucypher-porter`` .. code:: bash - $ docker logs -f + $ docker logs -f porter #. Stop Porter service .. code:: bash - $ docker stop - - -via Docker Compose -^^^^^^^^^^^^^^^^^^ - -Docker Compose will start the Porter service within a Docker container. - -#. There is no need to install ``nucypher-porter`` after acquiring the codebase since Docker will be used. - -#. Set the required environment variables: - - * Web3 Provider URI environment variable - - .. code:: bash - - $ export WEB3_PROVIDER_URI= - - .. note:: - - Local ipc is not supported when running via Docker. - - - * Network Name environment variable - - .. code:: bash - - $ export NUCYPHER_NETWORK= - - * *(Optional)* Enable CORS. For example, to only allow access from your sub-domains for ``example.com``: - - .. code:: bash - - $ export PORTER_CORS_ALLOW_ORIGINS=".*\.example\.com$" - - -#. Run Porter service - - For HTTP service (on default port 80): - - .. code:: bash - - $ docker-compose -f deploy/docker/docker-compose.yml up -d porter-http + $ docker stop porter - Porter will be available on default ports 80 (HTTP). - -#. View Porter logs - - .. code:: bash - - $ docker-compose -f deploy/docker/docker-compose.yml logs -f - -#. Stop Porter service - - .. code:: bash - - $ docker-compose -f deploy/docker/docker-compose.yml down - - -via CLI -^^^^^^^ +Run via CLI +*********** Acquire the ``nucypher-porter`` code base, and install using pip. Either: @@ -197,134 +107,27 @@ For a full list of CLI options after installation ``nucypher-porter``, run: .. code:: console - $ nucypher-porter run --help - - -* Run Porter service - - * Run via HTTP - - .. code:: console - - $ nucypher-porter run --eth-provider --network - - - ______ - (_____ \ _ - _____) )__ ____| |_ ____ ____ - | ____/ _ \ / ___) _)/ _ )/ ___) - | | | |_| | | | |_( (/ /| | - |_| \___/|_| \___)____)_| - - the Pipe for PRE Application network operations - - Network: - Provider: ... - Running Porter Web Controller at http://127.0.0.1:9155 - - To enable CORS, use the ``--allow-origins`` option: - - .. code:: console - - $ nucypher-porter run --eth-provider --network --allow-origins ".*\.example\.com$" - - - ______ - (_____ \ _ - _____) )__ ____| |_ ____ ____ - | ____/ _ \ / ___) _)/ _ )/ ___) - | | | |_| | | | |_( (/ /| | - |_| \___/|_| \___)____)_| - - the Pipe for PRE Application network operations - - Network: - Provider: ... - CORS Allow Origins: ['.*\\.example\\.com$'] - Running Porter Web Controller at http://127.0.0.1:9155 - - -Run Porter with Reverse Proxy -***************************** - -This type of Porter execution illustrates the use of a reverse proxy that is a go between or intermediate server that -handles requests from clients to an internal Porter service. An NGINX reverse proxy instance is -used in this case. It will handle functionality such as TLS, CORS, and authentication so that the Porter service -itself does not have to, and allows for more complex configurations than provided by Porter itself. More information -about the NGINX reverse proxy docker image used and additional configuration options -is available `here `_. - - -via Docker Compose -^^^^^^^^^^^^^^^^^^ - -Docker Compose will be used to start the NGINX reverse proxy and the Porter service containers. - -#. There is no need to install ``nucypher-porter`` after acquiring the codebase since Docker will be used. + $ nucypher-porter run --help -#. Set the required environment variables: - * Web3 Provider URI environment variable - - .. code:: bash - - $ export WEB3_PROVIDER_URI= - - .. note:: - - Local ipc is not supported when running via Docker. - - - * Network Name environment variable - - .. code:: bash - - $ export NUCYPHER_NETWORK= - - * The reverse proxy is set up to run over HTTPS by default, and therefore requires a TLS directory containing - the TLS key and certificate for the reverse proxy. The directory is expected to contain two files: - - * ``porter.local.key`` - the TLS key - * ``porter.local.crt`` - the TLS certificate - - Set the TLS directory environment variable - - .. code:: bash - - $ export TLS_DIR= - - * *(Optional)* The CORS configuration is set in the ``nucypher-porter/deploy/docker/nginx/porter.local_location`` file. - - .. important:: - - By default, CORS for the reverse proxy is configured to allow all origins - -#. *(Optional)* Build the docker images: - - .. code:: bash - - $ docker-compose -f deploy/docker/nginx/docker-compose.yml build - -#. Run the NGINX reverse proxy and Porter service - - .. code:: bash - - $ docker-compose -f deploy/docker/nginx/docker-compose.yml up -d +* Run Porter service via HTTP +.. code:: console -#. The NGINX reverse proxy will be publicly accessible via the default HTTPS port 443, and will route requests to the - internal Porter service. + $ nucypher-porter run --eth-endpoint --domain -#. View Porter service logs - .. code:: bash + ______ + (_____ \ _ + _____) )__ ____| |_ ____ ____ + | ____/ _ \ / ___) _)/ _ )/ ___) + | | | |_| | | | |_( (/ /| | + |_| \___/|_| \___)____)_| - $ docker-compose -f deploy/docker/nginx/docker-compose.yml logs -f nginx-porter + the Pipe for TACo Application operations -#. Stop Porter service and NGINX reverse proxy - - .. code:: bash - - $ docker-compose -f deploy/docker/nginx/docker-compose.yml down + TACo Domain: + ETH Endpoint URI: ... + Running Porter Web Controller at http://127.0.0.1:9155 API @@ -387,17 +190,92 @@ More examples shown below. and it is dependent on the tool being used. +POST /cbd_decrypt +***************** +Use TACo nodes to decrypt data that was encrypted with associated conditions. + +Parameters +^^^^^^^^^^ ++-----------------------------------+----------------------+------------------------------------------------+ +| **Parameter** | **Type** | **Description** | ++===================================+======================+================================================+ +| ``threshold`` | Integer | | Threshold of nodes needed to respond | +| | | | successfully. | ++-----------------------------------+----------------------+------------------------------------------------+ +| ``encrypted_decryption_requests`` | Dict[String, String] | | Base64 encoded encrypted decryption requests | +| | | | keyed by node staking provider address. | ++-----------------------------------+----------------------+------------------------------------------------+ + +Returns +^^^^^^^ +The result of the decryption operations performed: + + * ``decryption_results`` - The list of results from the decryption operations performed; contains a mapping of + Node staking provider address/decryption fragment pairs. The decryption fragments are base64 encoded. + + +Example Request +^^^^^^^^^^^^^^^ +.. code:: bash + + curl -X POST /cbd_decrypt \ + -H "Content-Type: application/json" \ + -d '{"threshold":5, + "encrypted_decryption_requests":{ + "0x04aDC6465Efa53BBD096B2aD2E3dD7DB6EA9c3F4":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfMbyHGdQtnqB66KWQfoEDjs/zxIqIQYM/jFDldmfNIv1RmHxGYJrcXRfF22ewFeTlPEhWmO7T6m15o1c7uas81pzsekF7/WqtTHHuStL7EuQU8Y5VKryUAx86eg6He5lQTZhQx85ZSxiCbDyHd1m8LxT31rM0Mgk7ZDOnYwK/JyNMMRo1hC9/Cl3btEsn/YKnYL4owiUmnXUM2uh+oPJ2h+C/De0KG6cmLlGu9uJOzbAbOrBjB4hoY5p4W70ecqJU8zAvs3deEbuHaa9FE7CUdsq56ugf/vtA+bzdQxIalBCJQLaqSYB/OQl2SaN+WQ/Bp4sToqUWwsDTs9dm7qyFkffqynIyrjhs+fmYI6L3LNa3bXwrKnovR4pv8QTJ67vlyO6C4/jCSjZ2CEP6vv5dlwvyE+2Tots0nJzEoPK2baz2pi2a171f612ethXEApY8OhJCNpMSlEWAATZ741gnYl7mMvP3xwgevu0i+3YD5rTkEJlVh5rQrflIRqRmw4f6qdftcFVDcMipgGoess8qHmmNw7qkKVlQQqv2tzzUtHlenjQ/mtqwE3X1PdsoYnpR/ywUYr+8nGZ7xO6g9REz74dufuccm1+HK67zS58vBy4r1vx/SHj2h9ShR9y+Rakmn35MV1frpUSDZL3w7K+PeifKgF", + "0x18EC3906D608b2b0B0f240C84AdC6d28671a48ce":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfNu9h6h+nBMsSqFXAbjIzGrD5f2rmKN2pDqD6p+I7iJEu2+qi6Is5EveAVJsW/kkgPPSc5V7OzJUnB2ycOnRzs+Gl+vlzihwdDm64Lo5TMQuZAnW6l8O7lgcd7PO/8q4GfeH73LGaQUuhpDjkjZ1Jga7mASps3o+FxIsbMbUjHBK7FydJO0tvc9sS8tDFT5xPrLvKtr8Et+l3I2bguyfFwCuLw74yaV7Cqxx6x0pzhUeZ4BaAIgGyf1R7l2EPxeLaF+6F3yyUK1wy35BE6YfdPYh4J3Y4Tu3ccgIOORJrOQwypVrRgLy7nLzlJJuv5T+Ej7ZyFqOSevnUlccMTEHCvgRAWcq+tBO9hgTO7yNo25EoX/EUJJwZ+0S6g/kaPNkVT6jmpwdmKWULSqZ/2MRAuE4qvBhLFBbondCgnZHVYndwcefjB8OfLPeRkc5YRFkHQcxqySb1uPaoM0++3l9/cmXxotxv9TwksVoEHwWgEHGTEgcdlz9QEgryn9pISTPYGWv0/+A7tPXV88Z5owTYQprNzxgtCpyOiFhhA+H4NBZ2rSX01cNKjPzqGbB3LKWgNdbSp7HaG7BEkVSAMcCiX9xWMcfgnhCi8f3lbhGTIXJ4WvD81yIUdlPlBFsVAaLBisNUPauMphiwbCBnTRjTVaawBr", + "0xABbacaDabA000000000000000000000000000009":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPFriRyxW2nCZaPCfU6je/sRhv1WOKi9NOUi46s4EKPxGpkqLMk6yLrn1+xhhlfQZ7rOZ/PmWTdtnMDPfRmRwOp976wVZm8xuo76DKcL5vI/m+x6KmOtQFQL2uNu0iCS0reZ9gP87/EvzP3G1aqgIGQQrQf5jAcdfXFCnseMDcZX/Do7ElRqBVoXxYT+jsyEcPTglfU2oWrQGuJs5kO5Lm3PJUI1zLWbmSrloGPELHzPHtGQ8t3XcToDrEiSaXXRU698ErCXE9TPVctuk26AYOTikAylfEsjkocmJn8w1op0C2ccDbS7zg889BLM18f17cfIU2CEiANkoJA7Bth/beDkM00icnaZ0ZhOcqaTV48+T2pEEW/FhNSkBG1LECIxUBiJLJJYj5FpO2S1O2MHlNEVFF2BQmmw24qzE2REpB1dSoRZU4HBBqeS4IDbekGoBZ3IbGCK1xoBQwEnAQPN0Eyi8vAqYNRmSRj77n+OPJybwdUpd9Yvh/UC0nhNz7GgaZTwtN1/7kn4IY8/8Q37lyhihOdaNJATaFpJEqqz4pRoHsI3FwCTbK7N4KQTXXnR8o7x28GxfC7sX+Ff8Ybvii1nRBm9N54k+Y9HM7ihGxpnEv2hs3GAk55XjuIqJ1DJlJVBAIJioABFG6e2q8ALqHWnxOO", + "0xAbbAcAdaBA000000000000000000000000000007":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPr1njsR8BdPtJTcPxFUKatB5/PP0UgUKRY/hOKm0Btl/PKvlbMYQYeL2+4NJCRNev+RfZN1R8SVeJbLgZC2v8edwO0YqUWVqu4VU73VqcCn242Z/7zvwHIc7cFlLIIiZ8jboQonT49XUpvjQCRv2KlRRoR/dAs5gAVnxd/4TZNLWFh+HwQEptbh3rADbZlxptAT2rk4Lxtl4oLgSFCzvRRhptusdLEyI1a8Qn55AoeDtaARI5c7PU3TBdhK6zLJym850IM3cAAr+H1ChadRT3ntrji4ppO6umUQTpXVBSm0u4O37tWshGX/37ER+urs5D7JAdOS7bJT8o37eHZMWIeUFtxsakhowl4jUtaVayZKD64+RDDYC4UtUQVWpjhbc8x0hsLhKqqIo8EliyA97EQoLskRh4KK3aOmlAfNckQhuu8H6580vzAxLt5uVQtiVr3UbJpMqU3kj1GDe1ecTYl3NSvEhhy9M70MRttYu0JULvmv28spAZuIi05qtNTagSy32UvPMtob95THs7JOVN4BxlgqBEQTQF5Q4hKjfm1GTa01S86ZDXAO7ZpBHOHbzvOVgD/RLE6vQ/9UPvXClHI3DU0tbbpW080G04KvtN6SxMne0AmtO3Me9N3/UyGacKm1IrRR79mJb50novbESghDJET", + "0xB5Fa888B41F1A252757118F427Be483E1e0d611e":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPUP8mf6pA6n4PW589wNPomu/GF30cnjrgelkReVE3HtIe+AaPoIG4xFS/JCKLORjwREMbaP901RIef8fAQIFRaX8dFrwYhSfG4BgG68gl4zFwQIJys2fiqmYd2qCXtcjulnj0mlCQ/xA94lTQ0g+TgB1s1pnbn6WYmNqFUsKfpGp7g+/cRMC/zpOG4AD+Ozyr9IN5XSAE3bO3G3Ui8pGA+fSsUGA+EQx/ab/IcwGbjw8U0eUIwGWLokCu5kpJ1UzN9fr/+0tKZZsX7fONV/dXrj5Fy56Lqbf1HrWv1RIpKNYUSKXn4QfKqv9OS6yOUW38zv0h2NFOnFQlGmgjIM4KD/6Ytvp3Ne5B+SDRIIRgN8kOT88fXs3CI9I0P/pRJanrCJ2KxoVnySHKX1BTxmLPh/NLQK0xCsUw7h5lawZmsJX7G8JdD1qJKUgQ2m9o5ZMWV9kc9kQmKg1pS2LV79g/VNtFVj7ad/P8XSANUvarGpXyEctojTUsXiD2QzTvZE8hrwmoFnVMHvp2RDg9aX36MZK7K9vhP/W55TPsYhZ+1I3/B9d47JYMGo6WseSN8oIJnlqk4LUp1vnYiIRE5yoUG1quK+XwEcgqWePAfRqF9W19f8AUZth4+E47t0GLUVA38GD8RdxhZu8bGzhffXLwQ3J/G", + "0xaBBACADABA000000000000000000000000000005":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfOyePokgnuuvse3eOxLCuJ6QBq6r799898Ib6mLhZ7RBHRtrdErimC2fXDIiVQ5UfxhLUpCMx20fBgGvzi9SZiKz0K06xrX1WvEVb9shK3PSh20mLG/PIwI108aI/jBJJsO5/rnCk0gUTarWY3+PQHnGbLagaaxJvdXtJ/8/C/RiL8ieNGOn19g8osdKTVxMNy4zZ4lMXW+C/VMBMQWPxR2n5VuMoFUrHidnHADxYMfv1/mdwHOK6AqNphX+hfmx0PxMt6kMipdOWHC15LqCy+wtlm1eMu5CuakC/DZqAPXX6fSxApIK5DD3zjWaRRFThDdwfZy3Q0I58l9D+NSUU59n1hgxO04e53BOU+AJ7X71iLEhgsdt36M7u4cm9s0l+r+F/CWlsf3UwBjJS0xGgOIfzHlpmsqHTADmphBx3eP6CZbIRBZ/JBDhCRyqxlfEonuYXg/mVXeBjunglu6roqGJ1p/AyPSMAlWnGcTNsoC07nR5hdNWL/fraZZcTAEOg043ZEZzKvqIZhZyvqCZ1dKtaChU8C9+ax9+UnI7SWS8dI1Lc2TTBVk3XLLqtMXZtbCKausve6sHS5Xm9t/YV5pY0WPfvOeFZ03NPQ0PlTv1JRqVj9VOCMxL7W43eEXOjj1cusd08XzBrWlhEVNZC5G8lxI", + "0xaBBAcadabA000000000000000000000000000008":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPgCj9zBXVXdvc7ULeIUPEdxuTTt0dUpUajPVhFLyks20VAkv92h96ZRmVDLRdP41stCKbQwfmDxZphJSNl58A/tCPBwcr2xMjjDmDwxTmKtshdM1XX/t7PE2eFInMHASoSwYv6PMhFcFvQ7mKS+nQQldafGT/9i4cu4mGoOsY2KZhNd53NU2k6bQrFuinQP5Wr7EPw8l+pTtBPzUXxVH7iRBwVj4UVnzUMUxv4yFFnyPxJ95GXkgkPE3e+XMs+LpCc1i/iqgOi8Rnm3YmF8YYgT7sGM+5BqhFncYLoqz5JVVkwO0Ep6U3cVI6iidMFxWhAH1NiwUTGVwAiisaOHgy5jRS5BS/vqoWGNN7bmSbWtU7TBd8ahPGGybRejwofy8/1dUi8Vxu5hB9VhgLfIF4bXWwEIjUtRqgZRbE/q3wdyCnOmnz39Sf5QrSvS7haZ2ZK1WN94h28oCiHFG8PMdSA0TVCyBeJe2nx5WkKdOdaFfmozXx5A0xjlvTW+D5uqFnw8aAwWu1fIuY70Dabk9lOfARPOGa5QySMLtWLE47uH96BisHhHOXVNMUTmpwNbqqLyCgFhqpnRIbqAYIMdAhbD8XhhCEqWfNRIpZYbbPZu4eKWmLhLy7kKKy0/KZC2TVd9QP5f3n7pRjJE/Qu1X2iPoO5", + "0xaBbaCadaBA000000000000000000000000000006":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfOlQRtUlA1X52lcI5y6O+leZhH7BbIzawqMht+UBjjAYg9AdYGL8Az0kR5hwPzFFJ/qLYecUGZQm4Fbp4CIUoeJ/AsbPCUTw9VlceLlNGVxd+pe8Ej6hr76sCiiFpmo+mTvX3aKlj5WpJUiNEJCyZKTffBdK+kkQKLmb4xo4JPfmSHWr71KhYO5+L9Ctc4styA96fYopp31WHlcWlcYaNGAS8RCvsDK9GBvpxTad32se2+L0J2Zu9C0TjKnuRZ+mscGZxtgOkqH9p1fGchZFliwEzDHrcJhwS0tfqCPIwTveVgKIk/1uNlUAX81rkIR7vZCinIExQXfozUzqy1PotLntS1q4ZjKmOcI1GBbIEfcuB7ZvudeMf8+dqraEkgvjPR9oyUZ+YWZMYE0wlMVqVgwZFAGw7xFkRqbWUn6089LESJ55gqeskN+3PCq4yF6rdlfUrW2KC0KECV1nxmeZP+e9Wxze5wRu7LOgsoF3EKwcrRPtJi7xpSOCRQJFaDp+ZcNFYtSv78pxWaSClfjks5Tk20zbXXmjyPdPGvGdxBQfBxfY7ut5mRuKW4awY1mA+3KT0sJqgolIW4bDI5EP2Kvmvg6ynva5zLQhwiGQNCIi/9S4n51W+L0W8/6vkXeYehfcvRMtYpbtfxTDMhvHGzfJx+t" + }}' + + +Example Response +^^^^^^^^^^^^^^^^ +.. code:: + + Status: 200 OK + + +.. code:: json + + { + "result":{ + "decryption_results":{ + "encrypted_decryption_responses":{ + "0xaBbaCadaBA000000000000000000000000000006":"RVRScwACAACSAMUC0QOCuW22G1u9q8ultJf7GmknsSt3tgFbbDXH8wYzebij5wobdpUIQmO5AiEriFWAEzdZwYhdlEDdG8Av+gzVkZNYGmPdjUk0Q7C6VEJpMB0CXDZr0H3oqNnMOHzCAbwbmYimxw0Wb12xTtaPPh4GUNnTiSegI3Bp1Ug5F7LF97cBepi/WwxxX8yC2XiAGawwEtXV8/Ll4gEbhW1RK/pqq97qH1QQeXVL7MtryvgkhRKOOdjEJ2m/gaEQOlzt5ChM1BLOiR35tfVc+UABYB9jy/F5lMt84Ac31sAhJZzWGFfQV+JUgkJGN2isIUQukYgiHpCA1oQ99CJcve3mZSSpZLFdxrrpshNe+rPWVqZTs0C5Qh0cl98jvQZQumD567CscofLhKQJV4g4mkyFlv9eKNkqSEEcSx2bmTr8rGqEQFqIGcUJbCzPebgGXzHjrcH23l9jY0h53k1LY2IzYndOXqNv0Wf+cYMEPx4x1eDhkQucmypsGcAEjo4uFbXnFkk/kiHas+HtoommlAPWeyXmDfPEhVMPkU2P8lf7OuYnQpBrZF5d1nnIN9cXRWW2EHceiSmllRMkN4NnqWy5B/rJ5UudCDJaf3gbhEhV0VEzJAKRGbPE5kau2JyPSdPFLiYYIhRTy6Sw1XQVUe9v6sy1ykTmSav0TeO1NWph7SyZQGJotm5fPPSvSuFG5AoMc2zD8kPY2eBSNMncvCCu7L0pxyVPSMJyE80OEQEXA8W2kfSQKfbr8nLQf0D5H4nI7XuN2ecgpjWfglKlD8W8rlbdWQ2ydLQYSmeko8cXInOMHrOSckuWnpjw/92eWWnkXkiqTOhHtwNf39eDBbXCQGZDLZEPis9MP+yiuUaR88rftkRprNSXJW7cP3Q4FXvKI+xZuEOCWqiOuxokR6S2DRRt2neDNO8TP6HrjjAIrG+3LfvoH5j920DHn3SnhPRH3febMQw=", + "0x40896f32bD685E6F5C74A5b6ab4d8c7953cbFA53":"RVRScwACAACSAMUC0ec0FnIRxE4p3kjRVzmuEMWZKlk9wADuNeeW4mJoI5GiS7G0/dL8ZIlkLv2BiQXNJAuY3IZTZvkT1ppFRrBK8s65OjzBWvS+Mmarf9nj6qJovkS8szLsMV8qKSwF5KIrHC0RUYHqTSiAL0azkie5VRevY/F9QiG9yX4FGg2wzaHUEv0e14m8bbk/+a+tpQRFkgX3psjModOEoxHSqbEm9oRkVgySj0KEaXjwyPhbGhGDMjoEHuE/t3dw9/3ykKRPonDyG28SEJlTe9rDKbfxqqCxUjd3bgmyFym0APcPyh8EeA9mdGa5PWcuxe0HT0ff2aGV518MUBfk+DQ3l784B7mSRkSqpwgO0vEldeiujihUU5BGDskBL5qzuoJNzC0Giy7YcbMRIgAFsFZ9CjBN5xj3bftJewzrE4JRMMtdskhUJiEJ4ii3gwEmhR3qRnA8lLb8425JnI8cCsV6TwPy+kjYiHDw2BSQw6cm84wz99rqLCZ51CeWgLvs/nph/EISPpMhdA5Gju7F3HZF+Vlx64WIQPz+r/WGLhWaHcTKDTLajPVTFKFtWQodcIl84KjIvRVGFtbpx4PsZtLNdBotfQSX8KGCvZ9Sr58Ccq54A0u1Y6JWjC7B2uOowqd/xepXqNR0FFLHGIk5YYe0uNmX5uJA16yTJs/VNu5kqdWr0dvFXafmMk5M4JSioRk90ERRFhQXtUks4HR49sRCA18r7Tk4xANDC3ePO+XJ1CnH4v49076N4DckKIcf7V23wFW3veS1mwMWPauhlk+xndnyNENl1N+d6cx1hAy5G+AlK2s35RKWdafQ3+f049qk6zDwXiU7h+7CpQEXxP1iK/EZzZDVuSAjRvhqzUTtUR+sAheVNGgIUbjXmgeu/3o2kTcNhOaMS6PT9Z1ogSzDap8DDl9ihE6sSPYAnexdhrtSr9aPGixD9MX4YaQQ2ovW5+gvao0=", + "0xD27a0b270FBB5b090C5bBdD98e439EA992605436":"RVRScwACAACSAMUC0Y8NgrSrmQwHk4kjLqjEkyQg6A7OiGWDTuZH7U6LkApsw+cBJQTtI+TKJaWl1rOHGGfwoUEf7qJyBiNSRc/mGqMGX9C4Ufgbd+O7ld6P8zxbcFJKoirVyeXMZGz9jfMFsSBzjmSuZbtepPmcVcgOcouJaofNi6VfwwMJtjueMfM8M3f7W/cWZIPH+OXQFTw+tVrP1Tu0S1rU+SvHDLfnRf9cqhyEAZrhONdLUQMDOMzf1ksI3hsZV8LtDq0b1Ov3rshoqQzVgyeSUGP6l+GYTqdeS0fRhuGY071oDjKNssYQ/14JiyJsUEbolg6gG7onbPTjuoz0lLSTYUV+9rWdh2nTcj8gwk/ywKmSXA3s0449II5hZkKd6HH+5jTUvMP/ak/aCk6UWPTezV1a1jfhBnmDbxTxG9Ejjhiaa2iH1Uk6eGJ2t/r5N2e5nQxnIJyx6VYVS3FNMDOPT2DJaTpJxK0lP5bpLo2u/kxZNZALgahayb1TXKXVqe0XJMjLDehPeL75/dcNXCjwKMIet9HCjav8iOvsZoGkZPnd6oAIXq/O3GMEUzn3jgVyETOk03TjtnyoYDK9whP2C7Xa07+a5LNx4YofjFGdAE9zmqTI7Am9sttj5uCeFobEldYgv6mWFAWSCbnW+vYqAldGNRamH8ZUw/je1wmndFjBo0KPFNFypB7Nlygxu2luhgqkqttq5z1tq+HG9IRASh8VyoRdSlCFnmHtWavac4J7sWIfpBfIGXeTj96PXL1MmehTvPAukv/qQ2F304OHdeC/HUUT64ukfufqQtTeZ/m64kDC/pDOkXiAiy8hPnU87+fWKpl8kOTufRx7Qo2EHenjaJF+bOV76uhFmICyY7jTSkS8W6O78M2MQcSCPCqF1tcxz9I98zgUsh7hkHFWTE1AHB6eq+x5s32k2K5wdomzObUHSymhH5clhgibDilhULnSnTw8MYk=", + "0xAbbAcAdaBA000000000000000000000000000007":"RVRScwACAACSAMUC0b9T7D+3J8vVFlHo1bbeGyZnrh50uRri0h4oO9XkFC3fCveLQM9F5vS/4BBEh3bk5S8MRszX1DMfHcDuOzMFw36bA3pd87pELVsd7IYwKsqyNb5JuMDskdShT5tQEaardEs8Hbwv2xFQeZpTdQxhAzZL/cOBrOTuq9JfB1LwvMEgGf/uvBRup2UxhYuYunNUB4gEiHHlbI1TO5AURJq7R2PKNV4dmggv8X3kUdvvK3hz0IaIBvswoZhXSu3wCzVvM9wJrq6vuVEnhvh3TbcaS6kM1Q8n2cmjc13eiG/OmkAWiAbXz7wLewVTV9nHP7qZvpqoy/hJiOsl5pZ1wls42DuH5YUu1Mp2pAofSvxLTl1xR+1y4gUhOUsoX+vnjEvb5ZftK4/720btc+T9giQ8gptnJKR6QKLMZOAaU17Q2cVKRHd4kAdF90/afQc2yVmjjmiC6zNKUaJJIBDO1J63C7afBMXxyh0tQ1n92w3YrUC27so/dlCUfqe4PL6HjGzOa/Y5El7T4tM0P+wEbGs14XM+cbMl7Ub58mFtTXR0nlOfFHtEDG+QnywTAXxXCw3jR1PiVZ6PWKtNIZeKMvVO8fXI6YFRuYNoHhtA9ogft2qo3/YD/QeCegrPI9brqbhXGrbavyaKV1qqUwPCOKLmfDIwvcucr7pKGc9vgrhiQp8lltAqslu8pa1DBG0pducVAYReH9WwD+dJEjmEh5LHLm/4ddR9KVXxn1bpGTkpw9Zp5hhBADzs2XCZmhGmSrb/H53u9mBIXxvaH9tBJeNSo3TTcds6bvVnoN70qYwe72UZVunZh2ThwldZLNuQLlbbDC5xF695eL6GuNgmdYQqVPq77BSfCGEXvFKbtd3ecNYmqNtsf+Yo8014SYKw5qBGSB12szH0w8MEXu5cel+4PcDApi/z2TXhgSzH+DIcLdHlBRIY2D/sIw98wlOW6gt/3lw=", + "0xaBBAcadabA000000000000000000000000000008":"RVRScwACAACSAMUC0Qqm6cDZHHBJgK86+MehwqBFWz4guKcJMFhX/RjrpwH7HR0Z0iLTjLxevluC5PnyuqDJFysvLsliulKIDYlWi5ryFxpYP533QQtLfoaAUXd9ypm/yzlg4VkRHpr6cRTBYxjlLYCpUsTqPNOnbm1YWT/UnIBtzPAoHDkZLXYX+yKbuMjsgs66gPfOheMIZAjcLyNby9kSqWBYxejDm0IyqJmh5JxHSnsmpCpQcexV0300KQ01fPHjuxo5C29IK7NzlVW9gSQtCm7jL1lEitvlKIghpsA7lRWZ1atDFT9AqbFBaHH42knhdSaYD10NmW6eL27L0Is69ydaihZnlv70DezQKEVJsXVQltwkFovfbJVWBWvuURhiOHavnJ9mqJ610VGxPNMiACnhvWK3L6zsdO/CuEdh070QtCMUH4zin5TYI/dbc9Zy1yBTzUhAE0xHRLI4H4Rs9w6Vw1vzE+VndCa5Ey0WVD6Bx+/0/CGkSc3j9/lbsxRMDswMjWIa2J7RhP5/FzwiBWTz7WSsOq/IT71m2578uKSsxQxzdqFgrqCW6Pm/5OMigN/e/R1SkyH2u8gJG7gwzkTJqsUQl54Y/GRk3LS3Wco+dSIr/EnwW5EwDZ2P0ADkRcdDjQjub7Ao0Ut40p/m2noiJKhK2+0JO7c0aMsKP7+xNS5Hc3m1nGpcz2AvM7s0HWRX54U3brKSZ6P66NcoHHxeP60B87ephPeSfyAkK9+m7l7xpahmJy7bJAv5vkAJcYtOcJvNO6Pk3S83qzYjKyKKf8MLZSP2REp/mqs98iIw6C2cNJSZ822zN+ifPY3WQ0yWpweEU1CSMMfgepuQCVAxxC08k5Xfx8SV4Shw1ZgDcgcKVv5vJmb1Pcfoe4fkr8805IXEY1pd/UHOJYAEK1HygQH0o1QtgHQxrGr1lCbUE3nGQZYwQj15n+Yo3sbhyHsmUp+bP5looDg=" + }, + "errors":{ + } + } + }, + "version":"1.0.0" + } + +.. note:: + + Only a threshold of responses are returned if the request is successful. + + + GET /get_ursulas **************** -Sample available Ursulas for a policy as part of Alice's ``grant`` workflow. Returns a list of Ursulas -and their associated information that is used for the policy. +Sample available TACo nodes (Ursulas). Returns a list of TACo node staking provider +and associated information. Parameters ^^^^^^^^^^ +----------------------------------+---------------+-----------------------------------------------+ | **Parameter** | **Type** | **Description** | +==================================+===============+===============================================+ -| ``quantity`` | Integer | Number of total Ursulas to return. | +| ``quantity`` | Integer | Number of total TACo nodes to return. | +----------------------------------+---------------+-----------------------------------------------+ | ``include_ursulas`` *(Optional)* | List[String] | | List of Ursula checksum addresses to | | | | | give preference to. If any of these Ursulas | @@ -477,12 +355,15 @@ Example Response } +PRE +*** + POST /retrieve_cfrags -********************* -Get data re-encrypted by the network as part of Bob's ``retrieve`` workflow. +^^^^^^^^^^^^^^^^^^^^^ +Get data proxy re-encrypted by TACo nodes (Ursulas). Parameters -^^^^^^^^^^ +++++++++++ +-------------------------------------------+---------------+----------------------------------------+ | **Parameter** | **Type** | **Description** | +===========================================+===============+========================================+ @@ -504,7 +385,7 @@ Parameters +-------------------------------------------+---------------+----------------------------------------+ - * A single *retrieval kit* is an encapsulation of the information necessary to obtain cfrags from Ursulas. + * A single *retrieval kit* is an encapsulation of the information necessary to obtain cfrags from TACo nodes. It contains a capsule and the checksum addresses of the Ursulas from which the requester has already received cfrags, i.e. the Ursulas in the treasure map to skip. @@ -532,7 +413,7 @@ Parameters Returns -^^^^^^^ ++++++++ The result of the re-encryption operations performed: * ``retrieval_results`` - The list of results from the re-encryption operations performed; contains a mapping of @@ -541,7 +422,7 @@ The result of the re-encryption operations performed: *retrieval kit*, the corresponding list of cfrags could be empty or less than the expected threshold. Example Request -^^^^^^^^^^^^^^^ ++++++++++++++++ .. code:: bash curl -X POST /retrieve_cfrags \ @@ -555,7 +436,7 @@ Example Request Example Response -^^^^^^^^^^^^^^^^ +++++++++++++++++ .. code:: Status: 200 OK diff --git a/porter/main.py b/porter/main.py index aaaa725..883f932 100644 --- a/porter/main.py +++ b/porter/main.py @@ -284,6 +284,7 @@ def retrieve_cfrags() -> Response: response = controller(method_name='retrieve_cfrags', control_request=request) return response + # TODO: do we want to rename this endpoint to not include "cbd"? @porter_flask_control.route("/cbd_decrypt", methods=["POST"]) def cbd_decrypt() -> Response: """Porter control endpoint for executing a CBD decryption request.""" diff --git a/porter_diagram.png b/porter_diagram.png index a6a360e113cc2824dd329dd7e2f08015de47f236..6e533ee198fe6d01e124445aa127938d290479ef 100644 GIT binary patch literal 505245 zcmagG2UwHovpyVG*M`cvQY;87A}An85s+%5M4EIF0!oVrA@o3Ku8OWyNhnehq<4^B z11bViBZM9Z(j|dJ2q7jw^1bZu>^c9l%h@m23n^T_JoC&wbKf)1;H$evxa}ho^kC@A;a+U3?J_ zy`4b_1VYBu!_CL>p{KJ9+#8xoRX+^^{RRTxzF{7awmj+fx|sEFggHfDcV3vl_aHBn zRNuGOQ$k@9&UfBFb)^~fAwurWr#%KYezG`s=s5^HEqdtpp9*cY9o|YN?7OmH`FwPA z^s~|Tqrpj+mm&Iz)%OpTCyow1mQD1>_tf|1G^Xp@sZVNX`1CE$_oOL67lJh{e6V?3 zJi(Zo4rR+P_SQz$z=*)I|NiLcYM)n<4bJV;PcQOWVyPx!-736tdIK7JA7%9h6d8`m z%G(+x8VR1lN_tOo4!7UM(a3mlbEz!ZM=}8%KBy;L(dSI=$n^SY^>@1Na&4*koTtkT+mI5HX+wG zyS*;kuE}XyI=kH(_5iq(huXQv|9e$C@9KDhsZ*A${+7lBS#{jq6c2O*Rdi6f=*3mT z)LfZ?Dln1HH6cxo>-uYUKIgjODB*r@r5c8xocubS#Ki-QAo~NB$KyX&g zuK8rtvCabfStoVK1lW(iJ>DNb4Xa{VaXr;UHkbOVhIs3ya*s@v7b% znO|T?T(+_vdt2POe)FET+)-1ee|sXHj|BewM)F?eDi$)CStfy|7hH7?Xk5@&T_Ie zrdh)WSo+uR2X|e1z`A|Rni)4h&2MP_{dg|VUD@FeWYy%TNOSZ|OmERe6z5&1=V

    qryhk_Gp-I6Kah%*1(oS?P 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ⅆ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

    CS39d85->=Ju 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

    JkoJveUVgLtS( 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%0DXA{hVa%O^UIu*u8YsLVCt^Mv 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 H^zHuuOCV~0 diff --git a/porter_diagram.svg b/porter_diagram.svg index 932f2ef..ae32667 100644 --- a/porter_diagram.svg +++ b/porter_diagram.svg @@ -1,23 +1,23 @@ + viewBox="0 0 1773.588 1194.0533" + height="336.9884mm" + width="500.54593mm" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="base" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:export-bgcolor="#ffffffff" /> @@ -306,15 +310,19 @@ image/svg+xml - + + - - - - - - - - - - - - - - - - - - - - - - - + style="font-size:27.5px;line-height:1.25;font-family:sans-serif;stroke-width:0.878906"> - + d="m -62.85881,479.83432 v 14.68506 h 2.526855 q 1.354981,0 1.922607,0.531 0.585938,0.5127 0.585938,1.35498 0,0.82398 -0.585938,1.35499 -0.567626,0.51269 -1.922607,0.51269 h -8.789062 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 2.508544 v -14.68506 h -4.064941 v 3.55225 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.35498,0.56763 -0.823975,0 -1.354981,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -7.32422 l 19.445801,0.0183 v 7.30591 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.354981,0.56763 -0.823974,0 -1.35498,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -3.55225 z m 25.268554,12.39624 h -9.118652 l -0.915527,2.28882 h 0.915527 q 1.35498,0 1.922607,0.531 0.585938,0.5127 0.585938,1.35498 0,0.82398 -0.585938,1.35499 -0.567627,0.51269 -1.922607,0.51269 h -5.053711 q -1.35498,0 -1.922607,-0.51269 -0.585938,-0.53101 -0.585938,-1.3733 0,-0.84228 0.604248,-1.37329 0.604248,-0.531 1.99585,-0.49438 l 5.895996,-14.68506 h -2.453613 q -1.354981,0 -1.940918,-0.5127 -0.567627,-0.531 -0.567627,-1.37329 0,-0.84228 0.567627,-1.35498 0.585937,-0.531 1.940918,-0.531 l 8.111572,0.0183 7.470703,18.43872 q 1.318359,0 1.739502,0.29297 0.842285,0.60425 0.842285,1.59301 0,0.82398 -0.567627,1.35499 -0.567627,0.51269 -1.922607,0.51269 h -5.053711 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 0.915527 z m -1.556396,-3.75366 -3.02124,-7.43408 -3.039551,7.43408 z m 25.360107,-11.44409 q 0.347901,-0.47608 0.750733,-0.71411 0.421142,-0.23804 0.897216,-0.23804 0.823975,0 1.33667,0.56762 0.531006,0.56763 0.531006,1.92261 v 3.18604 q 0,1.35498 -0.531006,1.94092 -0.512695,0.56762 -1.33667,0.56762 -0.750732,0 -1.208496,-0.42114 -0.457763,-0.42114 -0.67749,-1.57471 -0.128174,-0.76904 -0.512695,-1.19018 -0.750733,-0.82398 -2.105713,-1.31836 -1.33667,-0.49439 -2.691651,-0.49439 -1.68457,0 -3.094482,0.73242 -1.409912,0.73243 -2.490234,2.38038 -1.080323,1.64795 -1.080323,3.91845 v 2.43531 q 0,2.70996 1.959229,4.5227 1.977539,1.81275 5.474853,1.81275 2.087403,0 3.533936,-0.56763 0.842285,-0.32959 1.794434,-1.30005 0.585937,-0.58594 0.915527,-0.75073 0.32959,-0.18311 0.750732,-0.18311 0.750733,0 1.31836,0.56763 0.5676267,0.56763 0.5676267,1.33667 0,0.76904 -0.7690427,1.64795 -1.116944,1.28174 -2.874756,2.01416 -2.362061,0.98877 -5.218506,0.98877 -3.33252,0 -6.005859,-1.37329 -2.160645,-1.09864 -3.68042,-3.4607 -1.519776,-2.38037 -1.519776,-5.18188 v -2.54517 q 0,-2.92969 1.354981,-5.45654 1.373291,-2.54517 3.790283,-3.91846 2.416992,-1.37329 5.126953,-1.37329 1.629639,0 3.039551,0.38452 1.428223,0.36621 2.655029,1.13526 z m 26.367188,13.23852 q 0,2.16065 -1.208496,4.19312 -1.190186,2.01416 -3.570557,3.22265 -2.3620606,1.19019 -4.9438477,1.19019 -2.56347655,0 -4.9072266,-1.17188 -2.34375,-1.19018 -3.5705566,-3.22265 -1.2268066,-2.03247 -1.2268066,-4.24805 0,-2.2522 1.2451172,-4.41284 1.2451171,-2.17896 3.5705566,-3.42407 2.34374999,-1.24512 4.888916,-1.24512 2.5634766,0 4.9255371,1.28174 2.3803716,1.26343 3.5888676,3.42407 1.208496,2.14233 1.208496,4.41284 z m -3.7536624,0.0183 q 0,-1.81274 -1.3000488,-3.33252 -1.7761231,-2.05078 -4.6691895,-2.05078 -2.54516601,0 -4.2480469,1.62964 -1.7028808,1.62964 -1.7028808,3.77197 0,1.75782 1.7211914,3.2959 1.72119139,1.51978 4.2297363,1.51978 2.5268555,0 4.2480469,-1.51978 1.7211914,-1.53808 1.7211914,-3.31421 z m 48.7609864,-0.0183 q 0,2.16065 -1.208496,4.19312 -1.190186,2.01416 -3.570557,3.22265 -2.36206,1.19019 -4.943847,1.19019 -2.563477,0 -4.907227,-1.17188 -2.34375,-1.19018 -3.570557,-3.22265 -1.226806,-2.03247 -1.226806,-4.24805 0,-2.2522 1.245117,-4.41284 1.245117,-2.17896 3.570557,-3.42407 2.34375,-1.24512 4.888916,-1.24512 2.563476,0 4.925537,1.28174 2.380371,1.26343 3.588867,3.42407 1.208496,2.14233 1.208496,4.41284 z m -3.753662,0.0183 q 0,-1.81274 -1.300049,-3.33252 -1.776123,-2.05078 -4.669189,-2.05078 -2.545166,0 -4.248047,1.62964 -1.702881,1.62964 -1.702881,3.77197 0,1.75782 1.721191,3.2959 1.721192,1.51978 4.229737,1.51978 2.526855,0 4.248046,-1.51978 1.721192,-1.53808 1.721192,-3.31421 z m 11.846924,5.91431 v 6.15234 h 2.252197 q 1.35498,0 1.922607,0.5127 0.585938,0.531 0.585938,1.37329 0,0.82397 -0.585938,1.33667 -0.567627,0.531 -1.922607,0.531 h -6.646729 q -1.35498,0 -1.940918,-0.531 -0.567627,-0.5127 -0.567627,-1.33667 0,-0.84229 0.585938,-1.37329 0.585937,-0.5127 1.922607,-0.5127 h 0.64087 v -16.95556 h -0.64087 q -1.35498,0 -1.940918,-0.5127 -0.567627,-0.531 -0.567627,-1.37329 0,-0.82397 0.567627,-1.33667 0.585938,-0.53101 1.940918,-0.53101 h 4.394532 v 1.28174 q 1.318359,-0.89721 2.728271,-1.33667 1.409912,-0.43945 2.893067,-0.43945 3.845214,0 6.555175,2.61841 2.709961,2.6001 2.709961,5.96924 0,3.71704 -3.204345,6.13403 -2.67334,2.01416 -6.02417,2.01416 -1.446534,0 -2.856446,-0.42114 -1.409912,-0.42115 -2.801513,-1.26343 z m 11.132812,-6.44531 q 0,-0.78736 -0.622558,-1.99585 -0.622559,-1.22681 -1.922608,-2.03247 -1.281738,-0.82398 -3.02124,-0.82398 -2.801514,0 -4.449463,2.10571 -1.116943,1.44654 -1.116943,2.78321 0,1.50146 1.593017,2.92969 1.611328,1.40991 3.973389,1.40991 2.380371,0 3.973389,-1.40991 1.593017,-1.40992 1.593017,-2.96631 z m 25.451659,2.10571 H 86.866531 q 0.585938,1.46484 2.069092,2.36206 1.501465,0.89722 4.046631,0.89722 2.087402,0 5.548096,-0.89722 1.428222,-0.36621 1.97754,-0.36621 0.75073,0 1.26343,0.531 0.51269,0.53101 0.51269,1.33667 0,0.73243 -0.54931,1.24512 -0.73243,0.67749 -3.570561,1.30005 -2.838135,0.60425 -5.456543,0.60425 -4.504395,0 -7.214356,-2.54517 -2.69165,-2.54516 -2.69165,-6.2622 0,-3.95508 2.911377,-6.42701 2.929687,-2.49023 6.738281,-2.49023 2.288819,0 4.193115,0.80566 1.922608,0.80567 2.856446,1.73951 1.318361,1.35498 2.178951,3.35083 0.58594,1.3916 0.58594,3.22265 z m -4.156493,-3.75366 q -0.860596,-1.61133 -2.252197,-2.39868 -1.391602,-0.80567 -3.314209,-0.80567 -1.904297,0 -3.295899,0.80567 -1.391601,0.78735 -2.270507,2.39868 z m 16.461183,-6.46363 v 2.34375 q 2.36206,-1.70288 3.71704,-2.2705 1.37329,-0.56763 2.56348,-0.56763 1.83105,0 3.55224,1.35498 1.17188,0.91553 1.17188,1.86768 0,0.80566 -0.56763,1.37329 -0.54932,0.54931 -1.33667,0.54931 -0.6958,0 -1.46484,-0.6958 -0.76905,-0.6958 -1.37329,-0.6958 -0.78736,0 -2.36206,0.98877 -1.5564,0.98877 -3.90015,2.96631 v 5.65796 h 5.34668 q 1.35498,0 1.92261,0.531 0.58593,0.5127 0.58593,1.35498 0,0.82398 -0.58593,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -11.33423 q -1.35498,0 -1.94092,-0.51269 -0.56762,-0.53101 -0.56762,-1.3733 0,-0.82397 0.56762,-1.33667 0.58594,-0.531 1.94092,-0.531 h 2.23389 v -9.11865 h -1.35498 q -1.35498,0 -1.94092,-0.5127 -0.56763,-0.531 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58594,-0.53101 1.94092,-0.53101 z m 26.66016,16.62598 v -0.87891 q -1.40992,0.75074 -3.1128,1.11695 -1.70288,0.38452 -3.09448,0.38452 -3.02124,0 -4.90723,-1.59302 -1.88598,-1.61133 -1.88598,-3.55224 0,-2.36206 2.39868,-4.37623 2.41699,-2.03247 6.66504,-2.03247 1.70288,0 3.93677,0.36622 v -0.89722 q 0,-0.84229 -0.73243,-1.37329 -0.71411,-0.53101 -2.74658,-0.53101 -1.66626,0 -4.32129,0.65918 -0.98877,0.23804 -1.53808,0.23804 -0.75074,0 -1.28174,-0.53101 -0.5127,-0.54931 -0.5127,-1.3916 0,-0.47607 0.18311,-0.82397 0.1831,-0.3479 0.51269,-0.54932 0.32959,-0.21973 1.37329,-0.5127 1.39161,-0.38452 2.83814,-0.60424 1.44653,-0.23804 2.61841,-0.23804 3.49731,0 5.41992,1.51977 1.94092,1.50147 1.94092,4.11988 v 7.72705 h 0.64087 q 1.35498,0 1.9226,0.531 0.58594,0.5127 0.58594,1.35498 0,0.82398 -0.58594,1.35499 -0.56762,0.51269 -1.9226,0.51269 z m 0,-6.71997 q -2.2522,-0.43945 -4.1565,-0.43945 -2.28882,0 -3.93677,1.11694 -1.02539,0.71411 -1.02539,1.44653 0,0.53101 0.49439,0.8606 0.91552,0.60425 2.50854,0.60425 1.35498,0 3.05786,-0.53101 1.7212,-0.531 3.05787,-1.44653 z m 18.20068,-6.15234 v 7.52563 q 0,1.2085 0.49438,1.59302 0.76905,0.60425 2.74659,0.60425 2.87475,0 5.31005,-1.22681 0.93384,-0.47607 1.46485,-0.47607 0.73242,0 1.26343,0.54931 0.54931,0.54932 0.54931,1.33667 0,0.73242 -0.58594,1.26343 -0.89721,0.8606 -3.55224,1.59302 -2.63672,0.71411 -4.44946,0.71411 -3.49732,0 -5.25513,-1.50147 -1.7395,-1.51977 -1.7395,-3.71704 v -8.25805 h -1.35498 q -1.35498,0 -1.94092,-0.5127 -0.56763,-0.531 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58594,-0.53101 1.94092,-0.53101 h 1.35498 v -3.38745 q 0,-1.35498 0.51269,-1.9226 0.53101,-0.58594 1.37329,-0.58594 0.82398,0 1.33667,0.58594 0.53101,0.56762 0.53101,1.9226 v 3.38745 h 6.9397 q 1.35498,0 1.9226,0.53101 0.58594,0.5127 0.58594,1.35498 0,0.82398 -0.58594,1.35498 -0.56762,0.5127 -1.9226,0.5127 z m 24.77417,-10.87647 v 3.97339 h -4.46777 v -3.97339 z m 0.51269,7.1228 v 12.87232 h 4.5044 q 1.35498,0 1.92261,0.531 0.58593,0.5127 0.58593,1.35498 0,0.82398 -0.58593,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -12.76245 q -1.35498,0 -1.94092,-0.51269 -0.56763,-0.53101 -0.56763,-1.3733 0,-0.82397 0.56763,-1.33667 0.58594,-0.531 1.94092,-0.531 h 4.50439 v -9.11865 h -3.02124 q -1.33667,0 -1.92261,-0.5127 -0.58593,-0.531 -0.58593,-1.37329 0,-0.82397 0.56762,-1.33667 0.58594,-0.53101 1.94092,-0.53101 z m 30.39551,8.62427 q 0,2.16065 -1.20849,4.19312 -1.19019,2.01416 -3.57056,3.22265 -2.36206,1.19019 -4.94385,1.19019 -2.56348,0 -4.90723,-1.17188 -2.34375,-1.19018 -3.57055,-3.22265 -1.22681,-2.03247 -1.22681,-4.24805 0,-2.2522 1.24512,-4.41284 1.24512,-2.17896 3.57056,-3.42407 2.34375,-1.24512 4.88891,-1.24512 2.56348,0 4.92554,1.28174 2.38037,1.26343 3.58887,3.42407 1.20849,2.14233 1.20849,4.41284 z m -3.75366,0.0183 q 0,-1.81274 -1.30005,-3.33252 -1.77612,-2.05078 -4.66919,-2.05078 -2.54516,0 -4.24805,1.62964 -1.70288,1.62964 -1.70288,3.77197 0,1.75782 1.72119,3.2959 1.7212,1.51978 4.22974,1.51978 2.52686,0 4.24805,-1.51978 1.72119,-1.53808 1.72119,-3.31421 z m 12.70752,-8.64258 v 1.26343 q 1.02539,-0.8789 2.2522,-1.31836 1.24511,-0.43945 2.69165,-0.43945 3.33252,0 5.27343,2.06909 1.53809,1.64795 1.53809,4.32129 v 6.97632 q 1.19019,0 1.75781,0.531 0.56763,0.5127 0.56763,1.35498 0,0.82398 -0.58594,1.35499 -0.56762,0.51269 -1.92261,0.51269 h -3.38745 q -1.35498,0 -1.94091,-0.51269 -0.56763,-0.53101 -0.56763,-1.3733 0,-0.82397 0.56763,-1.33667 0.56762,-0.531 1.75781,-0.531 v -7.08618 q 0,-1.22681 -0.65918,-1.79444 -0.8606,-0.73242 -2.58179,-0.73242 -1.30005,0 -2.28882,0.5127 -0.97046,0.49438 -2.47192,2.12402 v 6.97632 q 1.44653,0 1.86767,0.27466 0.89722,0.54931 0.89722,1.61132 0,0.82398 -0.58594,1.35499 -0.56762,0.51269 -1.9226,0.51269 h -4.26636 q -1.35498,0 -1.94092,-0.51269 -0.56763,-0.53101 -0.56763,-1.3733 0,-1.02539 0.87891,-1.59301 0.43945,-0.27466 1.88599,-0.27466 v -9.11865 q -1.19019,0 -1.75782,-0.53101 -0.56762,-0.53101 -0.56762,-1.35498 0,-0.82397 0.56762,-1.33667 0.58594,-0.53101 1.94092,-0.53101 z" + id="text1" + style="font-weight:bold;font-size:37.5px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New, Bold';fill:#4d4d4d;stroke-width:0.9375" + aria-label="TACo operation" /> + d="m -29.414623,758.49292 v 14.68506 h 2.526855 q 1.354981,0 1.922608,0.531 0.585937,0.5127 0.585937,1.35498 0,0.82398 -0.585937,1.35499 -0.567627,0.51269 -1.922608,0.51269 h -8.789062 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 2.508545 v -14.68506 h -4.064942 v 3.55225 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.35498,0.56763 -0.823975,0 -1.354981,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -7.32422 l 19.445801,0.0183 v 7.30591 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.35498,0.56763 -0.823975,0 -1.354981,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -3.55225 z m 25.2685544,12.39624 h -9.1186524 l -0.915527,2.28882 h 0.915527 q 1.354981,0 1.922608,0.531 0.585937,0.5127 0.585937,1.35498 0,0.82398 -0.585937,1.35499 -0.567627,0.51269 -1.922608,0.51269 h -5.053711 q -1.35498,0 -1.922607,-0.51269 -0.585938,-0.53101 -0.585938,-1.3733 0,-0.84228 0.604248,-1.37329 0.604248,-0.531 1.99585,-0.49438 l 5.895996,-14.68506 h -2.453613 q -1.354981,0 -1.940918,-0.5127 -0.567627,-0.531 -0.567627,-1.37329 0,-0.84228 0.567627,-1.35498 0.585937,-0.531 1.940918,-0.531 l 8.111572,0.0183 7.47070308,18.43872 q 1.31835942,0 1.73950192,0.29297 0.8422852,0.60425 0.8422852,1.59301 0,0.82398 -0.567627,1.35499 -0.5676269,0.51269 -1.92260738,0.51269 H -4.1643791 q -1.3549805,0 -1.940918,-0.51269 -0.5676269,-0.53101 -0.5676269,-1.3733 0,-0.82397 0.5676269,-1.33667 0.5859375,-0.531 1.940918,-0.531 h 0.9155273 z m -1.5563965,-3.75366 -3.0212402,-7.43408 -3.0395507,7.43408 z M 19.657642,755.69141 q 0.347901,-0.47608 0.750733,-0.71412 0.421142,-0.23803 0.897217,-0.23803 0.823974,0 1.33667,0.56762 0.531005,0.56763 0.531005,1.92261 v 3.18604 q 0,1.35498 -0.531005,1.94092 -0.512696,0.56762 -1.33667,0.56762 -0.750733,0 -1.208497,-0.42114 -0.457763,-0.42114 -0.67749,-1.57471 -0.128174,-0.76904 -0.512695,-1.19018 -0.750732,-0.82398 -2.105713,-1.31836 -1.33667,-0.49439 -2.69165,-0.49439 -1.684571,0 -3.094483,0.73242 -1.4099119,0.73243 -2.4902341,2.38038 -1.0803223,1.64795 -1.0803223,3.91845 v 2.43531 q 0,2.70996 1.9592285,4.5227 1.9775389,1.81274 5.4748539,1.81274 2.087402,0 3.533935,-0.56762 0.842285,-0.32959 1.794434,-1.30005 0.585937,-0.58594 0.915527,-0.75073 0.32959,-0.18311 0.750733,-0.18311 0.750732,0 1.318359,0.56763 0.567627,0.56763 0.567627,1.33667 0,0.76904 -0.769043,1.64795 -1.116943,1.28174 -2.874756,2.01416 -2.362061,0.98877 -5.218506,0.98877 -3.332519,0 -6.0058592,-1.37329 -2.1606445,-1.09864 -3.6804199,-3.4607 -1.5197754,-2.38037 -1.5197754,-5.18188 v -2.54517 q 0,-2.92969 1.3549805,-5.45654 1.373291,-2.54517 3.7902832,-3.91846 2.4169918,-1.37329 5.1269528,-1.37329 1.629639,0 3.039551,0.38452 1.428223,0.36621 2.655029,1.13526 z m 26.367188,13.23852 q 0,2.16065 -1.208496,4.19312 -1.190186,2.01416 -3.570557,3.22265 -2.36206,1.19019 -4.943848,1.19019 -2.563476,0 -4.907226,-1.17188 -2.34375,-1.19018 -3.570557,-3.22265 -1.226806,-2.03247 -1.226806,-4.24805 0,-2.2522 1.245117,-4.41284 1.245117,-2.17896 3.570556,-3.42407 2.34375,-1.24512 4.888916,-1.24512 2.563477,0 4.925538,1.28174 2.380371,1.26343 3.588867,3.42407 1.208496,2.14233 1.208496,4.41284 z m -3.753662,0.0183 q 0,-1.81274 -1.300049,-3.33252 -1.776123,-2.05078 -4.66919,-2.05078 -2.545166,0 -4.248046,1.62964 -1.702881,1.62964 -1.702881,3.77197 0,1.75782 1.721191,3.2959 1.721192,1.51978 4.229736,1.51978 2.526856,0 4.248047,-1.51978 1.721192,-1.53808 1.721192,-3.31421 z m 38.232422,-8.64258 v 2.34375 q 2.36206,-1.70288 3.717041,-2.2705 1.373291,-0.56763 2.563476,-0.56763 1.831055,0 3.552246,1.35498 1.171875,0.91553 1.171875,1.86768 0,0.80566 -0.567627,1.37329 -0.549316,0.54931 -1.33667,0.54931 -0.6958,0 -1.464843,-0.6958 -0.769043,-0.6958 -1.373291,-0.6958 -0.787354,0 -2.362061,0.98877 -1.556396,0.98877 -3.900146,2.96631 v 5.65796 h 5.346679 q 1.354981,0 1.922608,0.531 0.585937,0.5127 0.585937,1.35498 0,0.82398 -0.585937,1.35499 -0.567627,0.51269 -1.922608,0.51269 H 74.516041 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 2.233887 v -9.11865 h -1.354981 q -1.35498,0 -1.940918,-0.5127 -0.567627,-0.53101 -0.567627,-1.37329 0,-0.82397 0.567627,-1.33667 0.585938,-0.53101 1.940918,-0.53101 z m 32.70264,10.21729 H 97.807056 q 0.585938,1.46484 2.069092,2.36206 1.501462,0.89722 4.046632,0.89722 2.0874,0 5.54809,-0.89722 1.42823,-0.36621 1.97754,-0.36621 0.75074,0 1.26343,0.531 0.5127,0.53101 0.5127,1.33667 0,0.73243 -0.54932,1.24512 -0.73242,0.67749 -3.57056,1.30005 -2.83813,0.60425 -5.45654,0.60425 -4.504394,0 -7.214355,-2.54517 -2.69165,-2.54516 -2.69165,-6.2622 0,-3.95508 2.911377,-6.42701 2.929687,-2.49023 6.738278,-2.49023 2.28882,0 4.19312,0.80566 1.92261,0.80567 2.85644,1.73951 1.31836,1.35498 2.17896,3.35083 0.58594,1.3916 0.58594,3.22265 z m -4.1565,-3.75366 q -0.86059,-1.61133 -2.2522,-2.39868 -1.3916,-0.80567 -3.3142,-0.80567 -1.9043,0 -3.2959,0.80567 -1.391604,0.78735 -2.27051,2.39868 z m 21.29517,-2.06909 q -0.91553,-0.56763 -1.92261,-0.84229 -1.00708,-0.29297 -2.10571,-0.29297 -2.17896,0 -3.4607,0.71411 -0.56762,0.31128 -0.56762,0.67749 0,0.42115 0.76904,0.82398 0.58594,0.29297 2.61841,0.56762 3.73535,0.5127 5.20019,1.0254 1.92261,0.67749 2.96631,2.01416 1.0437,1.33667 1.0437,2.81982 0,2.01416 -1.77612,3.36914 -2.54517,1.95923 -6.61011,1.95923 -1.62964,0 -3.02124,-0.29297 -1.37329,-0.27466 -2.52685,-0.82397 -0.27466,0.23803 -0.58594,0.36621 -0.31128,0.12817 -0.64087,0.12817 -0.87891,0 -1.40991,-0.56763 -0.5127,-0.58593 -0.5127,-1.94091 v -1.26343 q 0,-1.35498 0.5127,-1.92261 0.531,-0.58594 1.37329,-0.58594 0.67749,0 1.13525,0.38452 0.45777,0.36621 0.71412,1.28174 0.86059,0.73242 2.06909,1.11695 1.20849,0.36621 2.7832,0.36621 2.58179,0 4.01001,-0.80567 0.67749,-0.40283 0.67749,-0.84228 0,-0.73242 -0.97046,-1.2085 -0.97046,-0.47607 -4.01001,-0.80566 -4.5227,-0.47608 -6.04248,-1.83106 -1.51977,-1.33667 -1.51977,-3.2959 0,-2.01416 1.70288,-3.35083 2.30713,-1.83105 6.04248,-1.83105 1.30005,0 2.49023,0.25635 1.2085,0.23803 2.30713,0.75073 0.3479,-0.25635 0.64087,-0.38452 0.31128,-0.12818 0.56763,-0.12818 0.76904,0 1.28173,0.58594 0.5127,0.56763 0.5127,1.92261 v 0.91553 q 0,1.2268 -0.29297,1.66626 -0.58594,0.84228 -1.59302,0.84228 -0.67749,0 -1.19018,-0.42114 -0.5127,-0.42114 -0.65918,-1.11694 z m 26.42212,-4.39454 v 12.87232 q 1.19018,0 1.75781,0.531 0.56763,0.53101 0.56763,1.35498 0,0.82398 -0.58594,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -3.57055 v -0.8606 q -1.61133,0.73243 -3.07618,1.09864 -1.46484,0.36621 -2.7832,0.36621 -1.84936,0 -3.20435,-0.76904 -1.35498,-0.78736 -2.14233,-2.16065 -0.56763,-0.98877 -0.56763,-2.47192 v -8.07495 h -0.64087 q -1.35498,0 -1.94091,-0.5127 -0.56763,-0.53101 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58593,-0.53101 1.94091,-0.53101 h 4.39454 v 11.16944 q 0,1.19018 0.56762,1.75781 0.58594,0.54932 1.77613,0.54932 1.13525,0 2.4353,-0.43946 1.31836,-0.45776 3.24097,-1.62964 v -7.6538 h -1.35499 q -1.35498,0 -1.94091,-0.5127 -0.56763,-0.53101 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58593,-0.53101 1.94091,-0.53101 z m 16.40625,-7.1228 v 19.99512 h 4.50439 q 1.35498,0 1.92261,0.531 0.58594,0.5127 0.58594,1.35498 0,0.82398 -0.58594,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -12.76245 q -1.35498,0 -1.94092,-0.51269 -0.56762,-0.53101 -0.56762,-1.3733 0,-0.82397 0.56762,-1.33667 0.58594,-0.531 1.94092,-0.531 h 4.5044 v -16.24146 h -3.02124 q -1.33667,0 -1.92261,-0.51269 -0.58594,-0.53101 -0.58594,-1.37329 0,-0.82398 0.56763,-1.33667 0.58593,-0.53101 1.94092,-0.53101 z m 19.70215,10.87647 v 7.52563 q 0,1.2085 0.49438,1.59302 0.76904,0.60425 2.74658,0.60425 2.87476,0 5.31006,-1.22681 0.93384,-0.47607 1.46484,-0.47607 0.73243,0 1.26343,0.54931 0.54932,0.54932 0.54932,1.33667 0,0.73242 -0.58594,1.26343 -0.89722,0.8606 -3.55224,1.59302 -2.63672,0.71411 -4.44947,0.71411 -3.49731,0 -5.25512,-1.50147 -1.73951,-1.51977 -1.73951,-3.71704 v -8.25805 h -1.35498 q -1.35498,0 -1.94091,-0.5127 -0.56763,-0.53101 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58593,-0.53101 1.94091,-0.53101 h 1.35498 v -3.38745 q 0,-1.35498 0.5127,-1.9226 0.531,-0.58594 1.37329,-0.58594 0.82397,0 1.33667,0.58594 0.53101,0.56762 0.53101,1.9226 v 3.38745 h 6.93969 q 1.35498,0 1.92261,0.53101 0.58594,0.5127 0.58594,1.35498 0,0.82397 -0.58594,1.35498 -0.56763,0.5127 -1.92261,0.5127 z" + id="text1-2" + style="font-weight:bold;font-size:37.5px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New, Bold';fill:#4d4d4d;stroke-width:0.9375" + aria-label="TACo result" /> From fe1d21044f84db6e12efd21db47b33d63e644be2 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 12 Oct 2023 10:05:55 -0400 Subject: [PATCH 058/114] Apply RFCs from #40. --- README.rst | 10 +++++----- porter/main.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index ffa28ba..204b041 100644 --- a/README.rst +++ b/README.rst @@ -12,17 +12,17 @@ web-based service that performs TACo-based protocol operations for applications. Its goal is to simplify and abstract the complexities surrounding the -TACo protocol to negate the need for applications to interact with it -via a Python client. Porter introduces the TACo protocol to +TACo protocol to negate the need for applications to interact with the protocol +directly. Porter introduces the TACo protocol to cross-platform functionality, including web and mobile applications. .. image:: ./porter_diagram.png :target: ./porter_diagram.png -Any publicly available Porter can be used to interface with the -Threshold Network, or some application developers opt to run their -own. +You can utilize any publicly available Porter to interface with the +Threshold Network. Alternatively, some application developers may choose to +operate their own. Running a Porter Instance ------------------------- diff --git a/porter/main.py b/porter/main.py index 883f932..50bfc4f 100644 --- a/porter/main.py +++ b/porter/main.py @@ -284,7 +284,7 @@ def retrieve_cfrags() -> Response: response = controller(method_name='retrieve_cfrags', control_request=request) return response - # TODO: do we want to rename this endpoint to not include "cbd"? + # TODO: do we want to rename this endpoint to not include "cbd"? (#43) @porter_flask_control.route("/cbd_decrypt", methods=["POST"]) def cbd_decrypt() -> Response: """Porter control endpoint for executing a CBD decryption request.""" From 9be2ee874f71c3a511afdfdbf814f8c136418cc2 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 18 Oct 2023 11:34:26 -0400 Subject: [PATCH 059/114] =?UTF-8?q?Bump=20version:=201.0.0=20=E2=86=92=202?= =?UTF-8?q?.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- porter/__about__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index bd7b7cc..325f5fd 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.0.0 +current_version = 2.0.0 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?P[^.]*)\.(?P\d+))? diff --git a/porter/__about__.py b/porter/__about__.py index 95b4f57..2ade3b7 100644 --- a/porter/__about__.py +++ b/porter/__about__.py @@ -14,7 +14,7 @@ __summary__ = "Pipe for TACo on Threshold Network" -__version__ = "1.0.0" +__version__ = "2.0.0" __author__ = "NuCypher" From 291652075c6183cbb66b18e0427c48c42f6232e8 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 12 Oct 2023 16:25:17 -0400 Subject: [PATCH 060/114] Update cbd_decrypt endpoint and associated classes/variables/tests to be taco_decrypt. --- porter/fields/{cbd.py => taco.py} | 0 porter/interfaces.py | 8 +-- porter/main.py | 22 ++++---- porter/schema.py | 16 +++--- .../test_porter_taco_python_interface.py} | 16 +++--- .../test_porter_taco_web_interface.py} | 22 ++++---- .../test_taco_specifications.py} | 52 ++++++++++--------- tests/test_fields.py | 10 ++-- 8 files changed, 71 insertions(+), 75 deletions(-) rename porter/fields/{cbd.py => taco.py} (100%) rename tests/{cbd/test_porter_cbd_python_interface.py => taco/test_porter_taco_python_interface.py} (84%) rename tests/{cbd/test_porter_cbd_web_interface.py => taco/test_porter_taco_web_interface.py} (92%) rename tests/{cbd/test_cbd_specifications.py => taco/test_taco_specifications.py} (80%) diff --git a/porter/fields/cbd.py b/porter/fields/taco.py similarity index 100% rename from porter/fields/cbd.py rename to porter/fields/taco.py diff --git a/porter/interfaces.py b/porter/interfaces.py index 41216b5..8bb26c1 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -78,15 +78,15 @@ def retrieve_cfrags(self, } # list of RetrievalOutcome objects return response_data - @attach_schema(schema.CBDDecrypt) - def cbd_decrypt( + @attach_schema(schema.TACoDecrypt) + def taco_decrypt( self, threshold: int, encrypted_decryption_requests: Dict[ChecksumAddress, bytes], ): - cbd_outcome = self.implementer.cbd_decrypt( + taco_outcome = self.implementer.taco_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests, ) - response_data = {"decryption_results": cbd_outcome} + response_data = {"decryption_results": taco_outcome} return response_data diff --git a/porter/main.py b/porter/main.py index 50bfc4f..94da529 100644 --- a/porter/main.py +++ b/porter/main.py @@ -69,9 +69,9 @@ class PRERetrievalOutcome(NamedTuple): cfrags: Dict errors: Dict - class CBDDecryptionOutcome(NamedTuple): + class TACoDecryptOutcome(NamedTuple): """ - Simple object that stores the results and errors of CBD decryption operations across + Simple object that stores the results and errors of TACo decrypt operations across one or more Ursulas. """ @@ -193,23 +193,22 @@ def retrieve_cfrags( result_outcomes.append(result_outcome) return result_outcomes - def cbd_decrypt( + def taco_decrypt( self, threshold: int, encrypted_decryption_requests: Dict[ ChecksumAddress, EncryptedThresholdDecryptionRequest ], - ) -> CBDDecryptionOutcome: + ) -> TACoDecryptOutcome: decryption_client = ThresholdDecryptionClient(self) successes, failures = decryption_client.gather_encrypted_decryption_shares( encrypted_requests=encrypted_decryption_requests, threshold=threshold ) - cbd_outcome = Porter.CBDDecryptionOutcome( + taco_decrypt_outcome = Porter.TACoDecryptOutcome( encrypted_decryption_responses=successes, errors=failures ) - return cbd_outcome - + return taco_decrypt_outcome def _make_reservoir( self, @@ -284,11 +283,10 @@ def retrieve_cfrags() -> Response: response = controller(method_name='retrieve_cfrags', control_request=request) return response - # TODO: do we want to rename this endpoint to not include "cbd"? (#43) - @porter_flask_control.route("/cbd_decrypt", methods=["POST"]) - def cbd_decrypt() -> Response: - """Porter control endpoint for executing a CBD decryption request.""" - response = controller(method_name="cbd_decrypt", control_request=request) + @porter_flask_control.route("/taco_decrypt", methods=["POST"]) + def taco_decrypt() -> Response: + """Porter control endpoint for executing a TACo decryption request.""" + response = controller(method_name="taco_decrypt", control_request=request) return response return controller diff --git a/porter/schema.py b/porter/schema.py index e31ffc6..31646be 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -5,12 +5,12 @@ from porter.cli.types import EIP55_CHECKSUM_ADDRESS from porter.fields.base import JSON, Integer, PositiveInteger, StringList -from porter.fields.cbd import ( +from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData +from porter.fields.retrieve import CapsuleFrag, RetrievalKit +from porter.fields.taco import ( EncryptedThresholdDecryptionRequestField, EncryptedThresholdDecryptionResponseField, ) -from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData -from porter.fields.retrieve import CapsuleFrag, RetrievalKit from porter.fields.treasuremap import TreasureMap from porter.fields.umbralkey import UmbralKey from porter.fields.ursula import UrsulaChecksumAddress @@ -198,11 +198,11 @@ class PRERetrieveCFrags(BaseSchema): ) # -# CBD Endpoints +# TACo Endpoints # -class CBDDecryptionOutcomeSchema(BaseSchema): +class TACoDecryptOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" encrypted_decryption_responses = marshmallow_fields.Dict( @@ -217,7 +217,7 @@ class Meta: ordered = True -class CBDDecrypt(BaseSchema): +class TACoDecrypt(BaseSchema): threshold = Integer( required=True, load_only=True, @@ -237,7 +237,7 @@ class CBDDecrypt(BaseSchema): click=click.option( "--encrypted-decryption-requests", "-e", - help="Encrypted decryption requests dictionary keyed by ursula address", + help="Encrypted decryption requests dictionary keyed by ursula checksum address", type=click.STRING, required=False, ), @@ -245,7 +245,7 @@ class CBDDecrypt(BaseSchema): # output decryption_results = marshmallow_fields.Nested( - CBDDecryptionOutcomeSchema, dump_only=True + TACoDecryptOutcomeSchema, dump_only=True ) @validates_schema diff --git a/tests/cbd/test_porter_cbd_python_interface.py b/tests/taco/test_porter_taco_python_interface.py similarity index 84% rename from tests/cbd/test_porter_cbd_python_interface.py rename to tests/taco/test_porter_taco_python_interface.py index 689307c..9500585 100644 --- a/tests/cbd/test_porter_cbd_python_interface.py +++ b/tests/taco/test_porter_taco_python_interface.py @@ -6,7 +6,7 @@ ) -def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): +def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): ritual_id, public_key, cohort, threshold = dkg_setup threshold_message_kit, expected_plaintext = dkg_encrypted_data @@ -36,15 +36,15 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): ) shared_secrets[ursula.checksum_address] = shared_secret - cbd_outcome = porter.cbd_decrypt( + taco_decrypt_outcome = porter.taco_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) # sufficient successes - assert len(cbd_outcome.encrypted_decryption_responses) >= threshold + assert len(taco_decrypt_outcome.encrypted_decryption_responses) >= threshold # no errors - assert len(cbd_outcome.errors) == 0 + assert len(taco_decrypt_outcome.errors) == 0 cohort_addresses = [ursula.checksum_address for ursula in cohort] @@ -52,7 +52,7 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): for ( ursula_address, encrypted_decryption_response, - ) in cbd_outcome.encrypted_decryption_responses.items(): + ) in taco_decrypt_outcome.encrypted_decryption_responses.items(): assert ursula_address in cohort_addresses shared_secret = shared_secrets[ursula_address] decryption_response = encrypted_decryption_response.decrypt( @@ -81,12 +81,12 @@ def test_cbd_decryption(porter, dkg_setup, dkg_encrypted_data): requester_public_key=requester_secret_key.public_key(), ) - cbd_outcome = porter.cbd_decrypt( + taco_decrypt_outcome = porter.taco_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) # sufficient successes - assert len(cbd_outcome.encrypted_decryption_responses) == 0 + assert len(taco_decrypt_outcome.encrypted_decryption_responses) == 0 # no errors - assert len(cbd_outcome.errors) == len(cohort) # all ursulas fail + assert len(taco_decrypt_outcome.errors) == len(cohort) # all ursulas fail diff --git a/tests/cbd/test_porter_cbd_web_interface.py b/tests/taco/test_porter_taco_web_interface.py similarity index 92% rename from tests/cbd/test_porter_cbd_web_interface.py rename to tests/taco/test_porter_taco_web_interface.py index 18613bc..1dcefb2 100644 --- a/tests/cbd/test_porter_cbd_web_interface.py +++ b/tests/taco/test_porter_taco_web_interface.py @@ -9,22 +9,17 @@ ) from nucypher_core.ferveo import ( DecryptionShareSimple, - combine_decryption_shares_simple, FerveoVariant, + combine_decryption_shares_simple, ) -from porter.fields.cbd import EncryptedThresholdDecryptionRequestField +from porter.fields.taco import EncryptedThresholdDecryptionRequestField -def test_cbd_decrypt( - porter, - porter_web_controller, - dkg_setup, - dkg_encrypted_data -): +def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_data): # Send bad data to assert error return response = porter_web_controller.post( - "/cbd_decrypt", data=json.dumps({"bad": "input"}) + "/taco_decrypt", data=json.dumps({"bad": "input"}) ) assert response.status_code == 400 @@ -71,7 +66,7 @@ def test_cbd_decrypt( # Success # response = porter_web_controller.post( - "/cbd_decrypt", data=json.dumps(request_data) + "/taco_decrypt", data=json.dumps(request_data) ) assert response.status_code == 200 @@ -85,8 +80,9 @@ def test_cbd_decrypt( assert len(decryption_results["encrypted_decryption_responses"]) >= threshold - cohort_addresses = [to_checksum_address(ursula.checksum_address) for ursula in cohort] - + cohort_addresses = [ + to_checksum_address(ursula.checksum_address) for ursula in cohort + ] encrypted_decryption_responses = decryption_results[ "encrypted_decryption_responses" @@ -152,7 +148,7 @@ def test_cbd_decrypt( "encrypted_decryption_requests": encrypted_decryption_requests, } response = porter_web_controller.post( - "/cbd_decrypt", data=json.dumps(request_data) + "/taco_decrypt", data=json.dumps(request_data) ) response_data = json.loads(response.data) diff --git a/tests/cbd/test_cbd_specifications.py b/tests/taco/test_taco_specifications.py similarity index 80% rename from tests/cbd/test_cbd_specifications.py rename to tests/taco/test_taco_specifications.py index 7123aac..66ebfa7 100644 --- a/tests/cbd/test_cbd_specifications.py +++ b/tests/taco/test_taco_specifications.py @@ -3,22 +3,22 @@ from nucypher_core import SessionStaticSecret, ThresholdDecryptionRequest from nucypher_core.ferveo import FerveoVariant -from porter.fields.cbd import ( +from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData +from porter.fields.taco import ( EncryptedThresholdDecryptionRequestField, EncryptedThresholdDecryptionResponseField, ) -from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData from porter.main import Porter -from porter.schema import CBDDecrypt, CBDDecryptionOutcomeSchema +from porter.schema import TACoDecrypt, TACoDecryptOutcomeSchema -def test_cbd_decrypt( +def test_taco_decrypt( porter, dkg_setup, dkg_encrypted_data, get_random_checksum_address ): ritual_id, public_key, cohort, threshold = dkg_setup threshold_message_kit, expected_plaintext = dkg_encrypted_data - cbd_decrypt_schema = CBDDecrypt() + taco_decrypt_schema = TACoDecrypt() decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, @@ -51,18 +51,18 @@ def test_cbd_decrypt( # no args with pytest.raises(InvalidInputData): - cbd_decrypt_schema.load({}) + taco_decrypt_schema.load({}) # missing required args with pytest.raises(InvalidInputData): request_data = {"threshold": threshold} - cbd_decrypt_schema.load(request_data) + taco_decrypt_schema.load(request_data) with pytest.raises(InvalidInputData): request_data = { "encrypted_decryption_requests": encrypted_decryption_requests, } - cbd_decrypt_schema.load(request_data) + taco_decrypt_schema.load(request_data) # invalid param names with pytest.raises(InvalidInputData): @@ -70,14 +70,14 @@ def test_cbd_decrypt( "dkg_threshold": threshold, "encrypted_decryption_requests": encrypted_decryption_requests, } - cbd_decrypt_schema.load(request_data) + taco_decrypt_schema.load(request_data) with pytest.raises(InvalidInputData): request_data = { "threshold": threshold, "encrypted_dec_requests": encrypted_decryption_requests, } - cbd_decrypt_schema.load(request_data) + taco_decrypt_schema.load(request_data) # invalid param types with pytest.raises(InvalidInputData): @@ -85,7 +85,7 @@ def test_cbd_decrypt( "threshold": "threshold? we don't need no stinking threshold", "encrypted_decryption_requests": encrypted_decryption_requests, } - cbd_decrypt_schema.load(request_data) + taco_decrypt_schema.load(request_data) # invalid param combination with pytest.raises(InvalidArgumentCombo): @@ -94,14 +94,14 @@ def test_cbd_decrypt( + 1, # threshold larger than number of requests "encrypted_decryption_requests": encrypted_decryption_requests, } - cbd_decrypt_schema.load(request_data) + taco_decrypt_schema.load(request_data) # simple schema successful load request_data = { "threshold": threshold, "encrypted_decryption_requests": encrypted_decryption_requests, } - cbd_decrypt_schema.load(request_data) + taco_decrypt_schema.load(request_data) # actual outcomes encrypted_decryption_requests = {} @@ -120,16 +120,16 @@ def test_cbd_decrypt( ursula.checksum_address ] = encrypted_decryption_request - cbd_outcome = porter.cbd_decrypt( + taco_decrypt_outcome = porter.taco_decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) - assert len(cbd_outcome.errors) == 0, f"{cbd_outcome.errors}" - assert len(cbd_outcome.encrypted_decryption_responses) >= threshold + assert len(taco_decrypt_outcome.errors) == 0, f"{taco_decrypt_outcome.errors}" + assert len(taco_decrypt_outcome.encrypted_decryption_responses) >= threshold - cbd_outcome_schema = CBDDecryptionOutcomeSchema() - outcome_json = cbd_outcome_schema.dump(cbd_outcome) - output = cbd_decrypt_schema.dump(obj={"decryption_results": cbd_outcome}) + taco_decrypt_outcome_schema = TACoDecryptOutcomeSchema() + outcome_json = taco_decrypt_outcome_schema.dump(taco_decrypt_outcome) + output = taco_decrypt_schema.dump(obj={"decryption_results": taco_decrypt_outcome}) assert ( len(output["decryption_results"]["encrypted_decryption_responses"]) >= threshold ) @@ -141,7 +141,7 @@ def test_cbd_decrypt( for ( ursula_checksum_address, encrypted_decryption_response, - ) in cbd_outcome.encrypted_decryption_responses.items(): + ) in taco_decrypt_outcome.encrypted_decryption_responses.items(): assert output["decryption_results"]["encrypted_decryption_responses"][ ursula_checksum_address ] == encrypted_response_field._serialize( @@ -159,12 +159,14 @@ def test_cbd_decrypt( ursula_checksum_address = to_checksum_address(cohort[i].checksum_address) errors[ursula_checksum_address] = f"Error Message {i}" - faked_cbd_outcome = Porter.CBDDecryptionOutcome( - encrypted_decryption_responses=cbd_outcome.encrypted_decryption_responses, + faked_taco_decrypt_outcome = Porter.TACoDecryptOutcome( + encrypted_decryption_responses=taco_decrypt_outcome.encrypted_decryption_responses, errors=errors, ) - faked_outcome_json = cbd_outcome_schema.dump(faked_cbd_outcome) - output = cbd_decrypt_schema.dump(obj={"decryption_results": faked_cbd_outcome}) + faked_outcome_json = taco_decrypt_outcome_schema.dump(faked_taco_decrypt_outcome) + output = taco_decrypt_schema.dump( + obj={"decryption_results": faked_taco_decrypt_outcome} + ) assert ( len(output["decryption_results"]["encrypted_decryption_responses"]) >= threshold ) @@ -175,7 +177,7 @@ def test_cbd_decrypt( for ( ursula_checksum_address, encrypted_decryption_response, - ) in faked_cbd_outcome.encrypted_decryption_responses.items(): + ) in faked_taco_decrypt_outcome.encrypted_decryption_responses.items(): assert output["decryption_results"]["encrypted_decryption_responses"][ ursula_checksum_address ] == encrypted_response_field._serialize( diff --git a/tests/test_fields.py b/tests/test_fields.py index 66ff280..fa98fb6 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -27,12 +27,12 @@ String, StringList, ) -from porter.fields.cbd import ( +from porter.fields.exceptions import InvalidInputData +from porter.fields.retrieve import RetrievalKit +from porter.fields.taco import ( EncryptedThresholdDecryptionRequestField, EncryptedThresholdDecryptionResponseField, ) -from porter.fields.exceptions import InvalidInputData -from porter.fields.retrieve import RetrievalKit from porter.fields.umbralkey import UmbralKey from porter.fields.ursula import UrsulaChecksumAddress @@ -259,7 +259,7 @@ def test_json_field(): field._deserialize(value=json.dumps(d), attr=None, data=None) -def test_cbd_dict_field(get_random_checksum_address): +def test_taco_dict_field(get_random_checksum_address): # test data original_data = {} expected_serialized_result = {} @@ -272,7 +272,7 @@ def test_cbd_dict_field(get_random_checksum_address): encrypted_decryption_request ).decode() - # mimic usage for CBD + # mimic usage for TACo fields field = marshmallow_fields.Dict( keys=UrsulaChecksumAddress(), values=Base64BytesRepresentation() ) From c0a0a623d61eab588bc99d241e47b2e6f5aa5dd8 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 16 Oct 2023 09:24:24 -0400 Subject: [PATCH 061/114] Use /decrypt instead of /taco_decrypt. Update associated schema/variable names etc. --- porter/interfaces.py | 8 ++-- porter/main.py | 16 +++---- porter/schema.py | 8 ++-- .../taco/test_porter_taco_python_interface.py | 14 +++--- tests/taco/test_porter_taco_web_interface.py | 12 ++--- tests/taco/test_taco_specifications.py | 46 +++++++++---------- 6 files changed, 47 insertions(+), 57 deletions(-) diff --git a/porter/interfaces.py b/porter/interfaces.py index 8bb26c1..71453d3 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -78,15 +78,15 @@ def retrieve_cfrags(self, } # list of RetrievalOutcome objects return response_data - @attach_schema(schema.TACoDecrypt) - def taco_decrypt( + @attach_schema(schema.Decrypt) + def decrypt( self, threshold: int, encrypted_decryption_requests: Dict[ChecksumAddress, bytes], ): - taco_outcome = self.implementer.taco_decrypt( + decrypt_outcome = self.implementer.decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests, ) - response_data = {"decryption_results": taco_outcome} + response_data = {"decryption_results": decrypt_outcome} return response_data diff --git a/porter/main.py b/porter/main.py index 94da529..6565ae6 100644 --- a/porter/main.py +++ b/porter/main.py @@ -69,7 +69,7 @@ class PRERetrievalOutcome(NamedTuple): cfrags: Dict errors: Dict - class TACoDecryptOutcome(NamedTuple): + class DecryptOutcome(NamedTuple): """ Simple object that stores the results and errors of TACo decrypt operations across one or more Ursulas. @@ -193,22 +193,22 @@ def retrieve_cfrags( result_outcomes.append(result_outcome) return result_outcomes - def taco_decrypt( + def decrypt( self, threshold: int, encrypted_decryption_requests: Dict[ ChecksumAddress, EncryptedThresholdDecryptionRequest ], - ) -> TACoDecryptOutcome: + ) -> DecryptOutcome: decryption_client = ThresholdDecryptionClient(self) successes, failures = decryption_client.gather_encrypted_decryption_shares( encrypted_requests=encrypted_decryption_requests, threshold=threshold ) - taco_decrypt_outcome = Porter.TACoDecryptOutcome( + decrypt_outcome = Porter.DecryptOutcome( encrypted_decryption_responses=successes, errors=failures ) - return taco_decrypt_outcome + return decrypt_outcome def _make_reservoir( self, @@ -283,10 +283,10 @@ def retrieve_cfrags() -> Response: response = controller(method_name='retrieve_cfrags', control_request=request) return response - @porter_flask_control.route("/taco_decrypt", methods=["POST"]) - def taco_decrypt() -> Response: + @porter_flask_control.route("/decrypt", methods=["POST"]) + def decrypt() -> Response: """Porter control endpoint for executing a TACo decryption request.""" - response = controller(method_name="taco_decrypt", control_request=request) + response = controller(method_name="decrypt", control_request=request) return response return controller diff --git a/porter/schema.py b/porter/schema.py index 31646be..cb0357f 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -202,7 +202,7 @@ class PRERetrieveCFrags(BaseSchema): # -class TACoDecryptOutcomeSchema(BaseSchema): +class DecryptOutcomeSchema(BaseSchema): """Schema for the result of /retrieve_cfrags endpoint.""" encrypted_decryption_responses = marshmallow_fields.Dict( @@ -217,7 +217,7 @@ class Meta: ordered = True -class TACoDecrypt(BaseSchema): +class Decrypt(BaseSchema): threshold = Integer( required=True, load_only=True, @@ -244,9 +244,7 @@ class TACoDecrypt(BaseSchema): ) # output - decryption_results = marshmallow_fields.Nested( - TACoDecryptOutcomeSchema, dump_only=True - ) + decryption_results = marshmallow_fields.Nested(DecryptOutcomeSchema, dump_only=True) @validates_schema def check_valid_threshold_and_requests(self, data, **kwargs): diff --git a/tests/taco/test_porter_taco_python_interface.py b/tests/taco/test_porter_taco_python_interface.py index 9500585..26b8554 100644 --- a/tests/taco/test_porter_taco_python_interface.py +++ b/tests/taco/test_porter_taco_python_interface.py @@ -36,15 +36,15 @@ def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): ) shared_secrets[ursula.checksum_address] = shared_secret - taco_decrypt_outcome = porter.taco_decrypt( + decrypt_outcome = porter.decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) # sufficient successes - assert len(taco_decrypt_outcome.encrypted_decryption_responses) >= threshold + assert len(decrypt_outcome.encrypted_decryption_responses) >= threshold # no errors - assert len(taco_decrypt_outcome.errors) == 0 + assert len(decrypt_outcome.errors) == 0 cohort_addresses = [ursula.checksum_address for ursula in cohort] @@ -52,7 +52,7 @@ def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): for ( ursula_address, encrypted_decryption_response, - ) in taco_decrypt_outcome.encrypted_decryption_responses.items(): + ) in decrypt_outcome.encrypted_decryption_responses.items(): assert ursula_address in cohort_addresses shared_secret = shared_secrets[ursula_address] decryption_response = encrypted_decryption_response.decrypt( @@ -81,12 +81,12 @@ def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): requester_public_key=requester_secret_key.public_key(), ) - taco_decrypt_outcome = porter.taco_decrypt( + decrypt_outcome = porter.decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) # sufficient successes - assert len(taco_decrypt_outcome.encrypted_decryption_responses) == 0 + assert len(decrypt_outcome.encrypted_decryption_responses) == 0 # no errors - assert len(taco_decrypt_outcome.errors) == len(cohort) # all ursulas fail + assert len(decrypt_outcome.errors) == len(cohort) # all ursulas fail diff --git a/tests/taco/test_porter_taco_web_interface.py b/tests/taco/test_porter_taco_web_interface.py index 1dcefb2..a319e1f 100644 --- a/tests/taco/test_porter_taco_web_interface.py +++ b/tests/taco/test_porter_taco_web_interface.py @@ -18,9 +18,7 @@ def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_data): # Send bad data to assert error return - response = porter_web_controller.post( - "/taco_decrypt", data=json.dumps({"bad": "input"}) - ) + response = porter_web_controller.post("/decrypt", data=json.dumps({"bad": "input"})) assert response.status_code == 400 # Setup @@ -65,9 +63,7 @@ def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_da # # Success # - response = porter_web_controller.post( - "/taco_decrypt", data=json.dumps(request_data) - ) + response = porter_web_controller.post("/decrypt", data=json.dumps(request_data)) assert response.status_code == 200 response_data = json.loads(response.data) @@ -147,9 +143,7 @@ def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_da "threshold": threshold, "encrypted_decryption_requests": encrypted_decryption_requests, } - response = porter_web_controller.post( - "/taco_decrypt", data=json.dumps(request_data) - ) + response = porter_web_controller.post("/decrypt", data=json.dumps(request_data)) response_data = json.loads(response.data) decryption_results = response_data["result"]["decryption_results"] diff --git a/tests/taco/test_taco_specifications.py b/tests/taco/test_taco_specifications.py index 66ebfa7..f13d6ae 100644 --- a/tests/taco/test_taco_specifications.py +++ b/tests/taco/test_taco_specifications.py @@ -9,7 +9,7 @@ EncryptedThresholdDecryptionResponseField, ) from porter.main import Porter -from porter.schema import TACoDecrypt, TACoDecryptOutcomeSchema +from porter.schema import Decrypt, DecryptOutcomeSchema def test_taco_decrypt( @@ -18,7 +18,7 @@ def test_taco_decrypt( ritual_id, public_key, cohort, threshold = dkg_setup threshold_message_kit, expected_plaintext = dkg_encrypted_data - taco_decrypt_schema = TACoDecrypt() + decrypt_schema = Decrypt() decryption_request = ThresholdDecryptionRequest( ritual_id=ritual_id, @@ -51,18 +51,18 @@ def test_taco_decrypt( # no args with pytest.raises(InvalidInputData): - taco_decrypt_schema.load({}) + decrypt_schema.load({}) # missing required args with pytest.raises(InvalidInputData): request_data = {"threshold": threshold} - taco_decrypt_schema.load(request_data) + decrypt_schema.load(request_data) with pytest.raises(InvalidInputData): request_data = { "encrypted_decryption_requests": encrypted_decryption_requests, } - taco_decrypt_schema.load(request_data) + decrypt_schema.load(request_data) # invalid param names with pytest.raises(InvalidInputData): @@ -70,14 +70,14 @@ def test_taco_decrypt( "dkg_threshold": threshold, "encrypted_decryption_requests": encrypted_decryption_requests, } - taco_decrypt_schema.load(request_data) + decrypt_schema.load(request_data) with pytest.raises(InvalidInputData): request_data = { "threshold": threshold, "encrypted_dec_requests": encrypted_decryption_requests, } - taco_decrypt_schema.load(request_data) + decrypt_schema.load(request_data) # invalid param types with pytest.raises(InvalidInputData): @@ -85,7 +85,7 @@ def test_taco_decrypt( "threshold": "threshold? we don't need no stinking threshold", "encrypted_decryption_requests": encrypted_decryption_requests, } - taco_decrypt_schema.load(request_data) + decrypt_schema.load(request_data) # invalid param combination with pytest.raises(InvalidArgumentCombo): @@ -94,14 +94,14 @@ def test_taco_decrypt( + 1, # threshold larger than number of requests "encrypted_decryption_requests": encrypted_decryption_requests, } - taco_decrypt_schema.load(request_data) + decrypt_schema.load(request_data) # simple schema successful load request_data = { "threshold": threshold, "encrypted_decryption_requests": encrypted_decryption_requests, } - taco_decrypt_schema.load(request_data) + decrypt_schema.load(request_data) # actual outcomes encrypted_decryption_requests = {} @@ -120,16 +120,16 @@ def test_taco_decrypt( ursula.checksum_address ] = encrypted_decryption_request - taco_decrypt_outcome = porter.taco_decrypt( + decrypt_outcome = porter.decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) - assert len(taco_decrypt_outcome.errors) == 0, f"{taco_decrypt_outcome.errors}" - assert len(taco_decrypt_outcome.encrypted_decryption_responses) >= threshold + assert len(decrypt_outcome.errors) == 0, f"{decrypt_outcome.errors}" + assert len(decrypt_outcome.encrypted_decryption_responses) >= threshold - taco_decrypt_outcome_schema = TACoDecryptOutcomeSchema() - outcome_json = taco_decrypt_outcome_schema.dump(taco_decrypt_outcome) - output = taco_decrypt_schema.dump(obj={"decryption_results": taco_decrypt_outcome}) + decrypt_outcome_schema = DecryptOutcomeSchema() + outcome_json = decrypt_outcome_schema.dump(decrypt_outcome) + output = decrypt_schema.dump(obj={"decryption_results": decrypt_outcome}) assert ( len(output["decryption_results"]["encrypted_decryption_responses"]) >= threshold ) @@ -141,7 +141,7 @@ def test_taco_decrypt( for ( ursula_checksum_address, encrypted_decryption_response, - ) in taco_decrypt_outcome.encrypted_decryption_responses.items(): + ) in decrypt_outcome.encrypted_decryption_responses.items(): assert output["decryption_results"]["encrypted_decryption_responses"][ ursula_checksum_address ] == encrypted_response_field._serialize( @@ -159,14 +159,12 @@ def test_taco_decrypt( ursula_checksum_address = to_checksum_address(cohort[i].checksum_address) errors[ursula_checksum_address] = f"Error Message {i}" - faked_taco_decrypt_outcome = Porter.TACoDecryptOutcome( - encrypted_decryption_responses=taco_decrypt_outcome.encrypted_decryption_responses, + faked_decrypt_outcome = Porter.DecryptOutcome( + encrypted_decryption_responses=decrypt_outcome.encrypted_decryption_responses, errors=errors, ) - faked_outcome_json = taco_decrypt_outcome_schema.dump(faked_taco_decrypt_outcome) - output = taco_decrypt_schema.dump( - obj={"decryption_results": faked_taco_decrypt_outcome} - ) + faked_outcome_json = decrypt_outcome_schema.dump(faked_decrypt_outcome) + output = decrypt_schema.dump(obj={"decryption_results": faked_decrypt_outcome}) assert ( len(output["decryption_results"]["encrypted_decryption_responses"]) >= threshold ) @@ -177,7 +175,7 @@ def test_taco_decrypt( for ( ursula_checksum_address, encrypted_decryption_response, - ) in faked_taco_decrypt_outcome.encrypted_decryption_responses.items(): + ) in faked_decrypt_outcome.encrypted_decryption_responses.items(): assert output["decryption_results"]["encrypted_decryption_responses"][ ursula_checksum_address ] == encrypted_response_field._serialize( From b27d4f546fe52ad964e7082d6482b5faf28d3360 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 16 Oct 2023 09:33:10 -0400 Subject: [PATCH 062/114] Rename PREGetUrsulas schema to GetUrsulas since it is not PRE-specific functionality but rather general sampling of nodes that applies to TACo as well. Move related tests to their own testing module. --- porter/interfaces.py | 5 +- porter/schema.py | 9 +- tests/pre/test_porter_pre_python_interface.py | 65 ---- tests/pre/test_porter_pre_web_interface.py | 74 ----- tests/pre/test_pre_specifications.py | 136 +-------- tests/test_get_ursulas.py | 278 ++++++++++++++++++ 6 files changed, 287 insertions(+), 280 deletions(-) create mode 100644 tests/test_get_ursulas.py diff --git a/porter/interfaces.py b/porter/interfaces.py index 71453d3..bd2ff2e 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -32,10 +32,7 @@ class PorterInterface(ControlInterface): def __init__(self, porter: 'Porter' = None, *args, **kwargs): super().__init__(implementer=porter, *args, **kwargs) - # - # Alice Endpoints - # - @attach_schema(schema.PREGetUrsulas) + @attach_schema(schema.GetUrsulas) def get_ursulas(self, quantity: int, exclude_ursulas: Optional[List[ChecksumAddress]] = None, diff --git a/porter/schema.py b/porter/schema.py index cb0357f..d29215e 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -55,10 +55,11 @@ class Meta: # -# PRE Endpoints +# Common Endpoints # -class PREGetUrsulas(BaseSchema): + +class GetUrsulas(BaseSchema): quantity = PositiveInteger( required=True, load_only=True, @@ -116,6 +117,10 @@ def check_include_and_exclude_are_mutually_exclusive(self, data, **kwargs): f"common entries {common_ursulas}") +# +# PRE Endpoints +# + class PRERevoke(BaseSchema): pass # TODO need to understand revoke process better diff --git a/tests/pre/test_porter_pre_python_interface.py b/tests/pre/test_porter_pre_python_interface.py index e3d89e4..530961d 100644 --- a/tests/pre/test_porter_pre_python_interface.py +++ b/tests/pre/test_porter_pre_python_interface.py @@ -1,71 +1,6 @@ from porter.utils import retrieval_request_setup -def test_get_ursulas(porter, ursulas): - # simple - quantity = 4 - ursulas_info = porter.get_ursulas(quantity=quantity) - returned_ursula_addresses = { - ursula_info.checksum_address for ursula_info in ursulas_info - } - assert len(returned_ursula_addresses) == quantity # ensure no repeats - - ursulas_list = list(ursulas) - - # include specific ursulas - include_ursulas = [ - ursulas_list[0].checksum_address, - ursulas_list[1].checksum_address, - ] - ursulas_info = porter.get_ursulas( - quantity=quantity, include_ursulas=include_ursulas - ) - returned_ursula_addresses = { - ursula_info.checksum_address for ursula_info in ursulas_info - } - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - - # exclude specific ursulas - number_to_exclude = len(ursulas_list) - 4 - exclude_ursulas = [] - for i in range(number_to_exclude): - exclude_ursulas.append(ursulas_list[i].checksum_address) - ursulas_info = porter.get_ursulas( - quantity=quantity, exclude_ursulas=exclude_ursulas - ) - returned_ursula_addresses = { - ursula_info.checksum_address for ursula_info in ursulas_info - } - assert len(returned_ursula_addresses) == quantity - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - # include and exclude - include_ursulas = [ - ursulas_list[0].checksum_address, - ursulas_list[1].checksum_address, - ] - exclude_ursulas = [ - ursulas_list[2].checksum_address, - ursulas_list[3].checksum_address, - ] - ursulas_info = porter.get_ursulas( - quantity=quantity, - include_ursulas=include_ursulas, - exclude_ursulas=exclude_ursulas, - ) - returned_ursula_addresses = { - ursula_info.checksum_address for ursula_info in ursulas_info - } - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - def test_retrieve_cfrags(porter, bob, alice, enacted_policy): # Setup retrieval_args, _ = retrieval_request_setup(enacted_policy, bob, alice) diff --git a/tests/pre/test_porter_pre_web_interface.py b/tests/pre/test_porter_pre_web_interface.py index 5a75878..d934bc5 100644 --- a/tests/pre/test_porter_pre_web_interface.py +++ b/tests/pre/test_porter_pre_web_interface.py @@ -12,80 +12,6 @@ from porter.utils import retrieval_params_decode_from_rest, retrieval_request_setup -def test_get_ursulas(porter_web_controller, ursulas): - # Send bad data to assert error return - response = porter_web_controller.get( - "/get_ursulas", data=json.dumps({"bad": "input"}) - ) - assert response.status_code == 400 - - quantity = 4 - ursulas_list = list(ursulas) - include_ursulas = [ - ursulas_list[0].checksum_address, - ursulas_list[1].checksum_address, - ] - exclude_ursulas = [ - ursulas_list[2].checksum_address, - ursulas_list[3].checksum_address, - ] - - get_ursulas_params = { - "quantity": quantity, - "include_ursulas": include_ursulas, - "exclude_ursulas": exclude_ursulas, - } - - # - # Success - # - response = porter_web_controller.get( - "/get_ursulas", data=json.dumps(get_ursulas_params) - ) - assert response.status_code == 200 - - response_data = json.loads(response.data) - ursulas_info = response_data["result"]["ursulas"] - returned_ursula_addresses = { - ursula_info["checksum_address"] for ursula_info in ursulas_info - } # ensure no repeats - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - # - # Test Query parameters - # - response = porter_web_controller.get( - f"/get_ursulas?quantity={quantity}" - f'&include_ursulas={",".join(include_ursulas)}' - f'&exclude_ursulas={",".join(exclude_ursulas)}' - ) - assert response.status_code == 200 - response_data = json.loads(response.data) - ursulas_info = response_data["result"]["ursulas"] - returned_ursula_addresses = { - ursula_info["checksum_address"] for ursula_info in ursulas_info - } # ensure no repeats - assert len(returned_ursula_addresses) == quantity - for address in include_ursulas: - assert address in returned_ursula_addresses - for address in exclude_ursulas: - assert address not in returned_ursula_addresses - - # - # Failure case - # - failed_ursula_params = dict(get_ursulas_params) - failed_ursula_params["quantity"] = len(ursulas_list) + 1 # too many to get - response = porter_web_controller.get( - "/get_ursulas", data=json.dumps(failed_ursula_params) - ) - assert response.status_code == 500 - - def test_retrieve_cfrags( porter, porter_web_controller, diff --git a/tests/pre/test_pre_specifications.py b/tests/pre/test_pre_specifications.py index 4366772..833c7d3 100644 --- a/tests/pre/test_pre_specifications.py +++ b/tests/pre/test_pre_specifications.py @@ -4,10 +4,9 @@ import pytest from nucypher.crypto.powers import DecryptingPower from nucypher_core import TreasureMap as TreasureMapClass -from nucypher_core.umbral import PublicKey, SecretKey +from nucypher_core.umbral import PublicKey from porter.fields.exceptions import ( - InvalidArgumentCombo, InvalidInputData, SpecificationError, ) @@ -16,145 +15,12 @@ from porter.main import Porter from porter.schema import ( BaseSchema, - PREGetUrsulas, PRERetrievalOutcomeSchema, PRERetrieveCFrags, - UrsulaInfoSchema, ) from porter.utils import retrieval_request_setup -def test_alice_get_ursulas_schema(get_random_checksum_address): - # - # Input i.e. load - # - - # no args - with pytest.raises(InvalidInputData): - PREGetUrsulas().load({}) - - quantity = 10 - required_data = { - "quantity": quantity, - } - - # required args - PREGetUrsulas().load(required_data) - - # missing required args - updated_data = {k: v for k, v in required_data.items() if k != "quantity"} - with pytest.raises(InvalidInputData): - PREGetUrsulas().load(updated_data) - - # optional components - - # only exclude - updated_data = dict(required_data) - exclude_ursulas = [] - for i in range(2): - exclude_ursulas.append(get_random_checksum_address()) - updated_data["exclude_ursulas"] = exclude_ursulas - PREGetUrsulas().load(updated_data) - - # only include - updated_data = dict(required_data) - include_ursulas = [] - for i in range(3): - include_ursulas.append(get_random_checksum_address()) - updated_data["include_ursulas"] = include_ursulas - PREGetUrsulas().load(updated_data) - - # both exclude and include - updated_data = dict(required_data) - updated_data["exclude_ursulas"] = exclude_ursulas - updated_data["include_ursulas"] = include_ursulas - PREGetUrsulas().load(updated_data) - - # list input formatted as ',' separated strings - updated_data = dict(required_data) - updated_data["exclude_ursulas"] = ",".join(exclude_ursulas) - updated_data["include_ursulas"] = ",".join(include_ursulas) - data = PREGetUrsulas().load(updated_data) - assert data["exclude_ursulas"] == exclude_ursulas - assert data["include_ursulas"] == include_ursulas - - # single value as string cast to list - updated_data = dict(required_data) - updated_data["exclude_ursulas"] = exclude_ursulas[0] - updated_data["include_ursulas"] = include_ursulas[0] - data = PREGetUrsulas().load(updated_data) - assert data["exclude_ursulas"] == [exclude_ursulas[0]] - assert data["include_ursulas"] == [include_ursulas[0]] - - # invalid include entry - updated_data = dict(required_data) - updated_data["exclude_ursulas"] = exclude_ursulas - updated_data["include_ursulas"] = list(include_ursulas) # make copy to modify - updated_data["include_ursulas"].append("0xdeadbeef") - with pytest.raises(InvalidInputData): - PREGetUrsulas().load(updated_data) - - # invalid exclude entry - updated_data = dict(required_data) - updated_data["exclude_ursulas"] = list(exclude_ursulas) # make copy to modify - updated_data["exclude_ursulas"].append("0xdeadbeef") - updated_data["include_ursulas"] = include_ursulas - with pytest.raises(InvalidInputData): - PREGetUrsulas().load(updated_data) - - # too many ursulas to include - updated_data = dict(required_data) - too_many_ursulas_to_include = [] - while len(too_many_ursulas_to_include) <= quantity: - too_many_ursulas_to_include.append(get_random_checksum_address()) - updated_data["include_ursulas"] = too_many_ursulas_to_include - with pytest.raises(InvalidArgumentCombo): - # number of ursulas to include exceeds quantity to sample - PREGetUrsulas().load(updated_data) - - # include and exclude addresses are not mutually exclusive - include has common entry - updated_data = dict(required_data) - updated_data["exclude_ursulas"] = exclude_ursulas - updated_data["include_ursulas"] = list(include_ursulas) # make copy to modify - updated_data["include_ursulas"].append( - exclude_ursulas[0] - ) # one address that overlaps - with pytest.raises(InvalidArgumentCombo): - # 1 address in both include and exclude lists - PREGetUrsulas().load(updated_data) - - # include and exclude addresses are not mutually exclusive - exclude has common entry - updated_data = dict(required_data) - updated_data["exclude_ursulas"] = list(exclude_ursulas) # make copy to modify - updated_data["exclude_ursulas"].append( - include_ursulas[0] - ) # on address that overlaps - updated_data["include_ursulas"] = include_ursulas - with pytest.raises(InvalidArgumentCombo): - # 1 address in both include and exclude lists - PREGetUrsulas().load(updated_data) - - # - # Output i.e. dump - # - ursulas_info = [] - expected_ursulas_info = [] - port = 11500 - for i in range(3): - ursula_info = Porter.UrsulaInfo( - get_random_checksum_address(), - f"https://127.0.0.1:{port+i}", - SecretKey.random().public_key(), - ) - ursulas_info.append(ursula_info) - - # use schema to determine expected output (encrypting key gets changed to hex) - expected_ursulas_info.append(UrsulaInfoSchema().dump(ursula_info)) - - output = PREGetUrsulas().dump(obj={"ursulas": ursulas_info}) - assert output == {"ursulas": expected_ursulas_info} - - def test_alice_revoke(): pass # TODO diff --git a/tests/test_get_ursulas.py b/tests/test_get_ursulas.py new file mode 100644 index 0000000..9eca982 --- /dev/null +++ b/tests/test_get_ursulas.py @@ -0,0 +1,278 @@ +import json + +import pytest +from nucypher_core.umbral import SecretKey + +from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData +from porter.main import Porter +from porter.schema import GetUrsulas, UrsulaInfoSchema + + +def test_get_ursulas_schema(get_random_checksum_address): + # + # Input i.e. load + # + + # no args + with pytest.raises(InvalidInputData): + GetUrsulas().load({}) + + quantity = 10 + required_data = { + "quantity": quantity, + } + + # required args + GetUrsulas().load(required_data) + + # missing required args + updated_data = {k: v for k, v in required_data.items() if k != "quantity"} + with pytest.raises(InvalidInputData): + GetUrsulas().load(updated_data) + + # optional components + + # only exclude + updated_data = dict(required_data) + exclude_ursulas = [] + for i in range(2): + exclude_ursulas.append(get_random_checksum_address()) + updated_data["exclude_ursulas"] = exclude_ursulas + GetUrsulas().load(updated_data) + + # only include + updated_data = dict(required_data) + include_ursulas = [] + for i in range(3): + include_ursulas.append(get_random_checksum_address()) + updated_data["include_ursulas"] = include_ursulas + GetUrsulas().load(updated_data) + + # both exclude and include + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = include_ursulas + GetUrsulas().load(updated_data) + + # list input formatted as ',' separated strings + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = ",".join(exclude_ursulas) + updated_data["include_ursulas"] = ",".join(include_ursulas) + data = GetUrsulas().load(updated_data) + assert data["exclude_ursulas"] == exclude_ursulas + assert data["include_ursulas"] == include_ursulas + + # single value as string cast to list + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas[0] + updated_data["include_ursulas"] = include_ursulas[0] + data = GetUrsulas().load(updated_data) + assert data["exclude_ursulas"] == [exclude_ursulas[0]] + assert data["include_ursulas"] == [include_ursulas[0]] + + # invalid include entry + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = list(include_ursulas) # make copy to modify + updated_data["include_ursulas"].append("0xdeadbeef") + with pytest.raises(InvalidInputData): + GetUrsulas().load(updated_data) + + # invalid exclude entry + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = list(exclude_ursulas) # make copy to modify + updated_data["exclude_ursulas"].append("0xdeadbeef") + updated_data["include_ursulas"] = include_ursulas + with pytest.raises(InvalidInputData): + GetUrsulas().load(updated_data) + + # too many ursulas to include + updated_data = dict(required_data) + too_many_ursulas_to_include = [] + while len(too_many_ursulas_to_include) <= quantity: + too_many_ursulas_to_include.append(get_random_checksum_address()) + updated_data["include_ursulas"] = too_many_ursulas_to_include + with pytest.raises(InvalidArgumentCombo): + # number of ursulas to include exceeds quantity to sample + GetUrsulas().load(updated_data) + + # include and exclude addresses are not mutually exclusive - include has common entry + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = list(include_ursulas) # make copy to modify + updated_data["include_ursulas"].append( + exclude_ursulas[0] + ) # one address that overlaps + with pytest.raises(InvalidArgumentCombo): + # 1 address in both include and exclude lists + GetUrsulas().load(updated_data) + + # include and exclude addresses are not mutually exclusive - exclude has common entry + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = list(exclude_ursulas) # make copy to modify + updated_data["exclude_ursulas"].append( + include_ursulas[0] + ) # on address that overlaps + updated_data["include_ursulas"] = include_ursulas + with pytest.raises(InvalidArgumentCombo): + # 1 address in both include and exclude lists + GetUrsulas().load(updated_data) + + # + # Output i.e. dump + # + ursulas_info = [] + expected_ursulas_info = [] + port = 11500 + for i in range(3): + ursula_info = Porter.UrsulaInfo( + get_random_checksum_address(), + f"https://127.0.0.1:{port+i}", + SecretKey.random().public_key(), + ) + ursulas_info.append(ursula_info) + + # use schema to determine expected output (encrypting key gets changed to hex) + expected_ursulas_info.append(UrsulaInfoSchema().dump(ursula_info)) + + output = GetUrsulas().dump(obj={"ursulas": ursulas_info}) + assert output == {"ursulas": expected_ursulas_info} + + +def test_get_ursulas_python_interface(porter, ursulas): + # simple + quantity = 4 + ursulas_info = porter.get_ursulas(quantity=quantity) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity # ensure no repeats + + ursulas_list = list(ursulas) + + # include specific ursulas + include_ursulas = [ + ursulas_list[0].checksum_address, + ursulas_list[1].checksum_address, + ] + ursulas_info = porter.get_ursulas( + quantity=quantity, include_ursulas=include_ursulas + ) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + + # exclude specific ursulas + number_to_exclude = len(ursulas_list) - 4 + exclude_ursulas = [] + for i in range(number_to_exclude): + exclude_ursulas.append(ursulas_list[i].checksum_address) + ursulas_info = porter.get_ursulas( + quantity=quantity, exclude_ursulas=exclude_ursulas + ) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + # include and exclude + include_ursulas = [ + ursulas_list[0].checksum_address, + ursulas_list[1].checksum_address, + ] + exclude_ursulas = [ + ursulas_list[2].checksum_address, + ursulas_list[3].checksum_address, + ] + ursulas_info = porter.get_ursulas( + quantity=quantity, + include_ursulas=include_ursulas, + exclude_ursulas=exclude_ursulas, + ) + returned_ursula_addresses = { + ursula_info.checksum_address for ursula_info in ursulas_info + } + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + +def test_get_ursulas_web_interface(porter_web_controller, ursulas): + # Send bad data to assert error return + response = porter_web_controller.get( + "/get_ursulas", data=json.dumps({"bad": "input"}) + ) + assert response.status_code == 400 + + quantity = 4 + ursulas_list = list(ursulas) + include_ursulas = [ + ursulas_list[0].checksum_address, + ursulas_list[1].checksum_address, + ] + exclude_ursulas = [ + ursulas_list[2].checksum_address, + ursulas_list[3].checksum_address, + ] + + get_ursulas_params = { + "quantity": quantity, + "include_ursulas": include_ursulas, + "exclude_ursulas": exclude_ursulas, + } + + # + # Success + # + response = porter_web_controller.get( + "/get_ursulas", data=json.dumps(get_ursulas_params) + ) + assert response.status_code == 200 + + response_data = json.loads(response.data) + ursulas_info = response_data["result"]["ursulas"] + returned_ursula_addresses = { + ursula_info["checksum_address"] for ursula_info in ursulas_info + } # ensure no repeats + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + # + # Test Query parameters + # + response = porter_web_controller.get( + f"/get_ursulas?quantity={quantity}" + f'&include_ursulas={",".join(include_ursulas)}' + f'&exclude_ursulas={",".join(exclude_ursulas)}' + ) + assert response.status_code == 200 + response_data = json.loads(response.data) + ursulas_info = response_data["result"]["ursulas"] + returned_ursula_addresses = { + ursula_info["checksum_address"] for ursula_info in ursulas_info + } # ensure no repeats + assert len(returned_ursula_addresses) == quantity + for address in include_ursulas: + assert address in returned_ursula_addresses + for address in exclude_ursulas: + assert address not in returned_ursula_addresses + + # + # Failure case + # + failed_ursula_params = dict(get_ursulas_params) + failed_ursula_params["quantity"] = len(ursulas_list) + 1 # too many to get + response = porter_web_controller.get( + "/get_ursulas", data=json.dumps(failed_ursula_params) + ) + assert response.status_code == 500 From 093a3378f7bd65983eff40099f3b5e7ec3d90970 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 16 Oct 2023 11:27:40 -0400 Subject: [PATCH 063/114] Update README regarding change of decryption endpoint name. --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 204b041..a69b0bd 100644 --- a/README.rst +++ b/README.rst @@ -190,7 +190,7 @@ More examples shown below. and it is dependent on the tool being used. -POST /cbd_decrypt +POST /decrypt ***************** Use TACo nodes to decrypt data that was encrypted with associated conditions. @@ -218,7 +218,7 @@ Example Request ^^^^^^^^^^^^^^^ .. code:: bash - curl -X POST /cbd_decrypt \ + curl -X POST /decrypt \ -H "Content-Type: application/json" \ -d '{"threshold":5, "encrypted_decryption_requests":{ From 665385e2aaa632bc22b32fc1505424ac20ab7382 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 18 Oct 2023 11:39:56 -0400 Subject: [PATCH 064/114] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- porter/__about__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 325f5fd..898ca41 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.0 +current_version = 3.0.0 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?P[^.]*)\.(?P\d+))? diff --git a/porter/__about__.py b/porter/__about__.py index 2ade3b7..950cb28 100644 --- a/porter/__about__.py +++ b/porter/__about__.py @@ -14,7 +14,7 @@ __summary__ = "Pipe for TACo on Threshold Network" -__version__ = "2.0.0" +__version__ = "3.0.0" __author__ = "NuCypher" From 31364824cb998fb80a66ed92e2d1fa1fe777efe7 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 17 Oct 2023 18:44:38 -0400 Subject: [PATCH 065/114] Trigger build, tag, and publication of porter docker image due to git tagging. --- .github/workflows/docker.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/docker.yml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..382de4c --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,34 @@ +name: Build and Push Docker Image (version tags) + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+-*' + +jobs: + docker: + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Echo Tag Name + run: echo "Tag - ${{github.ref_name}}" + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: ${{ github.workspace }} + file: ./deploy/docker/Dockerfile + push: true + tags: nucypher/porter:${{github.ref_name}} From 304ba7132feca4a9aa71d036ad8f4865a2191d18 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 17 Oct 2023 19:46:10 -0400 Subject: [PATCH 066/114] Rename secrets for docker job. --- .github/workflows/docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 382de4c..43aa9ff 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -19,8 +19,8 @@ jobs: - name: Login to Docker Hub uses: docker/login-action@v3 with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - name: Echo Tag Name run: echo "Tag - ${{github.ref_name}}" From 990811c62ee3973a2cc254541de896352386eb36 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 18 Oct 2023 11:48:45 -0400 Subject: [PATCH 067/114] Update regex for tag version names to be glob. --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 43aa9ff..2730da7 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -3,7 +3,7 @@ name: Build and Push Docker Image (version tags) on: push: tags: - - 'v[0-9]+.[0-9]+.[0-9]+-*' + - v*.*.* jobs: docker: From ede7a648daa97b7360f10e8ff674d66b1b6f8760 Mon Sep 17 00:00:00 2001 From: KPrasch Date: Wed, 18 Oct 2023 18:13:03 +0200 Subject: [PATCH 068/114] Update docker.yml --- .github/workflows/docker.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 2730da7..5bb77ef 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -2,8 +2,7 @@ name: Build and Push Docker Image (version tags) on: push: - tags: - - v*.*.* + tags: [ 'v*.*.*' ] jobs: docker: From 1253ee2305b86bb22ba1dc05ea255836c3f374aa Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 18 Oct 2023 12:27:06 -0400 Subject: [PATCH 069/114] =?UTF-8?q?Bump=20version:=203.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- porter/__about__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 898ca41..793f8c2 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.0.0 +current_version = 3.0.1 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?P[^.]*)\.(?P\d+))? diff --git a/porter/__about__.py b/porter/__about__.py index 950cb28..8b8afb2 100644 --- a/porter/__about__.py +++ b/porter/__about__.py @@ -14,7 +14,7 @@ __summary__ = "Pipe for TACo on Threshold Network" -__version__ = "3.0.0" +__version__ = "3.0.1" __author__ = "NuCypher" From 0dc298cf103b18b1bbf90865a17e8a404e33981f Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 24 Oct 2023 15:26:52 +0200 Subject: [PATCH 070/114] relock deps with prometheus-flask-exporter --- Pipfile | 2 +- Pipfile.lock | 255 +++++++++++++-------------------------- dev-requirements.txt | 280 +++++++++++++++++++++---------------------- requirements.txt | 150 ++++++++++++----------- 4 files changed, 296 insertions(+), 391 deletions(-) diff --git a/Pipfile b/Pipfile index ef209d2..6c40d2d 100644 --- a/Pipfile +++ b/Pipfile @@ -10,6 +10,7 @@ python_version = "3" nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.1"} nucypher-core = "==0.12.0" # must be the same as nucypher flask-cors = "*" +prometheus-flask-exporter = "*" [dev-packages] nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.1", extras = ["dev"]} # needed for testerchain, and must be editable @@ -21,7 +22,6 @@ pre-commit = "2.12.1" coverage = "<=6.5.0" maya = "*" - [pipenv] allow_prereleases = true diff --git a/Pipfile.lock b/Pipfile.lock index 64197cb..1ae05d4 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "72b8b70f712c143d3c2033cd48c82283d82abce68b46f63e1225c7ec3dd6099e" + "sha256": "c82f5258adab3d54d093c56709efe66cad8f6dbdb45f6fd10672b3be83b6f004" }, "pipfile-spec": 6, "requires": { @@ -106,7 +106,7 @@ "sha256:f82f0110136281bdd1886529ad9cd9e76c6e03a2841ed923a3db94e9a19ad710", "sha256:fbb89011e236e15899df0b49432bb50c7f3d89c9f1875c0c2b5bafaf9d5c2daa" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==3.8.2" }, "aiosignal": { @@ -154,28 +154,6 @@ ], "version": "==22.10.0" }, - "backports.zoneinfo": { - "hashes": [ - "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", - "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", - "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", - "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", - "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", - "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", - "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", - "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", - "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", - "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", - "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", - "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", - "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", - "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", - "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", - "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" - ], - "markers": "python_version >= '3.6'", - "version": "==0.2.1" - }, "bitarray": { "hashes": [ "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", @@ -302,7 +280,7 @@ "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2023.7.22" }, "cffi": { @@ -538,7 +516,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==0.12.2" }, "dateparser": { @@ -562,7 +540,7 @@ "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" ], - "markers": "python_version >= '3.6' and python_version < '4'", + "markers": "python_version < '4' and python_full_version >= '3.6.0'", "version": "==0.8.0" }, "eth-bloom": { @@ -748,22 +726,6 @@ "markers": "python_version >= '3.5'", "version": "==3.4" }, - "importlib-metadata": { - "hashes": [ - "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", - "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" - ], - "markers": "python_version >= '3.8'", - "version": "==6.8.0" - }, - "importlib-resources": { - "hashes": [ - "sha256:82d5c6cca930697dbbd86c93333bb2c2e72861d4789a11c2662b933e5ad2b528", - "sha256:9f7bd0c97b79972a6cce36a366356d16d5e13b09679c11a58f1014bfdf8e64b2" - ], - "markers": "python_version >= '3.8'", - "version": "==5.13.0" - }, "incremental": { "hashes": [ "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0", @@ -784,7 +746,7 @@ "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==3.0.3" }, "jsonschema": { @@ -1136,7 +1098,7 @@ "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae", "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==5.2.0" }, "mypy-extensions": { @@ -1238,16 +1200,24 @@ "sha256:feaa3aa442d585dde0e8a0b3c6930e9e7cb56d85f6c759e8c2581a0dece69882", "sha256:ffaf7daead2a86f3f48da7fc0fe1c2f4f3be665245804e988b07aba79f4ef41c" ], - "markers": "python_version >= '3.7' and python_version < '4.0'", + "markers": "python_version >= '3.7' and python_version < '4'", "version": "==3.0.0a1" }, - "pkgutil-resolve-name": { + "prometheus-client": { "hashes": [ - "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", - "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", + "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" ], - "markers": "python_version >= '3.6'", - "version": "==1.3.10" + "markers": "python_full_version >= '3.6.0'", + "version": "==0.17.1" + }, + "prometheus-flask-exporter": { + "hashes": [ + "sha256:959b69f1e740b6736ea53fe5f28dc2ab6229b2ebeade6582b3dbb5d74c7d58e4", + "sha256:e130179c26d5a9b903c12c0d8826127ae491b04b298cae0b92b98677dcf2c06f" + ], + "index": "pypi", + "version": "==0.22.4" }, "protobuf": { "hashes": [ @@ -1273,7 +1243,7 @@ "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" ], - "markers": "python_version >= '3.6' and python_version < '4'", + "markers": "python_version < '4' and python_full_version >= '3.6.0'", "version": "==6.0.0" }, "py-evm": { @@ -1369,7 +1339,7 @@ "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==1.5.0" }, "pyopenssl": { @@ -1377,7 +1347,7 @@ "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2", "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==23.2.0" }, "python-dateutil": { @@ -1399,7 +1369,7 @@ "hashes": [ "sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==15.0.0" }, "referencing": { @@ -1501,7 +1471,7 @@ "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2023.8.8" }, "requests": { @@ -2147,7 +2117,7 @@ "sha256:f82f0110136281bdd1886529ad9cd9e76c6e03a2841ed923a3db94e9a19ad710", "sha256:fbb89011e236e15899df0b49432bb50c7f3d89c9f1875c0c2b5bafaf9d5c2daa" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==3.8.2" }, "aiosignal": { @@ -2173,13 +2143,6 @@ ], "version": "==1.4.4" }, - "appnope": { - "hashes": [ - "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", - "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" - ], - "version": "==0.1.3" - }, "asttokens": { "hashes": [ "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3", @@ -2224,28 +2187,6 @@ ], "version": "==0.2.0" }, - "backports.zoneinfo": { - "hashes": [ - "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", - "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", - "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", - "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", - "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", - "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", - "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", - "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", - "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", - "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", - "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", - "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", - "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", - "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", - "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", - "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" - ], - "markers": "python_version >= '3.6'", - "version": "==0.2.1" - }, "base58": { "hashes": [ "sha256:1e42993c0628ed4f898c03b522b26af78fb05115732549b21a028bc4633d19ab", @@ -2380,7 +2321,7 @@ "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2023.7.22" }, "cffi": { @@ -2687,7 +2628,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==0.12.2" }, "dataclassy": { @@ -2750,7 +2691,7 @@ "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" ], - "markers": "python_version >= '3.6' and python_version < '4'", + "markers": "python_version < '4' and python_full_version >= '3.6.0'", "version": "==0.8.0" }, "eth-ape": { @@ -3158,14 +3099,6 @@ "markers": "python_version >= '3.8'", "version": "==6.8.0" }, - "importlib-resources": { - "hashes": [ - "sha256:82d5c6cca930697dbbd86c93333bb2c2e72861d4789a11c2662b933e5ad2b528", - "sha256:9f7bd0c97b79972a6cce36a366356d16d5e13b09679c11a58f1014bfdf8e64b2" - ], - "markers": "python_version >= '3.8'", - "version": "==5.13.0" - }, "incremental": { "hashes": [ "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0", @@ -3210,7 +3143,7 @@ "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==3.0.3" }, "jsonschema": { @@ -3617,7 +3550,7 @@ "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae", "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==5.2.0" }, "mypy-extensions": { @@ -3664,37 +3597,41 @@ }, "numpy": { "hashes": [ - "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f", - "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61", - "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7", - "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400", - "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef", - "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2", - "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d", - "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc", - "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835", - "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706", - "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5", - "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4", - "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6", - "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463", - "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a", - "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f", - "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e", - "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e", - "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694", - "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8", - "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64", - "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d", - "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc", - "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254", - "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2", - "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1", - "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", - "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" - ], - "markers": "python_version >= '3.8'", - "version": "==1.24.4" + "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668", + "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9", + "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f", + "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5", + "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53", + "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2", + "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974", + "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f", + "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42", + "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2", + "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af", + "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67", + "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e", + "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c", + "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7", + "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e", + "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908", + "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66", + "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24", + "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b", + "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e", + "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe", + "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a", + "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575", + "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297", + "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104", + "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab", + "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3", + "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244", + "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124", + "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617", + "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" + ], + "markers": "python_version >= '3.10'", + "version": "==1.26.1" }, "packaging": { "hashes": [ @@ -3802,7 +3739,7 @@ "sha256:feaa3aa442d585dde0e8a0b3c6930e9e7cb56d85f6c759e8c2581a0dece69882", "sha256:ffaf7daead2a86f3f48da7fc0fe1c2f4f3be665245804e988b07aba79f4ef41c" ], - "markers": "python_version >= '3.7' and python_version < '4.0'", + "markers": "python_version >= '3.7' and python_version < '4'", "version": "==3.0.0a1" }, "pexpect": { @@ -3819,14 +3756,6 @@ ], "version": "==0.7.5" }, - "pkgutil-resolve-name": { - "hashes": [ - "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", - "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" - ], - "markers": "python_version >= '3.6'", - "version": "==1.3.10" - }, "platformdirs": { "hashes": [ "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", @@ -3856,7 +3785,7 @@ "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==0.17.1" }, "prompt-toolkit": { @@ -3864,7 +3793,7 @@ "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" ], - "markers": "python_full_version >= '3.7.0'", + "markers": "python_version >= '3.7'", "version": "==3.0.39" }, "protobuf": { @@ -3920,7 +3849,7 @@ "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" ], - "markers": "python_version >= '3.6' and python_version < '4'", + "markers": "python_version < '4' and python_full_version >= '3.6.0'", "version": "==6.0.0" }, "py-evm": { @@ -4122,7 +4051,7 @@ "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==1.5.0" }, "pyopenssl": { @@ -4130,35 +4059,9 @@ "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2", "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==23.2.0" }, - "pysha3": { - "hashes": [ - "sha256:0060a66be16665d90c432f55a0ba1f6480590cfb7d2ad389e688a399183474f0", - "sha256:11a2ba7a2e1d9669d0052fc8fb30f5661caed5512586ecbeeaf6bf9478ab5c48", - "sha256:386998ee83e313b6911327174e088021f9f2061cbfa1651b97629b761e9ef5c4", - "sha256:41be70b06c8775a9e4d4eeb52f2f6a3f356f17539a54eac61f43a29e42fd453d", - "sha256:4416f16b0f1605c25f627966f76873e432971824778b369bd9ce1bb63d6566d9", - "sha256:571a246308a7b63f15f5aa9651f99cf30f2a6acba18eddf28f1510935968b603", - "sha256:59111c08b8f34495575d12e5f2ce3bafb98bea470bc81e70c8b6df99aef0dd2f", - "sha256:5ec8da7c5c70a53b5fa99094af3ba8d343955b212bc346a0d25f6ff75853999f", - "sha256:684cb01d87ed6ff466c135f1c83e7e4042d0fc668fa20619f581e6add1d38d77", - "sha256:68c3a60a39f9179b263d29e221c1bd6e01353178b14323c39cc70593c30f21c5", - "sha256:6e6a84efb7856f5d760ee55cd2b446972cb7b835676065f6c4f694913ea8f8d9", - "sha256:827b308dc025efe9b6b7bae36c2e09ed0118a81f792d888548188e97b9bf9a3d", - "sha256:93abd775dac570cb9951c4e423bcb2bc6303a9d1dc0dc2b7afa2dd401d195b24", - "sha256:9c778fa8b161dc9348dc5cc361e94d54aa5ff18413788f4641f6600d4893a608", - "sha256:9fdd28884c5d0b4edfed269b12badfa07f1c89dbc5c9c66dd279833894a9896b", - "sha256:c7c2adcc43836223680ebdf91f1d3373543dc32747c182c8ca2e02d1b69ce030", - "sha256:c93a2676e6588abcfaecb73eb14485c81c63b94fca2000a811a7b4fb5937b8e8", - "sha256:cd5c961b603bd2e6c2b5ef9976f3238a561c58569945d4165efb9b9383b050ef", - "sha256:f9046d59b3e72aa84f6dae83a040bd1184ebd7fef4e822d38186a8158c89e3cf", - "sha256:fd7e66999060d079e9c0e8893e78d8017dad4f59721f6fe0be6307cd32127a07", - "sha256:fe988e73f2ce6d947220624f04d467faf05f1bbdbc64b0a201296bb3af92739e" - ], - "version": "==1.0.2" - }, "pytest": { "hashes": [ "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89", @@ -4224,7 +4127,7 @@ "hashes": [ "sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==15.0.0" }, "pyyaml": { @@ -4382,7 +4285,7 @@ "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2023.8.8" }, "requests": { @@ -4398,7 +4301,7 @@ "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" ], - "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", + "markers": "python_version < '4' and python_full_version >= '3.6.3'", "version": "==12.6.0" }, "rlp": { @@ -4511,6 +4414,12 @@ "markers": "python_version >= '3.8'", "version": "==0.10.0" }, + "safe-pysha3": { + "hashes": [ + "sha256:e429146b1edd198b2ca934a2046a65656c5d31b0ec894bbd6055127f4deaff17" + ], + "version": "==1.0.4" + }, "semantic-version": { "hashes": [ "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", diff --git a/dev-requirements.txt b/dev-requirements.txt index f2256e3..188c8f9 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,178 +1,176 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2 ; python_version >= '3.6' -aiosignal==1.3.1 ; python_version >= '3.7' -ape-solidity==0.6.8 ; python_version >= '3.8' and python_version < '4' +aiohttp==3.8.2 +aiosignal==1.3.1 appdirs==1.4.4 -appnope==0.1.3 -asttokens==2.2.1 -async-timeout==4.0.3 ; python_version >= '3.7' -attrs==23.1.0 ; python_version >= '3.7' -autobahn==23.1.2 ; python_version >= '3.7' +async-timeout==4.0.3 +attrs==23.1.0 +autobahn==23.1.2 automat==22.10.0 -backcall==0.2.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' -base58==1.0.3 bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.7.22 ; python_version >= '3.6' +certifi==2023.7.22 cffi==1.15.1 -cfgv==3.4.0 ; python_version >= '3.8' -charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.7 ; python_version >= '3.7' -colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -commonmark==0.9.1 -constant-sorrow==0.1.0a9 ; python_version >= '3' +charset-normalizer==2.1.1 +click==8.1.7 +colorama==0.4.6 +constant-sorrow==0.1.0a9 constantly==15.1.0 -coverage==6.5.0 -cryptography==41.0.3 ; python_version >= '3.7' -cytoolz==0.12.2 ; python_version >= '3.6' -dataclassy==0.11.1 ; python_version >= '3.6' -dateparser==1.1.8 ; python_version >= '3.7' -decorator==5.1.1 ; python_version >= '3.5' -deprecated==1.2.14 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -distlib==0.3.7 -eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' -eth-abi==4.2.0 ; python_full_version >= '3.7.2' and python_version < '4' -eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' -eth-ape==0.6.19 ; python_version >= '3.8' and python_version < '4' -eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' -eth-hash==0.5.2 ; python_version >= '3.7' and python_version < '4' +cryptography==41.0.3 +cytoolz==0.12.2 +dateparser==1.1.8 +eth-abi==4.2.0 +eth-account==0.8.0 +eth-bloom==2.0.0 +eth-hash==0.5.2 eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.1b1 ; python_full_version >= '3.6.8' and python_version < '4' -eth-typing==3.4.0 ; python_full_version >= '3.7.2' and python_version < '4' -eth-utils==2.2.0 ; python_version >= '3.7' and python_version < '4' -ethpm-types==0.5.4 ; python_version >= '3.8' and python_version < '4' -evm-trace==0.1.0a24 ; python_version >= '3.8' and python_version < '4' -exceptiongroup==1.1.3 ; python_version >= '3.7' -executing==1.2.0 -filelock==3.12.3 ; python_version >= '3.8' -flask==2.2.5 ; python_version >= '3.7' -frozenlist==1.4.0 ; python_version >= '3.8' -greenlet==3.0.0a1 ; python_version >= '3.7' +eth-rlp==0.3.0 +eth-tester==0.9.1b1 +eth-typing==3.4.0 +eth-utils==2.2.0 +flask==2.2.5 +flask-cors==4.0.0 +frozenlist==1.4.0 hendrix==4.0.0 -hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' -humanize==4.8.0 ; python_version >= '3.8' +hexbytes==0.3.1 +humanize==4.8.0 hyperlink==21.0.0 -hypothesis==6.83.0 ; python_version >= '3.8' -identify==2.5.27 ; python_version >= '3.8' -idna==3.4 ; python_version >= '3.5' -ijson==3.2.3 -importlib-metadata==6.8.0 ; python_version >= '3.8' -importlib-resources==5.13.0 ; python_version >= '3.8' +idna==3.4 incremental==22.10.0 -iniconfig==2.0.0 ; python_version >= '3.7' -ipython==8.12.2 ; python_version >= '3.8' -itsdangerous==2.1.2 ; python_version >= '3.7' -jedi==0.19.0 ; python_version >= '3.6' -jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.19.0 ; python_version >= '3.8' -jsonschema-specifications==2023.7.1 ; python_version >= '3.8' -lazyasd==0.1.4 +itsdangerous==2.1.2 +jinja2==3.0.3 +jsonschema==4.19.0 +jsonschema-specifications==2023.7.1 lru-dict==1.2.0 -mako==1.2.4 ; python_version >= '3.7' -markupsafe==2.1.3 ; python_version >= '3.7' -marshmallow==3.20.1 ; python_version >= '3.8' -matplotlib-inline==0.1.6 ; python_version >= '3.5' +mako==1.2.4 +markupsafe==2.1.3 +marshmallow==3.20.1 maya==0.6.1 -mnemonic==0.20 ; python_version >= '3.5' -morphys==1.0 +mnemonic==0.20 msgpack==1.0.5 msgpack-python==0.5.6 -msgspec==0.18.2 ; python_version >= '3.8' -multidict==5.2.0 ; python_version >= '3.6' -mypy-extensions==1.0.0 ; python_version >= '3.5' -nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +multidict==5.2.0 +mypy-extensions==1.0.0 git+https://github.com/nucypher/nucypher.git@2b1c7d6df207ecd239db4331f452332dbcd6a8a9#egg=nucypher nucypher-core==0.12.0 -numpy==1.24.4 ; python_version >= '3.8' -packaging==23.1 ; python_version >= '3.7' -pandas==1.5.3 ; python_version >= '3.8' +packaging==23.1 parsimonious==0.9.0 -parso==0.8.3 ; python_version >= '3.6' -pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' +pendulum==3.0.0a1 +prometheus-client==0.17.1 +prometheus-flask-exporter==0.22.4 +protobuf==4.24.2 +py-ecc==6.0.0 +py-evm==0.7.0a4 +pyasn1==0.5.0 +pyasn1-modules==0.3.0 +pychalk==2.0.1 +pycparser==2.21 +pycryptodome==3.18.0 +pyethash==0.1.27 +pynacl==1.5.0 +pyopenssl==23.2.0 +python-dateutil==2.8.2 +pytz==2023.3 +pyunormalize==15.0.0 +referencing==0.30.2 +regex==2023.8.8 +requests==2.31.0 +rlp==3.0.0 +rpds-py==0.10.0 +semantic-version==2.10.0 +service-identity==23.1.0 +setuptools==68.1.2 +six==1.16.0 +snaptime==0.2.4 +sortedcontainers==2.4.0 +tabulate==0.9.0 +time-machine==2.12.0 +toolz==0.12.0 +trie==2.1.1 +twisted==23.8.0 +txaio==23.1.1 +typing-extensions==4.7.1 +tzdata==2023.3 +tzlocal==5.0.1 +urllib3==2.0.4 +watchdog==3.0.0 +web3==6.9.0 +websockets==11.0.3 +werkzeug==2.3.7 +yarl==1.9.2 +zipp==3.16.2 +zope-interface==6.1a2 +ape-solidity==0.6.8 +asttokens==2.2.1 +backcall==0.2.0 +base58==1.0.3 +cfgv==3.4.0 +commonmark==0.9.1 +coverage==6.5.0 +dataclassy==0.11.1 +decorator==5.1.1 +deprecated==1.2.14 +distlib==0.3.7 +eip712==0.2.1 +eth-ape==0.6.19 +ethpm-types==0.5.4 +evm-trace==0.1.0a24 +exceptiongroup==1.1.3 +executing==1.2.0 +filelock==3.12.3 +greenlet==3.0.0a1 +hypothesis==6.83.0 +identify==2.5.27 +ijson==3.2.3 +importlib-metadata==6.8.0 +iniconfig==2.0.0 +ipython==8.12.2 +jedi==0.19.0 +lazyasd==0.1.4 +matplotlib-inline==0.1.6 +morphys==1.0 +msgspec==0.18.2 +nodeenv==1.8.0 +numpy==1.26.1 +pandas==1.5.3 +parso==0.8.3 pexpect==4.8.0 pickleshare==0.7.5 -pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' -platformdirs==3.10.0 ; python_version >= '3.7' -pluggy==1.3.0 ; python_version >= '3.8' +platformdirs==3.10.0 +pluggy==1.3.0 pre-commit==3.3.3 -prometheus-client==0.17.1 ; python_version >= '3.6' -prompt-toolkit==3.0.39 ; python_full_version >= '3.7.0' -protobuf==4.24.2 ; python_version >= '3.7' +prompt-toolkit==3.0.39 ptyprocess==0.7.0 pure-eval==0.2.2 -py==1.11.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +py==1.11.0 py-cid==0.3.0 -py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' -py-evm==0.7.0a4 -py-geth==3.13.0 ; python_version >= '3.7' and python_version < '4' +py-geth==3.13.0 py-multibase==1.0.3 py-multicodec==0.2.1 py-multihash==0.2.3 -py-solc-x==1.1.1 ; python_version >= '3.6' and python_version < '4' -pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pychalk==2.0.1 -pycparser==2.21 -pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -pydantic==1.10.12 ; python_version >= '3.7' -pyethash==0.1.27 -pygithub==1.59.1 ; python_version >= '3.7' -pygments==2.16.1 ; python_version >= '3.7' -pyjwt[crypto]==2.8.0 ; python_version >= '3.7' -pynacl==1.5.0 ; python_version >= '3.6' -pyopenssl==23.2.0 ; python_version >= '3.6' -pysha3==1.0.2 +py-solc-x==1.1.1 +pydantic==1.10.12 +pygithub==1.59.1 +pygments==2.16.1 +pyjwt[crypto]==2.8.0 pytest==6.2.5 pytest-cov==4.1.0 pytest-mock==3.11.1 -pytest-timeout==2.1.0 ; python_version >= '3.6' -pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pytest-timeout==2.1.0 +pytest-twisted==1.14.0 python-baseconv==1.2.2 -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' -pytz==2023.3 -pyunormalize==15.0.0 ; python_version >= '3.6' -pyyaml==6.0.1 ; python_version >= '3.6' -referencing==0.30.2 ; python_version >= '3.8' -regex==2023.8.8 ; python_version >= '3.6' -requests==2.31.0 ; python_version >= '3.7' -rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' -rlp==3.0.0 -rpds-py==0.10.0 ; python_version >= '3.8' -semantic-version==2.10.0 ; python_version >= '2.7' +pyyaml==6.0.1 +rich==12.6.0 +safe-pysha3==1.0.4 sentry-sdk==1.32.0 -service-identity==23.1.0 ; python_version >= '3.8' -setuptools==68.1.2 ; python_version >= '3.8' -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' -snaptime==0.2.4 -sortedcontainers==2.4.0 -sqlalchemy==2.0.20 ; python_version >= '3.7' +sqlalchemy==2.0.20 stack-data==0.6.2 -tabulate==0.9.0 ; python_version >= '3.7' -time-machine==2.12.0 ; python_version >= '3.8' -toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' -tomli==2.0.1 ; python_version >= '3.7' -toolz==0.12.0 ; python_version >= '3.5' -tqdm==4.66.1 ; python_version >= '3.7' -traitlets==5.9.0 ; python_version >= '3.7' -trie==2.1.1 ; python_version >= '3.7' and python_version < '4' -twisted==23.8.0 ; python_full_version >= '3.7.1' -txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.7.1 ; python_version >= '3.7' -tzdata==2023.3 ; python_version >= '2' -tzlocal==5.0.1 ; python_version >= '3.7' -urllib3==2.0.4 ; python_version >= '3.7' +toml==0.10.2 +tomli==2.0.1 +tqdm==4.66.1 +traitlets==5.9.0 varint==1.0.2 -virtualenv==20.24.4 ; python_version >= '3.7' -watchdog==3.0.0 ; python_version >= '3.7' +virtualenv==20.24.4 wcwidth==0.2.6 -web3==6.9.0 ; python_full_version >= '3.7.2' -websockets==11.0.3 ; python_version >= '3.7' -werkzeug==2.3.7 ; python_version >= '3.8' -wrapt==1.15.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -yarl==1.9.2 ; python_version >= '3.7' -zipp==3.16.2 ; python_version >= '3.8' -zope-interface==6.1a2 ; python_version >= '3.7' +wrapt==1.15.0 diff --git a/requirements.txt b/requirements.txt index 6e88e26..35a28d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,105 +1,103 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2 ; python_version >= '3.6' -aiosignal==1.3.1 ; python_version >= '3.7' +aiohttp==3.8.2 +aiosignal==1.3.1 appdirs==1.4.4 -async-timeout==4.0.3 ; python_version >= '3.7' -attrs==23.1.0 ; python_version >= '3.7' -autobahn==23.1.2 ; python_version >= '3.7' +async-timeout==4.0.3 +attrs==23.1.0 +autobahn==23.1.2 automat==22.10.0 -backports.zoneinfo==0.2.1 ; python_version >= '3.6' and python_version < '3.9' bitarray==2.8.1 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.7.22 ; python_version >= '3.6' +certifi==2023.7.22 cffi==1.15.1 -charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.7 ; python_version >= '3.7' -colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -constant-sorrow==0.1.0a9 ; python_version >= '3' +charset-normalizer==2.1.1 +click==8.1.7 +colorama==0.4.6 +constant-sorrow==0.1.0a9 constantly==15.1.0 -cryptography==41.0.3 ; python_version >= '3.7' -cytoolz==0.12.2 ; python_version >= '3.6' -dateparser==1.1.8 ; python_version >= '3.7' -eth-abi==4.2.0 ; python_version < '4' and python_full_version >= '3.7.2' -eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' -eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' -eth-hash==0.5.2 ; python_version >= '3.7' and python_version < '4' +cryptography==41.0.3 +cytoolz==0.12.2 +dateparser==1.1.8 +eth-abi==4.2.0 +eth-account==0.8.0 +eth-bloom==2.0.0 +eth-hash==0.5.2 eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.1b1 ; python_version < '4' and python_full_version >= '3.6.8' -eth-typing==3.4.0 ; python_version < '4' and python_full_version >= '3.7.2' -eth-utils==2.2.0 ; python_version >= '3.7' and python_version < '4' -flask==2.2.5 ; python_version >= '3.7' +eth-rlp==0.3.0 +eth-tester==0.9.1b1 +eth-typing==3.4.0 +eth-utils==2.2.0 +flask==2.2.5 flask-cors==4.0.0 -frozenlist==1.4.0 ; python_version >= '3.8' +frozenlist==1.4.0 hendrix==4.0.0 -hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' -humanize==4.8.0 ; python_version >= '3.8' +hexbytes==0.3.1 +humanize==4.8.0 hyperlink==21.0.0 -idna==3.4 ; python_version >= '3.5' -importlib-metadata==6.8.0 ; python_version >= '3.8' -importlib-resources==5.13.0 ; python_version >= '3.8' +idna==3.4 incremental==22.10.0 -itsdangerous==2.1.2 ; python_version >= '3.7' -jinja2==3.0.3 ; python_version >= '3.6' -jsonschema==4.19.0 ; python_version >= '3.8' -jsonschema-specifications==2023.7.1 ; python_version >= '3.8' +itsdangerous==2.1.2 +jinja2==3.0.3 +jsonschema==4.19.0 +jsonschema-specifications==2023.7.1 lru-dict==1.2.0 -mako==1.2.4 ; python_version >= '3.7' -markupsafe==2.1.3 ; python_version >= '3.7' -marshmallow==3.20.1 ; python_version >= '3.8' +mako==1.2.4 +markupsafe==2.1.3 +marshmallow==3.20.1 maya==0.6.1 -mnemonic==0.20 ; python_version >= '3.5' +mnemonic==0.20 msgpack==1.0.5 msgpack-python==0.5.6 -multidict==5.2.0 ; python_version >= '3.6' -mypy-extensions==1.0.0 ; python_version >= '3.5' +multidict==5.2.0 +mypy-extensions==1.0.0 git+https://github.com/nucypher/nucypher.git@2b1c7d6df207ecd239db4331f452332dbcd6a8a9#egg=nucypher nucypher-core==0.12.0 -packaging==23.1 ; python_version >= '3.7' +packaging==23.1 parsimonious==0.9.0 -pendulum==3.0.0a1 ; python_version >= '3.7' and python_version < '4.0' -pkgutil-resolve-name==1.3.10 ; python_version >= '3.6' -protobuf==4.24.2 ; python_version >= '3.7' -py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' +pendulum==3.0.0a1 +prometheus-client==0.17.1 +prometheus-flask-exporter==0.22.4 +protobuf==4.24.2 +py-ecc==6.0.0 py-evm==0.7.0a4 -pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1==0.5.0 +pyasn1-modules==0.3.0 pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.18.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pycryptodome==3.18.0 pyethash==0.1.27 -pynacl==1.5.0 ; python_version >= '3.6' -pyopenssl==23.2.0 ; python_version >= '3.6' -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pynacl==1.5.0 +pyopenssl==23.2.0 +python-dateutil==2.8.2 pytz==2023.3 -pyunormalize==15.0.0 ; python_version >= '3.6' -referencing==0.30.2 ; python_version >= '3.8' -regex==2023.8.8 ; python_version >= '3.6' -requests==2.31.0 ; python_version >= '3.7' +pyunormalize==15.0.0 +referencing==0.30.2 +regex==2023.8.8 +requests==2.31.0 rlp==3.0.0 -rpds-py==0.10.0 ; python_version >= '3.8' -semantic-version==2.10.0 ; python_version >= '2.7' -service-identity==23.1.0 ; python_version >= '3.8' -setuptools==68.1.2 ; python_version >= '3.8' -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +rpds-py==0.10.0 +semantic-version==2.10.0 +service-identity==23.1.0 +setuptools==68.1.2 +six==1.16.0 snaptime==0.2.4 sortedcontainers==2.4.0 -tabulate==0.9.0 ; python_version >= '3.7' -time-machine==2.12.0 ; python_version >= '3.8' -toolz==0.12.0 ; python_version >= '3.5' -trie==2.1.1 ; python_version >= '3.7' and python_version < '4' -twisted==23.8.0 ; python_full_version >= '3.7.1' -txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.7.1 ; python_version >= '3.7' -tzdata==2023.3 ; python_version >= '2' -tzlocal==5.0.1 ; python_version >= '3.7' -urllib3==2.0.4 ; python_version >= '3.7' -watchdog==3.0.0 ; python_version >= '3.7' -web3==6.9.0 ; python_full_version >= '3.7.2' -websockets==11.0.3 ; python_version >= '3.7' -werkzeug==2.3.7 ; python_version >= '3.8' -yarl==1.9.2 ; python_version >= '3.7' -zipp==3.16.2 ; python_version >= '3.8' -zope-interface==6.1a2 ; python_version >= '3.7' +tabulate==0.9.0 +time-machine==2.12.0 +toolz==0.12.0 +trie==2.1.1 +twisted==23.8.0 +txaio==23.1.1 +typing-extensions==4.7.1 +tzdata==2023.3 +tzlocal==5.0.1 +urllib3==2.0.4 +watchdog==3.0.0 +web3==6.9.0 +websockets==11.0.3 +werkzeug==2.3.7 +yarl==1.9.2 +zipp==3.16.2 +zope-interface==6.1a2 From a0ca9239b9ee7982947e86bd60f16c5fe9c1d9e5 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 24 Oct 2023 15:27:27 +0200 Subject: [PATCH 071/114] default prometheus flask exporter integration --- porter/main.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/porter/main.py b/porter/main.py index 6565ae6..ef40b9b 100644 --- a/porter/main.py +++ b/porter/main.py @@ -23,6 +23,7 @@ TreasureMap, ) from nucypher_core.umbral import PublicKey +from prometheus_flask_exporter import PrometheusMetrics from porter.controllers import PorterCLIController, WebController from porter.interfaces import PorterInterface @@ -240,6 +241,10 @@ def make_web_controller(self, # Register Flask Decorator porter_flask_control = controller.make_control_transport() + # static information as metric + metrics = PrometheusMetrics(porter_flask_control) + metrics.info('app_info', 'Application info', version='1.0.3') + # CORS origins if cors_allow_origins_list: try: From fa3136befb82f827f7a0035b522f7323acc6a486 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 24 Oct 2023 16:02:12 +0200 Subject: [PATCH 072/114] configure a metrics path counter --- porter/main.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/porter/main.py b/porter/main.py index ef40b9b..20418fe 100644 --- a/porter/main.py +++ b/porter/main.py @@ -244,6 +244,10 @@ def make_web_controller(self, # static information as metric metrics = PrometheusMetrics(porter_flask_control) metrics.info('app_info', 'Application info', version='1.0.3') + by_path_counter = metrics.counter( + 'by_path_counter', 'Request count by request paths', + labels={'path': lambda: request.path} + ) # CORS origins if cors_allow_origins_list: @@ -271,24 +275,28 @@ def make_web_controller(self, # Porter Control HTTP Endpoints # @porter_flask_control.route('/get_ursulas', methods=['GET']) + @by_path_counter def get_ursulas() -> Response: """Porter control endpoint for sampling Ursulas on behalf of Alice.""" response = controller(method_name='get_ursulas', control_request=request) return response @porter_flask_control.route("/revoke", methods=['POST']) + @by_path_counter def revoke(): """Porter control endpoint for off-chain revocation of a policy on behalf of Alice.""" response = controller(method_name='revoke', control_request=request) return response @porter_flask_control.route("/retrieve_cfrags", methods=['POST']) + @by_path_counter def retrieve_cfrags() -> Response: """Porter control endpoint for executing a PRE work order on behalf of Bob.""" response = controller(method_name='retrieve_cfrags', control_request=request) return response @porter_flask_control.route("/decrypt", methods=["POST"]) + @by_path_counter def decrypt() -> Response: """Porter control endpoint for executing a TACo decryption request.""" response = controller(method_name="decrypt", control_request=request) From 7661ea99c0c694eb989bd17cbb017ef88386dec8 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 24 Oct 2023 21:47:09 +0200 Subject: [PATCH 073/114] Relock dependencies with nucypher==v7.0.0-rc.3 and nucypher-core==v0.13.0 --- Pipfile | 6 +- Pipfile.lock | 3915 +++++++++++++++++++++--------------------- dev-requirements.txt | 260 ++- requirements.txt | 157 +- 4 files changed, 2191 insertions(+), 2147 deletions(-) diff --git a/Pipfile b/Pipfile index 6c40d2d..cf78947 100644 --- a/Pipfile +++ b/Pipfile @@ -7,13 +7,13 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.1"} -nucypher-core = "==0.12.0" # must be the same as nucypher +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.3"} +nucypher-core = "==0.13.0" # must be the same as nucypher flask-cors = "*" prometheus-flask-exporter = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.1", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.3", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 1ae05d4..3ad089e 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "c82f5258adab3d54d093c56709efe66cad8f6dbdb45f6fd10672b3be83b6f004" + "sha256": "7a410e47a6158032d5486c92811fc857d0bd506c19bd16506464ba634614bbce" }, "pipfile-spec": 6, "requires": { @@ -106,7 +106,7 @@ "sha256:f82f0110136281bdd1886529ad9cd9e76c6e03a2841ed923a3db94e9a19ad710", "sha256:fbb89011e236e15899df0b49432bb50c7f3d89c9f1875c0c2b5bafaf9d5c2daa" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==3.8.2" }, "aiosignal": { @@ -142,10 +142,10 @@ }, "autobahn": { "hashes": [ - "sha256:c5ef8ca7422015a1af774a883b8aef73d4954c9fcd182c9b5244e08e973f7c3a" + "sha256:ec9421c52a2103364d1ef0468036e6019ee84f71721e86b36fe19ad6966c1181" ], - "markers": "python_version >= '3.7'", - "version": "==23.1.2" + "markers": "python_version >= '3.9'", + "version": "==23.6.2" }, "automat": { "hashes": [ @@ -156,110 +156,130 @@ }, "bitarray": { "hashes": [ - "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", - "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", - "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", - "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", - "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", - "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", - "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", - "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", - "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", - "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", - "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", - "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", - "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", - "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", - "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", - "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", - "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", - "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", - "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", - "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", - "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", - "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", - "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", - "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", - "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", - "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", - "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", - "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", - "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", - "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", - "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", - "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", - "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", - "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", - "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", - "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", - "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", - "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", - "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", - "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", - "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", - "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", - "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", - "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", - "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", - "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", - "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", - "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", - "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", - "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", - "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", - "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", - "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", - "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", - "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", - "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", - "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", - "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", - "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", - "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", - "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", - "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", - "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", - "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", - "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", - "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", - "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", - "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", - "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", - "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", - "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", - "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", - "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", - "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", - "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", - "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", - "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", - "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", - "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", - "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", - "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", - "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", - "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", - "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", - "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", - "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", - "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", - "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", - "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", - "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", - "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", - "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", - "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", - "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", - "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", - "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", - "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", - "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", - "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", - "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", - "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", - "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" - ], - "version": "==2.8.1" + "sha256:00bad63ef6f9d22ba36b01b89167176a451ea22a916d1dfa77d73e0298f1d1f9", + "sha256:05d84765bbfd0aa10890c765c56c917c237987325c4e327f3c0febbfc34365c8", + "sha256:06d9de5db244c6e45a5318713367765de0a57d82ad616869a004a710a95541e9", + "sha256:08ad70c1555d9622cecd8f1b132a5341d183a9161aba93cc9739bbaabe4220b0", + "sha256:095851409e0db75b1416c8c3e24957135d5a2a206790578e43739e92a00c17c4", + "sha256:09d729420b8edc4d8a23a518ae4553074a0054d0441c1a461b425c2f033fab5e", + "sha256:0bbeb7120ec1a9b26ce423e74cad7b414cea9e35f8e05599e3b3dceb87f4d1b6", + "sha256:0c8716b4c45fb128cd4da143749e276f150ecb0acb711f4969d7e7ebc9b2a675", + "sha256:0f45f7d58c399e90ee3bddff4f3e2f53ff95c948b2d43de304266153ebd1d778", + "sha256:111bf9913ebee4630e2cb43b61d0abb39813b231262b114e5268cd6a405a22b9", + "sha256:1474db8c4297026e1daa1699e70e25e56dff91104fe025b1a9804332f2737604", + "sha256:14bc38ced7edffff25ee748c1eabc530624c9af68f86322b030b11b7918b966f", + "sha256:172169099797f1ec469b0aadb00c653193a74757f99312c9c17dc1a18d23d972", + "sha256:188f5780f1cfbeba0c3ddb1aa3fa0415ab1a8aa04e9e89f70ad5403197013437", + "sha256:1b734b074a09b1b2e1de7df423565412d9213faefa8ca422f32be756b189f729", + "sha256:1c28b52e59a5e6aa00a929b35b04473bd479a74237ab1170c573c49e8aca61fe", + "sha256:1cc29909e4cef05d5e49f5d77ace1dc49311c7791734a048b690521c76b4b7a0", + "sha256:215a5bf8fdcbed700cc8782d4044e1f036606d5c321710d83e8da6d0fdfe07d5", + "sha256:225e19d37b234d4d721557434b7d5590cd63b6342492b689e2d694d44d7cc537", + "sha256:232e8faa8e624f3eb0552a636ebe745cee00480e0e56ad62f17808d281838f2e", + "sha256:23fae6a5a1403d16592b8823d5dea93f738c6e217a1e1bb0eefad242fb03d47f", + "sha256:27428d7b0e706307d0c697f81599e7af4f52e5873ea6bc269eae3604b16b81fe", + "sha256:280809e56a7098f48165ce134222098e4cfe7084b10d69bbc31367942e541dfd", + "sha256:2b2dc483ada55ef35990b67dc0e7a779f0b2ce79d156e452dc8b835b03c0dca9", + "sha256:2b3c7aa2c9a6533dc7234d2a303efdcb9df3f4ac4d0919ec1caf568868f12a0a", + "sha256:2c39d1cb04fc277701de6fe2119cc71facc4aff2ca0414b2e326aec337fa1ab4", + "sha256:2cb8d08330d250df47088c13683322083afbdfafdc31df205616506d6b9f068f", + "sha256:2e456150af62ee1f24a0c9976947629bfb80d80b4fbd37aa901cf794db6ba9b0", + "sha256:316147fb62c810a7667277e5ae7bb75b2871c32d2c398aeb4503cbd4cf3315e7", + "sha256:351a4fed240728dcc96966e0c4cfd3dce870525377a1cb5afac8e5cfe116ff7b", + "sha256:36bdde1aba78e4a3a6ce5cbebd0a6bc967b0c3fbd8bd99a197dcc17d654f423c", + "sha256:384be6b7df8fb6a93ddd88d4184094f2ba4f1d07c30dcd4ae164d185d31a2af6", + "sha256:3caf4ca668854bb23db4b65af0068238677b5791bcc45694bf8990f3e26e85c9", + "sha256:3dde123ce85d1ba99d9bdf44b1b3174fa22bc8fb10004e0d72bb661a0444c1a9", + "sha256:3ecdd528268478efeb78ed0132b01104bda6cd8f10c8a57708fc87b1add77e4d", + "sha256:420aa610fe392c4ee700e474673276bb4f3c4f091d001f58b1f018bf650840c1", + "sha256:440c537fdf2eaee7fdd41fb1dce5701c490c1964fdb74225b10b49a7c45bc7b4", + "sha256:462c9425fbc5315cbc20a72ca62558e5545bb0f6dc9355e2fa96fa747e9b1a80", + "sha256:4963982d5da0825768f9a80760a8560c3e4cf711a9a7ea06ff9bcb7bd250b131", + "sha256:4bbfe4474d3470c724e283bd1fe8ee9ab3cb6a4c378112926f45d41e326a7622", + "sha256:4db2e0f58153a376d9a14873e342d507ca32640640284cddf3c1e74a65929477", + "sha256:51d45d56be14b69720d11a8c61e101d86a65dc8a3a9f356bbe4d98cf4f3c5617", + "sha256:525eda30469522cd840a11ba866d0616c132f6c4be8966a297d7545e97fcb822", + "sha256:532d63c54159f7e0fb520e2f72ef596493bc43810eaa75fac7a188e898ab593b", + "sha256:5569c8314335e92570c471d60b4b03eb2a4467864805a560d133d24b27b3961a", + "sha256:56764825f64ab983d32b8c1d4ee483f415f2559e59388ba266a9fcafc44305bf", + "sha256:56f19ccba8a6ddf1382b0fb4fb8d4e1330e4a1b148e5d198f0981ba2a97c3492", + "sha256:5819b95d0ccce864066f062d2329363ae8a64b9c3d076d039c75ffc9204c2a12", + "sha256:599b04b04eb1b5b964a35986bea2bc4381145836fe550cc33c40a796b855b985", + "sha256:5f2a96c5b40727bc21a695d3a106f49e88572fa11427bf2193cabd99e624c901", + "sha256:608385f07a4b0391d4982d1efb83ad70920cd8ca495a7868e44d2a4511cbf84e", + "sha256:6abf2593b91e36f1cb1c40ac895993c7d2eb30d3f1cb0954a80e5f13697b6b69", + "sha256:6d79fd3c58a4dc71ffd0fc55982a9a2079fe94c76ccff2777092f6107d6a049a", + "sha256:6f699bf2cb223aeec04a106003bd2bf8a4fc6d4c5eddf79cacecb6b267657ac5", + "sha256:70cebcf9bc345ac1e034fa781eac3619323eaf87f7bbe26f0e28850beb6f5634", + "sha256:726a598e34657772e5f131115741ea8709e9b55fa35d63c4717bc16b2a737d38", + "sha256:76a4faef4c31953aa7b9ebe00d162f7ce9bc03fc8d423ab2dc690a11d7520a8e", + "sha256:7706336bd15acf4e42300579e42bef742c01a4eb202998f6c20c443a2ce5fd60", + "sha256:7965108069f9731306a882872c23ad4f5a8531668e82b27932a19814c52a8dd8", + "sha256:79fde5b27e35aedd958f5fb58ebabce47d7eddae5a5e3774088c30c9610195ef", + "sha256:8528c59d3d3df6618777892b60435022d8917de9ea32933d439c7ffd24437237", + "sha256:85b504f233f0484e9a74df4f286a9ae56fbbe2a648c45726761cf7b6f072cdc8", + "sha256:88c2d427ab1b20f220c1d53171b0691faa8f0a219367d84e859f1001e90ceefc", + "sha256:890355bf6ba3dc04b5a23d1328eb1f6062165e6262197cebc9acfebdcb23144c", + "sha256:8a35e308c23f039064600108fc1c8416bd102bc3cf3a6915761a9f7c801237e0", + "sha256:8bb60d5a948f00901da1d7e4953189259b3c7ef79391fecd6f18db3f48a036fe", + "sha256:8d1356c86eefbde3fe8a3c39fb81bbc8b16acc8e442e191408042e8b1d6904e3", + "sha256:9014660472f2080d550157164cc5f9376245a34a0ab877b82b95c1f894af5b28", + "sha256:932f7b77750dff7140522dc97dfd94533a599ef1c5d0be3733f556fd44a68821", + "sha256:945e97ad2bbf7885426f39641a735a31fd4ca2e84e4d0cd271d9880372d6eae1", + "sha256:97e658a3793478d6bca684f47f29f62542312683687bc045dc3cb588160e74b3", + "sha256:99196b4730d887a4bc578f05039b55dc57b131c81b5a5e03efa619b587bdf293", + "sha256:9e895cc3e5ffee269dd9866097e227a68022ef2b78d627a6ed737534d0c88c14", + "sha256:9f6f245d4a5e707d48274f38551b654a36db4fb83437c98be00d2019263aa364", + "sha256:a1f00c328b8dae1828844bac019dfe425d10a2043cc70e2f967224c5392d19ad", + "sha256:a4b43949477dc2b0d3e1d8b7c413ed74f515cef01954cdcc3fb1e2dcc49f2aff", + "sha256:a610426251d1340baa4d8b7942d2cbfe6a1e20b92c66817ab582e0d341185ab5", + "sha256:a6ae5c18b9a70cb0ae576a8a3c8a9a0659356c016b49cc6b263dd987d344f30d", + "sha256:a7bb559b68eb9cb3c4f867eb9fb39a696c4da70a41fad37b410bd0c7b426a8ce", + "sha256:ab2e03dd140ab93b91f94a785d1cd6082d5ab53ab6ec958726efa0ad17f7b87a", + "sha256:ab87c4c50d65932788d058adbbd28a209144523ffacbab81dd41582ffce26af9", + "sha256:ad1563f11dd70cb1684cfe841e4cf7f35d4f65769de21d12b72cf773a7932615", + "sha256:ad8f8c39c8df184e346184699783f105755003662f0dbe1233d9d9849650ab5f", + "sha256:b007aaf5810c708c5a2778e371aa546d7084e4e9f82f65865b2ce5a182376f42", + "sha256:b088f06d9e2f523683ae363e227173ac454dbb56c938c6d42791fdd78bad8da7", + "sha256:b499d93fa31a73e31ee62f2cbe07e4df833fd7151734b8f07c48ffe3e4547ec5", + "sha256:b6df948da34b5fb949698092573d798c76c54f2f2188db59276d599075f9ed04", + "sha256:b71d82e3f001bcb53463023f7f37e223fff56cf048f577c6d85597db94770f10", + "sha256:b85929db81105c06e8292c05cac093068e86464555c628c03f99c9f8090d68d4", + "sha256:b9b3c27aeea1752f0c1df1e29115e4b6f0249173d71e53c5f7e2c821706f028b", + "sha256:bb337ffa10824fa2025c4b1c06a2d809dbed4a4bf9e3ffb262676d084c4e0c50", + "sha256:bd2a098250c683d248a6490ac437ed56f7164d2151572231bd26c76bfe111b11", + "sha256:c35bb5fe018fd9c42be3c28e74dc7dcfae471c3c6689679dbd0bd1d6dc0f51b7", + "sha256:c384c49ce52b82d5b0355000b8aeb7e3a7654997916c1e6fd9d29697edda1076", + "sha256:c3d51ab9f3d5b9a10295abe480c50bf74ee5bf3d984c4cee77e493e575acc869", + "sha256:c3d9730341c825eb167ca06c9dddf6ad4d1b4e71ea7da73cc8c5139fcb5e14ca", + "sha256:c44b3022115eb1697315bc51aeadbade1a19d7188bcda66c52d91209cf2963ca", + "sha256:c7b7be4bff27d7ce6a81d3993755371b5f5b42436afa151868e8fd599acbab19", + "sha256:cb8566b535bc4ebb26247d6f636a27bb0038bc93fa7e55121628f5cd6b0906ac", + "sha256:cb941981676dc7859d53199a10a33ca56a3146cce6a45bc6ad70572c1147157d", + "sha256:cba09dfd3aea2addc994eb21a861c3cea2d68141bb7ebe68b0e94c73405540f9", + "sha256:d0d0923087fe1f2d85daa68463d221e90b4b8ed0356480c887eea90b2a2cc7ee", + "sha256:d2baf7ec353fa64917045b3efe26e7c12ce0d7b4d120c3773a612dce54f91585", + "sha256:d7e3ab9870c496e5a058436bf4d96ed111ca6154c8ef8147b70c44c188d6fb2c", + "sha256:dd074b06be9484040acb4c2c0462c4d19a43e377716be7ba10440f51a57bb98c", + "sha256:dd351b8fbc77c2e2ebc3eeadc0cf72bd5024a43bef5a847697e2b076d1201636", + "sha256:de4953b6b1e19dabd23767bd1f83f1cf73978372189dec0e2dd8b3d6971100d6", + "sha256:e6765c47b487341837b3731cca3c8033b971ee082f6ab41cb430aa3447686eec", + "sha256:e678696bb613f0344b79be385747aae705b327a9a32ace45a353dd16497bc719", + "sha256:e883919cea8e446c5c49717a7ce5c93a016a02b9429b81d64b9ab1d80fc12e42", + "sha256:e8963d7ac292f41654fa7cbc1a34efdb09e5a42399b2e3689c3fd5b8b4e0fe16", + "sha256:e9c54136c9fab2cefe9801e336b8a3aa7299bcfe7f387379cc6394ad1d5a484b", + "sha256:ee779a291330287b341044635fce2979176d113b0dcce0308dc5d62da7951eec", + "sha256:ef23f62b3abd287cf368341540ef2a81c86b48de9d488e182e63fe24ac165538", + "sha256:f0b54b95e39036c116ffc057b3f56f6084ce88822de3d5d1f57fa38554ccf5c1", + "sha256:f7c5745e0f96c2c16c03c7540dbe26f3b62ddee63059be0a014156933f054024", + "sha256:f90b2f44b5b23364d5fbade2c34652e15b1fcfe813c46f828e008f68a709160f", + "sha256:fa49f6cfcae4305d8cff028dc9c9a881189a38f7ca43c085aef894c58cb6fbde", + "sha256:fb8b727cd9ddff848c5f73e65470abb110f026beab403bcebbd74e7439b9bd8f", + "sha256:fea9354b7169810e2bdd6f3265ff128b564a25d38479b9ad0a9c5776e4fd0cfc", + "sha256:ff31bef13fd278446b6d1969a46db9f02c36fd905f3e75878f0fe17271f7d897", + "sha256:ff3e182c766cd6f302e99e0d8e44927d533356e9d6ac93fcd09987ebead467aa" + ], + "version": "==2.8.2" }, "bytestring-splitter": { "hashes": [ @@ -280,77 +300,66 @@ "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==2023.7.22" }, "cffi": { "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" - ], - "version": "==1.15.1" + "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", + "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", + "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", + "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", + "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", + "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", + "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", + "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", + "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", + "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", + "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", + "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", + "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", + "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", + "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", + "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", + "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", + "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", + "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", + "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", + "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", + "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", + "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", + "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", + "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", + "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", + "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", + "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", + "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", + "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", + "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", + "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", + "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", + "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", + "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", + "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", + "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", + "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", + "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", + "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", + "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", + "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", + "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", + "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", + "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", + "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", + "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", + "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", + "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", + "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", + "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", + "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" + ], + "markers": "python_version >= '3.8'", + "version": "==1.16.0" }, "charset-normalizer": { "hashes": [ @@ -393,32 +402,32 @@ }, "cryptography": { "hashes": [ - "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306", - "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84", - "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47", - "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d", - "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116", - "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207", - "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81", - "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087", - "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd", - "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507", - "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858", - "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae", - "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34", - "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906", - "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd", - "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922", - "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7", - "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4", - "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574", - "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1", - "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c", - "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e", - "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de" + "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf", + "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84", + "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e", + "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8", + "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7", + "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1", + "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88", + "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86", + "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179", + "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81", + "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20", + "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548", + "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d", + "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d", + "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5", + "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1", + "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147", + "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936", + "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797", + "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696", + "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72", + "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da", + "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723" ], "markers": "python_version >= '3.7'", - "version": "==41.0.3" + "version": "==41.0.5" }, "cytoolz": { "hashes": [ @@ -516,7 +525,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "implementation_name == 'cpython'", "version": "==0.12.2" }, "dateparser": { @@ -529,18 +538,18 @@ }, "eth-abi": { "hashes": [ - "sha256:0d50469de2f9948bacd764fc3f8f337a090bbb6ac3a759ef22c094bf56c1e6d9", - "sha256:a9adae5e0c2b9a35703b76856d6db3a0498effdf1243011b2d56280165db1cdd" + "sha256:60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0", + "sha256:abd83410a5326145bf178675c276de0ed154f6dc695dcad1beafaa44d97f44ae" ], "markers": "python_version < '4' and python_full_version >= '3.7.2'", - "version": "==4.2.0" + "version": "==4.2.1" }, "eth-account": { "hashes": [ "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" ], - "markers": "python_version < '4' and python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6' and python_version < '4'", "version": "==0.8.0" }, "eth-bloom": { @@ -552,6 +561,9 @@ "version": "==2.0.0" }, "eth-hash": { + "extras": [ + "pycryptodome" + ], "hashes": [ "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e", "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0" @@ -591,19 +603,19 @@ }, "eth-typing": { "hashes": [ - "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5", - "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f" + "sha256:9d80c7d112a8774bddeb7278b1bc2f17ca4c062825476ce6bc9cba4d47956010", + "sha256:e21a8b0688581a6765f72fa184d86d06c3949e354d4af5293798abc0b4255989" ], "markers": "python_version < '4' and python_full_version >= '3.7.2'", - "version": "==3.4.0" + "version": "==3.5.1" }, "eth-utils": { "hashes": [ - "sha256:7f1a9e10400ee332432a778c321f446abaedb8f538df550e7c9964f446f7e265", - "sha256:d6e107d522f83adff31237a95bdcc329ac0819a3ac698fe43c8a56fd80813eab" + "sha256:085b42f5745f46d22a186fbd873d79f66a79171c02eccd78792d1dddd672f324", + "sha256:d539ac0bb1e759abb39f71efbcd77301eede86b4bf449278e4ad2fbf10aac67a" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.2.0" + "version": "==2.3.0" }, "flask": { "hashes": [ @@ -746,16 +758,16 @@ "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==3.0.3" }, "jsonschema": { "hashes": [ - "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb", - "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f" + "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e", + "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf" ], "markers": "python_version >= '3.8'", - "version": "==4.19.0" + "version": "==4.19.1" }, "jsonschema-specifications": { "hashes": [ @@ -951,71 +963,65 @@ }, "msgpack": { "hashes": [ - "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164", - "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b", - "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c", - "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf", - "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd", - "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d", - "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c", - "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a", - "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e", - "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd", - "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025", - "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5", - "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705", - "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a", - "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d", - "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb", - "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11", - "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f", - "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c", - "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d", - "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea", - "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba", - "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87", - "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a", - "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c", - "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080", - "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198", - "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9", - "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a", - "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b", - "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f", - "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437", - "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f", - "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7", - "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2", - "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0", - "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48", - "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898", - "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0", - "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57", - "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8", - "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282", - "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1", - "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82", - "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc", - "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb", - "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6", - "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7", - "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9", - "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c", - "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1", - "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed", - "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c", - "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c", - "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77", - "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81", - "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a", - "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3", - "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086", - "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9", - "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f", - "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b", - "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d" - ], - "version": "==1.0.5" + "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862", + "sha256:0bfdd914e55e0d2c9e1526de210f6fe8ffe9705f2b1dfcc4aecc92a4cb4b533d", + "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3", + "sha256:1e2d69948e4132813b8d1131f29f9101bc2c915f26089a6d632001a5c1349672", + "sha256:235a31ec7db685f5c82233bddf9858748b89b8119bf4538d514536c485c15fe0", + "sha256:27dcd6f46a21c18fa5e5deed92a43d4554e3df8d8ca5a47bf0615d6a5f39dbc9", + "sha256:28efb066cde83c479dfe5a48141a53bc7e5f13f785b92ddde336c716663039ee", + "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46", + "sha256:36e17c4592231a7dbd2ed09027823ab295d2791b3b1efb2aee874b10548b7524", + "sha256:384d779f0d6f1b110eae74cb0659d9aa6ff35aaf547b3955abf2ab4c901c4819", + "sha256:38949d30b11ae5f95c3c91917ee7a6b239f5ec276f271f28638dec9156f82cfc", + "sha256:3967e4ad1aa9da62fd53e346ed17d7b2e922cba5ab93bdd46febcac39be636fc", + "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1", + "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82", + "sha256:484ae3240666ad34cfa31eea7b8c6cd2f1fdaae21d73ce2974211df099a95d81", + "sha256:4a7b4f35de6a304b5533c238bee86b670b75b03d31b7797929caa7a624b5dda6", + "sha256:4cb14ce54d9b857be9591ac364cb08dc2d6a5c4318c1182cb1d02274029d590d", + "sha256:4e71bc4416de195d6e9b4ee93ad3f2f6b2ce11d042b4d7a7ee00bbe0358bd0c2", + "sha256:52700dc63a4676669b341ba33520f4d6e43d3ca58d422e22ba66d1736b0a6e4c", + "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87", + "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84", + "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e", + "sha256:5b6ccc0c85916998d788b295765ea0e9cb9aac7e4a8ed71d12e7d8ac31c23c95", + "sha256:5ed82f5a7af3697b1c4786053736f24a0efd0a1b8a130d4c7bfee4b9ded0f08f", + "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b", + "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93", + "sha256:7687e22a31e976a0e7fc99c2f4d11ca45eff652a81eb8c8085e9609298916dcf", + "sha256:822ea70dc4018c7e6223f13affd1c5c30c0f5c12ac1f96cd8e9949acddb48a61", + "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c", + "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8", + "sha256:8dd178c4c80706546702c59529ffc005681bd6dc2ea234c450661b205445a34d", + "sha256:8f5b234f567cf76ee489502ceb7165c2a5cecec081db2b37e35332b537f8157c", + "sha256:98bbd754a422a0b123c66a4c341de0474cad4a5c10c164ceed6ea090f3563db4", + "sha256:993584fc821c58d5993521bfdcd31a4adf025c7d745bbd4d12ccfecf695af5ba", + "sha256:a40821a89dc373d6427e2b44b572efc36a2778d3f543299e2f24eb1a5de65415", + "sha256:b291f0ee7961a597cbbcc77709374087fa2a9afe7bdb6a40dbbd9b127e79afee", + "sha256:b573a43ef7c368ba4ea06050a957c2a7550f729c31f11dd616d2ac4aba99888d", + "sha256:b610ff0f24e9f11c9ae653c67ff8cc03c075131401b3e5ef4b82570d1728f8a9", + "sha256:bdf38ba2d393c7911ae989c3bbba510ebbcdf4ecbdbfec36272abe350c454075", + "sha256:bfef2bb6ef068827bbd021017a107194956918ab43ce4d6dc945ffa13efbc25f", + "sha256:cab3db8bab4b7e635c1c97270d7a4b2a90c070b33cbc00c99ef3f9be03d3e1f7", + "sha256:cb70766519500281815dfd7a87d3a178acf7ce95390544b8c90587d76b227681", + "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329", + "sha256:ccf9a39706b604d884d2cb1e27fe973bc55f2890c52f38df742bc1d79ab9f5e1", + "sha256:dc43f1ec66eb8440567186ae2f8c447d91e0372d793dfe8c222aec857b81a8cf", + "sha256:dd632777ff3beaaf629f1ab4396caf7ba0bdd075d948a69460d13d44357aca4c", + "sha256:e45ae4927759289c30ccba8d9fdce62bb414977ba158286b5ddaf8df2cddb5c5", + "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b", + "sha256:ebbbba226f0a108a7366bf4b59bf0f30a12fd5e75100c630267d94d7f0ad20e5", + "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e", + "sha256:f0936e08e0003f66bfd97e74ee530427707297b0d0361247e9b4f59ab78ddc8b", + "sha256:f26a07a6e877c76a88e3cecac8531908d980d3d5067ff69213653649ec0f60ad", + "sha256:f64e376cd20d3f030190e8c32e1c64582eba56ac6dc7d5b0b49a9d44021b52fd", + "sha256:f6ffbc252eb0d229aeb2f9ad051200668fc3a9aaa8994e49f0cb2ffe2b7867e7", + "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002", + "sha256:ff1d0899f104f3921d94579a5638847f783c9b04f2d5f229392ca77fba5b82fc" + ], + "markers": "python_version >= '3.8'", + "version": "==1.0.7" }, "msgpack-python": { "hashes": [ @@ -1098,7 +1104,7 @@ "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae", "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==5.2.0" }, "mypy-extensions": { @@ -1111,37 +1117,38 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "2b1c7d6df207ecd239db4331f452332dbcd6a8a9" + "markers": "python_version >= '3'", + "ref": "f893a7388e5ab91d7df340f89e449d37030607c7" }, "nucypher-core": { "hashes": [ - "sha256:1db0b61cb3974eb1269283e193e3d6fb7abbc572e64b57f2952cf7008782574e", - "sha256:21c0b01a59621302a5b1e9cfe2ec107066ff10e3776664143fd2b994eab52359", - "sha256:42220d3c7be16ff32d0cf3a44f96d13ab61dd2ea2d69154341a163f129c13fee", - "sha256:63779e467c6012fa8b2bc0cfdddc4091d516593b08ad5b79b7f7b2022064c298", - "sha256:706991adc220b65d6e46a0d3d1f39021fbe8c7a5fd7a819aa1f2ca494ca779ab", - "sha256:7fba3befa5713975af5a5172b35832502078b74bb85d99be450bb1334e744297", - "sha256:8cb5718bc7511265f9721c342d703b2343bf6aa7091a0cc4463046f1edf35496", - "sha256:92767dcdef27a7697d155bd56dd408bfd290705bac7f299a0a62089b7883ed11", - "sha256:9df6f21de95add612c5b07dea88704023ad6dcb76cc93affdd30caaf3b841433", - "sha256:a10cbe550597561fde8c5d211998d34d259fff88ae5b42845c28bb48ef07ad8f", - "sha256:afa30ce0d4f5b874d512f38da996f896980172f6d0b9c6ebddd55b8bd262e5e5", - "sha256:b51017b852870235decba18c0d32bba42bedea2b67a09b3c0ef0a3dd18759ab6", - "sha256:b602880eadf8a12b8477a8d5b6ff041ad1200eca330b9c49e03e984808be932b", - "sha256:d903768cd804f84674c1ceb1f8631fb93d753b2545f9685ddbdc78603b603d48", - "sha256:f2e69196f93fa66409b97b641ab43723da55d1a30efed4dc30d646b6823e52ce", - "sha256:fcf17020e8037c09166d2c748514dbcc5b4a8bd3201c9cdaa951768930980a8a" + "sha256:09c754a7450d2ba3a46bf2c73ac35a0e8fe73c0c2fdbc2dab47ebea47d90b909", + "sha256:0b3d44fdc4acfd31cf6e46fdf8acb9ea278823b2d72336f5c9e7732b37ac6f30", + "sha256:0b8449ab2524628b1d4c095fc4ff5e46c699f0acd62a099ba6d411e72704c94c", + "sha256:0fe7eab174fc658f8391f1834aa193fb10acf1a55a1c613d0f09493e8d0d9f17", + "sha256:1f70477f41bc10e19f6280258530dabecb453b1230f641601ea12f5e4c9cac67", + "sha256:1fc6f39de2e90e36695c2674a170047dc9abfc083e9177b3304bd74ec21727d2", + "sha256:57c1c6d96570221ec8c30f8b00d89496f9d68cdf11b0574bdae7defd3cc1c975", + "sha256:74fcf712399aeb0d242c1d332a7f7a34d4ff70d9262c0537eb769ff973c2170e", + "sha256:75d5b86ab0fe51b00036cab25d6d4699fa3171aa8a8418d4027fdc2388f84c43", + "sha256:a3a69e37fdf6a42b5d0be58b28d70e2fb614320d032a2fe99aa3aa29643f9494", + "sha256:b9c82bd7593d2deac41c8f7b2833193eb6e6cab0208261313121646fcd275629", + "sha256:de48dae67ff01ffe020e8887432daa8a1072797559e11cb34d56b3012b6f4520", + "sha256:e22038db52190d88b6dd8cbcd76980d2f2d62a630baac46677f9ad6743b3b689", + "sha256:f2d44c28e4724f1c5ff6e566bbe1ab731bd57458bd219072aa146bd43a4e78d6", + "sha256:fadd7ac4009d74b2bdf2b678015ff6e315827517de21d0684fd31b9259a08fbc", + "sha256:fcb97049f8719d30fd155fe3f862410cb5edb3afd76ff0ae1ff60d76d0b5a3f8" ], "index": "pypi", - "version": "==0.12.0" + "version": "==0.13.0" }, "packaging": { "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" ], "markers": "python_version >= '3.7'", - "version": "==23.1" + "version": "==23.2" }, "parsimonious": { "hashes": [ @@ -1151,64 +1158,99 @@ }, "pendulum": { "hashes": [ - "sha256:075de865e31876d39831f5ce224849b4ced217b0368d58ab1a155622494031b8", - "sha256:0814e93270e5370ee2b5342ce4e91c4162d06b122de81fac88f92e5d8504f9e5", - "sha256:0876f05544a08a73df5c68d6adfe86b080bac91ba95c5c65396fb92b6d3b8dea", - "sha256:096d2b20fcf0f9f3bb31a04c6ecff9cb4fd7ea5755b47c32fc454854a5b56320", - "sha256:0b4055f1ae554a74dce460af10deabcd3b1e1470e9c7b6644cecf3ff79498780", - "sha256:236cd4ab81b5753780e75a4aecbcdc86b8c28a0ad03b00496bea5ac4ad3fa93f", - "sha256:27df9ea0030f51213e17b97874b06af873441644f14de1b112c80e079b86ee92", - "sha256:2c94b376f5c0f4ddcdcf020a95993fe0c6cdb115fc065956ad975934215e842b", - "sha256:2cf23d1955af25b2bc76c1ab16ac5e71817729c7fa489264fccaeab7d72cce18", - "sha256:367dd5735120060abfc636a7d72040d6d38cd4d7052f9206eecaa0eef5fdf8c0", - "sha256:3be6b9500863ec9502609ede68172d4831e4254df72d8bd76b523c4f7c198068", - "sha256:46947e8455833d8e166f732d7faecabbf45b81bf42443829fd267622d2ab21ea", - "sha256:476b9112a340c2c38f6a880c76b75c5aabc9131d5a7f2a9b5a1c950a77fb802d", - "sha256:4cfc02645b6afb9a2781f52eb35de912f75fc4d6bb502b856697d522d9158d2a", - "sha256:4d2d891ad280e8cad1174bbe06e15ad3c1110880cf1db3fc1bb4359c44ab137e", - "sha256:4e5eef051882aa0330c146321ea542797f817376cbc001356a7c98126532dc60", - "sha256:5025d9fb9ddbdfdfae60194bb7d6be3bfea2f2361f098687637712e33c359153", - "sha256:5125077b639167aa386a67f87cb6e0717864be10ea019fbff8ee0125fdb55ede", - "sha256:51baeb11abdfa4ac33c229f7488948ae2fcefcd229479c4c1a3a10fb63167535", - "sha256:59fc9f4fff307dcb5e348793161683ea3b78efe431058984265a872544be887e", - "sha256:669007b0f75e609e2794bc4e71ae47b8def25ca1cddba115216ff2b458675b71", - "sha256:6988901ac209d5fcd50da5e853273dd05d973b23c6f72a4a154039316d6b114f", - "sha256:6b332eb3b0084b7d87566ed858e1f27532495be6b509907d47ed2d22e155ffe4", - "sha256:6f6b4d0c75b0e9372320ae501f7f27c44c47b8ebc2b732884be811459bbcda28", - "sha256:833d7e344469625f30a1b5e883f2c8af99b0e35bbae82fb21a6e9ac6094576c6", - "sha256:836180c9800a2246005eef378850d8af8a66cfab06d80c10bafedefc94def872", - "sha256:8ba87243c01e51ebcad88b370f33ab6f09704c6015083f9238198ce1e1bff46c", - "sha256:9512f85d02727db3600e601757e6e96428c5a35e35e60bbce0e11346998e3b9d", - "sha256:9e803c0f383a23bae88e7578ef9dcee987e7ef824c5891af82142e8d7e9b0b9a", - "sha256:a34d2c33ce5da7b17c0d04144979af4631dee77d4437a1fd74d9668f6d1831cd", - "sha256:a45b94dc7d115b56f90490fc3960c579a3d8f73731a37fb0d25f00550faa374e", - "sha256:aadbfa235875b98ef7769843b5d3174e418500a20004663cb1fe341433793899", - "sha256:b05eb3cce1ff9a7d63e82887a4f9538d4aa543e7c94b5e33f15caee89c680938", - "sha256:b558fabaa96d20541ea3c88fcfbd25e8440def6f23ae49d649600228887970f6", - "sha256:bd244c062c25ac3fc484813e76c75f05373170786c4e34c2e42f57277335b919", - "sha256:bd8e55be4b3596fd29f1567b4b49ed8a536f3aadcc4a3f7f96073e00ebadefd7", - "sha256:cb830c7aac70b380ed829e52c825d4854bea2d970179abd12eb6c363d48b758c", - "sha256:cdd95883421ae159d4b9f7343efb8252c7be39af753cabb331a20c8b351830bd", - "sha256:d08d408a3654f9b4ad2db8d76a5863a29a5fcf2c81bcaf3a89545e7ac041319b", - "sha256:e26a422d7e987690207d2e73a5febec3c08bee722ebe69ae52352eb60459d086", - "sha256:e611af03dae4a78debdfcfc2435c61734af761d185dccfbd14fd67a770d03457", - "sha256:ebc402a51dcbed5d335779b3947b17f0f9178fb8d9c01ed5fb80e9efcf18c8a8", - "sha256:ec4fc633c850aef300e58b55fffbd9b0156ffe120653f051d25dceda022f4a73", - "sha256:f15c13e938879595f9e1a5b533f5d47206977d4e811adf4b91e5512b742970e8", - "sha256:f5f69fe307e36cb434d999b82870b2be416eced3a0046eef85e8e43952b881b9", - "sha256:f81f45d0d554d33134c2e9aa91e9bf26dbae23d5689daba44a75fd780a711ff9", - "sha256:feaa3aa442d585dde0e8a0b3c6930e9e7cb56d85f6c759e8c2581a0dece69882", - "sha256:ffaf7daead2a86f3f48da7fc0fe1c2f4f3be665245804e988b07aba79f4ef41c" + "sha256:03080a6b7f1b500b4b966d0f107f19e12386fbd8df477ed2aca9f2c1ea0f0a71", + "sha256:0b1cc6de778a99dbea179a86e655aa24d2d6964da5db52b2e147945a108cdb63", + "sha256:0dbcbad29f338dd90ffe9a3235c283a2a01f8e565c02ace69b84a3ed049cb9bc", + "sha256:0fc8b3643cd04b64e5d931df94fbc1e6ee4117255f93bc2df43e177f42c6ec50", + "sha256:0fdb0b98ab23dd9f134e80d18562bc17bf31c4e38b604d822fd87d685df4a984", + "sha256:0ff2cda697eeec55a2de4bbcb94bc941b2fb28cb6fa2b7d2d4098505892e555d", + "sha256:10edd6a29dc00768c5f15f79a1ef15d7d6b8897383175ed42e9ac60db924efa0", + "sha256:13656868bf4190b542bf25505629b4aef24c5d737b9796b5294f94de4d405b5f", + "sha256:1d12a537ff1acec48243325b15fb617795ff981efa142a9a584f5a82fc6c237b", + "sha256:2364a38b60968c67ea96164b166a9b00e6e6cd05e379f9b38dae51a0d027e6b3", + "sha256:256fb81c43183f4f3a40bcd9fd2f0914e77eb37334376117183037cf9656800f", + "sha256:2b85650e1d6171fdaa4cc29280caa7c1c8385f6db4f0b479ce74acaabe48ba97", + "sha256:30dce113b94cc05353651573a4336fe04e97260befcfd1d618ce632aa3fc7d2f", + "sha256:32f2568b295f1f4571354edc4b106ed63a5e4d0916b977fff863f7b1c937968b", + "sha256:39154e7f75ee9ff12adb909374189b7ffd521b682223ec8baaf3b04f010fc671", + "sha256:3ce5cf4be2525077cc25361ae4c05e2835f960476ad8df3152a30bc654531b8e", + "sha256:47f75b13e69780a26c3f9227695e80fc49f0498b2635483ae9b17843319f018e", + "sha256:4a06c923ce1118c3e5c64d3a34ff30220eca14583cb51edcba32fdae5c0caf70", + "sha256:4b0f6d812a87225c0af2d342dbe428bcfd2eec2dce76a21042881f5ee130b02a", + "sha256:4b9a841296685be7488a34b6b51df5c8f927963f9370a01f76f75ebe16bf9256", + "sha256:4ccc6f77da9236ef67021f356696bbdd1790dc8941bfb106a7b937dfca3a4b6e", + "sha256:4ece9f0bf5d2c2ed3c8ca9d0cfe759c2b80c2c0f599e92a8d2cd747d7e358f46", + "sha256:5331e3106e9a5690136daf386ac78a7c7e47bd4b777b8dc8925b608633788718", + "sha256:543a063682d7100569242e43b05c338f91008652ae36fa6ca13b17f7fb5600ea", + "sha256:57e14edb415d278c794d4f549c1db9e7041cc988de1bda7ca80ea43bcacbb540", + "sha256:587c09b86e4b179b2a638ada746fba49b1c8afd9cd2a7f1d7e8939f11b2152c0", + "sha256:597f12938ca48bc11f8dec3e3c742fe2ba2eec9950e1c8db2d2e739a7c62428a", + "sha256:5b14035b98b75d6d138045565312fef7fd55583e91bc28c27c4a98e3a4cf064e", + "sha256:5d23a1aa69a18d168829c2d587dc450163ec8beef644058a9a6275794a1a51ba", + "sha256:6164b7983fc04a877e4f64ee8b1a063a0e0b34056134789eb53fd3ebf1b1cedb", + "sha256:618e65a703b99c1792a7090ae56c8c7c0220ae58aa363ed2eff95c8562acd02f", + "sha256:658160760a197b6e72e0012195962f3dd49efb846d8d4887d016fc7c85add5eb", + "sha256:681eb3ac31638170e1cb3ad83a916a8de1677638db8378a103f972980655742b", + "sha256:695b183356bd74f2bd6b665743f1fa6cb21285e15c1154a9d60188ebd356abd5", + "sha256:6b80fa0186b964cafba0c7709b083f5f8f79934c758e23b065d975e9289cf813", + "sha256:75753c75d5fd8b69b2207afe5d831527a26ff647207a0bc9d9c575f02439a284", + "sha256:76f158cf8fbd81803303a635e1b617bdac76bb81f78fb4db9a651167043108e2", + "sha256:791a3ded0929f72e8d89e567dd1f4cebb448e5f255a5c8b33f8d0485c4e40641", + "sha256:7b624d0aed4a5b40c5f52bded4bc516c3975c3ff8f1998bf51715e37c6dfc30c", + "sha256:7ca2e5efc5d27a45e600a48e2ae750341235323da038c11e07ea3c722977d97f", + "sha256:7d3cbba1716823d0d450f10bdf455d58d20c1c89f365bcbde7005bd97edd36b9", + "sha256:81c1eecbaedaee5712e643098253f8fef74d4e56800a85f0609bec3da6ed6f85", + "sha256:82f02593bda744900620eaede23b8f8f6d1de855cb938bc48e077d849755b4cb", + "sha256:83b0c99a83ff19165707956d45d8198895d35d6acf3cc6072a7342c7b7423f9a", + "sha256:89b4435add740a33d1b14720a6b4b471edbd7ea7ed42f44e288cabd59e00580b", + "sha256:8c3c3f423c4f32964ef3b8664041e13f78e80a49e554258f15b5e3b0622ccc53", + "sha256:8c7f6453db9bccc77506fdb8ed3ca61ef7f53efced70557102114f0c811bcd38", + "sha256:8e8c406b7c3dedd7db0eaa8f83cc2b78e594aaa424f3e064e38e037bb65a3191", + "sha256:917426a340bde92b03743ca2555c17892d1640de6fdb401c19ce4607ded48ec2", + "sha256:92fc9245fea1bb1ddc4cb3b55577a8f1e8c143f9237343bd55b156d3e9b23078", + "sha256:9574d81702be1f6c713cbc2b5c5ce4069c6a12d7f0f9dc46847bb4e3f09b3b08", + "sha256:9c455f9ea9130a10cf28a082f6052064062314d87fd02b334b49cab23e033065", + "sha256:9c58a446d0e1dad9b2c1813847b197d1f9ec1dfdea1cd7d57385591bb414b2a6", + "sha256:a0f6c73bb7e551da0dabc133faedeea48b4f47302d1432d467fb42859ecbf7c1", + "sha256:a4cdb9a0d842e1b6bd4f414d0097ae50859b5c8c04828c58f47a1a67474e6708", + "sha256:a57ca5b9b66674b382f6b429462d4ed2a998e7a1a39d099e23bd056576c44ddd", + "sha256:a5a8d00106888af084223470c2139327766107728fcd7a46b19252f1d878bcd0", + "sha256:a6b5721fd4f1718326461b2b04a24c0aaec11dfb650dd90ad1185c270c066397", + "sha256:a772c98f724d923bfccbd2a89e2217c2949ab582e4ae784671cb4bdc9be98b5c", + "sha256:a83877d59f663e81ef7fca483f9f8ba44c8ed843201cced92ed1298cf2ee162f", + "sha256:a9ecda6e0e4f7dbdfa36ed4e92e70e921f748d4337e23ab8a9fb74b8680138d5", + "sha256:b5a0646b8f9e6d5b041c94ff0d155c9a762c7f459f9cf69804056ac0593855bd", + "sha256:b7fc77f62b19d04bdd904a841b3e8d1ca1d726572c1d7302fee42ae9cebcbe72", + "sha256:ba758a373ab3e3ef377d3c1ea4d6d54f27459f0b722e9abad55178b1be6b9d04", + "sha256:ba8d8ef32b056dc7e31c5b5ac99186786360fc10993e3dfa0f2d78d23bc74ccd", + "sha256:bd5335f023832f49309fc9c40021a9a67ce37164c8ba394203fee3e21b081b64", + "sha256:c67e7459e4875dda15e6dc59e990872fc5c25c5aac9e0bdeae213e902ebbce46", + "sha256:ca71f8663ddae56685e7f1c1dca5d9c008d4726b37955d97b2b52015ecc1ff6c", + "sha256:cdac9cbf6e2e57766bd064f963ef90c33046251a0646c0a796f8b03408bd9433", + "sha256:d07dbb86984da99d12fdfffc167209bc470f48a10c3844ed5871d6987e2fecd8", + "sha256:d107bf9985a2620cc25c4d4e89638c14b78e571a0a6c02b5982cf31146744c73", + "sha256:d1d43b37204f47cce0a84d5b4131facdc57bad2e8fef8069249098458f60997b", + "sha256:d562c48affb35fae42ad71c4c5dc445e4a39d4a32ad475b78d66cbd6f217d49f", + "sha256:d6e583ab1bfeb77943a485d60cdf0172d0d6be0b175265f7826ec105937981ba", + "sha256:db8b46f257a436752f78024dd8677e8e4cc15c759fb4a7ceaa258bf9741bf5dc", + "sha256:db993666e3ff78e12d640b724d161fde4b96650d1261071412157e34b1aaf60b", + "sha256:dbd44cd66bf8d81fe2482d9ae8b4ebb7ddf3c34dd0a7e96a6ad57da8ec424602", + "sha256:e2f9bcf5166e025e7dfaec27263a13fd4f7deff5449bc93fcceccda3ca4a46e0", + "sha256:e3793a3511657e1b7be6c1d157915a52de5a6aea789f7452a393138cf1532311", + "sha256:ea8a4bd76fc6e76b30c02cfed3e970574a9247b6dad8f02c88269e9ebbd0993c", + "sha256:f5a1ddf5f34431e550daceafb202cd1cfaa31a3d3e1d53f2c76a1d13c9d2f291", + "sha256:f5bbbec2198cdbe221d5f4a702f55a28d04a7b081ee3f1c2ef83ebec989628d5", + "sha256:f8a0ead27e7bf8544f1aea9676f60425416a50f44a908afe1008a40a4c45b499" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==3.0.0a1" + "markers": "python_version >= '3.8'", + "version": "==3.0.0b1" }, "prometheus-client": { "hashes": [ "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==0.17.1" }, "prometheus-flask-exporter": { @@ -1221,29 +1263,27 @@ }, "protobuf": { "hashes": [ - "sha256:237b9a50bd3b7307d0d834c1b0eb1a6cd47d3f4c2da840802cd03ea288ae8880", - "sha256:25ae91d21e3ce8d874211110c2f7edd6384816fb44e06b2867afe35139e1fd1c", - "sha256:2b23bd6e06445699b12f525f3e92a916f2dcf45ffba441026357dea7fa46f42b", - "sha256:3b7b170d3491ceed33f723bbf2d5a260f8a4e23843799a3906f16ef736ef251e", - "sha256:4e69965e7e54de4db989289a9b971a099e626f6167a9351e9d112221fc691bc1", - "sha256:58e12d2c1aa428ece2281cef09bbaa6938b083bcda606db3da4e02e991a0d924", - "sha256:6bd26c1fa9038b26c5c044ee77e0ecb18463e957fefbaeb81a3feb419313a54e", - "sha256:77700b55ba41144fc64828e02afb41901b42497b8217b558e4a001f18a85f2e3", - "sha256:7fda70797ddec31ddfa3576cbdcc3ddbb6b3078b737a1a87ab9136af0570cd6e", - "sha256:839952e759fc40b5d46be319a265cf94920174d88de31657d5622b5d8d6be5cd", - "sha256:bb7aa97c252279da65584af0456f802bd4b2de429eb945bbc9b3d61a42a8cd16", - "sha256:c00c3c7eb9ad3833806e21e86dca448f46035242a680f81c3fe068ff65e79c74", - "sha256:c5cdd486af081bf752225b26809d2d0a85e575b80a84cde5172a05bbb1990099" + "sha256:2d65aa406a608bf8b18366d6b25d42bbb205a235a8802da3a46d38c22d4c9d6c", + "sha256:44c7c8346d8e64868df452759f1ebf3ecec3a9cf2f45affe837598e2a6dfb15e", + "sha256:4a1482f46714f0a428170221bcd780554099392523869a345e0f7aa2c58cae09", + "sha256:5b8eeb9970305008acf1c81e12624a7171bff46390a19aa9404a08fab0dff6dc", + "sha256:6c00620313178bdad36e5c0c58dac912bb02accb18c10c05116a92adef98d0e2", + "sha256:89a42a302b3c67187463616ce39f6f00bc97b84c062298de087fa94eacbe6cc2", + "sha256:bb652481451c49ac77ab4d85520c74a5b56d64a5e597ab6d5d02f97c71793219", + "sha256:d88d3950bc0afd42ec0dc71fb7e0b5e564f47074a141df6a546e2c93edb93402", + "sha256:e0d5d352a97f9ba3aedc1beaa2bdaef86c8c9eb0774a5d9dd48c9d8253d1ffad", + "sha256:f27cd197d87b17692615ade1097633a8b9a1d32677e6036ca2b5079484fb94b3", + "sha256:f2b101cd374b0ce97b2871e1fb0f207022c3efea074cce85b060966eef4a6be0" ], - "markers": "python_version >= '3.7'", - "version": "==4.24.2" + "markers": "python_version >= '3.8'", + "version": "==4.25.0rc2" }, "py-ecc": { "hashes": [ "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" ], - "markers": "python_version < '4' and python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6' and python_version < '4'", "version": "==6.0.0" }, "py-evm": { @@ -1284,41 +1324,41 @@ }, "pycryptodome": { "hashes": [ - "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb", - "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6", - "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403", - "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148", - "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4", - "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825", - "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2", - "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14", - "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c", - "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4", - "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2", - "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb", - "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf", - "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec", - "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918", - "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3", - "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944", - "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e", - "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024", - "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f", - "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1", - "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380", - "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9", - "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e", - "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413", - "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec", - "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54", - "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2", - "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27", - "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b", - "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf", - "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08" + "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6", + "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810", + "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a", + "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db", + "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33", + "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5", + "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551", + "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa", + "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4", + "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405", + "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc", + "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997", + "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb", + "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e", + "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9", + "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f", + "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e", + "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34", + "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631", + "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c", + "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde", + "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7", + "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa", + "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0", + "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea", + "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e", + "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400", + "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270", + "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f", + "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1", + "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434", + "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==3.18.0" + "version": "==3.19.0" }, "pyethash": { "hashes": [ @@ -1339,7 +1379,7 @@ "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==1.5.0" }, "pyopenssl": { @@ -1347,7 +1387,7 @@ "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2", "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==23.2.0" }, "python-dateutil": { @@ -1360,16 +1400,16 @@ }, "pytz": { "hashes": [ - "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", - "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" + "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", + "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" ], - "version": "==2023.3" + "version": "==2023.3.post1" }, "pyunormalize": { "hashes": [ "sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==15.0.0" }, "referencing": { @@ -1382,97 +1422,97 @@ }, "regex": { "hashes": [ - "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf", - "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46", - "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18", - "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7", - "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7", - "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9", - "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559", - "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71", - "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280", - "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898", - "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684", - "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3", - "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9", - "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8", - "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca", - "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c", - "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c", - "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab", - "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd", - "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56", - "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586", - "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7", - "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103", - "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac", - "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177", - "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109", - "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033", - "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb", - "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61", - "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800", - "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb", - "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8", - "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570", - "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34", - "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e", - "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4", - "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb", - "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7", - "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208", - "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc", - "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb", - "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3", - "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504", - "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb", - "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57", - "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b", - "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601", - "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116", - "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8", - "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6", - "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6", - "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93", - "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09", - "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a", - "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921", - "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a", - "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495", - "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6", - "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7", - "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236", - "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235", - "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470", - "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b", - "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5", - "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61", - "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c", - "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db", - "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be", - "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96", - "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a", - "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2", - "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63", - "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef", - "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739", - "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e", - "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217", - "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90", - "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4", - "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8", - "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3", - "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357", - "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4", - "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b", - "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882", - "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a", - "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675", - "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", - "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" + "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a", + "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07", + "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca", + "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58", + "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54", + "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed", + "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff", + "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528", + "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9", + "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971", + "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14", + "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af", + "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302", + "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec", + "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597", + "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b", + "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd", + "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767", + "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f", + "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6", + "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293", + "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be", + "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41", + "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc", + "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29", + "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964", + "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d", + "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a", + "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc", + "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55", + "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af", + "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930", + "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e", + "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d", + "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863", + "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c", + "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f", + "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e", + "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d", + "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368", + "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb", + "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52", + "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8", + "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4", + "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac", + "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e", + "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2", + "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a", + "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4", + "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa", + "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533", + "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b", + "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588", + "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0", + "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915", + "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841", + "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a", + "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988", + "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292", + "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3", + "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c", + "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f", + "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420", + "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9", + "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f", + "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0", + "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b", + "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037", + "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b", + "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee", + "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c", + "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b", + "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353", + "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051", + "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039", + "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a", + "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b", + "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e", + "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5", + "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf", + "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94", + "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991", + "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711", + "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a", + "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab", + "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a", + "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11", + "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48" ], - "markers": "python_full_version >= '3.6.0'", - "version": "==2023.8.8" + "markers": "python_version >= '3.7'", + "version": "==2023.10.3" }, "requests": { "hashes": [ @@ -1491,106 +1531,108 @@ }, "rpds-py": { "hashes": [ - "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a", - "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e", - "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e", - "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225", - "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d", - "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775", - "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c", - "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59", - "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5", - "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173", - "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74", - "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640", - "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef", - "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474", - "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370", - "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b", - "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5", - "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa", - "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a", - "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3", - "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5", - "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48", - "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17", - "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397", - "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6", - "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd", - "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3", - "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca", - "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a", - "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e", - "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c", - "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24", - "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86", - "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f", - "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e", - "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f", - "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83", - "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882", - "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e", - "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00", - "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212", - "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1", - "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309", - "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c", - "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf", - "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517", - "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696", - "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa", - "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582", - "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3", - "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291", - "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a", - "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b", - "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727", - "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b", - "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878", - "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d", - "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279", - "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07", - "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012", - "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b", - "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453", - "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12", - "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09", - "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795", - "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04", - "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c", - "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8", - "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1", - "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060", - "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb", - "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2", - "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6", - "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31", - "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da", - "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af", - "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4", - "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685", - "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186", - "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103", - "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f", - "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b", - "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d", - "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a", - "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f", - "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0", - "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe", - "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d", - "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2", - "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055", - "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47", - "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514", - "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7", - "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41", - "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b", - "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910", - "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc" + "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed", + "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8", + "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417", + "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801", + "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31", + "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116", + "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5", + "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393", + "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532", + "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc", + "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2", + "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df", + "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3", + "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf", + "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647", + "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3", + "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721", + "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247", + "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c", + "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42", + "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014", + "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65", + "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e", + "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02", + "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb", + "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c", + "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043", + "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403", + "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57", + "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50", + "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6", + "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071", + "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487", + "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138", + "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2", + "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063", + "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6", + "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35", + "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a", + "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238", + "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba", + "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175", + "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6", + "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8", + "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396", + "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d", + "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9", + "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977", + "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3", + "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55", + "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977", + "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80", + "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4", + "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c", + "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4", + "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac", + "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1", + "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0", + "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5", + "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469", + "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d", + "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f", + "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c", + "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2", + "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf", + "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5", + "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7", + "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e", + "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7", + "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336", + "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4", + "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed", + "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9", + "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094", + "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f", + "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b", + "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13", + "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722", + "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53", + "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4", + "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38", + "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e", + "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31", + "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586", + "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad", + "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7", + "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482", + "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d", + "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066", + "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b", + "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b", + "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d", + "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9", + "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069", + "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971", + "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18", + "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1", + "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d", + "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281" ], "markers": "python_version >= '3.8'", - "version": "==0.10.0" + "version": "==0.10.6" }, "semantic-version": { "hashes": [ @@ -1610,11 +1652,11 @@ }, "setuptools": { "hashes": [ - "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d", - "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b" + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" ], "markers": "python_version >= '3.8'", - "version": "==68.1.2" + "version": "==68.2.2" }, "six": { "hashes": [ @@ -1647,65 +1689,65 @@ }, "time-machine": { "hashes": [ - "sha256:05f7320851edb3e887d79a5c797966c8c1b64458fb8b8ee74982c6593606a387", - "sha256:0613aef850db722f2ceee1923d67fc050ae8d6a09fa2cd1ca1dae0748864e6d7", - "sha256:0f9c48f19a6af887ac769740e914f8eb8e406a3d33a651e107f28bba1adc3796", - "sha256:156fdd17fde2a3ea9c41a8108b8ac877e4f90a7ac5e6db533ab6ecb86f723891", - "sha256:1e3b07d7aa993a2f24e3a2ef5a216869f0a1fcaaba6227ad73b265c4f15feca5", - "sha256:26d2be6009151de7aa210e8569c49eece6563b8beb7e290ebd4a10b2b8d2fc5c", - "sha256:2a0a3fb0c316c23b0d79810cf7a158c7d4671acc02a5dfa5cda7aa673478a0dc", - "sha256:2b84449a2b170ed51c26a725a2ca983bc98490c5f23d28e9473402adc7e694ba", - "sha256:328266ea13f0c517cdf758c16a2d83f0118516b8ac7910bba4eba6d4d3b3b2f1", - "sha256:33ee51c6f9f02d7b1d792d379b42321a3d13b819ecd8d136fb287be4adc7b9da", - "sha256:353b6b43e43aee22df79194584c587225ec1a06a2f444099ada2096d806d602e", - "sha256:35ec4170e5045ac0d5dfb1255320e301d5b6fc359f9cf36010007bf572888e73", - "sha256:3992b9285c75c6f74fabfdb0ca7f17f12e22d0fc631ff43d0e110ccd53382569", - "sha256:43a4a5d722f7a6b6ee8f1d3cdeffe6d7c3421452219dce0d22778e6810fb645c", - "sha256:47dc877f3a475d0e818b31a6ad6fc1fbe40f334dcd73d2cb076057aff4d73beb", - "sha256:496a47e2eef78893eb6915d0a5215c59346ebe29d5c88a56301ed74deebe45cc", - "sha256:4bd89a8bf7756b50de180258517004f30857deea82c1841f291a2c8e25cfaa83", - "sha256:4cf10267610244d4398312c4eea5cfc2f68f9a0286260d2157d45d1a54dcc6b2", - "sha256:5240e1cb013826449a5065062b47a46ce3d431fc47cbddc938e3c05e3fe4a951", - "sha256:58ec76d58dcc3ab6a3d7951ae08ae99c7b413a40c7e8255c106b5df4f768f8dd", - "sha256:5e62e45a71674b5df9f9275ffbb342c78ba026c9b556478d0b4bc4470e9f2b4b", - "sha256:669437542e9027db55e06ff05e848a9cb0e88d1fc6e659b412e9721be227b9be", - "sha256:715956ef123645ef22d1c7a13963bb9bc50c02b8578797704715a410bfa49575", - "sha256:786efcc336edc196e5a854a73ff714be198bc57da6856064083677a188c8e018", - "sha256:796968ca8e770ee1121fe209a18cee9bd462bc0cacf57e2b1d528df08c6f18d6", - "sha256:81095391ccef01c56b6061248216da4e2d749b543952fce199b628b8a8ce5ca2", - "sha256:8176eba6b182f88fa8afd9a964c9391b73f3456f6c2f59bb2514957ec6269724", - "sha256:81b88ac04e61c772854fa85b8e04428e3068fe690487a50b69bb07dda2168c36", - "sha256:82062eef6096c42ce14c7c07a7898caa3d696ac189fdb1586f59562893f6abf4", - "sha256:8676471983482522f3e124ad2c8fe38d6d6ed957379504910d2ea0c646d96cb4", - "sha256:8c764bd6690b83a72b4294934774044c8cea4356cb9b103b7dbb8232242b3047", - "sha256:8ec623cff18e328781ab7a6251f1ee77e225f14e1f5a26633028a14b7d90ed82", - "sha256:93c84850c9e529433613af2b2097634d27b30e9853271b6ea1384ee00be5424a", - "sha256:9ac560499086184142b0a0b28eca0ea1d245e9df1c008ef3356b0e3ea6cb1536", - "sha256:9b255feaa4f3c46c7ebd1319a630ee1e3aa87078c9b428f9428980597c3ce830", - "sha256:9c389ef8508f787ff1ec963b473838616773db8e00bc043cab9374f36d9e8201", - "sha256:a1b7b1b758de72de73fcf063be8ae9e2e98dd4bab0e6cd8b32c8e7d0462d78b0", - "sha256:a525dd4fd6f7a2ecf2b54fce3c8b9982650dc570992ca6e38987c3922684099a", - "sha256:a5304de3e41c33cd6e4be7b85f09409b1059b9ff6a8289482352c42fb50b4e42", - "sha256:a9f13f8c8dc72541654830d16efcc6249969bac1cbe591bee4a0ac19490592e2", - "sha256:b3fe070414ef05359c55bbbf94b7a895d532af726705e6f33e6f2eeb26326042", - "sha256:b535a2524e1adbac3c8028c49cdceb764f800ca95c2f7421aad11c5d4c274ed7", - "sha256:b9dec9619ff5e89798e9cfb5e2a53e1eed18afa1b20460d7158fa2db94dd2d3b", - "sha256:bb60d061978487db5cba8a20fb84b3ae29af5ca004a0e991cd5eaa31b0851b59", - "sha256:d09aaa1d323c4a4b5b4569f44a02bb24ba5030b55adc9710a895843796363c0c", - "sha256:d365d6e0faaf6bcddacfb71d8c033011b7a65f1a94142350a1bc9da3c85bfb8e", - "sha256:d4f546b262e0d955376bf0af9a4de13a910f5f27c5e44e4db46ceea61b4c4a7d", - "sha256:d7442e9cffccd76115521f8d64c270e923e566e9487ba9da9824149653cf0641", - "sha256:dfe8b2478b4c3556a913b187ce598ad2afd07e6acfcf652be8e5a56dee2bf200", - "sha256:e0c98003096624cc70caa5743fe6a1fd0e97ffeaf9b44560e4158b0e1a38168e", - "sha256:e45505414fba93a15957a43ff52bbf737c3ef7905464eb16ef45e1395e95206d", - "sha256:e8d5ae0f0a25b3aa7207688edf23de514f918a91ea05edbeffdbdd56d8497c13", - "sha256:ead6c3a1858c551b4edbba781d48892a487fda6ef6416c87f8ed559bfb29c904", - "sha256:fafb423453e711ea95a669373bdaf628e9e8a0c606c1366499835f3e446554dc", - "sha256:fc80ba01ff5663c74ce74c9ee2267dbf900ee8e8d18d55937b5e83eb1e179998", - "sha256:fcb41d70da706e14a805fcbf42bdb17435d4a91420bd5b6a88f8f61beb95b862" - ], - "markers": "python_version >= '3.8'", - "version": "==2.12.0" + "sha256:02b33a8c19768c94f7ffd6aa6f9f64818e88afce23250016b28583929d20fb12", + "sha256:0c9829b2edfcf6b5d72a6ff330d4380f36a937088314c675531b43d3423dd8af", + "sha256:0cc116056a8a2a917a4eec85661dfadd411e0d8faae604ef6a0e19fe5cd57ef1", + "sha256:0db97f92be3efe0ac62fd3f933c91a78438cef13f283b6dfc2ee11123bfd7d8a", + "sha256:12eed2e9171c85b703d75c985dab2ecad4fe7025b7d2f842596fce1576238ece", + "sha256:1812e48c6c58707db9988445a219a908a710ea065b2cc808d9a50636291f27d4", + "sha256:19a3b10161c91ca8e0fd79348665cca711fd2eac6ce336ff9e6b447783817f93", + "sha256:1a22be4df364f49a507af4ac9ea38108a0105f39da3f9c60dce62d6c6ea4ccdc", + "sha256:1ac8ff145c63cd0dcfd9590fe694b5269aacbc130298dc7209b095d101f8cdde", + "sha256:20205422fcf2caf9a7488394587df86e5b54fdb315c1152094fbb63eec4e9304", + "sha256:21bef5854d49b62e2c33848b5c3e8acf22a3b46af803ef6ff19529949cb7cf9f", + "sha256:2bd4169b808745d219a69094b3cb86006938d45e7293249694e6b7366225a186", + "sha256:2dc76ee55a7d915a55960a726ceaca7b9097f67e4b4e681ef89871bcf98f00be", + "sha256:32b71e50b07f86916ac04bd1eefc2bd2c93706b81393748b08394509ee6585dc", + "sha256:34dcdbbd25c1e124e17fe58050452960fd16a11f9d3476aaa87260e28ecca0fd", + "sha256:3a7a0a49ce50d9c306c4343a7d6a3baa11092d4399a4af4355c615ccc321a9d3", + "sha256:3c87856105dcb25b5bbff031d99f06ef4d1c8380d096222e1bc63b496b5258e6", + "sha256:42ef5349135626ad6cd889a0a81400137e5c6928502b0817ea9e90bb10702000", + "sha256:4ca20f85a973a4ca8b00cf466cd72c27ccc72372549b138fd48d7e70e5a190ab", + "sha256:4e3a2611f8788608ebbcb060a5e36b45911bc3b8adc421b1dc29d2c81786ce4d", + "sha256:4f2ae8d0e359b216b695f1e7e7256f208c390db0480601a439c5dd1e1e4e16ce", + "sha256:5aee23cd046abf9caeddc982113e81ba9097a01f3972e9560f5ed64e3495f66d", + "sha256:5c6245db573863b335d9ca64b3230f623caf0988594ae554c0c794e7f80e3e66", + "sha256:5f87787d562e42bf1006a87eb689814105b98c4d5545874a281280d0f8b9a2d9", + "sha256:5fe3fda5fa73fec74278912e438fce1612a79c36fd0cc323ea3dc2d5ce629f31", + "sha256:62fd14a80b8b71726e07018628daaee0a2e00937625083f96f69ed6b8e3304c0", + "sha256:66fb3877014dca0b9286b0f06fa74062357bd23f2d9d102d10e31e0f8fa9b324", + "sha256:679cbf9b15bfde1654cf48124128d3fbe52f821fa158a98fcee5fe7e05db1917", + "sha256:67fa45cd813821e4f5bec0ac0820869e8e37430b15509d3f5fad74ba34b53852", + "sha256:685d98593f13649ad5e7ce3e58efe689feca1badcf618ba397d3ab877ee59326", + "sha256:6c16d90a597a8c2d3ce22d6be2eb3e3f14786974c11b01886e51b3cf0d5edaf7", + "sha256:71acbc1febbe87532c7355eca3308c073d6e502ee4ce272b5028967847c8e063", + "sha256:7558622a62243be866a7e7c41da48eacd82c874b015ecf67d18ebf65ca3f7436", + "sha256:7693704c0f2f6b9beed912ff609781edf5fcf5d63aff30c92be4093e09d94b8e", + "sha256:88601de1da06c7cab3d5ed3d5c3801ef683366e769e829e96383fdab6ae2fe42", + "sha256:8d526cdcaca06a496877cfe61cc6608df2c3a6fce210e076761964ebac7f77cc", + "sha256:918f8389de29b4f41317d121f1150176fae2cdb5fa41f68b2aee0b9dc88df5c3", + "sha256:924377d398b1c48e519ad86a71903f9f36117f69e68242c99fb762a2465f5ad2", + "sha256:9f128db8997c3339f04f7f3946dd9bb2a83d15e0a40d35529774da1e9e501511", + "sha256:9fad549521c4c13bdb1e889b2855a86ec835780d534ffd8f091c2647863243be", + "sha256:a26bdf3462d5f12a4c1009fdbe54366c6ef22c7b6f6808705b51dedaaeba8296", + "sha256:ab04cf4e56e1ee65bee2adaa26a04695e92eb1ed1ccc65fbdafd0d114399595a", + "sha256:b0c8f24ae611a58782773af34dd356f1f26756272c04be2be7ea73b47e5da37d", + "sha256:bdfe4a7f033e6783c3e9a7f8d8fc0b115367330762e00a03ff35fedf663994f3", + "sha256:c23b2408e3adcedec84ea1131e238f0124a5bc0e491f60d1137ad7239b37c01a", + "sha256:ccbce292380ebf63fb9a52e6b03d91677f6a003e0c11f77473efe3913a75f289", + "sha256:cfef4ebfb4f055ce3ebc7b6c1c4d0dbfcffdca0e783ad8c6986c992915a57ed3", + "sha256:d4a2d3db2c3b8e519d5ef436cd405abd33542a7b7761fb05ef5a5f782a8ce0b1", + "sha256:dabb3b155819811b4602f7e9be936e2024e20dc99a90f103e36b45768badf9c3", + "sha256:de01f33aa53da37530ad97dcd17e9affa25a8df4ab822506bb08101bab0c2673", + "sha256:dec0ec2135a4e2a59623e40c31d6e8a8ae73305ade2634380e4263d815855750", + "sha256:e433827eccd6700a34a2ab28fd9361ff6e4d4923f718d2d1dac6d1dcd9d54da6", + "sha256:e58d82fe0e59d6e096ada3281d647a2e7420f7da5453b433b43880e1c2e8e0c5", + "sha256:e9935aff447f5400a2665ab10ed2da972591713080e1befe1bb8954e7c0c7806", + "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7", + "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237" + ], + "markers": "implementation_name != 'pypy'", + "version": "==2.13.0" }, "toolz": { "hashes": [ @@ -1741,11 +1783,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", - "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" ], - "markers": "python_version >= '3.7'", - "version": "==4.7.1" + "markers": "python_version >= '3.8'", + "version": "==4.8.0" }, "tzdata": { "hashes": [ @@ -1757,19 +1799,19 @@ }, "tzlocal": { "hashes": [ - "sha256:46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803", - "sha256:f3596e180296aaf2dbd97d124fe76ae3a0e3d32b258447de7b939b3fd4be992f" + "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8", + "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e" ], - "markers": "python_version >= '3.7'", - "version": "==5.0.1" + "markers": "python_version >= '3.8'", + "version": "==5.2" }, "urllib3": { "hashes": [ - "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", - "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" + "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", + "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" ], "markers": "python_version >= '3.7'", - "version": "==2.0.4" + "version": "==2.0.7" }, "watchdog": { "hashes": [ @@ -1806,95 +1848,97 @@ }, "web3": { "hashes": [ - "sha256:3bc95043ee9fc6ee0b13a4766d4975b9f7cae069db136430a3799ed18743e608", - "sha256:cb454d0180e63ba1d83143dccf7c623581ba58e222edb006f48252d8a7b948e0" + "sha256:0d39f58cbb0c652b45e711f01e01ec655117b47ba4eefd1f9550c52d205afa8c", + "sha256:d301d7120922d5b9e5c9535ef9780012ea25ea4011c2b177490ba7d3ef886b92" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.9.0" + "version": "==6.11.1" }, "websockets": { "hashes": [ - "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", - "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", - "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", - "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", - "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", - "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", - "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", - "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", - "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", - "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", - "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", - "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", - "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", - "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", - "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", - "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", - "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", - "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", - "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", - "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", - "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", - "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", - "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", - "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", - "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", - "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", - "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", - "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", - "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", - "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", - "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", - "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", - "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", - "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", - "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", - "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", - "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", - "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", - "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", - "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", - "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", - "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", - "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", - "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", - "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", - "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", - "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", - "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", - "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", - "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", - "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", - "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", - "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", - "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", - "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", - "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", - "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", - "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", - "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", - "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", - "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", - "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", - "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", - "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", - "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", - "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", - "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", - "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", - "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", - "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" + "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b", + "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6", + "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df", + "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b", + "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205", + "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892", + "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53", + "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2", + "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed", + "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c", + "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd", + "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b", + "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931", + "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30", + "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370", + "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be", + "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec", + "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf", + "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62", + "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b", + "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402", + "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f", + "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123", + "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9", + "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603", + "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45", + "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558", + "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4", + "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438", + "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137", + "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480", + "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447", + "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8", + "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04", + "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c", + "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb", + "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967", + "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b", + "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d", + "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def", + "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c", + "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92", + "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2", + "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113", + "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b", + "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28", + "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7", + "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d", + "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f", + "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468", + "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8", + "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae", + "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611", + "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d", + "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9", + "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca", + "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f", + "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2", + "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077", + "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2", + "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6", + "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374", + "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc", + "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e", + "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53", + "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399", + "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547", + "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3", + "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870", + "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5", + "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8", + "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7" ], - "markers": "python_version >= '3.7'", - "version": "==11.0.3" + "markers": "python_version >= '3.8'", + "version": "==12.0" }, "werkzeug": { "hashes": [ - "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8", - "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528" + "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0", + "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962" ], "markers": "python_version >= '3.8'", - "version": "==2.3.7" + "version": "==3.0.0" }, "yarl": { "hashes": [ @@ -1976,54 +2020,47 @@ "markers": "python_version >= '3.7'", "version": "==1.9.2" }, - "zipp": { - "hashes": [ - "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0", - "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147" - ], - "markers": "python_version >= '3.8'", - "version": "==3.16.2" - }, "zope-interface": { "hashes": [ - "sha256:0326cc72f232167498eb4814232c960881bd8eb5e1f7e92ed07ea7afbf21dbb0", - "sha256:04ab70d12e46f54f2c614e9ca12f3d29de41101f05563f7c9bd3351fcf6d85c3", - "sha256:090cc8c625f1853cfcaa46e333e151210565a4e1379a6f509069b53389b1ec23", - "sha256:167ea1a5c28aad2fa7fb0ca8761229bf54766ab6e696c80e592ee8c936ab1776", - "sha256:1ad9d87bee6c49bb00d75ad854288e41a4acbe3b7d3576faeb1662d2f0e48e00", - "sha256:2900750bc08e1adc14799eecf3afb6bcfa93d334e32407273af051b0e1bf198b", - "sha256:2cd536f007e875d330e7e3f80204cede6d4dad7d5cdc7019d77b11b501e3b132", - "sha256:39273357177f1566134c18f6a26076e5b1938292fe5994f5197a0ed2374882b4", - "sha256:415526873ad6ccea853801dbfe6074dbd5e16487854b17c343d9fc7f095bb483", - "sha256:48299561fe59dfbb4430b6bf0a2f3a3cbfc8bc25e03f8861a3a57222b57a9512", - "sha256:4a208684351acf68357ab17aacaa3bbdd293aa039b73a891c281c4df63c625e2", - "sha256:4c518a72e10103b1d74f616a6145711a002601665c147e264e9e9e0823f339b1", - "sha256:57e981db978a12f4612c599ebbb68ff2dbd81a4617186a12f5c727e686e31461", - "sha256:58ce64e3227ac6fd54c9053e0f452bfba4f3f1ca3d4387f34ee1476d17244fe5", - "sha256:636d9860d05c8faa563d88196c264824aacb6253e7f3cb43d8fc983e5402a2cd", - "sha256:6ed7d7a3d2c45921ad08c709a3130ecf580341de0a675d9e19dccf3917e7f8c4", - "sha256:7371e15df1aaffb076c2a886b2a2932dac171d45581b4fa0be2ced477e480777", - "sha256:77f1f29759014732e3b7addfcfaf14c73a0f325af9d628d5f811d4e58043b3c3", - "sha256:88ac8670b5f4dd1b743a04558cf4ad3e581a2c21f42ffaa190a3676e5e22e3b7", - "sha256:976d7b50221f3cd1b2c8cfda0e1f3e371950124f288b5f97a0b28ffda4f56844", - "sha256:98586b7a16add0503b8851e848bd06e8b4b5d9ead825b28ab93a982c3e0a76ee", - "sha256:9970222b1ad15636422e9cc95ae0dfbbe5ca4127a94027c94dbdb2b1ee6ee618", - "sha256:9c98ca179a060ce48564407179839390acd804f0a70a9954a30a605b5b251540", - "sha256:abc4dd63500f34d8f11fee7f5967f8d56856964c8530d468ab53bb72ceee4712", - "sha256:b42d6d6de23d3a287342b286864b4bef371fa4fe0409fda79a1eaec01af2b1cf", - "sha256:b6cd75530f51179a4165ee1bccff1a690ea64e001e02e1317dc177dee15ba13f", - "sha256:c1c4ff056cdabe871ff89bedab16b4123098af1af8ddbb20bf43bcd8fe6474fe", - "sha256:cb7d92c6579bdcbe18933b8b914d2141760efa47ea586a4b9206320ec00bd587", - "sha256:d711955d9f183d78a1937f69d11329bafa40741c0d6f97d3a210fe21fd666508", - "sha256:db0ca240b647388754ad4c9cee053a9bd731f933943c5cadaf2195ce3b953652", - "sha256:ed58ffd21752f9b92258284d59d8218dfb0bf0fcb41c75ffa4c1317fdf58bb39", - "sha256:f16319abdd98f728acca7e27750495d7ddbbb566a595f44f52f70852c93a69c7", - "sha256:f4f97f40bd9d9dca64fa68e0329db3269d6cb97e207946c5ccdfa865a6d32b9b", - "sha256:f73552012b31af214e8f0e7b6e43066c968f189d2e2f005e271e3308ee6fa3f2", - "sha256:fca350cadf205ff20700b10075a894a2e1cdf201321f1d5d25950b43013a4148" + "sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff", + "sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c", + "sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac", + "sha256:239a4a08525c080ff833560171d23b249f7f4d17fcbf9316ef4159f44997616f", + "sha256:2f8d89721834524a813f37fa174bac074ec3d179858e4ad1b7efd4401f8ac45d", + "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309", + "sha256:34c15ca9248f2e095ef2e93af2d633358c5f048c49fbfddf5fdfc47d5e263736", + "sha256:387545206c56b0315fbadb0431d5129c797f92dc59e276b3ce82db07ac1c6179", + "sha256:43b576c34ef0c1f5a4981163b551a8781896f2a37f71b8655fd20b5af0386abb", + "sha256:57d0a8ce40ce440f96a2c77824ee94bf0d0925e6089df7366c2272ccefcb7941", + "sha256:5a804abc126b33824a44a7aa94f06cd211a18bbf31898ba04bd0924fbe9d282d", + "sha256:67be3ca75012c6e9b109860820a8b6c9a84bfb036fbd1076246b98e56951ca92", + "sha256:6af47f10cfc54c2ba2d825220f180cc1e2d4914d783d6fc0cd93d43d7bc1c78b", + "sha256:6dc998f6de015723196a904045e5a2217f3590b62ea31990672e31fbc5370b41", + "sha256:70d2cef1bf529bff41559be2de9d44d47b002f65e17f43c73ddefc92f32bf00f", + "sha256:7ebc4d34e7620c4f0da7bf162c81978fce0ea820e4fa1e8fc40ee763839805f3", + "sha256:964a7af27379ff4357dad1256d9f215047e70e93009e532d36dcb8909036033d", + "sha256:97806e9ca3651588c1baaebb8d0c5ee3db95430b612db354c199b57378312ee8", + "sha256:9b9bc671626281f6045ad61d93a60f52fd5e8209b1610972cf0ef1bbe6d808e3", + "sha256:9ffdaa5290422ac0f1688cb8adb1b94ca56cee3ad11f29f2ae301df8aecba7d1", + "sha256:a0da79117952a9a41253696ed3e8b560a425197d4e41634a23b1507efe3273f1", + "sha256:a41f87bb93b8048fe866fa9e3d0c51e27fe55149035dcf5f43da4b56732c0a40", + "sha256:aa6fd016e9644406d0a61313e50348c706e911dca29736a3266fc9e28ec4ca6d", + "sha256:ad54ed57bdfa3254d23ae04a4b1ce405954969c1b0550cc2d1d2990e8b439de1", + "sha256:b012d023b4fb59183909b45d7f97fb493ef7a46d2838a5e716e3155081894605", + "sha256:b51b64432eed4c0744241e9ce5c70dcfecac866dff720e746d0a9c82f371dfa7", + "sha256:bbe81def9cf3e46f16ce01d9bfd8bea595e06505e51b7baf45115c77352675fd", + "sha256:c9559138690e1bd4ea6cd0954d22d1e9251e8025ce9ede5d0af0ceae4a401e43", + "sha256:e30506bcb03de8983f78884807e4fd95d8db6e65b69257eea05d13d519b83ac0", + "sha256:e33e86fd65f369f10608b08729c8f1c92ec7e0e485964670b4d2633a4812d36b", + "sha256:e441e8b7d587af0414d25e8d05e27040d78581388eed4c54c30c0c91aad3a379", + "sha256:e8bb9c990ca9027b4214fa543fd4025818dc95f8b7abce79d61dc8a2112b561a", + "sha256:ef43ee91c193f827e49599e824385ec7c7f3cd152d74cb1dfe02cb135f264d83", + "sha256:ef467d86d3cfde8b39ea1b35090208b0447caaabd38405420830f7fd85fbdd56", + "sha256:f89b28772fc2562ed9ad871c865f5320ef761a7fcc188a935e21fe8b31a38ca9", + "sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de" ], "markers": "python_version >= '3.7'", - "version": "==6.1a2" + "version": "==6.1" } }, "develop": { @@ -2117,7 +2154,7 @@ "sha256:f82f0110136281bdd1886529ad9cd9e76c6e03a2841ed923a3db94e9a19ad710", "sha256:fbb89011e236e15899df0b49432bb50c7f3d89c9f1875c0c2b5bafaf9d5c2daa" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==3.8.2" }, "aiosignal": { @@ -2130,11 +2167,10 @@ }, "ape-solidity": { "hashes": [ - "sha256:aaf28e01f4dd366551f5e8c3624ca1c9612ef7afc2980a226cf9d098321c8e07", - "sha256:f192cfb06836b57ac9b12dda59cac5f4463de62c3fb054774e9e5104b2e8b714" + "sha256:c923809f4f3542e86b18cbeb325b08800461b4af38366a8950d26afc15431e35", + "sha256:ccd58558fad2a0003d1e0c026b8bfb5e35ec1600aa06ba2c2260daa5c64a2299" ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.6.8" + "version": "==0.6.9" }, "appdirs": { "hashes": [ @@ -2145,10 +2181,10 @@ }, "asttokens": { "hashes": [ - "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3", - "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c" + "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", + "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69" ], - "version": "==2.2.1" + "version": "==2.4.0" }, "async-timeout": { "hashes": [ @@ -2168,10 +2204,10 @@ }, "autobahn": { "hashes": [ - "sha256:c5ef8ca7422015a1af774a883b8aef73d4954c9fcd182c9b5244e08e973f7c3a" + "sha256:ec9421c52a2103364d1ef0468036e6019ee84f71721e86b36fe19ad6966c1181" ], - "markers": "python_version >= '3.7'", - "version": "==23.1.2" + "markers": "python_version >= '3.9'", + "version": "==23.6.2" }, "automat": { "hashes": [ @@ -2197,110 +2233,130 @@ }, "bitarray": { "hashes": [ - "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", - "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", - "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", - "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", - "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", - "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", - "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", - "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", - "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", - "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", - "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", - "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", - "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", - "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", - "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", - "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", - "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", - "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", - "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", - "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", - "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", - "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", - "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", - "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", - "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", - "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", - "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", - "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", - "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", - "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", - "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", - "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", - "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", - "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", - "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", - "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", - "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", - "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", - "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", - "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", - "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", - "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", - "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", - "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", - "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", - "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", - "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", - "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", - "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", - "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", - "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", - "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", - "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", - "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", - "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", - "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", - "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", - "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", - "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", - "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", - "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", - "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", - "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", - "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", - "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", - "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", - "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", - "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", - "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", - "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", - "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", - "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", - "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", - "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", - "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", - "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", - "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", - "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", - "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", - "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", - "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", - "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", - "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", - "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", - "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", - "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", - "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", - "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", - "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", - "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", - "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", - "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", - "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", - "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", - "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", - "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", - "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", - "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", - "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", - "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", - "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", - "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" - ], - "version": "==2.8.1" + "sha256:00bad63ef6f9d22ba36b01b89167176a451ea22a916d1dfa77d73e0298f1d1f9", + "sha256:05d84765bbfd0aa10890c765c56c917c237987325c4e327f3c0febbfc34365c8", + "sha256:06d9de5db244c6e45a5318713367765de0a57d82ad616869a004a710a95541e9", + "sha256:08ad70c1555d9622cecd8f1b132a5341d183a9161aba93cc9739bbaabe4220b0", + "sha256:095851409e0db75b1416c8c3e24957135d5a2a206790578e43739e92a00c17c4", + "sha256:09d729420b8edc4d8a23a518ae4553074a0054d0441c1a461b425c2f033fab5e", + "sha256:0bbeb7120ec1a9b26ce423e74cad7b414cea9e35f8e05599e3b3dceb87f4d1b6", + "sha256:0c8716b4c45fb128cd4da143749e276f150ecb0acb711f4969d7e7ebc9b2a675", + "sha256:0f45f7d58c399e90ee3bddff4f3e2f53ff95c948b2d43de304266153ebd1d778", + "sha256:111bf9913ebee4630e2cb43b61d0abb39813b231262b114e5268cd6a405a22b9", + "sha256:1474db8c4297026e1daa1699e70e25e56dff91104fe025b1a9804332f2737604", + "sha256:14bc38ced7edffff25ee748c1eabc530624c9af68f86322b030b11b7918b966f", + "sha256:172169099797f1ec469b0aadb00c653193a74757f99312c9c17dc1a18d23d972", + "sha256:188f5780f1cfbeba0c3ddb1aa3fa0415ab1a8aa04e9e89f70ad5403197013437", + "sha256:1b734b074a09b1b2e1de7df423565412d9213faefa8ca422f32be756b189f729", + "sha256:1c28b52e59a5e6aa00a929b35b04473bd479a74237ab1170c573c49e8aca61fe", + "sha256:1cc29909e4cef05d5e49f5d77ace1dc49311c7791734a048b690521c76b4b7a0", + "sha256:215a5bf8fdcbed700cc8782d4044e1f036606d5c321710d83e8da6d0fdfe07d5", + "sha256:225e19d37b234d4d721557434b7d5590cd63b6342492b689e2d694d44d7cc537", + "sha256:232e8faa8e624f3eb0552a636ebe745cee00480e0e56ad62f17808d281838f2e", + "sha256:23fae6a5a1403d16592b8823d5dea93f738c6e217a1e1bb0eefad242fb03d47f", + "sha256:27428d7b0e706307d0c697f81599e7af4f52e5873ea6bc269eae3604b16b81fe", + "sha256:280809e56a7098f48165ce134222098e4cfe7084b10d69bbc31367942e541dfd", + "sha256:2b2dc483ada55ef35990b67dc0e7a779f0b2ce79d156e452dc8b835b03c0dca9", + "sha256:2b3c7aa2c9a6533dc7234d2a303efdcb9df3f4ac4d0919ec1caf568868f12a0a", + "sha256:2c39d1cb04fc277701de6fe2119cc71facc4aff2ca0414b2e326aec337fa1ab4", + "sha256:2cb8d08330d250df47088c13683322083afbdfafdc31df205616506d6b9f068f", + "sha256:2e456150af62ee1f24a0c9976947629bfb80d80b4fbd37aa901cf794db6ba9b0", + "sha256:316147fb62c810a7667277e5ae7bb75b2871c32d2c398aeb4503cbd4cf3315e7", + "sha256:351a4fed240728dcc96966e0c4cfd3dce870525377a1cb5afac8e5cfe116ff7b", + "sha256:36bdde1aba78e4a3a6ce5cbebd0a6bc967b0c3fbd8bd99a197dcc17d654f423c", + "sha256:384be6b7df8fb6a93ddd88d4184094f2ba4f1d07c30dcd4ae164d185d31a2af6", + "sha256:3caf4ca668854bb23db4b65af0068238677b5791bcc45694bf8990f3e26e85c9", + "sha256:3dde123ce85d1ba99d9bdf44b1b3174fa22bc8fb10004e0d72bb661a0444c1a9", + "sha256:3ecdd528268478efeb78ed0132b01104bda6cd8f10c8a57708fc87b1add77e4d", + "sha256:420aa610fe392c4ee700e474673276bb4f3c4f091d001f58b1f018bf650840c1", + "sha256:440c537fdf2eaee7fdd41fb1dce5701c490c1964fdb74225b10b49a7c45bc7b4", + "sha256:462c9425fbc5315cbc20a72ca62558e5545bb0f6dc9355e2fa96fa747e9b1a80", + "sha256:4963982d5da0825768f9a80760a8560c3e4cf711a9a7ea06ff9bcb7bd250b131", + "sha256:4bbfe4474d3470c724e283bd1fe8ee9ab3cb6a4c378112926f45d41e326a7622", + "sha256:4db2e0f58153a376d9a14873e342d507ca32640640284cddf3c1e74a65929477", + "sha256:51d45d56be14b69720d11a8c61e101d86a65dc8a3a9f356bbe4d98cf4f3c5617", + "sha256:525eda30469522cd840a11ba866d0616c132f6c4be8966a297d7545e97fcb822", + "sha256:532d63c54159f7e0fb520e2f72ef596493bc43810eaa75fac7a188e898ab593b", + "sha256:5569c8314335e92570c471d60b4b03eb2a4467864805a560d133d24b27b3961a", + "sha256:56764825f64ab983d32b8c1d4ee483f415f2559e59388ba266a9fcafc44305bf", + "sha256:56f19ccba8a6ddf1382b0fb4fb8d4e1330e4a1b148e5d198f0981ba2a97c3492", + "sha256:5819b95d0ccce864066f062d2329363ae8a64b9c3d076d039c75ffc9204c2a12", + "sha256:599b04b04eb1b5b964a35986bea2bc4381145836fe550cc33c40a796b855b985", + "sha256:5f2a96c5b40727bc21a695d3a106f49e88572fa11427bf2193cabd99e624c901", + "sha256:608385f07a4b0391d4982d1efb83ad70920cd8ca495a7868e44d2a4511cbf84e", + "sha256:6abf2593b91e36f1cb1c40ac895993c7d2eb30d3f1cb0954a80e5f13697b6b69", + "sha256:6d79fd3c58a4dc71ffd0fc55982a9a2079fe94c76ccff2777092f6107d6a049a", + "sha256:6f699bf2cb223aeec04a106003bd2bf8a4fc6d4c5eddf79cacecb6b267657ac5", + "sha256:70cebcf9bc345ac1e034fa781eac3619323eaf87f7bbe26f0e28850beb6f5634", + "sha256:726a598e34657772e5f131115741ea8709e9b55fa35d63c4717bc16b2a737d38", + "sha256:76a4faef4c31953aa7b9ebe00d162f7ce9bc03fc8d423ab2dc690a11d7520a8e", + "sha256:7706336bd15acf4e42300579e42bef742c01a4eb202998f6c20c443a2ce5fd60", + "sha256:7965108069f9731306a882872c23ad4f5a8531668e82b27932a19814c52a8dd8", + "sha256:79fde5b27e35aedd958f5fb58ebabce47d7eddae5a5e3774088c30c9610195ef", + "sha256:8528c59d3d3df6618777892b60435022d8917de9ea32933d439c7ffd24437237", + "sha256:85b504f233f0484e9a74df4f286a9ae56fbbe2a648c45726761cf7b6f072cdc8", + "sha256:88c2d427ab1b20f220c1d53171b0691faa8f0a219367d84e859f1001e90ceefc", + "sha256:890355bf6ba3dc04b5a23d1328eb1f6062165e6262197cebc9acfebdcb23144c", + "sha256:8a35e308c23f039064600108fc1c8416bd102bc3cf3a6915761a9f7c801237e0", + "sha256:8bb60d5a948f00901da1d7e4953189259b3c7ef79391fecd6f18db3f48a036fe", + "sha256:8d1356c86eefbde3fe8a3c39fb81bbc8b16acc8e442e191408042e8b1d6904e3", + "sha256:9014660472f2080d550157164cc5f9376245a34a0ab877b82b95c1f894af5b28", + "sha256:932f7b77750dff7140522dc97dfd94533a599ef1c5d0be3733f556fd44a68821", + "sha256:945e97ad2bbf7885426f39641a735a31fd4ca2e84e4d0cd271d9880372d6eae1", + "sha256:97e658a3793478d6bca684f47f29f62542312683687bc045dc3cb588160e74b3", + "sha256:99196b4730d887a4bc578f05039b55dc57b131c81b5a5e03efa619b587bdf293", + "sha256:9e895cc3e5ffee269dd9866097e227a68022ef2b78d627a6ed737534d0c88c14", + "sha256:9f6f245d4a5e707d48274f38551b654a36db4fb83437c98be00d2019263aa364", + "sha256:a1f00c328b8dae1828844bac019dfe425d10a2043cc70e2f967224c5392d19ad", + "sha256:a4b43949477dc2b0d3e1d8b7c413ed74f515cef01954cdcc3fb1e2dcc49f2aff", + "sha256:a610426251d1340baa4d8b7942d2cbfe6a1e20b92c66817ab582e0d341185ab5", + "sha256:a6ae5c18b9a70cb0ae576a8a3c8a9a0659356c016b49cc6b263dd987d344f30d", + "sha256:a7bb559b68eb9cb3c4f867eb9fb39a696c4da70a41fad37b410bd0c7b426a8ce", + "sha256:ab2e03dd140ab93b91f94a785d1cd6082d5ab53ab6ec958726efa0ad17f7b87a", + "sha256:ab87c4c50d65932788d058adbbd28a209144523ffacbab81dd41582ffce26af9", + "sha256:ad1563f11dd70cb1684cfe841e4cf7f35d4f65769de21d12b72cf773a7932615", + "sha256:ad8f8c39c8df184e346184699783f105755003662f0dbe1233d9d9849650ab5f", + "sha256:b007aaf5810c708c5a2778e371aa546d7084e4e9f82f65865b2ce5a182376f42", + "sha256:b088f06d9e2f523683ae363e227173ac454dbb56c938c6d42791fdd78bad8da7", + "sha256:b499d93fa31a73e31ee62f2cbe07e4df833fd7151734b8f07c48ffe3e4547ec5", + "sha256:b6df948da34b5fb949698092573d798c76c54f2f2188db59276d599075f9ed04", + "sha256:b71d82e3f001bcb53463023f7f37e223fff56cf048f577c6d85597db94770f10", + "sha256:b85929db81105c06e8292c05cac093068e86464555c628c03f99c9f8090d68d4", + "sha256:b9b3c27aeea1752f0c1df1e29115e4b6f0249173d71e53c5f7e2c821706f028b", + "sha256:bb337ffa10824fa2025c4b1c06a2d809dbed4a4bf9e3ffb262676d084c4e0c50", + "sha256:bd2a098250c683d248a6490ac437ed56f7164d2151572231bd26c76bfe111b11", + "sha256:c35bb5fe018fd9c42be3c28e74dc7dcfae471c3c6689679dbd0bd1d6dc0f51b7", + "sha256:c384c49ce52b82d5b0355000b8aeb7e3a7654997916c1e6fd9d29697edda1076", + "sha256:c3d51ab9f3d5b9a10295abe480c50bf74ee5bf3d984c4cee77e493e575acc869", + "sha256:c3d9730341c825eb167ca06c9dddf6ad4d1b4e71ea7da73cc8c5139fcb5e14ca", + "sha256:c44b3022115eb1697315bc51aeadbade1a19d7188bcda66c52d91209cf2963ca", + "sha256:c7b7be4bff27d7ce6a81d3993755371b5f5b42436afa151868e8fd599acbab19", + "sha256:cb8566b535bc4ebb26247d6f636a27bb0038bc93fa7e55121628f5cd6b0906ac", + "sha256:cb941981676dc7859d53199a10a33ca56a3146cce6a45bc6ad70572c1147157d", + "sha256:cba09dfd3aea2addc994eb21a861c3cea2d68141bb7ebe68b0e94c73405540f9", + "sha256:d0d0923087fe1f2d85daa68463d221e90b4b8ed0356480c887eea90b2a2cc7ee", + "sha256:d2baf7ec353fa64917045b3efe26e7c12ce0d7b4d120c3773a612dce54f91585", + "sha256:d7e3ab9870c496e5a058436bf4d96ed111ca6154c8ef8147b70c44c188d6fb2c", + "sha256:dd074b06be9484040acb4c2c0462c4d19a43e377716be7ba10440f51a57bb98c", + "sha256:dd351b8fbc77c2e2ebc3eeadc0cf72bd5024a43bef5a847697e2b076d1201636", + "sha256:de4953b6b1e19dabd23767bd1f83f1cf73978372189dec0e2dd8b3d6971100d6", + "sha256:e6765c47b487341837b3731cca3c8033b971ee082f6ab41cb430aa3447686eec", + "sha256:e678696bb613f0344b79be385747aae705b327a9a32ace45a353dd16497bc719", + "sha256:e883919cea8e446c5c49717a7ce5c93a016a02b9429b81d64b9ab1d80fc12e42", + "sha256:e8963d7ac292f41654fa7cbc1a34efdb09e5a42399b2e3689c3fd5b8b4e0fe16", + "sha256:e9c54136c9fab2cefe9801e336b8a3aa7299bcfe7f387379cc6394ad1d5a484b", + "sha256:ee779a291330287b341044635fce2979176d113b0dcce0308dc5d62da7951eec", + "sha256:ef23f62b3abd287cf368341540ef2a81c86b48de9d488e182e63fe24ac165538", + "sha256:f0b54b95e39036c116ffc057b3f56f6084ce88822de3d5d1f57fa38554ccf5c1", + "sha256:f7c5745e0f96c2c16c03c7540dbe26f3b62ddee63059be0a014156933f054024", + "sha256:f90b2f44b5b23364d5fbade2c34652e15b1fcfe813c46f828e008f68a709160f", + "sha256:fa49f6cfcae4305d8cff028dc9c9a881189a38f7ca43c085aef894c58cb6fbde", + "sha256:fb8b727cd9ddff848c5f73e65470abb110f026beab403bcebbd74e7439b9bd8f", + "sha256:fea9354b7169810e2bdd6f3265ff128b564a25d38479b9ad0a9c5776e4fd0cfc", + "sha256:ff31bef13fd278446b6d1969a46db9f02c36fd905f3e75878f0fe17271f7d897", + "sha256:ff3e182c766cd6f302e99e0d8e44927d533356e9d6ac93fcd09987ebead467aa" + ], + "version": "==2.8.2" }, "bytestring-splitter": { "hashes": [ @@ -2321,77 +2377,66 @@ "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==2023.7.22" }, "cffi": { "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" - ], - "version": "==1.15.1" + "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", + "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", + "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", + "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", + "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", + "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", + "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", + "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", + "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", + "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", + "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", + "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", + "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", + "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", + "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", + "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", + "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", + "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", + "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", + "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", + "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", + "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", + "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", + "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", + "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", + "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", + "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", + "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", + "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", + "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", + "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", + "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", + "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", + "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", + "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", + "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", + "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", + "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", + "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", + "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", + "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", + "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", + "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", + "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", + "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", + "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", + "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", + "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", + "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", + "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", + "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", + "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" + ], + "markers": "python_version >= '3.8'", + "version": "==1.16.0" }, "cfgv": { "hashes": [ @@ -2448,6 +2493,9 @@ "version": "==15.1.0" }, "coverage": { + "extras": [ + "toml" + ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -2501,36 +2549,37 @@ "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==6.5.0" }, "cryptography": { "hashes": [ - "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306", - "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84", - "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47", - "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d", - "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116", - "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207", - "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81", - "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087", - "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd", - "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507", - "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858", - "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae", - "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34", - "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906", - "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd", - "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922", - "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7", - "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4", - "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574", - "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1", - "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c", - "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e", - "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de" + "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf", + "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84", + "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e", + "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8", + "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7", + "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1", + "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88", + "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86", + "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179", + "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81", + "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20", + "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548", + "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d", + "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d", + "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5", + "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1", + "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147", + "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936", + "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797", + "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696", + "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72", + "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da", + "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723" ], "markers": "python_version >= '3.7'", - "version": "==41.0.3" + "version": "==41.0.5" }, "cytoolz": { "hashes": [ @@ -2628,7 +2677,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "implementation_name == 'cpython'", "version": "==0.12.2" }, "dataclassy": { @@ -2636,7 +2685,6 @@ "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" ], - "markers": "python_version >= '3.6'", "version": "==0.11.1" }, "dateparser": { @@ -2652,7 +2700,6 @@ "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" ], - "markers": "python_version >= '3.5'", "version": "==5.1.1" }, "deprecated": { @@ -2660,7 +2707,6 @@ "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.14" }, "distlib": { @@ -2675,23 +2721,22 @@ "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" ], - "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.2.1" }, "eth-abi": { "hashes": [ - "sha256:0d50469de2f9948bacd764fc3f8f337a090bbb6ac3a759ef22c094bf56c1e6d9", - "sha256:a9adae5e0c2b9a35703b76856d6db3a0498effdf1243011b2d56280165db1cdd" + "sha256:60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0", + "sha256:abd83410a5326145bf178675c276de0ed154f6dc695dcad1beafaa44d97f44ae" ], "markers": "python_version < '4' and python_full_version >= '3.7.2'", - "version": "==4.2.0" + "version": "==4.2.1" }, "eth-account": { "hashes": [ "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" ], - "markers": "python_version < '4' and python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6' and python_version < '4'", "version": "==0.8.0" }, "eth-ape": { @@ -2699,7 +2744,6 @@ "sha256:78001209dfdf8c7973c649b8cbba73d3399cd649aeee4223d0b29078ae997201", "sha256:f6c5137a10edcc2a37a8f8736882e412b2fb3b326d00d8128538e73dc031f89b" ], - "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.6.19" }, "eth-bloom": { @@ -2711,6 +2755,9 @@ "version": "==2.0.0" }, "eth-hash": { + "extras": [ + "pycryptodome" + ], "hashes": [ "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e", "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0" @@ -2750,58 +2797,47 @@ }, "eth-typing": { "hashes": [ - "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5", - "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f" + "sha256:9d80c7d112a8774bddeb7278b1bc2f17ca4c062825476ce6bc9cba4d47956010", + "sha256:e21a8b0688581a6765f72fa184d86d06c3949e354d4af5293798abc0b4255989" ], "markers": "python_version < '4' and python_full_version >= '3.7.2'", - "version": "==3.4.0" + "version": "==3.5.1" }, "eth-utils": { "hashes": [ - "sha256:7f1a9e10400ee332432a778c321f446abaedb8f538df550e7c9964f446f7e265", - "sha256:d6e107d522f83adff31237a95bdcc329ac0819a3ac698fe43c8a56fd80813eab" + "sha256:085b42f5745f46d22a186fbd873d79f66a79171c02eccd78792d1dddd672f324", + "sha256:d539ac0bb1e759abb39f71efbcd77301eede86b4bf449278e4ad2fbf10aac67a" ], "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.2.0" + "version": "==2.3.0" }, "ethpm-types": { "hashes": [ - "sha256:6d18b5e37f77d6d5326ee6e5d87caecf9ccb5cba2efd978e22dac3a945b7b169", - "sha256:93e393583bf7271b312430c9ec864bec07a78794d922875d44fe3240bf536f06" + "sha256:1fcf4fd551133ec917b99406b206713f34112f5e3c030ece5dcb3e5ed8562ee3", + "sha256:deaa9ec75cc8d02a047d5a2b065bd038ee6654ba2ffcf6e4c969181eacfdffc2" ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.5.4" + "version": "==0.5.8" }, "evm-trace": { "hashes": [ - "sha256:0bc0cee185807b8e950d3d3009e5e8680e252054e11611694d632416c8b9d96a", - "sha256:34fbdfdef480066602d8dd8334fd72c6c7dab3d272c1371b7842bc2199918124" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.1.0a24" - }, - "exceptiongroup": { - "hashes": [ - "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", - "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" + "sha256:0e5b6d6977bf42c3a5157ee3c5cdc5e57bd23827855283b516fa4e68d09e32e2", + "sha256:5cd30ba28dcb2c7ba2461c124ad9059629c78bd0781f5c3f2a9939427f50cb47" ], - "markers": "python_version >= '3.7'", - "version": "==1.1.3" + "version": "==0.1.0a25" }, "executing": { "hashes": [ - "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", - "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" + "sha256:06df6183df67389625f4e763921c6cf978944721abf3e714000200aab95b0657", + "sha256:0ff053696fdeef426cda5bd18eacd94f82c91f49823a2e9090124212ceea9b08" ], - "version": "==1.2.0" + "version": "==2.0.0" }, "filelock": { "hashes": [ - "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d", - "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb" + "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", + "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd" ], - "markers": "python_version >= '3.8'", - "version": "==3.12.3" + "version": "==3.12.4" }, "flask": { "hashes": [ @@ -2880,68 +2916,70 @@ }, "greenlet": { "hashes": [ - "sha256:0a9dfcadc1d79696e90ccb1275c30ad4ec5fd3d1ab3ae6671286fac78ef33435", - "sha256:0f313771cb8ee0a04dfdf586b7d4076180d80c94be09049daeea018089b5b957", - "sha256:17503397bf6cbb5e364217143b6150c540020c51a3f6b08f9a20cd67c25e2ca8", - "sha256:180ec55cb127bc745669eddc9793ffab6e0cf7311e67e1592f183d6ca00d88c1", - "sha256:1b3f3568478bc21b85968e8038c4f98f4bf0039a692791bc324b5e0d1522f4b1", - "sha256:1bd4ea36f0aeb14ca335e0c9594a5aaefa1ac4e2db7d86ba38f0be96166b3102", - "sha256:21ebcb570e0d8501457d6a2695a44c5af3b6c2143dc6644ec73574beba067c90", - "sha256:24071eee113d75fedebaeb86264d94f04b5a24e311c5ba3e8003c07d00112a7e", - "sha256:270432cfdd6a50016b8259b3bbf398a3f7c06a06f2c68c7b93e49f53bc193bcf", - "sha256:271ed380389d2f7e4c1545b6e0837986e62504ab561edbaff05da9c9f3f98f96", - "sha256:2840187a94e258445e62ff1545e34f0b1a14aef4d0078e5c88246688d2b6515e", - "sha256:2cda110faee67613fed221f90467003f477088ef1cc84c8fc88537785a5b4de9", - "sha256:2e160a65cc6023a237be870f2072513747d512a1d018efa083acce0b673cccc0", - "sha256:2fcf7af83516db35af3d0ed5d182dea8585eddd891977adff1b74212f4bfd2fd", - "sha256:36cebce1f30964d5672fd956860e7e7b69772da69658d5743cb676b442eeff36", - "sha256:42bfe67824a9b53e73f568f982f0d1d4c7ac0f587d2e702a23f8a7b505d7b7c2", - "sha256:450a7e52a515402fd110ba807f1a7d464424bfa703be4effbcb97e1dfbfcc621", - "sha256:463d63ca5d8c236788284a9a44b9715372a64d5318a6b5eee36815df1ea0ba3d", - "sha256:4d0c0ffd732466ff324ced144fad55ed5deca36f6036c1d8f04cec69b084c9d6", - "sha256:4ff2a765f4861fc018827eab4df1992f7508d06c62de5d2fe8a6ac2233d4f1d0", - "sha256:53abf19b7dc62795c67b8d0a3d8ef866db166b21017632fff2624cf8fbf3481c", - "sha256:5552d7be37d878e9b6359bbffa0512d857bb9703616a4c0656b49c10739d5971", - "sha256:585810056a8adacd3152945ebfcd25deb58335d41f16ae4e0f3d768918957f9a", - "sha256:5942b1d6ba447cff1ec23a21ec525dde2288f00464950bc647f4e0f03bd537d1", - "sha256:5c355c99be5bb23e85d899b059a4f22fdf8a0741c57e7029425ee63eb436f689", - "sha256:5f61df4fe07864561f49b45c8bd4d2c42e3f03d2872ed05c844902a58b875028", - "sha256:665942d3a954c3e4c976581715f57fb3b86f4cf6bae3ac30b133f8ff777ac6c7", - "sha256:68368e908f14887fb202a81960bfbe3a02d97e6d3fa62b821556463084ffb131", - "sha256:6aac94ff957b5dea0216af71ab59c602e1b947b394e4f5e878a5a65643090038", - "sha256:889934aa8d72b6bfc46babd1dc4b817a56c97ec0f4a10ae7551fb60ab1f96fae", - "sha256:a00550757fca1b9cbc479f8eb1cf3514dbc0103b3f76eae46341c26ddcca67a9", - "sha256:a4a2d6ed0515c05afd5cc435361ced0baabd9ba4536ddfe8ad9a95bcb702c8ce", - "sha256:a8dd92fd76a61af2abc8ccad0c6c6069b3c4ebd4727ecc9a7c33aae37651c8c7", - "sha256:ab81f9ff3e3c2ca65e824454214c10985a846cd9bee5f4d04e15cd875d9fe13b", - "sha256:ac10196b8cde7a082e4e371ff171407270d3337c8d57ed43030094eb01d9c95c", - "sha256:b767930af686551dc96a5eb70af3736709d547ffa275c11a5e820bfb3ae61d8d", - "sha256:b9a1f4d256b81f59ba87bb7a29b9b38b1c018e052dba60a543cb0ddb5062d159", - "sha256:ba94c08321b5d345100fc64eb1ab235f42faf9aabba805cface55ebe677f1c2c", - "sha256:bab71f73001cd15723c4e2ca398f2f48e0a3f584c619eefddb1525e8986e06eb", - "sha256:bce5cf2b0f0b29680396c5c98ab39a011bd70f2dfa8b8a6811a69ee6d920cf9f", - "sha256:c02e514c72e745e49a3ae7e672a1018ba9b68460c21e0361054e956e5d595bc6", - "sha256:c3fb459ced6c5e3b2a895f23f1400f93e9b24d85c30fbe2d637d4f7706a1116b", - "sha256:cd31ab223e43ac64fd23f8f5dad249addadac2a459f040546200acbf7e84e353", - "sha256:ce70aa089ec589b5d5fab388af9f8c9f9dfe8fe4ad844820a92eb240d8628ddf", - "sha256:d47b2e1ad1429da9aa459ef189fbcd8a74ec28a16bc4c3f5f3cf3f88e36535eb", - "sha256:d61bad421c1f496f9fb6114dbd7c30a1dac0e9ff90e9be06f4472cbd8f7a1704", - "sha256:d7ba2e5cb119eddbc10874b41047ad99525e39e397f7aef500e6da0d6f46ab91", - "sha256:dde0ab052c7a1deee8d13d72c37f2afecee30ebdf6eb139790157eaddf04dd61", - "sha256:df34b52aa50a38d7a79f3abc9fda7e400791447aa0400ed895f275f6d8b0bb1f", - "sha256:e0fc20e6e6b298861035a5fc5dcf9fbaa0546318e8bda81112591861a7dcc28f", - "sha256:e20d5e8dc76b73db9280464d6e81bea05e51a99f4d4dd29c5f78dc79f294a5d3", - "sha256:e31d1a33dc9006b278f72cb0aacfe397606c2693aa2fdc0c2f2dcddbad9e0b53", - "sha256:e3a99f890f2cc5535e1b3a90049c6ca9ff9da9ec251cc130c8d269997f9d32ee", - "sha256:e7b192c3df761d0fdd17c2d42d41c28460f124f5922e8bd524018f1d35610682", - "sha256:ed0f4fad4c3656e34d20323a789b6a2d210a6bb82647d9c86dded372f55c58a1", - "sha256:f34ec09702be907727fd479046193725441aaaf7ed4636ca042734f469bb7451", - "sha256:f3530c0ec1fc98c43d5b7061781a8c55bd0db44f789f8152e19d9526cbed6021", - "sha256:f5672082576d0e9f52fa0fa732ff57254d65faeb4a471bc339fe54b58b3e79d2", - "sha256:ffb9f8969789771e95d3c982a36be81f0adfaa7302a1d56e29f168ca15e284b8" + "sha256:02a807b2a58d5cdebb07050efe3d7deaf915468d112dfcf5e426d0564aa3aa4a", + "sha256:0b72b802496cccbd9b31acea72b6f87e7771ccfd7f7927437d592e5c92ed703c", + "sha256:0d3f83ffb18dc57243e0151331e3c383b05e5b6c5029ac29f754745c800f8ed9", + "sha256:10b5582744abd9858947d163843d323d0b67be9432db50f8bf83031032bc218d", + "sha256:123910c58234a8d40eaab595bc56a5ae49bdd90122dde5bdc012c20595a94c14", + "sha256:1482fba7fbed96ea7842b5a7fc11d61727e8be75a077e603e8ab49d24e234383", + "sha256:19834e3f91f485442adc1ee440171ec5d9a4840a1f7bd5ed97833544719ce10b", + "sha256:1d363666acc21d2c204dd8705c0e0457d7b2ee7a76cb16ffc099d6799744ac99", + "sha256:211ef8d174601b80e01436f4e6905aca341b15a566f35a10dd8d1e93f5dbb3b7", + "sha256:269d06fa0f9624455ce08ae0179430eea61085e3cf6457f05982b37fd2cefe17", + "sha256:2e7dcdfad252f2ca83c685b0fa9fba00e4d8f243b73839229d56ee3d9d219314", + "sha256:334ef6ed8337bd0b58bb0ae4f7f2dcc84c9f116e474bb4ec250a8bb9bd797a66", + "sha256:343675e0da2f3c69d3fb1e894ba0a1acf58f481f3b9372ce1eb465ef93cf6fed", + "sha256:37f60b3a42d8b5499be910d1267b24355c495064f271cfe74bf28b17b099133c", + "sha256:38ad562a104cd41e9d4644f46ea37167b93190c6d5e4048fcc4b80d34ecb278f", + "sha256:3c0d36f5adc6e6100aedbc976d7428a9f7194ea79911aa4bf471f44ee13a9464", + "sha256:3fd2b18432e7298fcbec3d39e1a0aa91ae9ea1c93356ec089421fabc3651572b", + "sha256:4a1a6244ff96343e9994e37e5b4839f09a0207d35ef6134dce5c20d260d0302c", + "sha256:4cd83fb8d8e17633ad534d9ac93719ef8937568d730ef07ac3a98cb520fd93e4", + "sha256:527cd90ba3d8d7ae7dceb06fda619895768a46a1b4e423bdb24c1969823b8362", + "sha256:56867a3b3cf26dc8a0beecdb4459c59f4c47cdd5424618c08515f682e1d46692", + "sha256:621fcb346141ae08cb95424ebfc5b014361621b8132c48e538e34c3c93ac7365", + "sha256:63acdc34c9cde42a6534518e32ce55c30f932b473c62c235a466469a710bfbf9", + "sha256:6512592cc49b2c6d9b19fbaa0312124cd4c4c8a90d28473f86f92685cc5fef8e", + "sha256:6672fdde0fd1a60b44fb1751a7779c6db487e42b0cc65e7caa6aa686874e79fb", + "sha256:6a5b2d4cdaf1c71057ff823a19d850ed5c6c2d3686cb71f73ae4d6382aaa7a06", + "sha256:6a68d670c8f89ff65c82b936275369e532772eebc027c3be68c6b87ad05ca695", + "sha256:6bb36985f606a7c49916eff74ab99399cdfd09241c375d5a820bb855dfb4af9f", + "sha256:73b2f1922a39d5d59cc0e597987300df3396b148a9bd10b76a058a2f2772fc04", + "sha256:7709fd7bb02b31908dc8fd35bfd0a29fc24681d5cc9ac1d64ad07f8d2b7db62f", + "sha256:8060b32d8586e912a7b7dac2d15b28dbbd63a174ab32f5bc6d107a1c4143f40b", + "sha256:80dcd3c938cbcac986c5c92779db8e8ce51a89a849c135172c88ecbdc8c056b7", + "sha256:813720bd57e193391dfe26f4871186cf460848b83df7e23e6bef698a7624b4c9", + "sha256:831d6f35037cf18ca5e80a737a27d822d87cd922521d18ed3dbc8a6967be50ce", + "sha256:871b0a8835f9e9d461b7fdaa1b57e3492dd45398e87324c047469ce2fc9f516c", + "sha256:952256c2bc5b4ee8df8dfc54fc4de330970bf5d79253c863fb5e6761f00dda35", + "sha256:96d9ea57292f636ec851a9bb961a5cc0f9976900e16e5d5647f19aa36ba6366b", + "sha256:9a812224a5fb17a538207e8cf8e86f517df2080c8ee0f8c1ed2bdaccd18f38f4", + "sha256:9adbd8ecf097e34ada8efde9b6fec4dd2a903b1e98037adf72d12993a1c80b51", + "sha256:9de687479faec7db5b198cc365bc34addd256b0028956501f4d4d5e9ca2e240a", + "sha256:a048293392d4e058298710a54dfaefcefdf49d287cd33fb1f7d63d55426e4355", + "sha256:aa15a2ec737cb609ed48902b45c5e4ff6044feb5dcdfcf6fa8482379190330d7", + "sha256:abe1ef3d780de56defd0c77c5ba95e152f4e4c4e12d7e11dd8447d338b85a625", + "sha256:ad6fb737e46b8bd63156b8f59ba6cdef46fe2b7db0c5804388a2d0519b8ddb99", + "sha256:b1660a15a446206c8545edc292ab5c48b91ff732f91b3d3b30d9a915d5ec4779", + "sha256:b505fcfc26f4148551826a96f7317e02c400665fa0883fe505d4fcaab1dabfdd", + "sha256:b822fab253ac0f330ee807e7485769e3ac85d5eef827ca224feaaefa462dc0d0", + "sha256:bdd696947cd695924aecb3870660b7545a19851f93b9d327ef8236bfc49be705", + "sha256:bdfaeecf8cc705d35d8e6de324bf58427d7eafb55f67050d8f28053a3d57118c", + "sha256:be557119bf467d37a8099d91fbf11b2de5eb1fd5fc5b91598407574848dc910f", + "sha256:c6b5ce7f40f0e2f8b88c28e6691ca6806814157ff05e794cdd161be928550f4c", + "sha256:c94e4e924d09b5a3e37b853fe5924a95eac058cb6f6fb437ebb588b7eda79870", + "sha256:cc3e2679ea13b4de79bdc44b25a0c4fcd5e94e21b8f290791744ac42d34a0353", + "sha256:d1e22c22f7826096ad503e9bb681b05b8c1f5a8138469b255eb91f26a76634f2", + "sha256:d5539f6da3418c3dc002739cb2bb8d169056aa66e0c83f6bacae0cd3ac26b423", + "sha256:d55db1db455c59b46f794346efce896e754b8942817f46a1bada2d29446e305a", + "sha256:e09dea87cc91aea5500262993cbd484b41edf8af74f976719dd83fe724644cd6", + "sha256:e52a712c38e5fb4fd68e00dc3caf00b60cb65634d50e32281a9d6431b33b4af1", + "sha256:e693e759e172fa1c2c90d35dea4acbdd1d609b6936115d3739148d5e4cd11947", + "sha256:ecf94aa539e97a8411b5ea52fc6ccd8371be9550c4041011a091eb8b3ca1d810", + "sha256:f351479a6914fd81a55c8e68963609f792d9b067fb8a60a042c585a621e0de4f", + "sha256:f47932c434a3c8d3c86d865443fadc1fbf574e9b11d6650b656e602b1797908a" ], - "markers": "python_version >= '3.7'", - "version": "==3.0.0a1" + "version": "==3.0.0" }, "hendrix": { "hashes": [ @@ -2975,19 +3013,18 @@ }, "hypothesis": { "hashes": [ - "sha256:229af1b2a9cbe291d5f984f1e08fca9c5ee71487d4e74fd74e912ae1743fe0b5", - "sha256:427e4bfd3dee94bc6bbc3a51c0b17f0d06d5bb966e944e03daee894e70ef3920" + "sha256:b45b8a651dfe4ce26f900ce6ccbce997d4fbec39ba03dd243516bf81fea8c0b8", + "sha256:f4c2c004b9ec3e0e25332ad2cb6b91eba477a855557a7b5c6e79068809ff8b51" ], - "markers": "python_version >= '3.8'", - "version": "==6.83.0" + "version": "==6.88.1" }, "identify": { "hashes": [ - "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733", - "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba" + "sha256:afe67f26ae29bab007ec21b03d4114f41316ab9dd15aa8736a167481e108da54", + "sha256:f302a4256a15c849b91cfcdcec052a8ce914634b2f77ae87dad29cd749f2d88d" ], "markers": "python_version >= '3.8'", - "version": "==2.5.27" + "version": "==2.5.30" }, "idna": { "hashes": [ @@ -3096,7 +3133,6 @@ "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" ], - "markers": "python_version >= '3.8'", "version": "==6.8.0" }, "incremental": { @@ -3111,16 +3147,14 @@ "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" ], - "markers": "python_version >= '3.7'", "version": "==2.0.0" }, "ipython": { "hashes": [ - "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea", - "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc" + "sha256:0852469d4d579d9cd613c220af7bf0c9cc251813e12be647cb9d463939db9b1e", + "sha256:ad52f58fca8f9f848e256c629eff888efc0528c12fe0f8ec14f33205f23ef938" ], - "markers": "python_version >= '3.8'", - "version": "==8.12.2" + "version": "==8.16.1" }, "itsdangerous": { "hashes": [ @@ -3132,27 +3166,26 @@ }, "jedi": { "hashes": [ - "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4", - "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e" + "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", + "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0" ], - "markers": "python_version >= '3.6'", - "version": "==0.19.0" + "version": "==0.19.1" }, "jinja2": { "hashes": [ "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==3.0.3" }, "jsonschema": { "hashes": [ - "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb", - "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f" + "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e", + "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf" ], "markers": "python_version >= '3.8'", - "version": "==4.19.0" + "version": "==4.19.1" }, "jsonschema-specifications": { "hashes": [ @@ -3342,7 +3375,6 @@ "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" ], - "markers": "python_version >= '3.5'", "version": "==0.1.6" }, "maya": { @@ -3368,71 +3400,65 @@ }, "msgpack": { "hashes": [ - "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164", - "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b", - "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c", - "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf", - "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd", - "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d", - "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c", - "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a", - "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e", - "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd", - "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025", - "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5", - "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705", - "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a", - "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d", - "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb", - "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11", - "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f", - "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c", - "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d", - "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea", - "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba", - "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87", - "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a", - "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c", - "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080", - "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198", - "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9", - "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a", - "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b", - "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f", - "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437", - "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f", - "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7", - "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2", - "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0", - "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48", - "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898", - "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0", - "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57", - "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8", - "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282", - "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1", - "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82", - "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc", - "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb", - "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6", - "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7", - "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9", - "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c", - "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1", - "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed", - "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c", - "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c", - "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77", - "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81", - "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a", - "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3", - "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086", - "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9", - "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f", - "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b", - "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d" - ], - "version": "==1.0.5" + "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862", + "sha256:0bfdd914e55e0d2c9e1526de210f6fe8ffe9705f2b1dfcc4aecc92a4cb4b533d", + "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3", + "sha256:1e2d69948e4132813b8d1131f29f9101bc2c915f26089a6d632001a5c1349672", + "sha256:235a31ec7db685f5c82233bddf9858748b89b8119bf4538d514536c485c15fe0", + "sha256:27dcd6f46a21c18fa5e5deed92a43d4554e3df8d8ca5a47bf0615d6a5f39dbc9", + "sha256:28efb066cde83c479dfe5a48141a53bc7e5f13f785b92ddde336c716663039ee", + "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46", + "sha256:36e17c4592231a7dbd2ed09027823ab295d2791b3b1efb2aee874b10548b7524", + "sha256:384d779f0d6f1b110eae74cb0659d9aa6ff35aaf547b3955abf2ab4c901c4819", + "sha256:38949d30b11ae5f95c3c91917ee7a6b239f5ec276f271f28638dec9156f82cfc", + "sha256:3967e4ad1aa9da62fd53e346ed17d7b2e922cba5ab93bdd46febcac39be636fc", + "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1", + "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82", + "sha256:484ae3240666ad34cfa31eea7b8c6cd2f1fdaae21d73ce2974211df099a95d81", + "sha256:4a7b4f35de6a304b5533c238bee86b670b75b03d31b7797929caa7a624b5dda6", + "sha256:4cb14ce54d9b857be9591ac364cb08dc2d6a5c4318c1182cb1d02274029d590d", + "sha256:4e71bc4416de195d6e9b4ee93ad3f2f6b2ce11d042b4d7a7ee00bbe0358bd0c2", + "sha256:52700dc63a4676669b341ba33520f4d6e43d3ca58d422e22ba66d1736b0a6e4c", + "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87", + "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84", + "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e", + "sha256:5b6ccc0c85916998d788b295765ea0e9cb9aac7e4a8ed71d12e7d8ac31c23c95", + "sha256:5ed82f5a7af3697b1c4786053736f24a0efd0a1b8a130d4c7bfee4b9ded0f08f", + "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b", + "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93", + "sha256:7687e22a31e976a0e7fc99c2f4d11ca45eff652a81eb8c8085e9609298916dcf", + "sha256:822ea70dc4018c7e6223f13affd1c5c30c0f5c12ac1f96cd8e9949acddb48a61", + "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c", + "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8", + "sha256:8dd178c4c80706546702c59529ffc005681bd6dc2ea234c450661b205445a34d", + "sha256:8f5b234f567cf76ee489502ceb7165c2a5cecec081db2b37e35332b537f8157c", + "sha256:98bbd754a422a0b123c66a4c341de0474cad4a5c10c164ceed6ea090f3563db4", + "sha256:993584fc821c58d5993521bfdcd31a4adf025c7d745bbd4d12ccfecf695af5ba", + "sha256:a40821a89dc373d6427e2b44b572efc36a2778d3f543299e2f24eb1a5de65415", + "sha256:b291f0ee7961a597cbbcc77709374087fa2a9afe7bdb6a40dbbd9b127e79afee", + "sha256:b573a43ef7c368ba4ea06050a957c2a7550f729c31f11dd616d2ac4aba99888d", + "sha256:b610ff0f24e9f11c9ae653c67ff8cc03c075131401b3e5ef4b82570d1728f8a9", + "sha256:bdf38ba2d393c7911ae989c3bbba510ebbcdf4ecbdbfec36272abe350c454075", + "sha256:bfef2bb6ef068827bbd021017a107194956918ab43ce4d6dc945ffa13efbc25f", + "sha256:cab3db8bab4b7e635c1c97270d7a4b2a90c070b33cbc00c99ef3f9be03d3e1f7", + "sha256:cb70766519500281815dfd7a87d3a178acf7ce95390544b8c90587d76b227681", + "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329", + "sha256:ccf9a39706b604d884d2cb1e27fe973bc55f2890c52f38df742bc1d79ab9f5e1", + "sha256:dc43f1ec66eb8440567186ae2f8c447d91e0372d793dfe8c222aec857b81a8cf", + "sha256:dd632777ff3beaaf629f1ab4396caf7ba0bdd075d948a69460d13d44357aca4c", + "sha256:e45ae4927759289c30ccba8d9fdce62bb414977ba158286b5ddaf8df2cddb5c5", + "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b", + "sha256:ebbbba226f0a108a7366bf4b59bf0f30a12fd5e75100c630267d94d7f0ad20e5", + "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e", + "sha256:f0936e08e0003f66bfd97e74ee530427707297b0d0361247e9b4f59ab78ddc8b", + "sha256:f26a07a6e877c76a88e3cecac8531908d980d3d5067ff69213653649ec0f60ad", + "sha256:f64e376cd20d3f030190e8c32e1c64582eba56ac6dc7d5b0b49a9d44021b52fd", + "sha256:f6ffbc252eb0d229aeb2f9ad051200668fc3a9aaa8994e49f0cb2ffe2b7867e7", + "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002", + "sha256:ff1d0899f104f3921d94579a5638847f783c9b04f2d5f229392ca77fba5b82fc" + ], + "markers": "python_version >= '3.8'", + "version": "==1.0.7" }, "msgpack-python": { "hashes": [ @@ -3442,38 +3468,44 @@ }, "msgspec": { "hashes": [ - "sha256:1535855b0db1bee4e5c79384010861de2a23391b45095785e84ec9489abc56cd", - "sha256:23e65efaef864bf66a4ddfae9c2200c40ce1a50411f454de1757f3651e5762cd", - "sha256:25f7e3adaf1ca5d80455057576785069475b1d941eb877dbd0ae738cc5d1fefa", - "sha256:2ad4f4704045a0fb1b5226769d9cdc00a4a69adec2e6770064f3db73bb91bbf9", - "sha256:35420ae8afaa90498733541c0d8b2a73c70548a8a4d86da11201ed6df557e98f", - "sha256:358c2b908f1ed63419ccc5f185150c0caa3fc49599f4582504637cbfd5ff6242", - "sha256:3996bf1fc252658a7e028a0c263d28ac4dc48476e35f6fd8ebaf461a39459825", - "sha256:3bfc55d5ca60b3aa2c2287191aa9e943c54eb0aef16d4babb92fddcc047093b1", - "sha256:3f71c33efda990ecddc878ea2bb37f22e941d4264ded83e1b2309f86d335cde7", - "sha256:4c1ee8b9667fde3b5d7e0e0b555a8b70e2fa7bf2e02e9e8673af262c82c7b691", - "sha256:595f14f628825d9d79eeea6e08514144a3d516eb014f0c6191f91899c83a6836", - "sha256:70fa7f008008e2c823ecc1a143258bb2820ac76010cf6003091fa3832b6334c9", - "sha256:78a593bc0db95416d633b28cff00af0465f04590d53ff1a80a33d7e2728820ad", - "sha256:7b065995f3a41e4c8274a86e1ee84ac432969918373c777de239ef14f9537d80", - "sha256:80e57102469ee0d2186c72d42fa9460981ccd4252bdb997bf04ef2af0818984f", - "sha256:84cc7932f78aeec6ef014cca4bb4ecea8469bc05f13c9eacdfa27baa785e54b9", - "sha256:84fcf74b6371494aa536bf438ef96b08ce8f6e40483a01ed305535a40113136b", - "sha256:a75c4efa7565048f81e709a366e14b9dc10752b3fb5ea1f3c8de5abfca3db3c2", - "sha256:abcb92ffbca77bcfbedd5b29b68629628948982aafb994658e7abfad6e15913c", - "sha256:ade3959577bff46c7d9476962d2d7aa086b2820f3da03ee000e9be4958404829", - "sha256:b56cc7b9956daefb309447bbbb2581c84e5d5e3b89d573b1d5a25647522d2e43", - "sha256:b90a44550f19ee0b8c37dbca75f96473299275001af2a00273d736b7347ead6d", - "sha256:b9b3ed82f71816cddf0a9cdaae30a1d1addf8fe56ec09e7368db93ce43b29a81", - "sha256:baaba2411003f2e7a4328b5a58eba9efeb4c5e6a27e8ffd2adaccdc8feb0a805", - "sha256:c79ac853409b0000727f4c3e5fb32fe38122ad94b9e074f992fa9ea7f00eb498", - "sha256:ccaddb764b5abe457c0eded4a252f5fbeb8b04a946b46a06a7e6ca299c35dcb1", - "sha256:d127bf90f29f1211520f1baa897b10f2a9c05b8648ce7dc89dfc9ca45599be53", - "sha256:e03ff009f3a2e1fe883703f98098d12aea6b30934707b404fd994e9ea1c1bfa7", - "sha256:eb80befd343f3b378c8abad0367154703c74bde02fc62cbcf1a0e6b5fa779459" - ], - "markers": "python_version >= '3.8'", - "version": "==0.18.2" + "sha256:227fee75a25080a8b3677cdd95b9c0c3652e27869004a084886c65eb558b3dd6", + "sha256:241277eed9fd91037372519fca62aecf823f7229c1d351030d0be5e3302580c1", + "sha256:44d551aee1ec8aa2d7b64762557c266bcbf7d5109f2246955718d05becc509d6", + "sha256:4d24a291a3c94a7f5e26e8f5ef93e72bf26c10dfeed4d6ae8fc87ead02f4e265", + "sha256:55e578fd921c88de0d3a209fe5fd392bb66623924c6525b42cea37c72bf8d558", + "sha256:5f446f16ea57d70cceec29b7cb85ec0b3bea032e3dec316806e38575ea3a69b4", + "sha256:73e70217ff5e4ac244c8f1b0769215cbc81e1c904e135597a5b71162857e6c27", + "sha256:7e95817021db96c43fd81244228e185b13b085cca3d5169af4e2dfe3ff412954", + "sha256:8064908ddb3d95d3261aaca48fd38abb16ccf59dc3f2d01eb4e04591fc1e9bd4", + "sha256:826dcb0dfaac0abbcf3a3ae991749900671796eb688b017a69a82bde1e624662", + "sha256:828ef92f6654915c36ef6c7d8fec92404a13be48f9ff85f060e73b30299bafe1", + "sha256:8476848f4937da8faec53700891694df2e412453cb7445991f0664cdd1e2dd16", + "sha256:847d79f6f0b698671ff390aa5a66e207108f2c23b077ef9314ca4fe7819fa4ec", + "sha256:86800265f87f192a0daefe668e0a9634c35bf8af94b1f297e1352ac62d2e26da", + "sha256:87bc01949a35970398f5267df8ed4189c340727bb6feec99efdb9969dd05cf30", + "sha256:8a198409f672f93534c9c36bdc9eea9fb536827bd63ea846882365516a961356", + "sha256:96ccaef83adc0ce96d95328a03289cd5aead4fe400aac21fbe2008855a124a01", + "sha256:9714b78965047638c01c818b4b418133d77e849017de17b0655ee37b714b47a6", + "sha256:991aa3c76d1b1ec84e840d0b3c96692af834e1f8a1e1a3974cbd189eaf0f2276", + "sha256:acdcef2fccfff02f80ac8673dbeab205c288b680d81e05bfb5ae0be6b1502a7e", + "sha256:b01efbf80a987a99e9079257c893c026dc661d4cd05caa1f7eabf4accc7f1fbc", + "sha256:b052fd7d25a8aa2ffde10126ee1d97b4c6f3d81f3f3ab1258ff759a2bd794874", + "sha256:bbbc08d59f74de5791bda63569f26a35ae1dd6bd20c55c3ceba5567b0e5a8ef1", + "sha256:cb62030bd6b1a00b01a2fcb09735016011696304e6b1d3321e58022548268d3e", + "sha256:cc2405dba5af6478dedd3512bb92197b6f9d1bc0095655afbe9b54d7a426f19f", + "sha256:d08175cbb55c1a87dd258645dce6cd00705d6088bf88e7cf510a9d5c24b0720b", + "sha256:d99f3c13569a5add0980b0d8c6e0bd94a656f6363b26107435b3091df979d228", + "sha256:da13a06e77d683204eee3b134b08ecd5e4759a79014027b1bcd7a12c614b466d", + "sha256:dc25e6100026f5e1ecb5120150f4e78beb909cbeb0eb724b9982361b75c86c6b", + "sha256:deb11ba2709019192636042df5c8db8738e45946735627021b7e7934714526e4", + "sha256:e14287c3405093645b3812e3436598edd383b9ed724c686852e65d569f39f953", + "sha256:e21bc5aae6b80dfe4eb75dc1bb29af65483f967d5522e9e3812115a0ba285cac", + "sha256:e4294158c233884f3b3220f0e96a30d3e916a4781f9502ae6d477bd57bbc80ad", + "sha256:e95bd0a946b5b7206f27c0f654f490231c9ad5e5a4ff65af8c986f5114dfaf0e", + "sha256:f6229dd49438d81ed7a3470e3cbc9646b1cc1b120d415a1786df880dabb1d1c4", + "sha256:f668102958841c5bbd3ba7cf569a65d17aa3bdcf22124f394dfcfcf53cc5a9b9" + ], + "version": "==0.18.4" }, "multidict": { "hashes": [ @@ -3550,7 +3582,7 @@ "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae", "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==5.2.0" }, "mypy-extensions": { @@ -3571,29 +3603,30 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "2b1c7d6df207ecd239db4331f452332dbcd6a8a9" + "markers": "python_version >= '3'", + "ref": "f893a7388e5ab91d7df340f89e449d37030607c7" }, "nucypher-core": { "hashes": [ - "sha256:1db0b61cb3974eb1269283e193e3d6fb7abbc572e64b57f2952cf7008782574e", - "sha256:21c0b01a59621302a5b1e9cfe2ec107066ff10e3776664143fd2b994eab52359", - "sha256:42220d3c7be16ff32d0cf3a44f96d13ab61dd2ea2d69154341a163f129c13fee", - "sha256:63779e467c6012fa8b2bc0cfdddc4091d516593b08ad5b79b7f7b2022064c298", - "sha256:706991adc220b65d6e46a0d3d1f39021fbe8c7a5fd7a819aa1f2ca494ca779ab", - "sha256:7fba3befa5713975af5a5172b35832502078b74bb85d99be450bb1334e744297", - "sha256:8cb5718bc7511265f9721c342d703b2343bf6aa7091a0cc4463046f1edf35496", - "sha256:92767dcdef27a7697d155bd56dd408bfd290705bac7f299a0a62089b7883ed11", - "sha256:9df6f21de95add612c5b07dea88704023ad6dcb76cc93affdd30caaf3b841433", - "sha256:a10cbe550597561fde8c5d211998d34d259fff88ae5b42845c28bb48ef07ad8f", - "sha256:afa30ce0d4f5b874d512f38da996f896980172f6d0b9c6ebddd55b8bd262e5e5", - "sha256:b51017b852870235decba18c0d32bba42bedea2b67a09b3c0ef0a3dd18759ab6", - "sha256:b602880eadf8a12b8477a8d5b6ff041ad1200eca330b9c49e03e984808be932b", - "sha256:d903768cd804f84674c1ceb1f8631fb93d753b2545f9685ddbdc78603b603d48", - "sha256:f2e69196f93fa66409b97b641ab43723da55d1a30efed4dc30d646b6823e52ce", - "sha256:fcf17020e8037c09166d2c748514dbcc5b4a8bd3201c9cdaa951768930980a8a" + "sha256:09c754a7450d2ba3a46bf2c73ac35a0e8fe73c0c2fdbc2dab47ebea47d90b909", + "sha256:0b3d44fdc4acfd31cf6e46fdf8acb9ea278823b2d72336f5c9e7732b37ac6f30", + "sha256:0b8449ab2524628b1d4c095fc4ff5e46c699f0acd62a099ba6d411e72704c94c", + "sha256:0fe7eab174fc658f8391f1834aa193fb10acf1a55a1c613d0f09493e8d0d9f17", + "sha256:1f70477f41bc10e19f6280258530dabecb453b1230f641601ea12f5e4c9cac67", + "sha256:1fc6f39de2e90e36695c2674a170047dc9abfc083e9177b3304bd74ec21727d2", + "sha256:57c1c6d96570221ec8c30f8b00d89496f9d68cdf11b0574bdae7defd3cc1c975", + "sha256:74fcf712399aeb0d242c1d332a7f7a34d4ff70d9262c0537eb769ff973c2170e", + "sha256:75d5b86ab0fe51b00036cab25d6d4699fa3171aa8a8418d4027fdc2388f84c43", + "sha256:a3a69e37fdf6a42b5d0be58b28d70e2fb614320d032a2fe99aa3aa29643f9494", + "sha256:b9c82bd7593d2deac41c8f7b2833193eb6e6cab0208261313121646fcd275629", + "sha256:de48dae67ff01ffe020e8887432daa8a1072797559e11cb34d56b3012b6f4520", + "sha256:e22038db52190d88b6dd8cbcd76980d2f2d62a630baac46677f9ad6743b3b689", + "sha256:f2d44c28e4724f1c5ff6e566bbe1ab731bd57458bd219072aa146bd43a4e78d6", + "sha256:fadd7ac4009d74b2bdf2b678015ff6e315827517de21d0684fd31b9259a08fbc", + "sha256:fcb97049f8719d30fd155fe3f862410cb5edb3afd76ff0ae1ff60d76d0b5a3f8" ], "index": "pypi", - "version": "==0.12.0" + "version": "==0.13.0" }, "numpy": { "hashes": [ @@ -3630,16 +3663,15 @@ "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617", "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" ], - "markers": "python_version >= '3.10'", "version": "==1.26.1" }, "packaging": { "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" ], "markers": "python_version >= '3.7'", - "version": "==23.1" + "version": "==23.2" }, "pandas": { "hashes": [ @@ -3671,7 +3703,6 @@ "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" ], - "markers": "python_version >= '3.8'", "version": "==1.5.3" }, "parsimonious": { @@ -3685,62 +3716,96 @@ "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" ], - "markers": "python_version >= '3.6'", "version": "==0.8.3" }, "pendulum": { "hashes": [ - "sha256:075de865e31876d39831f5ce224849b4ced217b0368d58ab1a155622494031b8", - "sha256:0814e93270e5370ee2b5342ce4e91c4162d06b122de81fac88f92e5d8504f9e5", - "sha256:0876f05544a08a73df5c68d6adfe86b080bac91ba95c5c65396fb92b6d3b8dea", - "sha256:096d2b20fcf0f9f3bb31a04c6ecff9cb4fd7ea5755b47c32fc454854a5b56320", - "sha256:0b4055f1ae554a74dce460af10deabcd3b1e1470e9c7b6644cecf3ff79498780", - "sha256:236cd4ab81b5753780e75a4aecbcdc86b8c28a0ad03b00496bea5ac4ad3fa93f", - "sha256:27df9ea0030f51213e17b97874b06af873441644f14de1b112c80e079b86ee92", - "sha256:2c94b376f5c0f4ddcdcf020a95993fe0c6cdb115fc065956ad975934215e842b", - "sha256:2cf23d1955af25b2bc76c1ab16ac5e71817729c7fa489264fccaeab7d72cce18", - "sha256:367dd5735120060abfc636a7d72040d6d38cd4d7052f9206eecaa0eef5fdf8c0", - "sha256:3be6b9500863ec9502609ede68172d4831e4254df72d8bd76b523c4f7c198068", - "sha256:46947e8455833d8e166f732d7faecabbf45b81bf42443829fd267622d2ab21ea", - "sha256:476b9112a340c2c38f6a880c76b75c5aabc9131d5a7f2a9b5a1c950a77fb802d", - "sha256:4cfc02645b6afb9a2781f52eb35de912f75fc4d6bb502b856697d522d9158d2a", - "sha256:4d2d891ad280e8cad1174bbe06e15ad3c1110880cf1db3fc1bb4359c44ab137e", - "sha256:4e5eef051882aa0330c146321ea542797f817376cbc001356a7c98126532dc60", - "sha256:5025d9fb9ddbdfdfae60194bb7d6be3bfea2f2361f098687637712e33c359153", - "sha256:5125077b639167aa386a67f87cb6e0717864be10ea019fbff8ee0125fdb55ede", - "sha256:51baeb11abdfa4ac33c229f7488948ae2fcefcd229479c4c1a3a10fb63167535", - "sha256:59fc9f4fff307dcb5e348793161683ea3b78efe431058984265a872544be887e", - "sha256:669007b0f75e609e2794bc4e71ae47b8def25ca1cddba115216ff2b458675b71", - "sha256:6988901ac209d5fcd50da5e853273dd05d973b23c6f72a4a154039316d6b114f", - "sha256:6b332eb3b0084b7d87566ed858e1f27532495be6b509907d47ed2d22e155ffe4", - "sha256:6f6b4d0c75b0e9372320ae501f7f27c44c47b8ebc2b732884be811459bbcda28", - "sha256:833d7e344469625f30a1b5e883f2c8af99b0e35bbae82fb21a6e9ac6094576c6", - "sha256:836180c9800a2246005eef378850d8af8a66cfab06d80c10bafedefc94def872", - "sha256:8ba87243c01e51ebcad88b370f33ab6f09704c6015083f9238198ce1e1bff46c", - "sha256:9512f85d02727db3600e601757e6e96428c5a35e35e60bbce0e11346998e3b9d", - "sha256:9e803c0f383a23bae88e7578ef9dcee987e7ef824c5891af82142e8d7e9b0b9a", - "sha256:a34d2c33ce5da7b17c0d04144979af4631dee77d4437a1fd74d9668f6d1831cd", - "sha256:a45b94dc7d115b56f90490fc3960c579a3d8f73731a37fb0d25f00550faa374e", - "sha256:aadbfa235875b98ef7769843b5d3174e418500a20004663cb1fe341433793899", - "sha256:b05eb3cce1ff9a7d63e82887a4f9538d4aa543e7c94b5e33f15caee89c680938", - "sha256:b558fabaa96d20541ea3c88fcfbd25e8440def6f23ae49d649600228887970f6", - "sha256:bd244c062c25ac3fc484813e76c75f05373170786c4e34c2e42f57277335b919", - "sha256:bd8e55be4b3596fd29f1567b4b49ed8a536f3aadcc4a3f7f96073e00ebadefd7", - "sha256:cb830c7aac70b380ed829e52c825d4854bea2d970179abd12eb6c363d48b758c", - "sha256:cdd95883421ae159d4b9f7343efb8252c7be39af753cabb331a20c8b351830bd", - "sha256:d08d408a3654f9b4ad2db8d76a5863a29a5fcf2c81bcaf3a89545e7ac041319b", - "sha256:e26a422d7e987690207d2e73a5febec3c08bee722ebe69ae52352eb60459d086", - "sha256:e611af03dae4a78debdfcfc2435c61734af761d185dccfbd14fd67a770d03457", - "sha256:ebc402a51dcbed5d335779b3947b17f0f9178fb8d9c01ed5fb80e9efcf18c8a8", - "sha256:ec4fc633c850aef300e58b55fffbd9b0156ffe120653f051d25dceda022f4a73", - "sha256:f15c13e938879595f9e1a5b533f5d47206977d4e811adf4b91e5512b742970e8", - "sha256:f5f69fe307e36cb434d999b82870b2be416eced3a0046eef85e8e43952b881b9", - "sha256:f81f45d0d554d33134c2e9aa91e9bf26dbae23d5689daba44a75fd780a711ff9", - "sha256:feaa3aa442d585dde0e8a0b3c6930e9e7cb56d85f6c759e8c2581a0dece69882", - "sha256:ffaf7daead2a86f3f48da7fc0fe1c2f4f3be665245804e988b07aba79f4ef41c" + "sha256:03080a6b7f1b500b4b966d0f107f19e12386fbd8df477ed2aca9f2c1ea0f0a71", + "sha256:0b1cc6de778a99dbea179a86e655aa24d2d6964da5db52b2e147945a108cdb63", + "sha256:0dbcbad29f338dd90ffe9a3235c283a2a01f8e565c02ace69b84a3ed049cb9bc", + "sha256:0fc8b3643cd04b64e5d931df94fbc1e6ee4117255f93bc2df43e177f42c6ec50", + "sha256:0fdb0b98ab23dd9f134e80d18562bc17bf31c4e38b604d822fd87d685df4a984", + "sha256:0ff2cda697eeec55a2de4bbcb94bc941b2fb28cb6fa2b7d2d4098505892e555d", + "sha256:10edd6a29dc00768c5f15f79a1ef15d7d6b8897383175ed42e9ac60db924efa0", + "sha256:13656868bf4190b542bf25505629b4aef24c5d737b9796b5294f94de4d405b5f", + "sha256:1d12a537ff1acec48243325b15fb617795ff981efa142a9a584f5a82fc6c237b", + "sha256:2364a38b60968c67ea96164b166a9b00e6e6cd05e379f9b38dae51a0d027e6b3", + "sha256:256fb81c43183f4f3a40bcd9fd2f0914e77eb37334376117183037cf9656800f", + "sha256:2b85650e1d6171fdaa4cc29280caa7c1c8385f6db4f0b479ce74acaabe48ba97", + "sha256:30dce113b94cc05353651573a4336fe04e97260befcfd1d618ce632aa3fc7d2f", + "sha256:32f2568b295f1f4571354edc4b106ed63a5e4d0916b977fff863f7b1c937968b", + "sha256:39154e7f75ee9ff12adb909374189b7ffd521b682223ec8baaf3b04f010fc671", + "sha256:3ce5cf4be2525077cc25361ae4c05e2835f960476ad8df3152a30bc654531b8e", + "sha256:47f75b13e69780a26c3f9227695e80fc49f0498b2635483ae9b17843319f018e", + "sha256:4a06c923ce1118c3e5c64d3a34ff30220eca14583cb51edcba32fdae5c0caf70", + "sha256:4b0f6d812a87225c0af2d342dbe428bcfd2eec2dce76a21042881f5ee130b02a", + "sha256:4b9a841296685be7488a34b6b51df5c8f927963f9370a01f76f75ebe16bf9256", + "sha256:4ccc6f77da9236ef67021f356696bbdd1790dc8941bfb106a7b937dfca3a4b6e", + "sha256:4ece9f0bf5d2c2ed3c8ca9d0cfe759c2b80c2c0f599e92a8d2cd747d7e358f46", + "sha256:5331e3106e9a5690136daf386ac78a7c7e47bd4b777b8dc8925b608633788718", + "sha256:543a063682d7100569242e43b05c338f91008652ae36fa6ca13b17f7fb5600ea", + "sha256:57e14edb415d278c794d4f549c1db9e7041cc988de1bda7ca80ea43bcacbb540", + "sha256:587c09b86e4b179b2a638ada746fba49b1c8afd9cd2a7f1d7e8939f11b2152c0", + "sha256:597f12938ca48bc11f8dec3e3c742fe2ba2eec9950e1c8db2d2e739a7c62428a", + "sha256:5b14035b98b75d6d138045565312fef7fd55583e91bc28c27c4a98e3a4cf064e", + "sha256:5d23a1aa69a18d168829c2d587dc450163ec8beef644058a9a6275794a1a51ba", + "sha256:6164b7983fc04a877e4f64ee8b1a063a0e0b34056134789eb53fd3ebf1b1cedb", + "sha256:618e65a703b99c1792a7090ae56c8c7c0220ae58aa363ed2eff95c8562acd02f", + "sha256:658160760a197b6e72e0012195962f3dd49efb846d8d4887d016fc7c85add5eb", + "sha256:681eb3ac31638170e1cb3ad83a916a8de1677638db8378a103f972980655742b", + "sha256:695b183356bd74f2bd6b665743f1fa6cb21285e15c1154a9d60188ebd356abd5", + "sha256:6b80fa0186b964cafba0c7709b083f5f8f79934c758e23b065d975e9289cf813", + "sha256:75753c75d5fd8b69b2207afe5d831527a26ff647207a0bc9d9c575f02439a284", + "sha256:76f158cf8fbd81803303a635e1b617bdac76bb81f78fb4db9a651167043108e2", + "sha256:791a3ded0929f72e8d89e567dd1f4cebb448e5f255a5c8b33f8d0485c4e40641", + "sha256:7b624d0aed4a5b40c5f52bded4bc516c3975c3ff8f1998bf51715e37c6dfc30c", + "sha256:7ca2e5efc5d27a45e600a48e2ae750341235323da038c11e07ea3c722977d97f", + "sha256:7d3cbba1716823d0d450f10bdf455d58d20c1c89f365bcbde7005bd97edd36b9", + "sha256:81c1eecbaedaee5712e643098253f8fef74d4e56800a85f0609bec3da6ed6f85", + "sha256:82f02593bda744900620eaede23b8f8f6d1de855cb938bc48e077d849755b4cb", + "sha256:83b0c99a83ff19165707956d45d8198895d35d6acf3cc6072a7342c7b7423f9a", + "sha256:89b4435add740a33d1b14720a6b4b471edbd7ea7ed42f44e288cabd59e00580b", + "sha256:8c3c3f423c4f32964ef3b8664041e13f78e80a49e554258f15b5e3b0622ccc53", + "sha256:8c7f6453db9bccc77506fdb8ed3ca61ef7f53efced70557102114f0c811bcd38", + "sha256:8e8c406b7c3dedd7db0eaa8f83cc2b78e594aaa424f3e064e38e037bb65a3191", + "sha256:917426a340bde92b03743ca2555c17892d1640de6fdb401c19ce4607ded48ec2", + "sha256:92fc9245fea1bb1ddc4cb3b55577a8f1e8c143f9237343bd55b156d3e9b23078", + "sha256:9574d81702be1f6c713cbc2b5c5ce4069c6a12d7f0f9dc46847bb4e3f09b3b08", + "sha256:9c455f9ea9130a10cf28a082f6052064062314d87fd02b334b49cab23e033065", + "sha256:9c58a446d0e1dad9b2c1813847b197d1f9ec1dfdea1cd7d57385591bb414b2a6", + "sha256:a0f6c73bb7e551da0dabc133faedeea48b4f47302d1432d467fb42859ecbf7c1", + "sha256:a4cdb9a0d842e1b6bd4f414d0097ae50859b5c8c04828c58f47a1a67474e6708", + "sha256:a57ca5b9b66674b382f6b429462d4ed2a998e7a1a39d099e23bd056576c44ddd", + "sha256:a5a8d00106888af084223470c2139327766107728fcd7a46b19252f1d878bcd0", + "sha256:a6b5721fd4f1718326461b2b04a24c0aaec11dfb650dd90ad1185c270c066397", + "sha256:a772c98f724d923bfccbd2a89e2217c2949ab582e4ae784671cb4bdc9be98b5c", + "sha256:a83877d59f663e81ef7fca483f9f8ba44c8ed843201cced92ed1298cf2ee162f", + "sha256:a9ecda6e0e4f7dbdfa36ed4e92e70e921f748d4337e23ab8a9fb74b8680138d5", + "sha256:b5a0646b8f9e6d5b041c94ff0d155c9a762c7f459f9cf69804056ac0593855bd", + "sha256:b7fc77f62b19d04bdd904a841b3e8d1ca1d726572c1d7302fee42ae9cebcbe72", + "sha256:ba758a373ab3e3ef377d3c1ea4d6d54f27459f0b722e9abad55178b1be6b9d04", + "sha256:ba8d8ef32b056dc7e31c5b5ac99186786360fc10993e3dfa0f2d78d23bc74ccd", + "sha256:bd5335f023832f49309fc9c40021a9a67ce37164c8ba394203fee3e21b081b64", + "sha256:c67e7459e4875dda15e6dc59e990872fc5c25c5aac9e0bdeae213e902ebbce46", + "sha256:ca71f8663ddae56685e7f1c1dca5d9c008d4726b37955d97b2b52015ecc1ff6c", + "sha256:cdac9cbf6e2e57766bd064f963ef90c33046251a0646c0a796f8b03408bd9433", + "sha256:d07dbb86984da99d12fdfffc167209bc470f48a10c3844ed5871d6987e2fecd8", + "sha256:d107bf9985a2620cc25c4d4e89638c14b78e571a0a6c02b5982cf31146744c73", + "sha256:d1d43b37204f47cce0a84d5b4131facdc57bad2e8fef8069249098458f60997b", + "sha256:d562c48affb35fae42ad71c4c5dc445e4a39d4a32ad475b78d66cbd6f217d49f", + "sha256:d6e583ab1bfeb77943a485d60cdf0172d0d6be0b175265f7826ec105937981ba", + "sha256:db8b46f257a436752f78024dd8677e8e4cc15c759fb4a7ceaa258bf9741bf5dc", + "sha256:db993666e3ff78e12d640b724d161fde4b96650d1261071412157e34b1aaf60b", + "sha256:dbd44cd66bf8d81fe2482d9ae8b4ebb7ddf3c34dd0a7e96a6ad57da8ec424602", + "sha256:e2f9bcf5166e025e7dfaec27263a13fd4f7deff5449bc93fcceccda3ca4a46e0", + "sha256:e3793a3511657e1b7be6c1d157915a52de5a6aea789f7452a393138cf1532311", + "sha256:ea8a4bd76fc6e76b30c02cfed3e970574a9247b6dad8f02c88269e9ebbd0993c", + "sha256:f5a1ddf5f34431e550daceafb202cd1cfaa31a3d3e1d53f2c76a1d13c9d2f291", + "sha256:f5bbbec2198cdbe221d5f4a702f55a28d04a7b081ee3f1c2ef83ebec989628d5", + "sha256:f8a0ead27e7bf8544f1aea9676f60425416a50f44a908afe1008a40a4c45b499" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==3.0.0a1" + "markers": "python_version >= '3.8'", + "version": "==3.0.0b1" }, "pexpect": { "hashes": [ @@ -3758,34 +3823,33 @@ }, "platformdirs": { "hashes": [ - "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", - "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" + "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3", + "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e" ], - "markers": "python_version >= '3.7'", - "version": "==3.10.0" + "version": "==3.11.0" }, "pluggy": { "hashes": [ "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" ], - "markers": "python_version >= '3.8'", "version": "==1.3.0" }, "pre-commit": { "hashes": [ - "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb", - "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023" + "sha256:70c5ec1f30406250b706eda35e868b87e3e4ba099af8787e3e8b4b01e84f4712", + "sha256:900d3c7e1bf4cf0374bb2893c24c23304952181405b4d88c9c40b72bda1bb8a9" ], "index": "pypi", - "version": "==3.3.3" + "markers": "python_full_version >= '3.6.1'", + "version": "==2.12.1" }, "prometheus-client": { "hashes": [ "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==0.17.1" }, "prompt-toolkit": { @@ -3793,27 +3857,24 @@ "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" ], - "markers": "python_version >= '3.7'", "version": "==3.0.39" }, "protobuf": { "hashes": [ - "sha256:237b9a50bd3b7307d0d834c1b0eb1a6cd47d3f4c2da840802cd03ea288ae8880", - "sha256:25ae91d21e3ce8d874211110c2f7edd6384816fb44e06b2867afe35139e1fd1c", - "sha256:2b23bd6e06445699b12f525f3e92a916f2dcf45ffba441026357dea7fa46f42b", - "sha256:3b7b170d3491ceed33f723bbf2d5a260f8a4e23843799a3906f16ef736ef251e", - "sha256:4e69965e7e54de4db989289a9b971a099e626f6167a9351e9d112221fc691bc1", - "sha256:58e12d2c1aa428ece2281cef09bbaa6938b083bcda606db3da4e02e991a0d924", - "sha256:6bd26c1fa9038b26c5c044ee77e0ecb18463e957fefbaeb81a3feb419313a54e", - "sha256:77700b55ba41144fc64828e02afb41901b42497b8217b558e4a001f18a85f2e3", - "sha256:7fda70797ddec31ddfa3576cbdcc3ddbb6b3078b737a1a87ab9136af0570cd6e", - "sha256:839952e759fc40b5d46be319a265cf94920174d88de31657d5622b5d8d6be5cd", - "sha256:bb7aa97c252279da65584af0456f802bd4b2de429eb945bbc9b3d61a42a8cd16", - "sha256:c00c3c7eb9ad3833806e21e86dca448f46035242a680f81c3fe068ff65e79c74", - "sha256:c5cdd486af081bf752225b26809d2d0a85e575b80a84cde5172a05bbb1990099" + "sha256:2d65aa406a608bf8b18366d6b25d42bbb205a235a8802da3a46d38c22d4c9d6c", + "sha256:44c7c8346d8e64868df452759f1ebf3ecec3a9cf2f45affe837598e2a6dfb15e", + "sha256:4a1482f46714f0a428170221bcd780554099392523869a345e0f7aa2c58cae09", + "sha256:5b8eeb9970305008acf1c81e12624a7171bff46390a19aa9404a08fab0dff6dc", + "sha256:6c00620313178bdad36e5c0c58dac912bb02accb18c10c05116a92adef98d0e2", + "sha256:89a42a302b3c67187463616ce39f6f00bc97b84c062298de087fa94eacbe6cc2", + "sha256:bb652481451c49ac77ab4d85520c74a5b56d64a5e597ab6d5d02f97c71793219", + "sha256:d88d3950bc0afd42ec0dc71fb7e0b5e564f47074a141df6a546e2c93edb93402", + "sha256:e0d5d352a97f9ba3aedc1beaa2bdaef86c8c9eb0774a5d9dd48c9d8253d1ffad", + "sha256:f27cd197d87b17692615ade1097633a8b9a1d32677e6036ca2b5079484fb94b3", + "sha256:f2b101cd374b0ce97b2871e1fb0f207022c3efea074cce85b060966eef4a6be0" ], - "markers": "python_version >= '3.7'", - "version": "==4.24.2" + "markers": "python_version >= '3.8'", + "version": "==4.25.0rc2" }, "ptyprocess": { "hashes": [ @@ -3834,7 +3895,6 @@ "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.11.0" }, "py-cid": { @@ -3849,7 +3909,7 @@ "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" ], - "markers": "python_version < '4' and python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6' and python_version < '4'", "version": "==6.0.0" }, "py-evm": { @@ -3864,7 +3924,6 @@ "sha256:1eb9c1d05b51133a6961889ec508cdcb19d24d32888704c4e034cae86a3accad", "sha256:f3563e2de8e78599cb9c69ee5bf3bded858ac6cf59891a04177f2353c425fdb7" ], - "markers": "python_version >= '3.7' and python_version < '4'", "version": "==3.13.0" }, "py-multibase": { @@ -3893,7 +3952,6 @@ "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" ], - "markers": "python_version >= '3.6' and python_version < '4'", "version": "==1.1.1" }, "pyasn1": { @@ -3927,83 +3985,82 @@ }, "pycryptodome": { "hashes": [ - "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb", - "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6", - "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403", - "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148", - "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4", - "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825", - "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2", - "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14", - "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c", - "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4", - "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2", - "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb", - "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf", - "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec", - "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918", - "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3", - "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944", - "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e", - "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024", - "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f", - "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1", - "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380", - "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9", - "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e", - "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413", - "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec", - "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54", - "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2", - "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27", - "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b", - "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf", - "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08" + "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6", + "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810", + "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a", + "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db", + "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33", + "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5", + "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551", + "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa", + "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4", + "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405", + "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc", + "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997", + "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb", + "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e", + "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9", + "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f", + "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e", + "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34", + "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631", + "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c", + "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde", + "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7", + "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa", + "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0", + "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea", + "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e", + "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400", + "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270", + "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f", + "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1", + "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434", + "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==3.18.0" + "version": "==3.19.0" }, "pydantic": { "hashes": [ - "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", - "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", - "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", - "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", - "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", - "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", - "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", - "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", - "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", - "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", - "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", - "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", - "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", - "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", - "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", - "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", - "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", - "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", - "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", - "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", - "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", - "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", - "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", - "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", - "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", - "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", - "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", - "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", - "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", - "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", - "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", - "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", - "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", - "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", - "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", - "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" - ], - "markers": "python_version >= '3.7'", - "version": "==1.10.12" + "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548", + "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80", + "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340", + "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01", + "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132", + "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599", + "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1", + "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8", + "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe", + "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0", + "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17", + "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953", + "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f", + "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f", + "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d", + "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127", + "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8", + "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f", + "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580", + "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6", + "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691", + "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87", + "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd", + "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96", + "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687", + "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33", + "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69", + "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653", + "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78", + "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261", + "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f", + "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9", + "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d", + "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737", + "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5", + "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0" + ], + "version": "==1.10.13" }, "pyethash": { "hashes": [ @@ -4016,7 +4073,6 @@ "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9", "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217" ], - "markers": "python_version >= '3.7'", "version": "==1.59.1" }, "pygments": { @@ -4024,7 +4080,6 @@ "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" ], - "markers": "python_version >= '3.7'", "version": "==2.16.1" }, "pyjwt": { @@ -4035,7 +4090,6 @@ "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" ], - "markers": "python_version >= '3.7'", "version": "==2.8.0" }, "pynacl": { @@ -4051,7 +4105,7 @@ "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==1.5.0" }, "pyopenssl": { @@ -4059,7 +4113,7 @@ "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2", "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==23.2.0" }, "pytest": { @@ -4068,6 +4122,7 @@ "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==6.2.5" }, "pytest-cov": { @@ -4076,30 +4131,30 @@ "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==4.1.0" }, "pytest-mock": { "hashes": [ - "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39", - "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f" + "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f", + "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9" ], "index": "pypi", - "version": "==3.11.1" + "markers": "python_version >= '3.8'", + "version": "==3.12.0" }, "pytest-timeout": { "hashes": [ - "sha256:c07ca07404c612f8abbe22294b23c368e2e5104b521c1790195561f37e1ac3d9", - "sha256:f6f50101443ce70ad325ceb4473c4255e9d74e3c7cd0ef827309dfa4c0d975c6" + "sha256:3b0b95dabf3cb50bac9ef5ca912fa0cfc286526af17afc806824df20c2f72c90", + "sha256:bde531e096466f49398a59f2dde76fa78429a09a12411466f88a07213e220de2" ], - "markers": "python_version >= '3.6'", - "version": "==2.1.0" + "version": "==2.2.0" }, "pytest-twisted": { "hashes": [ "sha256:1b63b73182bd1b995f30826a1d870c9ac0d08244ab0c871eb8bd0c8243acfb3d", "sha256:209bf5a6452cfbfb61de8f015902c14ec8126400911507074bb2ee4ce8dfe313" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.14.0" }, "python-baseconv": { @@ -4118,16 +4173,16 @@ }, "pytz": { "hashes": [ - "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", - "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" + "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", + "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" ], - "version": "==2023.3" + "version": "==2023.3.post1" }, "pyunormalize": { "hashes": [ "sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==15.0.0" }, "pyyaml": { @@ -4196,97 +4251,97 @@ }, "regex": { "hashes": [ - "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf", - "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46", - "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18", - "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7", - "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7", - "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9", - "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559", - "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71", - "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280", - "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898", - "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684", - "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3", - "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9", - "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8", - "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca", - "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c", - "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c", - "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab", - "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd", - "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56", - "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586", - "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7", - "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103", - "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac", - "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177", - "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109", - "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033", - "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb", - "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61", - "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800", - "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb", - "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8", - "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570", - "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34", - "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e", - "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4", - "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb", - "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7", - "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208", - "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc", - "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb", - "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3", - "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504", - "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb", - "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57", - "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b", - "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601", - "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116", - "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8", - "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6", - "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6", - "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93", - "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09", - "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a", - "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921", - "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a", - "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495", - "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6", - "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7", - "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236", - "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235", - "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470", - "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b", - "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5", - "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61", - "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c", - "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db", - "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be", - "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96", - "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a", - "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2", - "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63", - "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef", - "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739", - "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e", - "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217", - "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90", - "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4", - "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8", - "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3", - "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357", - "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4", - "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b", - "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882", - "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a", - "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675", - "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", - "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" + "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a", + "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07", + "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca", + "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58", + "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54", + "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed", + "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff", + "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528", + "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9", + "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971", + "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14", + "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af", + "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302", + "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec", + "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597", + "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b", + "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd", + "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767", + "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f", + "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6", + "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293", + "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be", + "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41", + "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc", + "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29", + "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964", + "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d", + "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a", + "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc", + "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55", + "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af", + "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930", + "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e", + "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d", + "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863", + "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c", + "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f", + "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e", + "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d", + "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368", + "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb", + "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52", + "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8", + "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4", + "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac", + "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e", + "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2", + "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a", + "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4", + "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa", + "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533", + "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b", + "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588", + "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0", + "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915", + "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841", + "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a", + "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988", + "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292", + "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3", + "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c", + "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f", + "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420", + "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9", + "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f", + "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0", + "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b", + "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037", + "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b", + "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee", + "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c", + "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b", + "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353", + "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051", + "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039", + "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a", + "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b", + "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e", + "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5", + "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf", + "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94", + "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991", + "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711", + "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a", + "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab", + "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a", + "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11", + "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48" ], - "markers": "python_full_version >= '3.6.0'", - "version": "==2023.8.8" + "markers": "python_version >= '3.7'", + "version": "==2023.10.3" }, "requests": { "hashes": [ @@ -4301,7 +4356,6 @@ "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" ], - "markers": "python_version < '4' and python_full_version >= '3.6.3'", "version": "==12.6.0" }, "rlp": { @@ -4313,106 +4367,108 @@ }, "rpds-py": { "hashes": [ - "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a", - "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e", - "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e", - "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225", - "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d", - "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775", - "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c", - "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59", - "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5", - "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173", - "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74", - "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640", - "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef", - "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474", - "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370", - "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b", - "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5", - "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa", - "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a", - "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3", - "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5", - "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48", - "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17", - "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397", - "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6", - "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd", - "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3", - "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca", - "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a", - "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e", - "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c", - "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24", - "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86", - "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f", - "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e", - "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f", - "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83", - "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882", - "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e", - "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00", - "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212", - "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1", - "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309", - "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c", - "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf", - "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517", - "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696", - "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa", - "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582", - "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3", - "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291", - "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a", - "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b", - "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727", - "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b", - "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878", - "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d", - "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279", - "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07", - "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012", - "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b", - "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453", - "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12", - "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09", - "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795", - "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04", - "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c", - "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8", - "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1", - "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060", - "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb", - "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2", - "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6", - "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31", - "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da", - "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af", - "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4", - "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685", - "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186", - "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103", - "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f", - "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b", - "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d", - "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a", - "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f", - "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0", - "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe", - "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d", - "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2", - "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055", - "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47", - "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514", - "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7", - "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41", - "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b", - "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910", - "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc" + "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed", + "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8", + "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417", + "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801", + "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31", + "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116", + "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5", + "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393", + "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532", + "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc", + "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2", + "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df", + "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3", + "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf", + "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647", + "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3", + "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721", + "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247", + "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c", + "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42", + "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014", + "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65", + "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e", + "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02", + "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb", + "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c", + "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043", + "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403", + "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57", + "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50", + "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6", + "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071", + "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487", + "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138", + "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2", + "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063", + "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6", + "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35", + "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a", + "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238", + "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba", + "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175", + "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6", + "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8", + "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396", + "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d", + "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9", + "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977", + "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3", + "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55", + "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977", + "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80", + "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4", + "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c", + "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4", + "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac", + "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1", + "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0", + "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5", + "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469", + "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d", + "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f", + "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c", + "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2", + "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf", + "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5", + "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7", + "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e", + "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7", + "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336", + "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4", + "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed", + "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9", + "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094", + "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f", + "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b", + "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13", + "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722", + "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53", + "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4", + "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38", + "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e", + "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31", + "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586", + "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad", + "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7", + "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482", + "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d", + "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066", + "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b", + "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b", + "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d", + "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9", + "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069", + "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971", + "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18", + "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1", + "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d", + "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281" ], "markers": "python_version >= '3.8'", - "version": "==0.10.0" + "version": "==0.10.6" }, "safe-pysha3": { "hashes": [ @@ -4445,11 +4501,11 @@ }, "setuptools": { "hashes": [ - "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d", - "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b" + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" ], "markers": "python_version >= '3.8'", - "version": "==68.1.2" + "version": "==68.2.2" }, "six": { "hashes": [ @@ -4474,57 +4530,64 @@ }, "sqlalchemy": { "hashes": [ - "sha256:1506e988ebeaaf316f183da601f24eedd7452e163010ea63dbe52dc91c7fc70e", - "sha256:1a58052b5a93425f656675673ef1f7e005a3b72e3f2c91b8acca1b27ccadf5f4", - "sha256:1b74eeafaa11372627ce94e4dc88a6751b2b4d263015b3523e2b1e57291102f0", - "sha256:1be86ccea0c965a1e8cd6ccf6884b924c319fcc85765f16c69f1ae7148eba64b", - "sha256:1d35d49a972649b5080557c603110620a86aa11db350d7a7cb0f0a3f611948a0", - "sha256:243d0fb261f80a26774829bc2cee71df3222587ac789b7eaf6555c5b15651eed", - "sha256:26a3399eaf65e9ab2690c07bd5cf898b639e76903e0abad096cd609233ce5208", - "sha256:27d554ef5d12501898d88d255c54eef8414576f34672e02fe96d75908993cf53", - "sha256:3364b7066b3c7f4437dd345d47271f1251e0cfb0aba67e785343cdbdb0fff08c", - "sha256:3423dc2a3b94125094897118b52bdf4d37daf142cbcf26d48af284b763ab90e9", - "sha256:3c6aceebbc47db04f2d779db03afeaa2c73ea3f8dcd3987eb9efdb987ffa09a3", - "sha256:3ce5e81b800a8afc870bb8e0a275d81957e16f8c4b62415a7b386f29a0cb9763", - "sha256:411e7f140200c02c4b953b3dbd08351c9f9818d2bd591b56d0fa0716bd014f1e", - "sha256:4cde2e1096cbb3e62002efdb7050113aa5f01718035ba9f29f9d89c3758e7e4e", - "sha256:5768c268df78bacbde166b48be788b83dddaa2a5974b8810af422ddfe68a9bc8", - "sha256:599ccd23a7146e126be1c7632d1d47847fa9f333104d03325c4e15440fc7d927", - "sha256:5ed61e3463021763b853628aef8bc5d469fe12d95f82c74ef605049d810f3267", - "sha256:63a368231c53c93e2b67d0c5556a9836fdcd383f7e3026a39602aad775b14acf", - "sha256:63e73da7fb030ae0a46a9ffbeef7e892f5def4baf8064786d040d45c1d6d1dc5", - "sha256:6eb6d77c31e1bf4268b4d61b549c341cbff9842f8e115ba6904249c20cb78a61", - "sha256:6f8a934f9dfdf762c844e5164046a9cea25fabbc9ec865c023fe7f300f11ca4a", - "sha256:6fe7d61dc71119e21ddb0094ee994418c12f68c61b3d263ebaae50ea8399c4d4", - "sha256:759b51346aa388c2e606ee206c0bc6f15a5299f6174d1e10cadbe4530d3c7a98", - "sha256:76fdfc0f6f5341987474ff48e7a66c3cd2b8a71ddda01fa82fedb180b961630a", - "sha256:77d37c1b4e64c926fa3de23e8244b964aab92963d0f74d98cbc0783a9e04f501", - "sha256:79543f945be7a5ada9943d555cf9b1531cfea49241809dd1183701f94a748624", - "sha256:79fde625a0a55220d3624e64101ed68a059c1c1f126c74f08a42097a72ff66a9", - "sha256:7d3f175410a6db0ad96b10bfbb0a5530ecd4fcf1e2b5d83d968dd64791f810ed", - "sha256:8dd77fd6648b677d7742d2c3cc105a66e2681cc5e5fb247b88c7a7b78351cf74", - "sha256:a3f0dd6d15b6dc8b28a838a5c48ced7455c3e1fb47b89da9c79cc2090b072a50", - "sha256:bcb04441f370cbe6e37c2b8d79e4af9e4789f626c595899d94abebe8b38f9a4d", - "sha256:c3d99ba99007dab8233f635c32b5cd24fb1df8d64e17bc7df136cedbea427897", - "sha256:ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6", - "sha256:cb0d3e94c2a84215532d9bcf10229476ffd3b08f481c53754113b794afb62d14", - "sha256:d1b09ba72e4e6d341bb5bdd3564f1cea6095d4c3632e45dc69375a1dbe4e26ec", - "sha256:d32b5ffef6c5bcb452723a496bad2d4c52b346240c59b3e6dba279f6dcc06c14", - "sha256:d3793dcf5bc4d74ae1e9db15121250c2da476e1af8e45a1d9a52b1513a393459", - "sha256:dd81466bdbc82b060c3c110b2937ab65ace41dfa7b18681fdfad2f37f27acdd7", - "sha256:e4e571af672e1bb710b3cc1a9794b55bce1eae5aed41a608c0401885e3491179", - "sha256:ea8186be85da6587456c9ddc7bf480ebad1a0e6dcbad3967c4821233a4d4df57", - "sha256:eefebcc5c555803065128401a1e224a64607259b5eb907021bf9b175f315d2a6" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.20" + "sha256:0b0b3f2686c3f162123adba3cb8b626ed7e9b8433ab528e36ed270b4f70d1cdb", + "sha256:0c1fea8c0abcb070ffe15311853abfda4e55bf7dc1d4889497b3403629f3bf00", + "sha256:0e1ce8ebd2e040357dde01a3fb7d30d9b5736b3e54a94002641dfd0aa12ae6ce", + "sha256:129415f89744b05741c6f0b04a84525f37fbabe5dc3774f7edf100e7458c48cd", + "sha256:13790cb42f917c45c9c850b39b9941539ca8ee7917dacf099cc0b569f3d40da7", + "sha256:14cd3bcbb853379fef2cd01e7c64a5d6f1d005406d877ed9509afb7a05ff40a5", + "sha256:154a32f3c7b00de3d090bc60ec8006a78149e221f1182e3edcf0376016be9396", + "sha256:19c6986cf2fb4bc8e0e846f97f4135a8e753b57d2aaaa87c50f9acbe606bd1db", + "sha256:2096d6b018d242a2bcc9e451618166f860bb0304f590d205173d317b69986c95", + "sha256:2c9bac865ee06d27a1533471405ad240a6f5d83195eca481f9fc4a71d8b87df8", + "sha256:3076740335e4aaadd7deb3fe6dcb96b3015f1613bd190a4e1634e1b99b02ec86", + "sha256:3940677d341f2b685a999bffe7078697b5848a40b5f6952794ffcf3af150c301", + "sha256:3aa1472bf44f61dd27987cd051f1c893b7d3b17238bff8c23fceaef4f1133868", + "sha256:40b1206a0d923e73aa54f0a6bd61419a96b914f1cd19900b6c8226899d9742ad", + "sha256:4bb062784f37b2d75fd9b074c8ec360ad5df71f933f927e9e95c50eb8e05323c", + "sha256:4e869a8ff7ee7a833b74868a0887e8462445ec462432d8cbeff5e85f475186da", + "sha256:4f6ff392b27a743c1ad346d215655503cec64405d3b694228b3454878bf21590", + "sha256:505f503763a767556fa4deae5194b2be056b64ecca72ac65224381a0acab7ebe", + "sha256:53a766cb0b468223cafdf63e2d37f14a4757476157927b09300c8c5832d88560", + "sha256:5434cc601aa17570d79e5377f5fd45ff92f9379e2abed0be5e8c2fba8d353d2b", + "sha256:54bcceaf4eebef07dadfde424f5c26b491e4a64e61761dea9459103ecd6ccc95", + "sha256:55914d45a631b81a8a2cb1a54f03eea265cf1783241ac55396ec6d735be14883", + "sha256:564e9f9e4e6466273dbfab0e0a2e5fe819eec480c57b53a2cdee8e4fdae3ad5f", + "sha256:56a7e2bb639df9263bf6418231bc2a92a773f57886d371ddb7a869a24919face", + "sha256:58a3aba1bfb32ae7af68da3f277ed91d9f57620cf7ce651db96636790a78b736", + "sha256:625b72d77ac8ac23da3b1622e2da88c4aedaee14df47c8432bf8f6495e655de2", + "sha256:69fd9e41cf9368afa034e1c81f3570afb96f30fcd2eb1ef29cb4d9371c6eece2", + "sha256:6ac28bd6888fe3c81fbe97584eb0b96804bd7032d6100b9701255d9441373ec1", + "sha256:7c6c3e9350f9fb16de5b5e5fbf17b578811a52d71bb784cc5ff71acb7de2a7f9", + "sha256:7ee7ccf47aa503033b6afd57efbac6b9e05180f492aeed9fcf70752556f95624", + "sha256:875de9414393e778b655a3d97d60465eb3fae7c919e88b70cc10b40b9f56042d", + "sha256:8db5ba8b7da759b727faebc4289a9e6a51edadc7fc32207a30f7c6203a181592", + "sha256:92e512a6af769e4725fa5b25981ba790335d42c5977e94ded07db7d641490a85", + "sha256:9886a72c8e6371280cb247c5d32c9c8fa141dc560124348762db8a8b236f8692", + "sha256:9e55dff5ec115316dd7a083cdc1a52de63693695aecf72bc53a8e1468ce429e5", + "sha256:a42c9fa3abcda0dcfad053e49c4f752eef71ecd8c155221e18b99d4224621176", + "sha256:a571bc8ac092a3175a1d994794a8e7a1f2f651e7c744de24a19b4f740fe95034", + "sha256:af66001d7b76a3fab0d5e4c1ec9339ac45748bc4a399cbc2baa48c1980d3c1f4", + "sha256:b39a6e21110204a8c08d40ff56a73ba542ec60bab701c36ce721e7990df49fb9", + "sha256:b560f075c151900587ade06706b0c51d04b3277c111151997ea0813455378ae0", + "sha256:c8f1792d20d2f4e875ce7a113f43c3561ad12b34ff796b84002a256f37ce9437", + "sha256:cb9a758ad973e795267da334a92dd82bb7555cb36a0960dcabcf724d26299db8", + "sha256:ccca778c0737a773a1ad86b68bda52a71ad5950b25e120b6eb1330f0df54c3d0", + "sha256:ccd87c25e4c8559e1b918d46b4fa90b37f459c9b4566f1dfbce0eb8122571547", + "sha256:d143c5a9dada696bcfdb96ba2de4a47d5a89168e71d05a076e88a01386872f97", + "sha256:d80eeb5189d7d4b1af519fc3f148fe7521b9dfce8f4d6a0820e8f5769b005051", + "sha256:e04ab55cf49daf1aeb8c622c54d23fa4bec91cb051a43cc24351ba97e1dd09f5", + "sha256:f146c61ae128ab43ea3a0955de1af7e1633942c2b2b4985ac51cc292daf33222", + "sha256:f776c2c30f0e5f4db45c3ee11a5f2a8d9de68e81eb73ec4237de1e32e04ae81c" + ], + "version": "==2.0.22" }, "stack-data": { "hashes": [ - "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", - "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" + "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", + "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695" ], - "version": "==0.6.2" + "version": "==0.6.3" }, "tabulate": { "hashes": [ @@ -4536,65 +4599,65 @@ }, "time-machine": { "hashes": [ - "sha256:05f7320851edb3e887d79a5c797966c8c1b64458fb8b8ee74982c6593606a387", - "sha256:0613aef850db722f2ceee1923d67fc050ae8d6a09fa2cd1ca1dae0748864e6d7", - "sha256:0f9c48f19a6af887ac769740e914f8eb8e406a3d33a651e107f28bba1adc3796", - "sha256:156fdd17fde2a3ea9c41a8108b8ac877e4f90a7ac5e6db533ab6ecb86f723891", - "sha256:1e3b07d7aa993a2f24e3a2ef5a216869f0a1fcaaba6227ad73b265c4f15feca5", - "sha256:26d2be6009151de7aa210e8569c49eece6563b8beb7e290ebd4a10b2b8d2fc5c", - "sha256:2a0a3fb0c316c23b0d79810cf7a158c7d4671acc02a5dfa5cda7aa673478a0dc", - "sha256:2b84449a2b170ed51c26a725a2ca983bc98490c5f23d28e9473402adc7e694ba", - "sha256:328266ea13f0c517cdf758c16a2d83f0118516b8ac7910bba4eba6d4d3b3b2f1", - "sha256:33ee51c6f9f02d7b1d792d379b42321a3d13b819ecd8d136fb287be4adc7b9da", - "sha256:353b6b43e43aee22df79194584c587225ec1a06a2f444099ada2096d806d602e", - "sha256:35ec4170e5045ac0d5dfb1255320e301d5b6fc359f9cf36010007bf572888e73", - "sha256:3992b9285c75c6f74fabfdb0ca7f17f12e22d0fc631ff43d0e110ccd53382569", - "sha256:43a4a5d722f7a6b6ee8f1d3cdeffe6d7c3421452219dce0d22778e6810fb645c", - "sha256:47dc877f3a475d0e818b31a6ad6fc1fbe40f334dcd73d2cb076057aff4d73beb", - "sha256:496a47e2eef78893eb6915d0a5215c59346ebe29d5c88a56301ed74deebe45cc", - "sha256:4bd89a8bf7756b50de180258517004f30857deea82c1841f291a2c8e25cfaa83", - "sha256:4cf10267610244d4398312c4eea5cfc2f68f9a0286260d2157d45d1a54dcc6b2", - "sha256:5240e1cb013826449a5065062b47a46ce3d431fc47cbddc938e3c05e3fe4a951", - "sha256:58ec76d58dcc3ab6a3d7951ae08ae99c7b413a40c7e8255c106b5df4f768f8dd", - "sha256:5e62e45a71674b5df9f9275ffbb342c78ba026c9b556478d0b4bc4470e9f2b4b", - "sha256:669437542e9027db55e06ff05e848a9cb0e88d1fc6e659b412e9721be227b9be", - "sha256:715956ef123645ef22d1c7a13963bb9bc50c02b8578797704715a410bfa49575", - "sha256:786efcc336edc196e5a854a73ff714be198bc57da6856064083677a188c8e018", - "sha256:796968ca8e770ee1121fe209a18cee9bd462bc0cacf57e2b1d528df08c6f18d6", - "sha256:81095391ccef01c56b6061248216da4e2d749b543952fce199b628b8a8ce5ca2", - "sha256:8176eba6b182f88fa8afd9a964c9391b73f3456f6c2f59bb2514957ec6269724", - "sha256:81b88ac04e61c772854fa85b8e04428e3068fe690487a50b69bb07dda2168c36", - "sha256:82062eef6096c42ce14c7c07a7898caa3d696ac189fdb1586f59562893f6abf4", - "sha256:8676471983482522f3e124ad2c8fe38d6d6ed957379504910d2ea0c646d96cb4", - "sha256:8c764bd6690b83a72b4294934774044c8cea4356cb9b103b7dbb8232242b3047", - "sha256:8ec623cff18e328781ab7a6251f1ee77e225f14e1f5a26633028a14b7d90ed82", - "sha256:93c84850c9e529433613af2b2097634d27b30e9853271b6ea1384ee00be5424a", - "sha256:9ac560499086184142b0a0b28eca0ea1d245e9df1c008ef3356b0e3ea6cb1536", - "sha256:9b255feaa4f3c46c7ebd1319a630ee1e3aa87078c9b428f9428980597c3ce830", - "sha256:9c389ef8508f787ff1ec963b473838616773db8e00bc043cab9374f36d9e8201", - "sha256:a1b7b1b758de72de73fcf063be8ae9e2e98dd4bab0e6cd8b32c8e7d0462d78b0", - "sha256:a525dd4fd6f7a2ecf2b54fce3c8b9982650dc570992ca6e38987c3922684099a", - "sha256:a5304de3e41c33cd6e4be7b85f09409b1059b9ff6a8289482352c42fb50b4e42", - "sha256:a9f13f8c8dc72541654830d16efcc6249969bac1cbe591bee4a0ac19490592e2", - "sha256:b3fe070414ef05359c55bbbf94b7a895d532af726705e6f33e6f2eeb26326042", - "sha256:b535a2524e1adbac3c8028c49cdceb764f800ca95c2f7421aad11c5d4c274ed7", - "sha256:b9dec9619ff5e89798e9cfb5e2a53e1eed18afa1b20460d7158fa2db94dd2d3b", - "sha256:bb60d061978487db5cba8a20fb84b3ae29af5ca004a0e991cd5eaa31b0851b59", - "sha256:d09aaa1d323c4a4b5b4569f44a02bb24ba5030b55adc9710a895843796363c0c", - "sha256:d365d6e0faaf6bcddacfb71d8c033011b7a65f1a94142350a1bc9da3c85bfb8e", - "sha256:d4f546b262e0d955376bf0af9a4de13a910f5f27c5e44e4db46ceea61b4c4a7d", - "sha256:d7442e9cffccd76115521f8d64c270e923e566e9487ba9da9824149653cf0641", - "sha256:dfe8b2478b4c3556a913b187ce598ad2afd07e6acfcf652be8e5a56dee2bf200", - "sha256:e0c98003096624cc70caa5743fe6a1fd0e97ffeaf9b44560e4158b0e1a38168e", - "sha256:e45505414fba93a15957a43ff52bbf737c3ef7905464eb16ef45e1395e95206d", - "sha256:e8d5ae0f0a25b3aa7207688edf23de514f918a91ea05edbeffdbdd56d8497c13", - "sha256:ead6c3a1858c551b4edbba781d48892a487fda6ef6416c87f8ed559bfb29c904", - "sha256:fafb423453e711ea95a669373bdaf628e9e8a0c606c1366499835f3e446554dc", - "sha256:fc80ba01ff5663c74ce74c9ee2267dbf900ee8e8d18d55937b5e83eb1e179998", - "sha256:fcb41d70da706e14a805fcbf42bdb17435d4a91420bd5b6a88f8f61beb95b862" - ], - "markers": "python_version >= '3.8'", - "version": "==2.12.0" + "sha256:02b33a8c19768c94f7ffd6aa6f9f64818e88afce23250016b28583929d20fb12", + "sha256:0c9829b2edfcf6b5d72a6ff330d4380f36a937088314c675531b43d3423dd8af", + "sha256:0cc116056a8a2a917a4eec85661dfadd411e0d8faae604ef6a0e19fe5cd57ef1", + "sha256:0db97f92be3efe0ac62fd3f933c91a78438cef13f283b6dfc2ee11123bfd7d8a", + "sha256:12eed2e9171c85b703d75c985dab2ecad4fe7025b7d2f842596fce1576238ece", + "sha256:1812e48c6c58707db9988445a219a908a710ea065b2cc808d9a50636291f27d4", + "sha256:19a3b10161c91ca8e0fd79348665cca711fd2eac6ce336ff9e6b447783817f93", + "sha256:1a22be4df364f49a507af4ac9ea38108a0105f39da3f9c60dce62d6c6ea4ccdc", + "sha256:1ac8ff145c63cd0dcfd9590fe694b5269aacbc130298dc7209b095d101f8cdde", + "sha256:20205422fcf2caf9a7488394587df86e5b54fdb315c1152094fbb63eec4e9304", + "sha256:21bef5854d49b62e2c33848b5c3e8acf22a3b46af803ef6ff19529949cb7cf9f", + "sha256:2bd4169b808745d219a69094b3cb86006938d45e7293249694e6b7366225a186", + "sha256:2dc76ee55a7d915a55960a726ceaca7b9097f67e4b4e681ef89871bcf98f00be", + "sha256:32b71e50b07f86916ac04bd1eefc2bd2c93706b81393748b08394509ee6585dc", + "sha256:34dcdbbd25c1e124e17fe58050452960fd16a11f9d3476aaa87260e28ecca0fd", + "sha256:3a7a0a49ce50d9c306c4343a7d6a3baa11092d4399a4af4355c615ccc321a9d3", + "sha256:3c87856105dcb25b5bbff031d99f06ef4d1c8380d096222e1bc63b496b5258e6", + "sha256:42ef5349135626ad6cd889a0a81400137e5c6928502b0817ea9e90bb10702000", + "sha256:4ca20f85a973a4ca8b00cf466cd72c27ccc72372549b138fd48d7e70e5a190ab", + "sha256:4e3a2611f8788608ebbcb060a5e36b45911bc3b8adc421b1dc29d2c81786ce4d", + "sha256:4f2ae8d0e359b216b695f1e7e7256f208c390db0480601a439c5dd1e1e4e16ce", + "sha256:5aee23cd046abf9caeddc982113e81ba9097a01f3972e9560f5ed64e3495f66d", + "sha256:5c6245db573863b335d9ca64b3230f623caf0988594ae554c0c794e7f80e3e66", + "sha256:5f87787d562e42bf1006a87eb689814105b98c4d5545874a281280d0f8b9a2d9", + "sha256:5fe3fda5fa73fec74278912e438fce1612a79c36fd0cc323ea3dc2d5ce629f31", + "sha256:62fd14a80b8b71726e07018628daaee0a2e00937625083f96f69ed6b8e3304c0", + "sha256:66fb3877014dca0b9286b0f06fa74062357bd23f2d9d102d10e31e0f8fa9b324", + "sha256:679cbf9b15bfde1654cf48124128d3fbe52f821fa158a98fcee5fe7e05db1917", + "sha256:67fa45cd813821e4f5bec0ac0820869e8e37430b15509d3f5fad74ba34b53852", + "sha256:685d98593f13649ad5e7ce3e58efe689feca1badcf618ba397d3ab877ee59326", + "sha256:6c16d90a597a8c2d3ce22d6be2eb3e3f14786974c11b01886e51b3cf0d5edaf7", + "sha256:71acbc1febbe87532c7355eca3308c073d6e502ee4ce272b5028967847c8e063", + "sha256:7558622a62243be866a7e7c41da48eacd82c874b015ecf67d18ebf65ca3f7436", + "sha256:7693704c0f2f6b9beed912ff609781edf5fcf5d63aff30c92be4093e09d94b8e", + "sha256:88601de1da06c7cab3d5ed3d5c3801ef683366e769e829e96383fdab6ae2fe42", + "sha256:8d526cdcaca06a496877cfe61cc6608df2c3a6fce210e076761964ebac7f77cc", + "sha256:918f8389de29b4f41317d121f1150176fae2cdb5fa41f68b2aee0b9dc88df5c3", + "sha256:924377d398b1c48e519ad86a71903f9f36117f69e68242c99fb762a2465f5ad2", + "sha256:9f128db8997c3339f04f7f3946dd9bb2a83d15e0a40d35529774da1e9e501511", + "sha256:9fad549521c4c13bdb1e889b2855a86ec835780d534ffd8f091c2647863243be", + "sha256:a26bdf3462d5f12a4c1009fdbe54366c6ef22c7b6f6808705b51dedaaeba8296", + "sha256:ab04cf4e56e1ee65bee2adaa26a04695e92eb1ed1ccc65fbdafd0d114399595a", + "sha256:b0c8f24ae611a58782773af34dd356f1f26756272c04be2be7ea73b47e5da37d", + "sha256:bdfe4a7f033e6783c3e9a7f8d8fc0b115367330762e00a03ff35fedf663994f3", + "sha256:c23b2408e3adcedec84ea1131e238f0124a5bc0e491f60d1137ad7239b37c01a", + "sha256:ccbce292380ebf63fb9a52e6b03d91677f6a003e0c11f77473efe3913a75f289", + "sha256:cfef4ebfb4f055ce3ebc7b6c1c4d0dbfcffdca0e783ad8c6986c992915a57ed3", + "sha256:d4a2d3db2c3b8e519d5ef436cd405abd33542a7b7761fb05ef5a5f782a8ce0b1", + "sha256:dabb3b155819811b4602f7e9be936e2024e20dc99a90f103e36b45768badf9c3", + "sha256:de01f33aa53da37530ad97dcd17e9affa25a8df4ab822506bb08101bab0c2673", + "sha256:dec0ec2135a4e2a59623e40c31d6e8a8ae73305ade2634380e4263d815855750", + "sha256:e433827eccd6700a34a2ab28fd9361ff6e4d4923f718d2d1dac6d1dcd9d54da6", + "sha256:e58d82fe0e59d6e096ada3281d647a2e7420f7da5453b433b43880e1c2e8e0c5", + "sha256:e9935aff447f5400a2665ab10ed2da972591713080e1befe1bb8954e7c0c7806", + "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7", + "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237" + ], + "markers": "implementation_name != 'pypy'", + "version": "==2.13.0" }, "toml": { "hashes": [ @@ -4604,14 +4667,6 @@ "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.10.2" }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.1" - }, "toolz": { "hashes": [ "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f", @@ -4625,16 +4680,14 @@ "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" ], - "markers": "python_version >= '3.7'", "version": "==4.66.1" }, "traitlets": { "hashes": [ - "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", - "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" + "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e", + "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae" ], - "markers": "python_version >= '3.7'", - "version": "==5.9.0" + "version": "==5.11.2" }, "trie": { "hashes": [ @@ -4662,11 +4715,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", - "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" ], - "markers": "python_version >= '3.7'", - "version": "==4.7.1" + "markers": "python_version >= '3.8'", + "version": "==4.8.0" }, "tzdata": { "hashes": [ @@ -4678,19 +4731,19 @@ }, "tzlocal": { "hashes": [ - "sha256:46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803", - "sha256:f3596e180296aaf2dbd97d124fe76ae3a0e3d32b258447de7b939b3fd4be992f" + "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8", + "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e" ], - "markers": "python_version >= '3.7'", - "version": "==5.0.1" + "markers": "python_version >= '3.8'", + "version": "==5.2" }, "urllib3": { "hashes": [ - "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", - "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" + "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", + "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" ], "markers": "python_version >= '3.7'", - "version": "==2.0.4" + "version": "==2.0.7" }, "varint": { "hashes": [ @@ -4700,11 +4753,11 @@ }, "virtualenv": { "hashes": [ - "sha256:29c70bb9b88510f6414ac3e55c8b413a1f96239b6b789ca123437d5e892190cb", - "sha256:772b05bfda7ed3b8ecd16021ca9716273ad9f4467c801f27e83ac73430246dca" + "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af", + "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381" ], "markers": "python_version >= '3.7'", - "version": "==20.24.4" + "version": "==20.24.6" }, "watchdog": { "hashes": [ @@ -4741,183 +4794,179 @@ }, "wcwidth": { "hashes": [ - "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", - "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704", + "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4" ], - "version": "==0.2.6" + "version": "==0.2.8" }, "web3": { "hashes": [ - "sha256:3bc95043ee9fc6ee0b13a4766d4975b9f7cae069db136430a3799ed18743e608", - "sha256:cb454d0180e63ba1d83143dccf7c623581ba58e222edb006f48252d8a7b948e0" + "sha256:0d39f58cbb0c652b45e711f01e01ec655117b47ba4eefd1f9550c52d205afa8c", + "sha256:d301d7120922d5b9e5c9535ef9780012ea25ea4011c2b177490ba7d3ef886b92" ], "markers": "python_full_version >= '3.7.2'", - "version": "==6.9.0" + "version": "==6.11.1" }, "websockets": { "hashes": [ - "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", - "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", - "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", - "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", - "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", - "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", - "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", - "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", - "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", - "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", - "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", - "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", - "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", - "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", - "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", - "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", - "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", - "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", - "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", - "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", - "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", - "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", - "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", - "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", - "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", - "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", - "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", - "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", - "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", - "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", - "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", - "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", - "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", - "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", - "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", - "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", - "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", - "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", - "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", - "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", - "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", - "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", - "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", - "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", - "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", - "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", - "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", - "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", - "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", - "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", - "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", - "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", - "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", - "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", - "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", - "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", - "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", - "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", - "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", - "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", - "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", - "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", - "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", - "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", - "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", - "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", - "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", - "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", - "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", - "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" + "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b", + "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6", + "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df", + "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b", + "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205", + "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892", + "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53", + "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2", + "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed", + "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c", + "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd", + "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b", + "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931", + "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30", + "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370", + "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be", + "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec", + "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf", + "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62", + "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b", + "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402", + "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f", + "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123", + "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9", + "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603", + "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45", + "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558", + "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4", + "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438", + "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137", + "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480", + "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447", + "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8", + "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04", + "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c", + "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb", + "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967", + "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b", + "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d", + "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def", + "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c", + "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92", + "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2", + "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113", + "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b", + "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28", + "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7", + "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d", + "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f", + "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468", + "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8", + "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae", + "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611", + "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d", + "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9", + "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca", + "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f", + "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2", + "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077", + "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2", + "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6", + "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374", + "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc", + "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e", + "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53", + "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399", + "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547", + "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3", + "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870", + "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5", + "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8", + "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7" ], - "markers": "python_version >= '3.7'", - "version": "==11.0.3" + "markers": "python_version >= '3.8'", + "version": "==12.0" }, "werkzeug": { "hashes": [ - "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8", - "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528" + "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0", + "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962" ], "markers": "python_version >= '3.8'", - "version": "==2.3.7" + "version": "==3.0.0" }, "wrapt": { "hashes": [ - "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", - "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", - "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", - "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", - "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", - "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", - "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", - "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", - "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", - "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", - "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", - "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", - "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", - "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", - "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", - "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", - "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", - "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", - "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", - "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", - "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", - "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", - "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", - "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", - "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", - "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", - "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", - "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", - "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", - "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", - "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", - "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", - "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", - "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", - "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", - "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", - "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", - "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", - "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", - "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", - "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", - "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", - "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", - "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", - "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", - "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", - "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", - "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", - "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", - "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", - "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", - "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", - "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", - "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", - "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", - "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", - "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", - "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", - "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", - "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", - "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", - "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", - "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", - "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", - "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", - "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", - "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", - "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", - "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", - "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", - "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", - "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", - "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", - "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", - "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.15.0" + "sha256:01592f7b69b0e721146eed35f0e73f64d06c4caf449d630382863e1f1709150d", + "sha256:09695a747c4af43a50425a45badebdb932d026d6e4d57b885e328f1294a14825", + "sha256:115970769617c7d03d23ecfa08c174f29a9bbf8da08ded204702bc34b76658ab", + "sha256:169ae1817e18a8ae3e10796b1e0c203e04d83ca487f64e7ddb22077eae9a1915", + "sha256:16e5d269660b7217a7a53631df87900ee8937038fae6a3adb88411b108bb8f50", + "sha256:17e978083c577ee724c8eeb0155ed96dd7a1e50b97f30c535da1c09cda0970c9", + "sha256:1e3df5fd073559d32ad8cf6ee10d55e956ed794c130b24c57769416a13c37a60", + "sha256:221eca686d29b2babd09007296816fe338e502a002c965b27737d108e2ce1832", + "sha256:228533d82158a4d25de8b3703195d5c69bae5860010c75bd01f6ab393561ea22", + "sha256:22c6ba8b141ec9b6e34beff8429bd03cd082987dd4831d288b2931fee6c34d29", + "sha256:2522e09d2f8fc0f1db4aafdeebe84597c078cd7d70cc56b1bbc4887870b1f24c", + "sha256:29c20ca9bab38759a1d8fb171ad17f7da5ec18855fc7aacd6c93edc83dbc9764", + "sha256:29d70cbf5814bf91193cdac1ffc76240adfeb7c89a8070dc29e49674249542c2", + "sha256:2e287347a241c3db125d58ec0c0c9f363fd7cbfdf2affc352c0f5bd4d0f0b799", + "sha256:378021d27d168f6f09cf69eaaa9052c8ea48e103beb7d403fc978ad7d6dcdc3e", + "sha256:399a64e99b3a327159e79cc20b6f0552e72e32bf6155d5521b0496cab26d1110", + "sha256:3a7e40704f48038f5233b993d61ac3195beb748cfe8e8f4698349c5fecbe6280", + "sha256:3b13c53d8629cced58bdee9ee3c3a4372097660dad7e8398b3f26267a942cb2e", + "sha256:3ca9ab90a5d6fa91761a6151018819a9239b28c9cc2e8e1d679833bd0f5f939c", + "sha256:3cf2fae5a9757491ed8756f580ece8312fea95e07be2b340ddef982a766a7ac7", + "sha256:3ee64ab62c8fdc671c16b6d44bee12d598e0ad936b3a17e891404fd79f1f3d61", + "sha256:4148753415a77f674a9f3ed372d68f9b6c0e83e6f2bcf91d3068462a40cb43cd", + "sha256:4409bd44e5ffa1656bce5c8824155abc0e3151d07393c3434a28f812c5a123d0", + "sha256:467ca88d704655f3e7429af2fa4649d602cb27ce289f26b833c207bf11d96830", + "sha256:4c51ab4213d97f9e2287c5dd9f61fc44a2604be79246239ebadeae636b274596", + "sha256:4e07ac0a4f44693bfc8df134b181268adfcdd7e73db9814901df3e051d9266fc", + "sha256:4f31b53e611854ab300535f81038a83dbcd472814dd3a9970eeb201578df6262", + "sha256:54be66645d5b2358b9294ff0349005789541ac9a4c3a10d60042685e2ea51ca0", + "sha256:55d9cbee700697ae3a5a34045446d0890baada178fe6028604e8f2c9992470cb", + "sha256:5816dee9ab69a18ca47a0d1d67086b2995910e11b7a0a2a2bae6e9ac63ac2828", + "sha256:59ecece1b2b35d5fc6f1605d15e90d4342b0658b17158643e6a17b72e38da826", + "sha256:5b3f2cef94b53f0d55d96c6309f1100110475c7b1fb907bc5f3fd2b0c940b238", + "sha256:604dad6f6b34d767097b12a1ae84a128d899626c78e86e1180eff35d64f1a57d", + "sha256:640fdfcb41865941c2fa4c0dfb9db6ab389d65e3266a464afeeff23f8f77fb24", + "sha256:65586e7a33267e5725cf228c0f7b9e819ab60c0c88ccf9827c2e0526d43a1103", + "sha256:6bb06bfe4c53f65d59bbe9101a8181c5e8dcde1ad0f778a4d502b599ebc213e6", + "sha256:6d4950d0b5ebbe74ca549b2000474330988c88ae59a67b961e2cfdc18cd75003", + "sha256:706bddba81c86330d92bbf080afef4a8c4f4fd86e0bc4a1975fac9b84c6758af", + "sha256:76263e0c1207dfe9099805d1cf6147de05f638a598c8453cd8bb914aaf7520db", + "sha256:77cd63017a8c35ead1a07f85c3ec4fa259bb2260332d69c6e9ae4c35b2c8e79f", + "sha256:793c91e9c86d80850f2f40f1d3d5dce4f810f5aa6e5a80310fb8d32f5210f4df", + "sha256:7d71ac38f1f178a8d3139e5560d95dabd4f894820a5627d0cd7535e9a255056a", + "sha256:7e372d054af5b9652c7ba05fda93aec3bcb8f53dab21e61249c98a1596e48402", + "sha256:8c9b972bc3dad5363f966912b8134b2ebfc1dc5a030e0835dc6c60f107390fe7", + "sha256:969d518cc42be5f9f78fb7e6f42e51796e1ebce02219c93a03fcb29a7a3eb1e7", + "sha256:a3461740b336424b836840f3568a56775e5fc988521cb6072aa3c3f2a589036c", + "sha256:a3a15c874a1a30a9c4edb5ec55d96c1210f5974df51a6d69a367aace74378467", + "sha256:a3fdde5f045de444875fa2c6822a1551dd03dcbb3a22fb52ded73744d7ebad55", + "sha256:a7675ff09d87435b8f678d17e78211cb589ae805fd31579dc918e23c71710a6c", + "sha256:a9a65f98a571083dc61419295aeb8d59170227227d4ba13d6d5b96a953a519aa", + "sha256:b265aaab64dfb9db412ee315ff23f52f1986cf6e0989d719d90423baf4019d63", + "sha256:b96bbcbf81ee9ee2e0c81a5f2a3bd0975a6dc0a6a9fc335f9b302a661999e3ed", + "sha256:bdbb31db39b69d0f0e5ae83f99b8e28fa3ad7b7e05de6c5faa3cd52a4de20ef5", + "sha256:c3f3c320272601223a036fecd942dd1258a15cebe88e18012cc88b2e6b813483", + "sha256:c85b8fbd7c0e303a6d6e5731a7898f10e070dead30822b0481327dba74e7123c", + "sha256:c939d2cc4015311e8aae68f52a6bc8e69c02b2c7166953fef9c1f06657aabdfc", + "sha256:d6a866d5b8fc0f713440aafb9507f688f4d660c2f868093ae6cd0acb62d1a918", + "sha256:d7c7e203e93f1eed57880f84505e7d2b4ece02e3ed7c6690ba90d0385f1a74b4", + "sha256:d8d2fda2907c42ba3df720f0c7a704f36e09c586c8f7a4eed8b9db0e1d2fa79a", + "sha256:db39f9065ed5b30081f8df71ced66cd29640b21e0091e2e5572ba0d70078f611", + "sha256:db4772a9498023ce19f95b7aa86a8d94c8838269597361a986133373990be41f", + "sha256:dd5dd67c074201664e4b80022128ef6eee8a007f2281d7099cd2114061af796a", + "sha256:dfc2a91a23de91c9cedc9bc34742469ad7d1f177d4bf1a7a359af1adf9050e9b", + "sha256:e5b450194731714cba9267e5c04e1f3622090c3ec43e1acba36744d92354da5e", + "sha256:e7b324089cb59d700ed5cace6b39013f81473d1bf410da77a0d304ebadbc6eb9", + "sha256:ea6041327840465f2450a1c8894a834a99aa4626a96f82547d9c042526eb1487", + "sha256:eb72f906837cea3583fd9c91c6e286f8616360767703c837e7dfa1a70b123ad0", + "sha256:f0b9edc564b1af9e9ac9cf932349136c74894ce2f699e00c1279b0fa5909d515", + "sha256:f9e10c3bf07074377fbbff3d2b02d740c17602ce5d6c91455977bdb32fbbebe8", + "sha256:fc43eb869c6baba54dda3264109354a5d0ea621c51ba945ff71308347f24a1c9" + ], + "version": "==1.16.0rc1" }, "yarl": { "hashes": [ @@ -5001,52 +5050,52 @@ }, "zipp": { "hashes": [ - "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0", - "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147" + "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", + "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" ], - "markers": "python_version >= '3.8'", - "version": "==3.16.2" + "version": "==3.17.0" }, "zope-interface": { "hashes": [ - "sha256:0326cc72f232167498eb4814232c960881bd8eb5e1f7e92ed07ea7afbf21dbb0", - "sha256:04ab70d12e46f54f2c614e9ca12f3d29de41101f05563f7c9bd3351fcf6d85c3", - "sha256:090cc8c625f1853cfcaa46e333e151210565a4e1379a6f509069b53389b1ec23", - "sha256:167ea1a5c28aad2fa7fb0ca8761229bf54766ab6e696c80e592ee8c936ab1776", - "sha256:1ad9d87bee6c49bb00d75ad854288e41a4acbe3b7d3576faeb1662d2f0e48e00", - "sha256:2900750bc08e1adc14799eecf3afb6bcfa93d334e32407273af051b0e1bf198b", - "sha256:2cd536f007e875d330e7e3f80204cede6d4dad7d5cdc7019d77b11b501e3b132", - "sha256:39273357177f1566134c18f6a26076e5b1938292fe5994f5197a0ed2374882b4", - "sha256:415526873ad6ccea853801dbfe6074dbd5e16487854b17c343d9fc7f095bb483", - "sha256:48299561fe59dfbb4430b6bf0a2f3a3cbfc8bc25e03f8861a3a57222b57a9512", - "sha256:4a208684351acf68357ab17aacaa3bbdd293aa039b73a891c281c4df63c625e2", - "sha256:4c518a72e10103b1d74f616a6145711a002601665c147e264e9e9e0823f339b1", - "sha256:57e981db978a12f4612c599ebbb68ff2dbd81a4617186a12f5c727e686e31461", - "sha256:58ce64e3227ac6fd54c9053e0f452bfba4f3f1ca3d4387f34ee1476d17244fe5", - "sha256:636d9860d05c8faa563d88196c264824aacb6253e7f3cb43d8fc983e5402a2cd", - "sha256:6ed7d7a3d2c45921ad08c709a3130ecf580341de0a675d9e19dccf3917e7f8c4", - "sha256:7371e15df1aaffb076c2a886b2a2932dac171d45581b4fa0be2ced477e480777", - "sha256:77f1f29759014732e3b7addfcfaf14c73a0f325af9d628d5f811d4e58043b3c3", - "sha256:88ac8670b5f4dd1b743a04558cf4ad3e581a2c21f42ffaa190a3676e5e22e3b7", - "sha256:976d7b50221f3cd1b2c8cfda0e1f3e371950124f288b5f97a0b28ffda4f56844", - "sha256:98586b7a16add0503b8851e848bd06e8b4b5d9ead825b28ab93a982c3e0a76ee", - "sha256:9970222b1ad15636422e9cc95ae0dfbbe5ca4127a94027c94dbdb2b1ee6ee618", - "sha256:9c98ca179a060ce48564407179839390acd804f0a70a9954a30a605b5b251540", - "sha256:abc4dd63500f34d8f11fee7f5967f8d56856964c8530d468ab53bb72ceee4712", - "sha256:b42d6d6de23d3a287342b286864b4bef371fa4fe0409fda79a1eaec01af2b1cf", - "sha256:b6cd75530f51179a4165ee1bccff1a690ea64e001e02e1317dc177dee15ba13f", - "sha256:c1c4ff056cdabe871ff89bedab16b4123098af1af8ddbb20bf43bcd8fe6474fe", - "sha256:cb7d92c6579bdcbe18933b8b914d2141760efa47ea586a4b9206320ec00bd587", - "sha256:d711955d9f183d78a1937f69d11329bafa40741c0d6f97d3a210fe21fd666508", - "sha256:db0ca240b647388754ad4c9cee053a9bd731f933943c5cadaf2195ce3b953652", - "sha256:ed58ffd21752f9b92258284d59d8218dfb0bf0fcb41c75ffa4c1317fdf58bb39", - "sha256:f16319abdd98f728acca7e27750495d7ddbbb566a595f44f52f70852c93a69c7", - "sha256:f4f97f40bd9d9dca64fa68e0329db3269d6cb97e207946c5ccdfa865a6d32b9b", - "sha256:f73552012b31af214e8f0e7b6e43066c968f189d2e2f005e271e3308ee6fa3f2", - "sha256:fca350cadf205ff20700b10075a894a2e1cdf201321f1d5d25950b43013a4148" + "sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff", + "sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c", + "sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac", + "sha256:239a4a08525c080ff833560171d23b249f7f4d17fcbf9316ef4159f44997616f", + "sha256:2f8d89721834524a813f37fa174bac074ec3d179858e4ad1b7efd4401f8ac45d", + "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309", + "sha256:34c15ca9248f2e095ef2e93af2d633358c5f048c49fbfddf5fdfc47d5e263736", + "sha256:387545206c56b0315fbadb0431d5129c797f92dc59e276b3ce82db07ac1c6179", + "sha256:43b576c34ef0c1f5a4981163b551a8781896f2a37f71b8655fd20b5af0386abb", + "sha256:57d0a8ce40ce440f96a2c77824ee94bf0d0925e6089df7366c2272ccefcb7941", + "sha256:5a804abc126b33824a44a7aa94f06cd211a18bbf31898ba04bd0924fbe9d282d", + "sha256:67be3ca75012c6e9b109860820a8b6c9a84bfb036fbd1076246b98e56951ca92", + "sha256:6af47f10cfc54c2ba2d825220f180cc1e2d4914d783d6fc0cd93d43d7bc1c78b", + "sha256:6dc998f6de015723196a904045e5a2217f3590b62ea31990672e31fbc5370b41", + "sha256:70d2cef1bf529bff41559be2de9d44d47b002f65e17f43c73ddefc92f32bf00f", + "sha256:7ebc4d34e7620c4f0da7bf162c81978fce0ea820e4fa1e8fc40ee763839805f3", + "sha256:964a7af27379ff4357dad1256d9f215047e70e93009e532d36dcb8909036033d", + "sha256:97806e9ca3651588c1baaebb8d0c5ee3db95430b612db354c199b57378312ee8", + "sha256:9b9bc671626281f6045ad61d93a60f52fd5e8209b1610972cf0ef1bbe6d808e3", + "sha256:9ffdaa5290422ac0f1688cb8adb1b94ca56cee3ad11f29f2ae301df8aecba7d1", + "sha256:a0da79117952a9a41253696ed3e8b560a425197d4e41634a23b1507efe3273f1", + "sha256:a41f87bb93b8048fe866fa9e3d0c51e27fe55149035dcf5f43da4b56732c0a40", + "sha256:aa6fd016e9644406d0a61313e50348c706e911dca29736a3266fc9e28ec4ca6d", + "sha256:ad54ed57bdfa3254d23ae04a4b1ce405954969c1b0550cc2d1d2990e8b439de1", + "sha256:b012d023b4fb59183909b45d7f97fb493ef7a46d2838a5e716e3155081894605", + "sha256:b51b64432eed4c0744241e9ce5c70dcfecac866dff720e746d0a9c82f371dfa7", + "sha256:bbe81def9cf3e46f16ce01d9bfd8bea595e06505e51b7baf45115c77352675fd", + "sha256:c9559138690e1bd4ea6cd0954d22d1e9251e8025ce9ede5d0af0ceae4a401e43", + "sha256:e30506bcb03de8983f78884807e4fd95d8db6e65b69257eea05d13d519b83ac0", + "sha256:e33e86fd65f369f10608b08729c8f1c92ec7e0e485964670b4d2633a4812d36b", + "sha256:e441e8b7d587af0414d25e8d05e27040d78581388eed4c54c30c0c91aad3a379", + "sha256:e8bb9c990ca9027b4214fa543fd4025818dc95f8b7abce79d61dc8a2112b561a", + "sha256:ef43ee91c193f827e49599e824385ec7c7f3cd152d74cb1dfe02cb135f264d83", + "sha256:ef467d86d3cfde8b39ea1b35090208b0447caaabd38405420830f7fd85fbdd56", + "sha256:f89b28772fc2562ed9ad871c865f5320ef761a7fcc188a935e21fe8b31a38ca9", + "sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de" ], "markers": "python_version >= '3.7'", - "version": "==6.1a2" + "version": "==6.1" } } } diff --git a/dev-requirements.txt b/dev-requirements.txt index 188c8f9..405ede8 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,176 +1,172 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2 -aiosignal==1.3.1 +aiohttp==3.8.2; python_version >= '3.6' +aiosignal==1.3.1; python_version >= '3.7' +ape-solidity==0.6.9 appdirs==1.4.4 -async-timeout==4.0.3 -attrs==23.1.0 -autobahn==23.1.2 +asttokens==2.4.0 +async-timeout==4.0.3; python_version >= '3.7' +attrs==23.1.0; python_version >= '3.7' +autobahn==23.6.2; python_version >= '3.9' automat==22.10.0 -bitarray==2.8.1 -bytestring-splitter==2.4.1 -cached-property==1.5.2 -certifi==2023.7.22 -cffi==1.15.1 -charset-normalizer==2.1.1 -click==8.1.7 -colorama==0.4.6 -constant-sorrow==0.1.0a9 -constantly==15.1.0 -cryptography==41.0.3 -cytoolz==0.12.2 -dateparser==1.1.8 -eth-abi==4.2.0 -eth-account==0.8.0 -eth-bloom==2.0.0 -eth-hash==0.5.2 -eth-keyfile==0.6.1 -eth-keys==0.4.0 -eth-rlp==0.3.0 -eth-tester==0.9.1b1 -eth-typing==3.4.0 -eth-utils==2.2.0 -flask==2.2.5 -flask-cors==4.0.0 -frozenlist==1.4.0 -hendrix==4.0.0 -hexbytes==0.3.1 -humanize==4.8.0 -hyperlink==21.0.0 -idna==3.4 -incremental==22.10.0 -itsdangerous==2.1.2 -jinja2==3.0.3 -jsonschema==4.19.0 -jsonschema-specifications==2023.7.1 -lru-dict==1.2.0 -mako==1.2.4 -markupsafe==2.1.3 -marshmallow==3.20.1 -maya==0.6.1 -mnemonic==0.20 -msgpack==1.0.5 -msgpack-python==0.5.6 -multidict==5.2.0 -mypy-extensions==1.0.0 -git+https://github.com/nucypher/nucypher.git@2b1c7d6df207ecd239db4331f452332dbcd6a8a9#egg=nucypher -nucypher-core==0.12.0 -packaging==23.1 -parsimonious==0.9.0 -pendulum==3.0.0a1 -prometheus-client==0.17.1 -prometheus-flask-exporter==0.22.4 -protobuf==4.24.2 -py-ecc==6.0.0 -py-evm==0.7.0a4 -pyasn1==0.5.0 -pyasn1-modules==0.3.0 -pychalk==2.0.1 -pycparser==2.21 -pycryptodome==3.18.0 -pyethash==0.1.27 -pynacl==1.5.0 -pyopenssl==23.2.0 -python-dateutil==2.8.2 -pytz==2023.3 -pyunormalize==15.0.0 -referencing==0.30.2 -regex==2023.8.8 -requests==2.31.0 -rlp==3.0.0 -rpds-py==0.10.0 -semantic-version==2.10.0 -service-identity==23.1.0 -setuptools==68.1.2 -six==1.16.0 -snaptime==0.2.4 -sortedcontainers==2.4.0 -tabulate==0.9.0 -time-machine==2.12.0 -toolz==0.12.0 -trie==2.1.1 -twisted==23.8.0 -txaio==23.1.1 -typing-extensions==4.7.1 -tzdata==2023.3 -tzlocal==5.0.1 -urllib3==2.0.4 -watchdog==3.0.0 -web3==6.9.0 -websockets==11.0.3 -werkzeug==2.3.7 -yarl==1.9.2 -zipp==3.16.2 -zope-interface==6.1a2 -ape-solidity==0.6.8 -asttokens==2.2.1 backcall==0.2.0 base58==1.0.3 -cfgv==3.4.0 +bitarray==2.8.2 +bytestring-splitter==2.4.1 +cached-property==1.5.2 +certifi==2023.7.22; python_version >= '3.6' +cffi==1.16.0; python_version >= '3.8' +cfgv==3.4.0; python_version >= '3.8' +charset-normalizer==2.1.1; python_full_version >= '3.6.0' +click==8.1.7; python_version >= '3.7' +colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' commonmark==0.9.1 -coverage==6.5.0 +constant-sorrow==0.1.0a9; python_version >= '3' +constantly==15.1.0 +coverage[toml]==6.5.0; python_version >= '3.7' +cryptography==41.0.5; python_version >= '3.7' +cytoolz==0.12.2; implementation_name == 'cpython' dataclassy==0.11.1 +dateparser==1.1.8; python_version >= '3.7' decorator==5.1.1 deprecated==1.2.14 distlib==0.3.7 eip712==0.2.1 +eth-abi==4.2.1; python_version < '4' and python_full_version >= '3.7.2' +eth-account==0.8.0; python_version >= '3.6' and python_version < '4' eth-ape==0.6.19 -ethpm-types==0.5.4 -evm-trace==0.1.0a24 -exceptiongroup==1.1.3 -executing==1.2.0 -filelock==3.12.3 -greenlet==3.0.0a1 -hypothesis==6.83.0 -identify==2.5.27 +eth-bloom==2.0.0; python_version >= '3.7' and python_version < '4' +eth-hash[pycryptodome]==0.5.2; python_version >= '3.7' and python_version < '4' +eth-keyfile==0.6.1 +eth-keys==0.4.0 +eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' +eth-tester==0.9.1b1; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.5.1; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.3.0; python_version >= '3.7' and python_version < '4' +ethpm-types==0.5.8 +evm-trace==0.1.0a25 +executing==2.0.0 +filelock==3.12.4 +flask==2.2.5; python_version >= '3.7' +frozenlist==1.4.0; python_version >= '3.8' +greenlet==3.0.0 +hendrix==4.0.0 +hexbytes==0.3.1; python_version >= '3.7' and python_version < '4' +humanize==4.8.0; python_version >= '3.8' +hyperlink==21.0.0 +hypothesis==6.88.1 +identify==2.5.30; python_version >= '3.8' +idna==3.4; python_version >= '3.5' ijson==3.2.3 importlib-metadata==6.8.0 +incremental==22.10.0 iniconfig==2.0.0 -ipython==8.12.2 -jedi==0.19.0 +ipython==8.16.1 +itsdangerous==2.1.2; python_version >= '3.7' +jedi==0.19.1 +jinja2==3.0.3; python_version >= '3.6' +jsonschema==4.19.1; python_version >= '3.8' +jsonschema-specifications==2023.7.1; python_version >= '3.8' lazyasd==0.1.4 +lru-dict==1.2.0 +mako==1.2.4; python_version >= '3.7' +markupsafe==2.1.3; python_version >= '3.7' +marshmallow==3.20.1; python_version >= '3.8' matplotlib-inline==0.1.6 +maya==0.6.1 +mnemonic==0.20; python_version >= '3.5' morphys==1.0 -msgspec==0.18.2 -nodeenv==1.8.0 +msgpack==1.0.7; python_version >= '3.8' +msgpack-python==0.5.6 +msgspec==0.18.4 +multidict==5.2.0; python_version >= '3.6' +mypy-extensions==1.0.0; python_version >= '3.5' +nodeenv==1.8.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +nucypher@ git+https://github.com/nucypher/nucypher.git@f893a7388e5ab91d7df340f89e449d37030607c7 +nucypher-core==0.13.0 numpy==1.26.1 +packaging==23.2; python_version >= '3.7' pandas==1.5.3 +parsimonious==0.9.0 parso==0.8.3 +pendulum==3.0.0b1; python_version >= '3.8' pexpect==4.8.0 pickleshare==0.7.5 -platformdirs==3.10.0 +platformdirs==3.11.0 pluggy==1.3.0 -pre-commit==3.3.3 +pre-commit==2.12.1; python_full_version >= '3.6.1' +prometheus-client==0.17.1; python_version >= '3.6' prompt-toolkit==3.0.39 +protobuf==4.25.0rc2; python_version >= '3.8' ptyprocess==0.7.0 pure-eval==0.2.2 py==1.11.0 py-cid==0.3.0 +py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' +py-evm==0.7.0a4 py-geth==3.13.0 py-multibase==1.0.3 py-multicodec==0.2.1 py-multihash==0.2.3 py-solc-x==1.1.1 -pydantic==1.10.12 +pyasn1==0.5.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pychalk==2.0.1 +pycparser==2.21 +pycryptodome==3.19.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pydantic==1.10.13 +pyethash==0.1.27 pygithub==1.59.1 pygments==2.16.1 pyjwt[crypto]==2.8.0 -pytest==6.2.5 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-timeout==2.1.0 +pynacl==1.5.0; python_version >= '3.6' +pyopenssl==23.2.0; python_version >= '3.6' +pytest==6.2.5; python_version >= '3.6' +pytest-cov==4.1.0; python_version >= '3.7' +pytest-mock==3.12.0; python_version >= '3.8' +pytest-timeout==2.2.0 pytest-twisted==1.14.0 python-baseconv==1.2.2 -pyyaml==6.0.1 +python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pytz==2023.3.post1 +pyunormalize==15.0.0; python_version >= '3.6' +pyyaml==6.0.1; python_version >= '3.6' +referencing==0.30.2; python_version >= '3.8' +regex==2023.10.3; python_version >= '3.7' +requests==2.31.0; python_version >= '3.7' rich==12.6.0 +rlp==3.0.0 +rpds-py==0.10.6; python_version >= '3.8' safe-pysha3==1.0.4 +semantic-version==2.10.0; python_version >= '2.7' sentry-sdk==1.32.0 -sqlalchemy==2.0.20 -stack-data==0.6.2 -toml==0.10.2 -tomli==2.0.1 +service-identity==23.1.0; python_version >= '3.8' +setuptools==68.2.2; python_version >= '3.8' +six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +snaptime==0.2.4 +sortedcontainers==2.4.0 +sqlalchemy==2.0.22 +stack-data==0.6.3 +tabulate==0.9.0; python_version >= '3.7' +time-machine==2.13.0; implementation_name != 'pypy' +toml==0.10.2; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' +toolz==0.12.0; python_version >= '3.5' tqdm==4.66.1 -traitlets==5.9.0 +traitlets==5.11.2 +trie==2.1.1; python_version >= '3.7' and python_version < '4' +twisted==23.8.0; python_full_version >= '3.7.1' +txaio==23.1.1; python_version >= '3.7' +typing-extensions==4.8.0; python_version >= '3.8' +tzdata==2023.3; python_version >= '2' +tzlocal==5.2; python_version >= '3.8' +urllib3==2.0.7; python_version >= '3.7' varint==1.0.2 -virtualenv==20.24.4 -wcwidth==0.2.6 -wrapt==1.15.0 +virtualenv==20.24.6; python_version >= '3.7' +watchdog==3.0.0; python_version >= '3.7' +wcwidth==0.2.8 +web3==6.11.1; python_full_version >= '3.7.2' +websockets==12.0; python_version >= '3.8' +werkzeug==3.0.0; python_version >= '3.8' +wrapt==1.16.0rc1 +yarl==1.9.2; python_version >= '3.7' +zipp==3.17.0 +zope-interface==6.1; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 35a28d8..05f80a6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,103 +1,102 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2 -aiosignal==1.3.1 +aiohttp==3.8.2; python_version >= '3.6' +aiosignal==1.3.1; python_version >= '3.7' appdirs==1.4.4 -async-timeout==4.0.3 -attrs==23.1.0 -autobahn==23.1.2 +async-timeout==4.0.3; python_version >= '3.7' +attrs==23.1.0; python_version >= '3.7' +autobahn==23.6.2; python_version >= '3.9' automat==22.10.0 -bitarray==2.8.1 +bitarray==2.8.2 bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.7.22 -cffi==1.15.1 -charset-normalizer==2.1.1 -click==8.1.7 -colorama==0.4.6 -constant-sorrow==0.1.0a9 +certifi==2023.7.22; python_version >= '3.6' +cffi==1.16.0; python_version >= '3.8' +charset-normalizer==2.1.1; python_full_version >= '3.6.0' +click==8.1.7; python_version >= '3.7' +colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +constant-sorrow==0.1.0a9; python_version >= '3' constantly==15.1.0 -cryptography==41.0.3 -cytoolz==0.12.2 -dateparser==1.1.8 -eth-abi==4.2.0 -eth-account==0.8.0 -eth-bloom==2.0.0 -eth-hash==0.5.2 +cryptography==41.0.5; python_version >= '3.7' +cytoolz==0.12.2; implementation_name == 'cpython' +dateparser==1.1.8; python_version >= '3.7' +eth-abi==4.2.1; python_version < '4' and python_full_version >= '3.7.2' +eth-account==0.8.0; python_version >= '3.6' and python_version < '4' +eth-bloom==2.0.0; python_version >= '3.7' and python_version < '4' +eth-hash[pycryptodome]==0.5.2; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0 -eth-tester==0.9.1b1 -eth-typing==3.4.0 -eth-utils==2.2.0 -flask==2.2.5 +eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' +eth-tester==0.9.1b1; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.5.1; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.3.0; python_version >= '3.7' and python_version < '4' +flask==2.2.5; python_version >= '3.7' flask-cors==4.0.0 -frozenlist==1.4.0 +frozenlist==1.4.0; python_version >= '3.8' hendrix==4.0.0 -hexbytes==0.3.1 -humanize==4.8.0 +hexbytes==0.3.1; python_version >= '3.7' and python_version < '4' +humanize==4.8.0; python_version >= '3.8' hyperlink==21.0.0 -idna==3.4 +idna==3.4; python_version >= '3.5' incremental==22.10.0 -itsdangerous==2.1.2 -jinja2==3.0.3 -jsonschema==4.19.0 -jsonschema-specifications==2023.7.1 +itsdangerous==2.1.2; python_version >= '3.7' +jinja2==3.0.3; python_version >= '3.6' +jsonschema==4.19.1; python_version >= '3.8' +jsonschema-specifications==2023.7.1; python_version >= '3.8' lru-dict==1.2.0 -mako==1.2.4 -markupsafe==2.1.3 -marshmallow==3.20.1 +mako==1.2.4; python_version >= '3.7' +markupsafe==2.1.3; python_version >= '3.7' +marshmallow==3.20.1; python_version >= '3.8' maya==0.6.1 -mnemonic==0.20 -msgpack==1.0.5 +mnemonic==0.20; python_version >= '3.5' +msgpack==1.0.7; python_version >= '3.8' msgpack-python==0.5.6 -multidict==5.2.0 -mypy-extensions==1.0.0 -git+https://github.com/nucypher/nucypher.git@2b1c7d6df207ecd239db4331f452332dbcd6a8a9#egg=nucypher -nucypher-core==0.12.0 -packaging==23.1 +multidict==5.2.0; python_version >= '3.6' +mypy-extensions==1.0.0; python_version >= '3.5' +nucypher@ git+https://github.com/nucypher/nucypher.git@f893a7388e5ab91d7df340f89e449d37030607c7 +nucypher-core==0.13.0 +packaging==23.2; python_version >= '3.7' parsimonious==0.9.0 -pendulum==3.0.0a1 -prometheus-client==0.17.1 +pendulum==3.0.0b1; python_version >= '3.8' +prometheus-client==0.17.1; python_version >= '3.6' prometheus-flask-exporter==0.22.4 -protobuf==4.24.2 -py-ecc==6.0.0 +protobuf==4.25.0rc2; python_version >= '3.8' +py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' py-evm==0.7.0a4 -pyasn1==0.5.0 -pyasn1-modules==0.3.0 +pyasn1==0.5.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.18.0 +pycryptodome==3.19.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' pyethash==0.1.27 -pynacl==1.5.0 -pyopenssl==23.2.0 -python-dateutil==2.8.2 -pytz==2023.3 -pyunormalize==15.0.0 -referencing==0.30.2 -regex==2023.8.8 -requests==2.31.0 +pynacl==1.5.0; python_version >= '3.6' +pyopenssl==23.2.0; python_version >= '3.6' +python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pytz==2023.3.post1 +pyunormalize==15.0.0; python_version >= '3.6' +referencing==0.30.2; python_version >= '3.8' +regex==2023.10.3; python_version >= '3.7' +requests==2.31.0; python_version >= '3.7' rlp==3.0.0 -rpds-py==0.10.0 -semantic-version==2.10.0 -service-identity==23.1.0 -setuptools==68.1.2 -six==1.16.0 +rpds-py==0.10.6; python_version >= '3.8' +semantic-version==2.10.0; python_version >= '2.7' +service-identity==23.1.0; python_version >= '3.8' +setuptools==68.2.2; python_version >= '3.8' +six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 -tabulate==0.9.0 -time-machine==2.12.0 -toolz==0.12.0 -trie==2.1.1 -twisted==23.8.0 -txaio==23.1.1 -typing-extensions==4.7.1 -tzdata==2023.3 -tzlocal==5.0.1 -urllib3==2.0.4 -watchdog==3.0.0 -web3==6.9.0 -websockets==11.0.3 -werkzeug==2.3.7 -yarl==1.9.2 -zipp==3.16.2 -zope-interface==6.1a2 +tabulate==0.9.0; python_version >= '3.7' +time-machine==2.13.0; implementation_name != 'pypy' +toolz==0.12.0; python_version >= '3.5' +trie==2.1.1; python_version >= '3.7' and python_version < '4' +twisted==23.8.0; python_full_version >= '3.7.1' +txaio==23.1.1; python_version >= '3.7' +typing-extensions==4.8.0; python_version >= '3.8' +tzdata==2023.3; python_version >= '2' +tzlocal==5.2; python_version >= '3.8' +urllib3==2.0.7; python_version >= '3.7' +watchdog==3.0.0; python_version >= '3.7' +web3==6.11.1; python_full_version >= '3.7.2' +websockets==12.0; python_version >= '3.8' +werkzeug==3.0.0; python_version >= '3.8' +yarl==1.9.2; python_version >= '3.7' +zope-interface==6.1; python_version >= '3.7' From d959e102021515b7256674b24347c9dbc7b3eba5 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 24 Oct 2023 21:47:42 +0200 Subject: [PATCH 074/114] update dependency relock script python 3.8 -> 3.11 --- scripts/relock_dependencies.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/relock_dependencies.sh b/scripts/relock_dependencies.sh index 6ba84d7..c73423a 100755 --- a/scripts/relock_dependencies.sh +++ b/scripts/relock_dependencies.sh @@ -33,11 +33,11 @@ pip cache purge set -e echo "Building Development Requirements" -pipenv --python 3.8 lock --clear --pre --dev-only +pipenv --python 3.11 lock --clear --pre --dev-only pipenv requirements --dev-only > dev-$PREFIX.txt echo "Building Standard Requirements" -pipenv --python 3.8 lock --clear --pre +pipenv --python 3.11 lock --clear --pre pipenv requirements > $PREFIX.txt echo "OK!" From ab2e73d04f23f6777eacdc132d7f7dccd1bde25c Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 24 Oct 2023 23:15:59 +0200 Subject: [PATCH 075/114] reset the prometheus exporter registry between tests --- porter/cli/main.py | 6 ++++-- porter/main.py | 15 +++++++++------ tests/conftest.py | 22 ++++++++++++++-------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/porter/cli/main.py b/porter/cli/main.py index 0fb3a77..2da8257 100644 --- a/porter/cli/main.py +++ b/porter/cli/main.py @@ -119,8 +119,10 @@ def run( allow_origins_list = allow_origins.split(",") # split into list of origins to allow emitter.message(PORTER_CORS_ALLOWED_ORIGINS.format(allow_origins=allow_origins_list), color='green') - controller = PORTER.make_web_controller(crash_on_error=False, - cors_allow_origins_list=allow_origins_list) + controller = PORTER.make_web_controller( + crash_on_error=False, + cors_allow_origins_list=allow_origins_list + ) message = PORTER_RUN_MESSAGE.format(http_port=http_port) emitter.message(message, color='green', bold=True) return controller.start(port=http_port, diff --git a/porter/main.py b/porter/main.py index 20418fe..e3763b0 100644 --- a/porter/main.py +++ b/porter/main.py @@ -1,6 +1,3 @@ -from pathlib import Path -from typing import Dict, List, NamedTuple, Optional, Sequence - from constant_sorrow.constants import NO_CONTROL_PROTOCOL from eth_typing import ChecksumAddress from eth_utils import to_checksum_address @@ -23,7 +20,9 @@ TreasureMap, ) from nucypher_core.umbral import PublicKey +from pathlib import Path from prometheus_flask_exporter import PrometheusMetrics +from typing import Dict, List, NamedTuple, Optional, Sequence from porter.controllers import PorterCLIController, WebController from porter.interfaces import PorterInterface @@ -229,6 +228,9 @@ def make_cli_controller(self, crash_on_error: bool = False): self.controller = controller return controller + def _setup_prometheus(self, app): + self.controller.metrics = PrometheusMetrics(app) + def make_web_controller(self, crash_on_error: bool = False, htpasswd_filepath: Path = None, @@ -240,11 +242,12 @@ def make_web_controller(self, # Register Flask Decorator porter_flask_control = controller.make_control_transport() + self._setup_prometheus(porter_flask_control) # static information as metric - metrics = PrometheusMetrics(porter_flask_control) - metrics.info('app_info', 'Application info', version='1.0.3') - by_path_counter = metrics.counter( + + self.controller.metrics.info('app_info', 'Application info', version='1.0.3') + by_path_counter = controller.metrics.counter( 'by_path_counter', 'Request count by request paths', labels={'path': lambda: request.path} ) diff --git a/tests/conftest.py b/tests/conftest.py index 6714fee..1700f7a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,6 @@ -import os -from typing import Iterable, List, Optional, Tuple -from unittest.mock import MagicMock - import maya +import os +import prometheus_client import pytest from click.testing import CliRunner from eth_typing import ChecksumAddress @@ -27,9 +25,7 @@ from nucypher.utilities.logging import GlobalLoggerSettings from nucypher_core import HRAC, Address, ThresholdMessageKit, TreasureMap from nucypher_core.ferveo import DkgPublicKey, Validator - -from porter.emitters import WebEmitter -from porter.main import Porter +from prometheus_flask_exporter import PrometheusMetrics from tests.constants import ( MOCK_ETH_PROVIDER_URI, TESTERCHAIN_CHAIN_ID, @@ -38,6 +34,11 @@ from tests.mock.agents import MockContractAgent from tests.mock.interfaces import MockBlockchain from tests.utils.registry import MockRegistrySource, mock_registry_sources +from typing import Iterable, List, Optional, Tuple +from unittest.mock import MagicMock + +from porter.emitters import WebEmitter +from porter.main import Porter # Crash on server error by default WebEmitter._crash_on_error_default = True @@ -256,7 +257,12 @@ def random_treasure_map_data(alice, bob, ursulas): @pytest.fixture(scope='module') -def porter_web_controller(porter): +def porter_web_controller(porter, monkeymodule): + def _setup_prometheus(_porter, app): + _porter.controller.metrics = PrometheusMetrics(app) + _porter.controller.metrics.registry = prometheus_client.CollectorRegistry(auto_describe=True) + + Porter._setup_prometheus = _setup_prometheus web_controller = porter.make_web_controller(crash_on_error=False) yield web_controller.test_client() From 9ea306843c80e091b7d3684e0e78bd1739536eeb Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 24 Oct 2023 23:54:08 +0200 Subject: [PATCH 076/114] bump minimum and maximum python version 3.9 - 3.11. --- .github/workflows/darker.yml | 2 +- .github/workflows/tests.yml | 4 ++-- setup.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/darker.yml b/.github/workflows/darker.yml index 7c27f18..9e86e3a 100644 --- a/.github/workflows/darker.yml +++ b/.github/workflows/darker.yml @@ -11,7 +11,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-python@v4 with: - python-version: '3.8' + python-version: '3.9' - uses: akaihola/darker@1.7.2 with: version: "1.7.2" # defaults to same version, but can be modified diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c562ebe..ebd7279 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.10"] + python-version: ["3.9", "3.10"] steps: - uses: actions/checkout@v3 @@ -32,7 +32,7 @@ jobs: python -m pytest tests - name: Upload test coverage to Codecov - if: matrix.python-version == '3.8' + if: matrix.python-version == '3.9' uses: codecov/codecov-action@v3.1.1 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/setup.py b/setup.py index 95db718..1d13bcc 100644 --- a/setup.py +++ b/setup.py @@ -25,9 +25,9 @@ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Topic :: Security", ] From 9080f8d0ca194340cb1ae707975f453c5a4b07bd Mon Sep 17 00:00:00 2001 From: KPrasch Date: Wed, 25 Oct 2023 00:51:00 +0200 Subject: [PATCH 077/114] Update .github/workflows/tests.yml Co-authored-by: Derek Pierre --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ebd7279..25e4bd3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.9", "3.10"] + python-version: ["3.9", "3.11"] steps: - uses: actions/checkout@v3 From 306d93111eeae6b994b7b4cab73b10cbfbf86fc3 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 25 Oct 2023 00:56:44 +0200 Subject: [PATCH 078/114] =?UTF-8?q?Bump=20version:=203.0.1=20=E2=86=92=203?= =?UTF-8?q?.1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- porter/__about__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 793f8c2..7f32445 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.0.1 +current_version = 3.1.1 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?P[^.]*)\.(?P\d+))? diff --git a/porter/__about__.py b/porter/__about__.py index 8b8afb2..fbe0487 100644 --- a/porter/__about__.py +++ b/porter/__about__.py @@ -14,7 +14,7 @@ __summary__ = "Pipe for TACo on Threshold Network" -__version__ = "3.0.1" +__version__ = "3.1.1" __author__ = "NuCypher" From fe59b047e0445eb96b9fe6f362031d0f54df4297 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 30 Oct 2023 16:30:26 -0400 Subject: [PATCH 079/114] Actually run coverage for python tests for python v3.9. --- .github/workflows/tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 25e4bd3..434e781 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,7 +15,7 @@ jobs: python-version: ["3.9", "3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 @@ -29,7 +29,7 @@ jobs: - name: Run tests run: | - python -m pytest tests + coverage run -m pytest tests - name: Upload test coverage to Codecov if: matrix.python-version == '3.9' From 9c7682b95f260d07c5f1b2106629424861a36a0c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 30 Oct 2023 16:36:44 -0400 Subject: [PATCH 080/114] Produce coverage xml file. --- .github/workflows/tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 434e781..7ee4bd4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,6 +30,7 @@ jobs: - name: Run tests run: | coverage run -m pytest tests + coverage xml -i - name: Upload test coverage to Codecov if: matrix.python-version == '3.9' From 38d69f62d25a300788adc09f51e3dc33f94ed2da Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 30 Oct 2023 16:37:06 -0400 Subject: [PATCH 081/114] Use caching for python dependencies. --- .github/workflows/tests.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7ee4bd4..d87bef0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,10 +22,19 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install -e .[dev] + - id: python_cache + name: Retrieve Cached Python Dependencies + uses: actions/cache@v3 + with: + path: ${{ env.pythonLocation }} + key: ${{ runner.os }}-pip-${{ steps.setup_python.outputs.python-version }}-${{ hashFiles('dev-requirements.txt', 'requirements.txt') }} + + - name: Upgrade pip + if: steps.python_cache.outputs.cache-hit != 'true' + run: python -m pip install --upgrade pip + + - name: Install dependencies (incl. updated code) + run: pip install .[dev] - name: Run tests run: | From e2c55b10c962ea54545b589c060aacb1159a8ddb Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 30 Oct 2023 16:43:53 -0400 Subject: [PATCH 082/114] Only run coverage tasks for python 3.9. --- .github/workflows/tests.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d87bef0..2217cca 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -37,9 +37,15 @@ jobs: run: pip install .[dev] - name: Run tests + if: matrix.python-version != '3.9' run: | - coverage run -m pytest tests - coverage xml -i + python -m pytest tests + + - name: Run tests (Coverage) + if: matrix.python-version == '3.9' + run: | + coverage run --data-file=test_data -m pytest tests + coverage xml -i --data-file=test_data -o coverage.xml - name: Upload test coverage to Codecov if: matrix.python-version == '3.9' @@ -48,3 +54,4 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true verbose: true + files: coverage.xml From 95294547ba7325adf8fe87b1d30ab897af6fd892 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 1 Nov 2023 16:44:23 -0400 Subject: [PATCH 083/114] Relock Porter dependencies based on `nucypher` rc.8. --- Pipfile | 4 +- Pipfile.lock | 158 ++++++++++++++++++--------- dev-requirements.txt | 252 ++++++++++++++++++++++--------------------- requirements.txt | 153 +++++++++++++------------- 4 files changed, 311 insertions(+), 256 deletions(-) diff --git a/Pipfile b/Pipfile index cf78947..b19346c 100644 --- a/Pipfile +++ b/Pipfile @@ -7,13 +7,13 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.3"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.8"} nucypher-core = "==0.13.0" # must be the same as nucypher flask-cors = "*" prometheus-flask-exporter = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.3", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.8", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 3ad089e..25c0e71 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7a410e47a6158032d5486c92811fc857d0bd506c19bd16506464ba634614bbce" + "sha256": "46a5138d44f1bae27372c812ba7b68f4bddd9dcd22f75a3ebf590224fcb47134" }, "pipfile-spec": 6, "requires": { @@ -281,6 +281,14 @@ ], "version": "==2.8.2" }, + "blinker": { + "hashes": [ + "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d", + "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa" + ], + "markers": "python_version >= '3.7'", + "version": "==1.6.3" + }, "bytestring-splitter": { "hashes": [ "sha256:4713e5d3a13321ae020c271f3c29dd0bbfb6fcb7875ac8b365ff9cf9863a0db0", @@ -525,7 +533,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "implementation_name == 'cpython'", + "markers": "python_version >= '3.6'", "version": "==0.12.2" }, "dateparser": { @@ -619,11 +627,11 @@ }, "flask": { "hashes": [ - "sha256:58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf", - "sha256:edee9b0a7ff26621bd5a8c10ff484ae28737a2410d99b0bb9a6850c7fb977aa0" + "sha256:21128f47e4e3b9d597a3e8521a329bf56909b690fcc3fa3e477725aa81367638", + "sha256:cfadcdb638b609361d29ec22360d6070a77d7463dcb3ab08d2c2f2f168845f58" ], - "markers": "python_version >= '3.7'", - "version": "==2.2.5" + "markers": "python_version >= '3.8'", + "version": "==3.0.0" }, "flask-cors": { "hashes": [ @@ -755,11 +763,11 @@ }, "jinja2": { "hashes": [ - "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", - "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" ], - "markers": "python_version >= '3.6'", - "version": "==3.0.3" + "markers": "python_version >= '3.7'", + "version": "==3.1.2" }, "jsonschema": { "hashes": [ @@ -1117,8 +1125,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "markers": "python_version >= '3'", - "ref": "f893a7388e5ab91d7df340f89e449d37030607c7" + "ref": "598ad313762fa2a5c8653f5996e888e75d9370ed" }, "nucypher-core": { "hashes": [ @@ -1247,19 +1254,19 @@ }, "prometheus-client": { "hashes": [ - "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", - "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" + "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17", + "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184" ], - "markers": "python_version >= '3.6'", - "version": "==0.17.1" + "markers": "python_version >= '3.8'", + "version": "==0.18.0" }, "prometheus-flask-exporter": { "hashes": [ - "sha256:959b69f1e740b6736ea53fe5f28dc2ab6229b2ebeade6582b3dbb5d74c7d58e4", - "sha256:e130179c26d5a9b903c12c0d8826127ae491b04b298cae0b92b98677dcf2c06f" + "sha256:7a026b4fdd54ebeddb77589333efe3a1ec43c7c717468825b0b3e9b6c33f7e9e", + "sha256:e4e6beb1b8e1e164da6d70fe1edefc95ef184f113b5047f66f4b7262233da9c0" ], "index": "pypi", - "version": "==0.22.4" + "version": "==0.23.0" }, "protobuf": { "hashes": [ @@ -1746,7 +1753,7 @@ "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7", "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237" ], - "markers": "implementation_name != 'pypy'", + "markers": "python_version >= '3.8'", "version": "==2.13.0" }, "toolz": { @@ -1934,11 +1941,11 @@ }, "werkzeug": { "hashes": [ - "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0", - "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962" + "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc", + "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10" ], "markers": "python_version >= '3.8'", - "version": "==3.0.0" + "version": "==3.0.1" }, "yarl": { "hashes": [ @@ -2170,6 +2177,7 @@ "sha256:c923809f4f3542e86b18cbeb325b08800461b4af38366a8950d26afc15431e35", "sha256:ccd58558fad2a0003d1e0c026b8bfb5e35ec1600aa06ba2c2260daa5c64a2299" ], + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.6.9" }, "appdirs": { @@ -2179,6 +2187,14 @@ ], "version": "==1.4.4" }, + "appnope": { + "hashes": [ + "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", + "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" + ], + "markers": "sys_platform == 'darwin'", + "version": "==0.1.3" + }, "asttokens": { "hashes": [ "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", @@ -2358,6 +2374,14 @@ ], "version": "==2.8.2" }, + "blinker": { + "hashes": [ + "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d", + "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa" + ], + "markers": "python_version >= '3.7'", + "version": "==1.6.3" + }, "bytestring-splitter": { "hashes": [ "sha256:4713e5d3a13321ae020c271f3c29dd0bbfb6fcb7875ac8b365ff9cf9863a0db0", @@ -2493,9 +2517,6 @@ "version": "==15.1.0" }, "coverage": { - "extras": [ - "toml" - ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -2549,7 +2570,6 @@ "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==6.5.0" }, "cryptography": { @@ -2677,7 +2697,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "implementation_name == 'cpython'", + "markers": "python_version >= '3.6'", "version": "==0.12.2" }, "dataclassy": { @@ -2685,6 +2705,7 @@ "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" ], + "markers": "python_version >= '3.6'", "version": "==0.11.1" }, "dateparser": { @@ -2700,6 +2721,7 @@ "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" ], + "markers": "python_version >= '3.5'", "version": "==5.1.1" }, "deprecated": { @@ -2707,6 +2729,7 @@ "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.14" }, "distlib": { @@ -2721,6 +2744,7 @@ "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" ], + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.2.1" }, "eth-abi": { @@ -2744,6 +2768,7 @@ "sha256:78001209dfdf8c7973c649b8cbba73d3399cd649aeee4223d0b29078ae997201", "sha256:f6c5137a10edcc2a37a8f8736882e412b2fb3b326d00d8128538e73dc031f89b" ], + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.6.19" }, "eth-bloom": { @@ -2816,6 +2841,7 @@ "sha256:1fcf4fd551133ec917b99406b206713f34112f5e3c030ece5dcb3e5ed8562ee3", "sha256:deaa9ec75cc8d02a047d5a2b065bd038ee6654ba2ffcf6e4c969181eacfdffc2" ], + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.5.8" }, "evm-trace": { @@ -2823,6 +2849,7 @@ "sha256:0e5b6d6977bf42c3a5157ee3c5cdc5e57bd23827855283b516fa4e68d09e32e2", "sha256:5cd30ba28dcb2c7ba2461c124ad9059629c78bd0781f5c3f2a9939427f50cb47" ], + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.1.0a25" }, "executing": { @@ -2837,15 +2864,16 @@ "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd" ], + "markers": "python_version >= '3.8'", "version": "==3.12.4" }, "flask": { "hashes": [ - "sha256:58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf", - "sha256:edee9b0a7ff26621bd5a8c10ff484ae28737a2410d99b0bb9a6850c7fb977aa0" + "sha256:21128f47e4e3b9d597a3e8521a329bf56909b690fcc3fa3e477725aa81367638", + "sha256:cfadcdb638b609361d29ec22360d6070a77d7463dcb3ab08d2c2f2f168845f58" ], - "markers": "python_version >= '3.7'", - "version": "==2.2.5" + "markers": "python_version >= '3.8'", + "version": "==3.0.0" }, "frozenlist": { "hashes": [ @@ -2979,6 +3007,7 @@ "sha256:f351479a6914fd81a55c8e68963609f792d9b067fb8a60a042c585a621e0de4f", "sha256:f47932c434a3c8d3c86d865443fadc1fbf574e9b11d6650b656e602b1797908a" ], + "markers": "python_version >= '3.7'", "version": "==3.0.0" }, "hendrix": { @@ -3016,6 +3045,7 @@ "sha256:b45b8a651dfe4ce26f900ce6ccbce997d4fbec39ba03dd243516bf81fea8c0b8", "sha256:f4c2c004b9ec3e0e25332ad2cb6b91eba477a855557a7b5c6e79068809ff8b51" ], + "markers": "python_version >= '3.8'", "version": "==6.88.1" }, "identify": { @@ -3133,6 +3163,7 @@ "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" ], + "markers": "python_version >= '3.8'", "version": "==6.8.0" }, "incremental": { @@ -3147,6 +3178,7 @@ "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" ], + "markers": "python_version >= '3.7'", "version": "==2.0.0" }, "ipython": { @@ -3154,6 +3186,7 @@ "sha256:0852469d4d579d9cd613c220af7bf0c9cc251813e12be647cb9d463939db9b1e", "sha256:ad52f58fca8f9f848e256c629eff888efc0528c12fe0f8ec14f33205f23ef938" ], + "markers": "python_version >= '3.9'", "version": "==8.16.1" }, "itsdangerous": { @@ -3169,15 +3202,16 @@ "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0" ], + "markers": "python_version >= '3.6'", "version": "==0.19.1" }, "jinja2": { "hashes": [ - "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", - "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" ], - "markers": "python_version >= '3.6'", - "version": "==3.0.3" + "markers": "python_version >= '3.7'", + "version": "==3.1.2" }, "jsonschema": { "hashes": [ @@ -3375,6 +3409,7 @@ "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" ], + "markers": "python_version >= '3.5'", "version": "==0.1.6" }, "maya": { @@ -3505,6 +3540,7 @@ "sha256:f6229dd49438d81ed7a3470e3cbc9646b1cc1b120d415a1786df880dabb1d1c4", "sha256:f668102958841c5bbd3ba7cf569a65d17aa3bdcf22124f394dfcfcf53cc5a9b9" ], + "markers": "python_version >= '3.8'", "version": "==0.18.4" }, "multidict": { @@ -3603,8 +3639,7 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "markers": "python_version >= '3'", - "ref": "f893a7388e5ab91d7df340f89e449d37030607c7" + "ref": "598ad313762fa2a5c8653f5996e888e75d9370ed" }, "nucypher-core": { "hashes": [ @@ -3663,6 +3698,7 @@ "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617", "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" ], + "markers": "python_version < '3.13' and python_version >= '3.9'", "version": "==1.26.1" }, "packaging": { @@ -3703,6 +3739,7 @@ "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" ], + "markers": "python_version >= '3.8'", "version": "==1.5.3" }, "parsimonious": { @@ -3716,6 +3753,7 @@ "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" ], + "markers": "python_version >= '3.6'", "version": "==0.8.3" }, "pendulum": { @@ -3826,6 +3864,7 @@ "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3", "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e" ], + "markers": "python_version >= '3.7'", "version": "==3.11.0" }, "pluggy": { @@ -3833,6 +3872,7 @@ "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" ], + "markers": "python_version >= '3.8'", "version": "==1.3.0" }, "pre-commit": { @@ -3841,22 +3881,22 @@ "sha256:900d3c7e1bf4cf0374bb2893c24c23304952181405b4d88c9c40b72bda1bb8a9" ], "index": "pypi", - "markers": "python_full_version >= '3.6.1'", "version": "==2.12.1" }, "prometheus-client": { "hashes": [ - "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", - "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" + "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17", + "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184" ], - "markers": "python_version >= '3.6'", - "version": "==0.17.1" + "markers": "python_version >= '3.8'", + "version": "==0.18.0" }, "prompt-toolkit": { "hashes": [ "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" ], + "markers": "python_full_version >= '3.7.0'", "version": "==3.0.39" }, "protobuf": { @@ -3895,6 +3935,7 @@ "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.11.0" }, "py-cid": { @@ -3924,6 +3965,7 @@ "sha256:1eb9c1d05b51133a6961889ec508cdcb19d24d32888704c4e034cae86a3accad", "sha256:f3563e2de8e78599cb9c69ee5bf3bded858ac6cf59891a04177f2353c425fdb7" ], + "markers": "python_version >= '3.7' and python_version < '4'", "version": "==3.13.0" }, "py-multibase": { @@ -3952,6 +3994,7 @@ "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" ], + "markers": "python_version >= '3.6' and python_version < '4'", "version": "==1.1.1" }, "pyasn1": { @@ -4060,6 +4103,7 @@ "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5", "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0" ], + "markers": "python_version >= '3.7'", "version": "==1.10.13" }, "pyethash": { @@ -4073,6 +4117,7 @@ "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9", "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217" ], + "markers": "python_version >= '3.7'", "version": "==1.59.1" }, "pygments": { @@ -4080,6 +4125,7 @@ "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" ], + "markers": "python_version >= '3.7'", "version": "==2.16.1" }, "pyjwt": { @@ -4090,6 +4136,7 @@ "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" ], + "markers": "python_version >= '3.7'", "version": "==2.8.0" }, "pynacl": { @@ -4122,7 +4169,6 @@ "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134" ], "index": "pypi", - "markers": "python_version >= '3.6'", "version": "==6.2.5" }, "pytest-cov": { @@ -4131,7 +4177,6 @@ "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==4.1.0" }, "pytest-mock": { @@ -4140,7 +4185,6 @@ "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9" ], "index": "pypi", - "markers": "python_version >= '3.8'", "version": "==3.12.0" }, "pytest-timeout": { @@ -4148,6 +4192,7 @@ "sha256:3b0b95dabf3cb50bac9ef5ca912fa0cfc286526af17afc806824df20c2f72c90", "sha256:bde531e096466f49398a59f2dde76fa78429a09a12411466f88a07213e220de2" ], + "markers": "python_version >= '3.7'", "version": "==2.2.0" }, "pytest-twisted": { @@ -4155,6 +4200,7 @@ "sha256:1b63b73182bd1b995f30826a1d870c9ac0d08244ab0c871eb8bd0c8243acfb3d", "sha256:209bf5a6452cfbfb61de8f015902c14ec8126400911507074bb2ee4ce8dfe313" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.14.0" }, "python-baseconv": { @@ -4356,6 +4402,7 @@ "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" ], + "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", "version": "==12.6.0" }, "rlp": { @@ -4486,10 +4533,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:935e8fbd7787a3702457393b74b13d89a5afb67185bc0af85c00cb27cbd42e7c", - "sha256:eeb0b3550536f3bbc05bb1c7e0feb3a78d74acb43b607159a606ed2ec0a33a4d" + "sha256:1cce906dc86afda1ecd22c4716b0c846639151a3c3b59e23826711c6525c5642", + "sha256:816aeb900a54bba2d9346bad8ffac2d258c4fa09271b95a6533a714e9000f074" ], - "version": "==1.32.0" + "version": "==1.33.1" }, "service-identity": { "hashes": [ @@ -4580,6 +4627,7 @@ "sha256:f146c61ae128ab43ea3a0955de1af7e1633942c2b2b4985ac51cc292daf33222", "sha256:f776c2c30f0e5f4db45c3ee11a5f2a8d9de68e81eb73ec4237de1e32e04ae81c" ], + "markers": "python_version >= '3.7'", "version": "==2.0.22" }, "stack-data": { @@ -4656,7 +4704,7 @@ "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7", "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237" ], - "markers": "implementation_name != 'pypy'", + "markers": "python_version >= '3.8'", "version": "==2.13.0" }, "toml": { @@ -4680,6 +4728,7 @@ "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" ], + "markers": "python_version >= '3.7'", "version": "==4.66.1" }, "traitlets": { @@ -4687,6 +4736,7 @@ "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e", "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae" ], + "markers": "python_version >= '3.8'", "version": "==5.11.2" }, "trie": { @@ -4887,11 +4937,11 @@ }, "werkzeug": { "hashes": [ - "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0", - "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962" + "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc", + "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10" ], "markers": "python_version >= '3.8'", - "version": "==3.0.0" + "version": "==3.0.1" }, "wrapt": { "hashes": [ @@ -4966,6 +5016,7 @@ "sha256:f9e10c3bf07074377fbbff3d2b02d740c17602ce5d6c91455977bdb32fbbebe8", "sha256:fc43eb869c6baba54dda3264109354a5d0ea621c51ba945ff71308347f24a1c9" ], + "markers": "python_version >= '3.6'", "version": "==1.16.0rc1" }, "yarl": { @@ -5053,6 +5104,7 @@ "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" ], + "markers": "python_version >= '3.8'", "version": "==3.17.0" }, "zope-interface": { diff --git a/dev-requirements.txt b/dev-requirements.txt index 405ede8..1f6def9 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,172 +1,174 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2; python_version >= '3.6' -aiosignal==1.3.1; python_version >= '3.7' -ape-solidity==0.6.9 +aiohttp==3.8.2 ; python_version >= '3.6' +aiosignal==1.3.1 ; python_version >= '3.7' +ape-solidity==0.6.9 ; python_version >= '3.8' and python_version < '4' appdirs==1.4.4 +appnope==0.1.3 ; sys_platform == 'darwin' asttokens==2.4.0 -async-timeout==4.0.3; python_version >= '3.7' -attrs==23.1.0; python_version >= '3.7' -autobahn==23.6.2; python_version >= '3.9' +async-timeout==4.0.3 ; python_version >= '3.7' +attrs==23.1.0 ; python_version >= '3.7' +autobahn==23.6.2 ; python_version >= '3.9' automat==22.10.0 backcall==0.2.0 base58==1.0.3 bitarray==2.8.2 +blinker==1.6.3 ; python_version >= '3.7' bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.7.22; python_version >= '3.6' -cffi==1.16.0; python_version >= '3.8' -cfgv==3.4.0; python_version >= '3.8' -charset-normalizer==2.1.1; python_full_version >= '3.6.0' -click==8.1.7; python_version >= '3.7' -colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +certifi==2023.7.22 ; python_version >= '3.6' +cffi==1.16.0 ; python_version >= '3.8' +cfgv==3.4.0 ; python_version >= '3.8' +charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' +click==8.1.7 ; python_version >= '3.7' +colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' commonmark==0.9.1 -constant-sorrow==0.1.0a9; python_version >= '3' +constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -coverage[toml]==6.5.0; python_version >= '3.7' -cryptography==41.0.5; python_version >= '3.7' -cytoolz==0.12.2; implementation_name == 'cpython' -dataclassy==0.11.1 -dateparser==1.1.8; python_version >= '3.7' -decorator==5.1.1 -deprecated==1.2.14 +coverage==6.5.0 +cryptography==41.0.5 ; python_version >= '3.7' +cytoolz==0.12.2 ; python_version >= '3.6' +dataclassy==0.11.1 ; python_version >= '3.6' +dateparser==1.1.8 ; python_version >= '3.7' +decorator==5.1.1 ; python_version >= '3.5' +deprecated==1.2.14 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' distlib==0.3.7 -eip712==0.2.1 -eth-abi==4.2.1; python_version < '4' and python_full_version >= '3.7.2' -eth-account==0.8.0; python_version >= '3.6' and python_version < '4' -eth-ape==0.6.19 -eth-bloom==2.0.0; python_version >= '3.7' and python_version < '4' -eth-hash[pycryptodome]==0.5.2; python_version >= '3.7' and python_version < '4' +eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' +eth-abi==4.2.1 ; python_full_version >= '3.7.2' and python_version < '4' +eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' +eth-ape==0.6.19 ; python_version >= '3.8' and python_version < '4' +eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' +eth-hash[pycryptodome]==0.5.2 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.1b1; python_version < '4' and python_full_version >= '3.6.8' -eth-typing==3.5.1; python_version < '4' and python_full_version >= '3.7.2' -eth-utils==2.3.0; python_version >= '3.7' and python_version < '4' -ethpm-types==0.5.8 -evm-trace==0.1.0a25 +eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' +eth-tester==0.9.1b1 ; python_full_version >= '3.6.8' and python_version < '4' +eth-typing==3.5.1 ; python_full_version >= '3.7.2' and python_version < '4' +eth-utils==2.3.0 ; python_version >= '3.7' and python_version < '4' +ethpm-types==0.5.8 ; python_version >= '3.8' and python_version < '4' +evm-trace==0.1.0a25 ; python_version >= '3.8' and python_version < '4' executing==2.0.0 -filelock==3.12.4 -flask==2.2.5; python_version >= '3.7' -frozenlist==1.4.0; python_version >= '3.8' -greenlet==3.0.0 +filelock==3.12.4 ; python_version >= '3.8' +flask==3.0.0 ; python_version >= '3.8' +frozenlist==1.4.0 ; python_version >= '3.8' +greenlet==3.0.0 ; python_version >= '3.7' hendrix==4.0.0 -hexbytes==0.3.1; python_version >= '3.7' and python_version < '4' -humanize==4.8.0; python_version >= '3.8' +hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' +humanize==4.8.0 ; python_version >= '3.8' hyperlink==21.0.0 -hypothesis==6.88.1 -identify==2.5.30; python_version >= '3.8' -idna==3.4; python_version >= '3.5' +hypothesis==6.88.1 ; python_version >= '3.8' +identify==2.5.30 ; python_version >= '3.8' +idna==3.4 ; python_version >= '3.5' ijson==3.2.3 -importlib-metadata==6.8.0 +importlib-metadata==6.8.0 ; python_version >= '3.8' incremental==22.10.0 -iniconfig==2.0.0 -ipython==8.16.1 -itsdangerous==2.1.2; python_version >= '3.7' -jedi==0.19.1 -jinja2==3.0.3; python_version >= '3.6' -jsonschema==4.19.1; python_version >= '3.8' -jsonschema-specifications==2023.7.1; python_version >= '3.8' +iniconfig==2.0.0 ; python_version >= '3.7' +ipython==8.16.1 ; python_version >= '3.9' +itsdangerous==2.1.2 ; python_version >= '3.7' +jedi==0.19.1 ; python_version >= '3.6' +jinja2==3.1.2 ; python_version >= '3.7' +jsonschema==4.19.1 ; python_version >= '3.8' +jsonschema-specifications==2023.7.1 ; python_version >= '3.8' lazyasd==0.1.4 lru-dict==1.2.0 -mako==1.2.4; python_version >= '3.7' -markupsafe==2.1.3; python_version >= '3.7' -marshmallow==3.20.1; python_version >= '3.8' -matplotlib-inline==0.1.6 +mako==1.2.4 ; python_version >= '3.7' +markupsafe==2.1.3 ; python_version >= '3.7' +marshmallow==3.20.1 ; python_version >= '3.8' +matplotlib-inline==0.1.6 ; python_version >= '3.5' maya==0.6.1 -mnemonic==0.20; python_version >= '3.5' +mnemonic==0.20 ; python_version >= '3.5' morphys==1.0 -msgpack==1.0.7; python_version >= '3.8' +msgpack==1.0.7 ; python_version >= '3.8' msgpack-python==0.5.6 -msgspec==0.18.4 -multidict==5.2.0; python_version >= '3.6' -mypy-extensions==1.0.0; python_version >= '3.5' -nodeenv==1.8.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher@ git+https://github.com/nucypher/nucypher.git@f893a7388e5ab91d7df340f89e449d37030607c7 +msgspec==0.18.4 ; python_version >= '3.8' +multidict==5.2.0 ; python_version >= '3.6' +mypy-extensions==1.0.0 ; python_version >= '3.5' +nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +git+https://github.com/nucypher/nucypher.git@598ad313762fa2a5c8653f5996e888e75d9370ed#egg=nucypher nucypher-core==0.13.0 -numpy==1.26.1 -packaging==23.2; python_version >= '3.7' -pandas==1.5.3 +numpy==1.26.1 ; python_version < '3.13' and python_version >= '3.9' +packaging==23.2 ; python_version >= '3.7' +pandas==1.5.3 ; python_version >= '3.8' parsimonious==0.9.0 -parso==0.8.3 -pendulum==3.0.0b1; python_version >= '3.8' +parso==0.8.3 ; python_version >= '3.6' +pendulum==3.0.0b1 ; python_version >= '3.8' pexpect==4.8.0 pickleshare==0.7.5 -platformdirs==3.11.0 -pluggy==1.3.0 -pre-commit==2.12.1; python_full_version >= '3.6.1' -prometheus-client==0.17.1; python_version >= '3.6' -prompt-toolkit==3.0.39 -protobuf==4.25.0rc2; python_version >= '3.8' +platformdirs==3.11.0 ; python_version >= '3.7' +pluggy==1.3.0 ; python_version >= '3.8' +pre-commit==2.12.1 +prometheus-client==0.18.0 ; python_version >= '3.8' +prompt-toolkit==3.0.39 ; python_full_version >= '3.7.0' +protobuf==4.25.0rc2 ; python_version >= '3.8' ptyprocess==0.7.0 pure-eval==0.2.2 -py==1.11.0 +py==1.11.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' py-cid==0.3.0 -py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' +py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' py-evm==0.7.0a4 -py-geth==3.13.0 +py-geth==3.13.0 ; python_version >= '3.7' and python_version < '4' py-multibase==1.0.3 py-multicodec==0.2.1 py-multihash==0.2.3 -py-solc-x==1.1.1 -pyasn1==0.5.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pyasn1-modules==0.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +py-solc-x==1.1.1 ; python_version >= '3.6' and python_version < '4' +pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.19.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -pydantic==1.10.13 +pycryptodome==3.19.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pydantic==1.10.13 ; python_version >= '3.7' pyethash==0.1.27 -pygithub==1.59.1 -pygments==2.16.1 -pyjwt[crypto]==2.8.0 -pynacl==1.5.0; python_version >= '3.6' -pyopenssl==23.2.0; python_version >= '3.6' -pytest==6.2.5; python_version >= '3.6' -pytest-cov==4.1.0; python_version >= '3.7' -pytest-mock==3.12.0; python_version >= '3.8' -pytest-timeout==2.2.0 -pytest-twisted==1.14.0 +pygithub==1.59.1 ; python_version >= '3.7' +pygments==2.16.1 ; python_version >= '3.7' +pyjwt[crypto]==2.8.0 ; python_version >= '3.7' +pynacl==1.5.0 ; python_version >= '3.6' +pyopenssl==23.2.0 ; python_version >= '3.6' +pytest==6.2.5 +pytest-cov==4.1.0 +pytest-mock==3.12.0 +pytest-timeout==2.2.0 ; python_version >= '3.7' +pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-baseconv==1.2.2 -python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' pytz==2023.3.post1 -pyunormalize==15.0.0; python_version >= '3.6' -pyyaml==6.0.1; python_version >= '3.6' -referencing==0.30.2; python_version >= '3.8' -regex==2023.10.3; python_version >= '3.7' -requests==2.31.0; python_version >= '3.7' -rich==12.6.0 +pyunormalize==15.0.0 ; python_version >= '3.6' +pyyaml==6.0.1 ; python_version >= '3.6' +referencing==0.30.2 ; python_version >= '3.8' +regex==2023.10.3 ; python_version >= '3.7' +requests==2.31.0 ; python_version >= '3.7' +rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 -rpds-py==0.10.6; python_version >= '3.8' +rpds-py==0.10.6 ; python_version >= '3.8' safe-pysha3==1.0.4 -semantic-version==2.10.0; python_version >= '2.7' -sentry-sdk==1.32.0 -service-identity==23.1.0; python_version >= '3.8' -setuptools==68.2.2; python_version >= '3.8' -six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +semantic-version==2.10.0 ; python_version >= '2.7' +sentry-sdk==1.33.1 +service-identity==23.1.0 ; python_version >= '3.8' +setuptools==68.2.2 ; python_version >= '3.8' +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' snaptime==0.2.4 sortedcontainers==2.4.0 -sqlalchemy==2.0.22 +sqlalchemy==2.0.22 ; python_version >= '3.7' stack-data==0.6.3 -tabulate==0.9.0; python_version >= '3.7' -time-machine==2.13.0; implementation_name != 'pypy' -toml==0.10.2; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' -toolz==0.12.0; python_version >= '3.5' -tqdm==4.66.1 -traitlets==5.11.2 -trie==2.1.1; python_version >= '3.7' and python_version < '4' -twisted==23.8.0; python_full_version >= '3.7.1' -txaio==23.1.1; python_version >= '3.7' -typing-extensions==4.8.0; python_version >= '3.8' -tzdata==2023.3; python_version >= '2' -tzlocal==5.2; python_version >= '3.8' -urllib3==2.0.7; python_version >= '3.7' +tabulate==0.9.0 ; python_version >= '3.7' +time-machine==2.13.0 ; python_version >= '3.8' +toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' +toolz==0.12.0 ; python_version >= '3.5' +tqdm==4.66.1 ; python_version >= '3.7' +traitlets==5.11.2 ; python_version >= '3.8' +trie==2.1.1 ; python_version >= '3.7' and python_version < '4' +twisted==23.8.0 ; python_full_version >= '3.7.1' +txaio==23.1.1 ; python_version >= '3.7' +typing-extensions==4.8.0 ; python_version >= '3.8' +tzdata==2023.3 ; python_version >= '2' +tzlocal==5.2 ; python_version >= '3.8' +urllib3==2.0.7 ; python_version >= '3.7' varint==1.0.2 -virtualenv==20.24.6; python_version >= '3.7' -watchdog==3.0.0; python_version >= '3.7' +virtualenv==20.24.6 ; python_version >= '3.7' +watchdog==3.0.0 ; python_version >= '3.7' wcwidth==0.2.8 -web3==6.11.1; python_full_version >= '3.7.2' -websockets==12.0; python_version >= '3.8' -werkzeug==3.0.0; python_version >= '3.8' -wrapt==1.16.0rc1 -yarl==1.9.2; python_version >= '3.7' -zipp==3.17.0 -zope-interface==6.1; python_version >= '3.7' +web3==6.11.1 ; python_full_version >= '3.7.2' +websockets==12.0 ; python_version >= '3.8' +werkzeug==3.0.1 ; python_version >= '3.8' +wrapt==1.16.0rc1 ; python_version >= '3.6' +yarl==1.9.2 ; python_version >= '3.7' +zipp==3.17.0 ; python_version >= '3.8' +zope-interface==6.1 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 05f80a6..128f540 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,102 +1,103 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2; python_version >= '3.6' -aiosignal==1.3.1; python_version >= '3.7' +aiohttp==3.8.2 ; python_version >= '3.6' +aiosignal==1.3.1 ; python_version >= '3.7' appdirs==1.4.4 -async-timeout==4.0.3; python_version >= '3.7' -attrs==23.1.0; python_version >= '3.7' -autobahn==23.6.2; python_version >= '3.9' +async-timeout==4.0.3 ; python_version >= '3.7' +attrs==23.1.0 ; python_version >= '3.7' +autobahn==23.6.2 ; python_version >= '3.9' automat==22.10.0 bitarray==2.8.2 +blinker==1.6.3 ; python_version >= '3.7' bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.7.22; python_version >= '3.6' -cffi==1.16.0; python_version >= '3.8' -charset-normalizer==2.1.1; python_full_version >= '3.6.0' -click==8.1.7; python_version >= '3.7' -colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -constant-sorrow==0.1.0a9; python_version >= '3' +certifi==2023.7.22 ; python_version >= '3.6' +cffi==1.16.0 ; python_version >= '3.8' +charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' +click==8.1.7 ; python_version >= '3.7' +colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -cryptography==41.0.5; python_version >= '3.7' -cytoolz==0.12.2; implementation_name == 'cpython' -dateparser==1.1.8; python_version >= '3.7' -eth-abi==4.2.1; python_version < '4' and python_full_version >= '3.7.2' -eth-account==0.8.0; python_version >= '3.6' and python_version < '4' -eth-bloom==2.0.0; python_version >= '3.7' and python_version < '4' -eth-hash[pycryptodome]==0.5.2; python_version >= '3.7' and python_version < '4' +cryptography==41.0.5 ; python_version >= '3.7' +cytoolz==0.12.2 ; python_version >= '3.6' +dateparser==1.1.8 ; python_version >= '3.7' +eth-abi==4.2.1 ; python_version < '4' and python_full_version >= '3.7.2' +eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' +eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' +eth-hash[pycryptodome]==0.5.2 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.1b1; python_version < '4' and python_full_version >= '3.6.8' -eth-typing==3.5.1; python_version < '4' and python_full_version >= '3.7.2' -eth-utils==2.3.0; python_version >= '3.7' and python_version < '4' -flask==2.2.5; python_version >= '3.7' +eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' +eth-tester==0.9.1b1 ; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.5.1 ; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.3.0 ; python_version >= '3.7' and python_version < '4' +flask==3.0.0 ; python_version >= '3.8' flask-cors==4.0.0 -frozenlist==1.4.0; python_version >= '3.8' +frozenlist==1.4.0 ; python_version >= '3.8' hendrix==4.0.0 -hexbytes==0.3.1; python_version >= '3.7' and python_version < '4' -humanize==4.8.0; python_version >= '3.8' +hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' +humanize==4.8.0 ; python_version >= '3.8' hyperlink==21.0.0 -idna==3.4; python_version >= '3.5' +idna==3.4 ; python_version >= '3.5' incremental==22.10.0 -itsdangerous==2.1.2; python_version >= '3.7' -jinja2==3.0.3; python_version >= '3.6' -jsonschema==4.19.1; python_version >= '3.8' -jsonschema-specifications==2023.7.1; python_version >= '3.8' +itsdangerous==2.1.2 ; python_version >= '3.7' +jinja2==3.1.2 ; python_version >= '3.7' +jsonschema==4.19.1 ; python_version >= '3.8' +jsonschema-specifications==2023.7.1 ; python_version >= '3.8' lru-dict==1.2.0 -mako==1.2.4; python_version >= '3.7' -markupsafe==2.1.3; python_version >= '3.7' -marshmallow==3.20.1; python_version >= '3.8' +mako==1.2.4 ; python_version >= '3.7' +markupsafe==2.1.3 ; python_version >= '3.7' +marshmallow==3.20.1 ; python_version >= '3.8' maya==0.6.1 -mnemonic==0.20; python_version >= '3.5' -msgpack==1.0.7; python_version >= '3.8' +mnemonic==0.20 ; python_version >= '3.5' +msgpack==1.0.7 ; python_version >= '3.8' msgpack-python==0.5.6 -multidict==5.2.0; python_version >= '3.6' -mypy-extensions==1.0.0; python_version >= '3.5' -nucypher@ git+https://github.com/nucypher/nucypher.git@f893a7388e5ab91d7df340f89e449d37030607c7 +multidict==5.2.0 ; python_version >= '3.6' +mypy-extensions==1.0.0 ; python_version >= '3.5' +git+https://github.com/nucypher/nucypher.git@598ad313762fa2a5c8653f5996e888e75d9370ed#egg=nucypher nucypher-core==0.13.0 -packaging==23.2; python_version >= '3.7' +packaging==23.2 ; python_version >= '3.7' parsimonious==0.9.0 -pendulum==3.0.0b1; python_version >= '3.8' -prometheus-client==0.17.1; python_version >= '3.6' -prometheus-flask-exporter==0.22.4 -protobuf==4.25.0rc2; python_version >= '3.8' -py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' +pendulum==3.0.0b1 ; python_version >= '3.8' +prometheus-client==0.18.0 ; python_version >= '3.8' +prometheus-flask-exporter==0.23.0 +protobuf==4.25.0rc2 ; python_version >= '3.8' +py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' py-evm==0.7.0a4 -pyasn1==0.5.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pyasn1-modules==0.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.19.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pycryptodome==3.19.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' pyethash==0.1.27 -pynacl==1.5.0; python_version >= '3.6' -pyopenssl==23.2.0; python_version >= '3.6' -python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pynacl==1.5.0 ; python_version >= '3.6' +pyopenssl==23.2.0 ; python_version >= '3.6' +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3.post1 -pyunormalize==15.0.0; python_version >= '3.6' -referencing==0.30.2; python_version >= '3.8' -regex==2023.10.3; python_version >= '3.7' -requests==2.31.0; python_version >= '3.7' +pyunormalize==15.0.0 ; python_version >= '3.6' +referencing==0.30.2 ; python_version >= '3.8' +regex==2023.10.3 ; python_version >= '3.7' +requests==2.31.0 ; python_version >= '3.7' rlp==3.0.0 -rpds-py==0.10.6; python_version >= '3.8' -semantic-version==2.10.0; python_version >= '2.7' -service-identity==23.1.0; python_version >= '3.8' -setuptools==68.2.2; python_version >= '3.8' -six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +rpds-py==0.10.6 ; python_version >= '3.8' +semantic-version==2.10.0 ; python_version >= '2.7' +service-identity==23.1.0 ; python_version >= '3.8' +setuptools==68.2.2 ; python_version >= '3.8' +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 -tabulate==0.9.0; python_version >= '3.7' -time-machine==2.13.0; implementation_name != 'pypy' -toolz==0.12.0; python_version >= '3.5' -trie==2.1.1; python_version >= '3.7' and python_version < '4' -twisted==23.8.0; python_full_version >= '3.7.1' -txaio==23.1.1; python_version >= '3.7' -typing-extensions==4.8.0; python_version >= '3.8' -tzdata==2023.3; python_version >= '2' -tzlocal==5.2; python_version >= '3.8' -urllib3==2.0.7; python_version >= '3.7' -watchdog==3.0.0; python_version >= '3.7' -web3==6.11.1; python_full_version >= '3.7.2' -websockets==12.0; python_version >= '3.8' -werkzeug==3.0.0; python_version >= '3.8' -yarl==1.9.2; python_version >= '3.7' -zope-interface==6.1; python_version >= '3.7' +tabulate==0.9.0 ; python_version >= '3.7' +time-machine==2.13.0 ; python_version >= '3.8' +toolz==0.12.0 ; python_version >= '3.5' +trie==2.1.1 ; python_version >= '3.7' and python_version < '4' +twisted==23.8.0 ; python_full_version >= '3.7.1' +txaio==23.1.1 ; python_version >= '3.7' +typing-extensions==4.8.0 ; python_version >= '3.8' +tzdata==2023.3 ; python_version >= '2' +tzlocal==5.2 ; python_version >= '3.8' +urllib3==2.0.7 ; python_version >= '3.7' +watchdog==3.0.0 ; python_version >= '3.7' +web3==6.11.1 ; python_full_version >= '3.7.2' +websockets==12.0 ; python_version >= '3.8' +werkzeug==3.0.1 ; python_version >= '3.8' +yarl==1.9.2 ; python_version >= '3.7' +zope-interface==6.1 ; python_version >= '3.7' From 73662c023789e072c758c180bc4e2db1e14e5b44 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 1 Nov 2023 16:50:55 -0400 Subject: [PATCH 084/114] Update Porter CLI and Learner use of domain. --- porter/cli/main.py | 7 ++++--- porter/main.py | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/porter/cli/main.py b/porter/cli/main.py index 2da8257..d33208f 100644 --- a/porter/cli/main.py +++ b/porter/cli/main.py @@ -1,5 +1,5 @@ import click -from nucypher.blockchain.eth.domains import TACoDomain +from nucypher.blockchain.eth import domains from nucypher.characters.lawful import Ursula from nucypher.cli.config import group_general_config from nucypher.cli.options import ( @@ -30,7 +30,7 @@ def porter_cli(): @porter_cli.command() @group_general_config -@option_domain(default=TACoDomain.DEFAULT_DOMAIN_NAME, validate=True, required=False) +@option_domain(default=str(domains.DEFAULT_DOMAIN), validate=True, required=False) @option_eth_endpoint(required=False) @option_teacher_uri @option_registry_filepath @@ -90,6 +90,7 @@ def run( ), ) + domain = domains.get_domain(domain) registry = get_registry(domain=domain, registry_filepath=registry_filepath) teacher = None if teacher_uri: @@ -108,7 +109,7 @@ def run( eth_endpoint=eth_endpoint, ) - emitter.message(f"TACo Domain: {PORTER.domain.capitalize()}", color="green") + emitter.message(f"TACo Domain: {str(PORTER.domain).capitalize()}", color="green") emitter.message(f"ETH Endpoint URI: {eth_endpoint}", color="green") # firm up falsy status (i.e. change specified empty string to None) diff --git a/porter/main.py b/porter/main.py index e3763b0..5c1d5ac 100644 --- a/porter/main.py +++ b/porter/main.py @@ -1,8 +1,12 @@ +from pathlib import Path +from typing import Dict, List, NamedTuple, Optional, Sequence + from constant_sorrow.constants import NO_CONTROL_PROTOCOL from eth_typing import ChecksumAddress from eth_utils import to_checksum_address from flask import Response, request from nucypher.blockchain.eth.agents import ContractAgency, TACoApplicationAgent +from nucypher.blockchain.eth.domains import TACoDomain from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import ContractRegistry from nucypher.characters.lawful import Ursula @@ -20,9 +24,7 @@ TreasureMap, ) from nucypher_core.umbral import PublicKey -from pathlib import Path from prometheus_flask_exporter import PrometheusMetrics -from typing import Dict, List, NamedTuple, Optional, Sequence from porter.controllers import PorterCLIController, WebController from porter.interfaces import PorterInterface @@ -82,7 +84,7 @@ class DecryptOutcome(NamedTuple): def __init__( self, - domain: str = None, + domain: TACoDomain = None, registry: ContractRegistry = None, controller: bool = True, node_class: object = Ursula, From 394194ffce573140c447139e9c0bb77d51375429 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 1 Nov 2023 16:51:37 -0400 Subject: [PATCH 085/114] Update Porter tests to reflect updated domain usage. --- tests/conftest.py | 27 +++++++++------------------ tests/test_porter_cli.py | 17 ++++++++--------- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 1700f7a..8826cbd 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,8 @@ -import maya import os +from typing import Iterable, List, Optional, Tuple +from unittest.mock import MagicMock + +import maya import prometheus_client import pytest from click.testing import CliRunner @@ -12,12 +15,10 @@ StakingProvidersReservoir, TACoApplicationAgent, ) -from nucypher.blockchain.eth.domains import DomainInfo, TACoDomain from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import ContractRegistry from nucypher.blockchain.eth.signers.software import Web3Signer from nucypher.characters.lawful import Enrico, Ursula -from nucypher.config.constants import TEMPORARY_DOMAIN from nucypher.crypto.ferveo import dkg from nucypher.crypto.powers import DecryptingPower, RitualisticPower from nucypher.network.nodes import Learner, Teacher @@ -26,19 +27,17 @@ from nucypher_core import HRAC, Address, ThresholdMessageKit, TreasureMap from nucypher_core.ferveo import DkgPublicKey, Validator from prometheus_flask_exporter import PrometheusMetrics + +from porter.emitters import WebEmitter +from porter.main import Porter from tests.constants import ( MOCK_ETH_PROVIDER_URI, + TEMPORARY_DOMAIN, TESTERCHAIN_CHAIN_ID, - TESTERCHAIN_CHAIN_INFO, ) from tests.mock.agents import MockContractAgent from tests.mock.interfaces import MockBlockchain from tests.utils.registry import MockRegistrySource, mock_registry_sources -from typing import Iterable, List, Optional, Tuple -from unittest.mock import MagicMock - -from porter.emitters import WebEmitter -from porter.main import Porter # Crash on server error by default WebEmitter._crash_on_error_default = True @@ -118,14 +117,6 @@ def mock_condition_blockchains(module_mocker): {TESTERCHAIN_CHAIN_ID: "eth-tester/pyevm"}, ) - test_domain_info = DomainInfo( - TEMPORARY_DOMAIN, TESTERCHAIN_CHAIN_INFO, TESTERCHAIN_CHAIN_INFO - ) - - module_mocker.patch.object( - TACoDomain, "get_domain_info", return_value=test_domain_info - ) - @pytest.fixture(scope='module') def test_registry(module_mocker): @@ -361,7 +352,7 @@ def dkg_setup( "version": ConditionLingo.VERSION, "condition": { "conditionType": "time", - "returnValueTest": {"value": "0", "comparator": ">"}, + "returnValueTest": {"value": 0, "comparator": ">"}, "method": "blocktime", "chain": TESTERCHAIN_CHAIN_ID, }, diff --git a/tests/test_porter_cli.py b/tests/test_porter_cli.py index eaf9a15..87c586f 100644 --- a/tests/test_porter_cli.py +++ b/tests/test_porter_cli.py @@ -1,11 +1,10 @@ import pytest from nucypher.characters.lawful import Ursula -from nucypher.config.constants import TEMPORARY_DOMAIN from porter.cli.literature import PORTER_CORS_ALLOWED_ORIGINS, PORTER_RUN_MESSAGE from porter.cli.main import porter_cli from porter.main import Porter -from tests.constants import TEST_ETH_PROVIDER_URI +from tests.constants import TEMPORARY_DOMAIN_NAME, TEST_ETH_PROVIDER_URI from tests.utils.ursula import select_test_port @@ -22,7 +21,7 @@ def test_porter_cli_run_simple(click_runner, teacher_uri): "run", "--dry-run", "--domain", - TEMPORARY_DOMAIN, + TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, "--teacher", @@ -31,7 +30,7 @@ def test_porter_cli_run_simple(click_runner, teacher_uri): result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code == 0, result.output output = result.output - assert f"Domain: {TEMPORARY_DOMAIN}" in output + assert f"Domain: {TEMPORARY_DOMAIN_NAME}" in output assert PORTER_RUN_MESSAGE.format(http_port=Porter.DEFAULT_PORT) in output # Non-default port @@ -40,7 +39,7 @@ def test_porter_cli_run_simple(click_runner, teacher_uri): "run", "--dry-run", "--domain", - TEMPORARY_DOMAIN, + TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, "--http-port", @@ -51,7 +50,7 @@ def test_porter_cli_run_simple(click_runner, teacher_uri): result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code == 0, result.output output = result.output - assert f"Domain: {TEMPORARY_DOMAIN}" in output + assert f"Domain: {TEMPORARY_DOMAIN_NAME}" in output assert PORTER_RUN_MESSAGE.format(http_port=non_default_port) in output @@ -60,7 +59,7 @@ def test_porter_cli_run_eth_provider_must_be_provided(click_runner, teacher_uri) "run", "--dry-run", "--domain", - TEMPORARY_DOMAIN, + TEMPORARY_DOMAIN_NAME, "--teacher", teacher_uri, ) @@ -76,7 +75,7 @@ def test_cli_run_with_cors_origin(click_runner, teacher_uri): "run", "--dry-run", "--domain", - TEMPORARY_DOMAIN, + TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, "--teacher", @@ -97,7 +96,7 @@ def test_cli_run_with_empty_string_cors_origin(click_runner, teacher_uri): "run", "--dry-run", "--domain", - TEMPORARY_DOMAIN, + TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, "--teacher", From af5179999587744f4cf9f535d900a8eec00f4dd3 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 7 Nov 2023 14:56:09 -0500 Subject: [PATCH 086/114] Fail fast when there are insufficient nodes to sample a quantity of nodes from. --- porter/main.py | 6 ++++++ tests/test_get_ursulas.py | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/porter/main.py b/porter/main.py index 5c1d5ac..a08e656 100644 --- a/porter/main.py +++ b/porter/main.py @@ -130,6 +130,12 @@ def get_ursulas(self, exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, include_ursulas: Optional[Sequence[ChecksumAddress]] = None) -> List[UrsulaInfo]: reservoir = self._make_reservoir(exclude_ursulas, include_ursulas) + available_nodes_to_sample = len(reservoir.values) + len(reservoir.reservoir) + if available_nodes_to_sample < quantity: + raise ValueError( + f"Insufficient nodes ({available_nodes_to_sample}) from which to sample {quantity}" + ) + value_factory = PrefetchStrategy(reservoir, quantity) def get_ursula_info(ursula_address) -> Porter.UrsulaInfo: diff --git a/tests/test_get_ursulas.py b/tests/test_get_ursulas.py index 9eca982..bcb50e6 100644 --- a/tests/test_get_ursulas.py +++ b/tests/test_get_ursulas.py @@ -203,6 +203,10 @@ def test_get_ursulas_python_interface(porter, ursulas): for address in exclude_ursulas: assert address not in returned_ursula_addresses + # too many ursulas requested + with pytest.raises(ValueError, match="Insufficient nodes"): + porter.get_ursulas(quantity=len(ursulas) + 1) + def test_get_ursulas_web_interface(porter_web_controller, ursulas): # Send bad data to assert error return @@ -268,11 +272,12 @@ def test_get_ursulas_web_interface(porter_web_controller, ursulas): assert address not in returned_ursula_addresses # - # Failure case + # Failure case: too many ursulas requested # failed_ursula_params = dict(get_ursulas_params) failed_ursula_params["quantity"] = len(ursulas_list) + 1 # too many to get response = porter_web_controller.get( "/get_ursulas", data=json.dumps(failed_ursula_params) ) - assert response.status_code == 500 + assert response.status_code == 400 + assert "Insufficient nodes" in response.text From 66e7158875f875e09f1f2ac53737bb827880488b Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 7 Nov 2023 15:56:30 -0500 Subject: [PATCH 087/114] Set up ruff as pre-commit hook and gh action. --- .github/workflows/ruff.yml | 25 +++++++++++++++++++++++++ .pre-commit-config.yaml | 9 ++++++--- pyproject.toml | 7 +++++++ 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/ruff.yml diff --git a/.github/workflows/ruff.yml b/.github/workflows/ruff.yml new file mode 100644 index 0000000..6089712 --- /dev/null +++ b/.github/workflows/ruff.yml @@ -0,0 +1,25 @@ +name: 🧹 Lint with Ruff + +on: [push, pull_request] + +jobs: + ruff-lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.9" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install ruff + pip install . + + - name: Lint with Ruff + run: ruff --output-format=github porter diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9f393a8..7c520bd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -42,6 +42,9 @@ repos: rev: 1.7.2 hooks: - id: darker - args: [--isort] - additional_dependencies: - - isort~=5.9 + + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: 'v0.1.4' + hooks: + - id: ruff diff --git a/pyproject.toml b/pyproject.toml index bee8df5..8297ef7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,3 +34,10 @@ directory = "misc" name = "Misc" showcontent = true + +[tool.ruff] +select = ["E", "F", "I"] +ignore = ["E501"] + +[tool.ruff.isort] +known-first-party = ["porter"] From 0760811a7c0fc1588dcc6a2c5a6c07ab7026a6ec Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 7 Nov 2023 15:57:47 -0500 Subject: [PATCH 088/114] Apply ruff fixes to repos. --- porter/__init__.py | 9 ++++++++- porter/cli/help.py | 2 +- porter/cli/types.py | 2 +- porter/controllers.py | 10 ++++------ porter/emitters.py | 2 +- porter/fields/treasuremap.py | 2 +- porter/interfaces.py | 4 ++-- porter/schema.py | 13 +++++++------ porter/utils.py | 11 +++++------ 9 files changed, 30 insertions(+), 25 deletions(-) diff --git a/porter/__init__.py b/porter/__init__.py index d0698a1..91de018 100644 --- a/porter/__init__.py +++ b/porter/__init__.py @@ -1,5 +1,12 @@ from porter.__about__ import ( - __author__, __license__, __summary__, __title__, __version__, __copyright__, __email__, __url__ + __author__, + __copyright__, + __email__, + __license__, + __summary__, + __title__, + __url__, + __version__, ) __all__ = [ diff --git a/porter/cli/help.py b/porter/cli/help.py index 4358e50..6af6e9e 100644 --- a/porter/cli/help.py +++ b/porter/cli/help.py @@ -1,6 +1,6 @@ import click +from nucypher.config.constants import DEFAULT_CONFIG_ROOT, USER_LOG_DIR -from nucypher.config.constants import USER_LOG_DIR, DEFAULT_CONFIG_ROOT from porter.main import BANNER diff --git a/porter/cli/types.py b/porter/cli/types.py index 288d02e..f8a8148 100644 --- a/porter/cli/types.py +++ b/porter/cli/types.py @@ -8,7 +8,7 @@ class ChecksumAddress(click.ParamType): def convert(self, value, param, ctx): try: value = to_checksum_address(value=value) - except ValueError as e: + except ValueError: self.fail("Invalid ethereum address") else: return value diff --git a/porter/controllers.py b/porter/controllers.py index fc9085b..8c62cc8 100644 --- a/porter/controllers.py +++ b/porter/controllers.py @@ -9,12 +9,13 @@ from flask import Flask, Response from hendrix.deploy.base import HendrixDeploy from hendrix.deploy.tls import HendrixDeployTLS - from nucypher.config.constants import MAX_UPLOAD_CONTENT_LENGTH from nucypher.network.resources import get_static_resources from nucypher.utilities.concurrency import WorkerPoolException from nucypher.utilities.emitters import StdoutEmitter -from nucypher.utilities.logging import Logger, GlobalLoggerSettings +from nucypher.utilities.logging import GlobalLoggerSettings, Logger + +from porter import interfaces from porter.emitters import WebEmitter @@ -273,10 +274,7 @@ class PorterCLIController(CLIController): _emitter_class = StdoutEmitter - def __init__(self, - interface: 'PorterInterface', - *args, - **kwargs): + def __init__(self, interface: "interfaces.PorterInterface", *args, **kwargs): super().__init__(interface=interface, *args, **kwargs) def _perform_action(self, *args, **kwargs) -> dict: diff --git a/porter/emitters.py b/porter/emitters.py index 8bc069b..36ea814 100644 --- a/porter/emitters.py +++ b/porter/emitters.py @@ -4,9 +4,9 @@ from typing import Callable from flask import Response +from nucypher.utilities.logging import Logger import porter -from nucypher.utilities.logging import Logger def null_stream(): diff --git a/porter/fields/treasuremap.py b/porter/fields/treasuremap.py index 04cc497..bb62697 100644 --- a/porter/fields/treasuremap.py +++ b/porter/fields/treasuremap.py @@ -1,7 +1,7 @@ from nucypher_core import TreasureMap as TreasureMapClass -from porter.fields.exceptions import InvalidInputData from porter.fields.base import Base64BytesRepresentation +from porter.fields.exceptions import InvalidInputData class TreasureMap(Base64BytesRepresentation): diff --git a/porter/interfaces.py b/porter/interfaces.py index bd2ff2e..0dcdf23 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -5,7 +5,7 @@ from nucypher_core import RetrievalKit, TreasureMap from nucypher_core.umbral import PublicKey -from porter import schema +from porter import main, schema def attach_schema(schema): @@ -29,7 +29,7 @@ def __init__(self, implementer=None, *args, **kwargs): class PorterInterface(ControlInterface): - def __init__(self, porter: 'Porter' = None, *args, **kwargs): + def __init__(self, porter: "main.Porter" = None, *args, **kwargs): super().__init__(implementer=porter, *args, **kwargs) @attach_schema(schema.GetUrsulas) diff --git a/porter/schema.py b/porter/schema.py index d29215e..838af47 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -1,7 +1,6 @@ import click -from marshmallow import INCLUDE, Schema +from marshmallow import INCLUDE, Schema, validates_schema from marshmallow import fields as marshmallow_fields -from marshmallow import validates_schema from porter.cli.types import EIP55_CHECKSUM_ADDRESS from porter.fields.base import JSON, Integer, PositiveInteger, StringList @@ -103,9 +102,11 @@ class GetUrsulas(BaseSchema): def check_valid_quantity_and_include_ursulas(self, data, **kwargs): # TODO does this make sense - perhaps having extra ursulas could be a good thing if some are down or can't # be contacted at that time - ursulas_to_include = data.get('include_ursulas') - if ursulas_to_include and len(ursulas_to_include) > data['quantity']: - raise InvalidArgumentCombo(f"Ursulas to include is greater than quantity requested") + ursulas_to_include = data.get("include_ursulas") + if ursulas_to_include and len(ursulas_to_include) > data["quantity"]: + raise InvalidArgumentCombo( + "Ursulas to include is greater than quantity requested" + ) @validates_schema def check_include_and_exclude_are_mutually_exclusive(self, data, **kwargs): @@ -258,5 +259,5 @@ def check_valid_threshold_and_requests(self, data, **kwargs): encrypted_decryption_requests = data.get("encrypted_decryption_requests") if len(encrypted_decryption_requests) < threshold: raise InvalidArgumentCombo( - f"Number of provided requests must be >= the expected threshold" + "Number of provided requests must be >= the expected threshold" ) diff --git a/porter/utils.py b/porter/utils.py index 7e134d7..b0c8a66 100644 --- a/porter/utils.py +++ b/porter/utils.py @@ -3,15 +3,14 @@ import string from typing import Dict, List, Optional, Tuple -from nucypher_core import MessageKit, RetrievalKit - from nucypher.characters.lawful import Enrico from nucypher.crypto.powers import DecryptingPower +from nucypher_core import MessageKit, RetrievalKit from porter.fields.base import JSON -from porter.fields.umbralkey import UmbralKey from porter.fields.retrieve import RetrievalKit as RetrievalKitField from porter.fields.treasuremap import TreasureMap +from porter.fields.umbralkey import UmbralKey def generate_random_label() -> bytes: @@ -83,9 +82,9 @@ def retrieval_request_setup(enacted_policy, def retrieval_params_decode_from_rest(retrieval_params: Dict) -> Dict: - decode_bytes = lambda field, data: field()._deserialize( - value=data, attr=None, data=None - ) + def decode_bytes(field, data): + return field()._deserialize(value=data, attr=None, data=None) + decoded_params = dict( treasure_map=decode_bytes(TreasureMap, retrieval_params["treasure_map"]), retrieval_kits=[ From 56e457f7e6475339115e4423259c5f5cfae2e228 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 8 Nov 2023 12:27:02 +0100 Subject: [PATCH 089/114] =?UTF-8?q?Bump=20version:=203.1.1=20=E2=86=92=203?= =?UTF-8?q?.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- porter/__about__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 7f32445..58bbdf1 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.1.1 +current_version = 3.2.0 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?P[^.]*)\.(?P\d+))? diff --git a/porter/__about__.py b/porter/__about__.py index fbe0487..da51ac5 100644 --- a/porter/__about__.py +++ b/porter/__about__.py @@ -14,7 +14,7 @@ __summary__ = "Pipe for TACo on Threshold Network" -__version__ = "3.1.1" +__version__ = "3.2.0" __author__ = "NuCypher" From 146a998837275a9a5a9e2d0b7682091a084f0de2 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 14 Nov 2023 10:02:59 -0500 Subject: [PATCH 090/114] Relock dependency to derekpierre/child-sampling to work on latest changes made to sampling in `nucypher`. --- Pipfile | 4 ++-- Pipfile.lock | 19 +++++++++++-------- dev-requirements.txt | 4 ++-- requirements.txt | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Pipfile b/Pipfile index b19346c..afb96cf 100644 --- a/Pipfile +++ b/Pipfile @@ -7,13 +7,13 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.8"} +nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "child-sampling"} nucypher-core = "==0.13.0" # must be the same as nucypher flask-cors = "*" prometheus-flask-exporter = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.8", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "child-sampling", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 25c0e71..efbc513 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "46a5138d44f1bae27372c812ba7b68f4bddd9dcd22f75a3ebf590224fcb47134" + "sha256": "7d055e62ad6d8e60f11ef25f6d304d46167bc7009c0876180421d4f18235d19c" }, "pipfile-spec": 6, "requires": { @@ -1124,8 +1124,8 @@ "version": "==1.0.0" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "598ad313762fa2a5c8653f5996e888e75d9370ed" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "f751cb385e03909529c733a402b674c7c2f28cdd" }, "nucypher-core": { "hashes": [ @@ -2517,6 +2517,9 @@ "version": "==15.1.0" }, "coverage": { + "extras": [ + "toml" + ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -3638,8 +3641,8 @@ "version": "==1.8.0" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "598ad313762fa2a5c8653f5996e888e75d9370ed" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "f751cb385e03909529c733a402b674c7c2f28cdd" }, "nucypher-core": { "hashes": [ @@ -4533,10 +4536,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:1cce906dc86afda1ecd22c4716b0c846639151a3c3b59e23826711c6525c5642", - "sha256:816aeb900a54bba2d9346bad8ffac2d258c4fa09271b95a6533a714e9000f074" + "sha256:04e392db9a0d59bd49a51b9e3a92410ac5867556820465057c2ef89a38e953e9", + "sha256:a7865952701e46d38b41315c16c075367675c48d049b90a4cc2e41991ebc7efa" ], - "version": "==1.33.1" + "version": "==1.35.0" }, "service-identity": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 1f6def9..267bc3e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -83,7 +83,7 @@ msgspec==0.18.4 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/nucypher/nucypher.git@598ad313762fa2a5c8653f5996e888e75d9370ed#egg=nucypher +git+https://github.com/derekpierre/nucypher.git@f751cb385e03909529c733a402b674c7c2f28cdd#egg=nucypher nucypher-core==0.13.0 numpy==1.26.1 ; python_version < '3.13' and python_version >= '3.9' packaging==23.2 ; python_version >= '3.7' @@ -140,7 +140,7 @@ rlp==3.0.0 rpds-py==0.10.6 ; python_version >= '3.8' safe-pysha3==1.0.4 semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.33.1 +sentry-sdk==1.35.0 service-identity==23.1.0 ; python_version >= '3.8' setuptools==68.2.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' diff --git a/requirements.txt b/requirements.txt index 128f540..72821b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,7 +53,7 @@ msgpack==1.0.7 ; python_version >= '3.8' msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/nucypher/nucypher.git@598ad313762fa2a5c8653f5996e888e75d9370ed#egg=nucypher +git+https://github.com/derekpierre/nucypher.git@f751cb385e03909529c733a402b674c7c2f28cdd#egg=nucypher nucypher-core==0.13.0 packaging==23.2 ; python_version >= '3.7' parsimonious==0.9.0 From f9fe8b31d9cb82d51b6d8accbba0734b5ae27572 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 14 Nov 2023 11:03:50 -0500 Subject: [PATCH 091/114] Allow polygon endpoint to be specified in CLI. Make polygon endpoint, eth endpoint, and domain required CLI options. Use TACoChildApplicationAgent for sampling i.e. /get_ursulas endpoint. --- porter/cli/main.py | 31 ++++++++++++------------------- porter/main.py | 40 +++++++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/porter/cli/main.py b/porter/cli/main.py index d33208f..65c5e11 100644 --- a/porter/cli/main.py +++ b/porter/cli/main.py @@ -30,8 +30,15 @@ def porter_cli(): @porter_cli.command() @group_general_config -@option_domain(default=str(domains.DEFAULT_DOMAIN), validate=True, required=False) -@option_eth_endpoint(required=False) +@option_domain(default=str(domains.DEFAULT_DOMAIN), validate=True, required=True) +@option_eth_endpoint(required=True) +@click.option( + "--polygon-endpoint", + "polygon_endpoint", + help="Connection URL for PRE payment method", + type=click.STRING, + required=True, +) @option_teacher_uri @option_registry_filepath @option_min_stake @@ -62,6 +69,7 @@ def run( general_config, domain, eth_endpoint, + polygon_endpoint, teacher_uri, registry_filepath, min_stake, @@ -73,23 +81,6 @@ def run( """Start Porter's Web controller.""" emitter = setup_emitter(general_config, banner=BANNER) - # HTTP/HTTPS - if not eth_endpoint: - raise click.BadOptionUsage( - option_name="--eth-endpoint", - message=click.style( - "--eth-endpoint is required for decentralized porter.", fg="red" - ), - ) - if not domain: - # should never happen - domain defaults to 'mainnet' if not specified - raise click.BadOptionUsage( - option_name="--domain", - message=click.style( - "--domain is required for decentralized porter.", "red" - ), - ) - domain = domains.get_domain(domain) registry = get_registry(domain=domain, registry_filepath=registry_filepath) teacher = None @@ -107,10 +98,12 @@ def run( registry=registry, start_learning_now=eager, eth_endpoint=eth_endpoint, + polygon_endpoint=polygon_endpoint, ) emitter.message(f"TACo Domain: {str(PORTER.domain).capitalize()}", color="green") emitter.message(f"ETH Endpoint URI: {eth_endpoint}", color="green") + emitter.message(f"Polygon Endpoint URI: {polygon_endpoint}", color="green") # firm up falsy status (i.e. change specified empty string to None) allow_origins = allow_origins if allow_origins else None diff --git a/porter/main.py b/porter/main.py index a08e656..b9c6c73 100644 --- a/porter/main.py +++ b/porter/main.py @@ -5,7 +5,10 @@ from eth_typing import ChecksumAddress from eth_utils import to_checksum_address from flask import Response, request -from nucypher.blockchain.eth.agents import ContractAgency, TACoApplicationAgent +from nucypher.blockchain.eth.agents import ( + ContractAgency, + TACoChildApplicationAgent, +) from nucypher.blockchain.eth.domains import TACoDomain from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import ContractRegistry @@ -89,26 +92,21 @@ def __init__( controller: bool = True, node_class: object = Ursula, eth_endpoint: str = None, + polygon_endpoint: str = None, execution_timeout: int = DEFAULT_EXECUTION_TIMEOUT, *args, **kwargs, ): - if not eth_endpoint: - raise ValueError('ETH Provider URI is required for decentralized Porter.') + self._initialize_endpoints(eth_endpoint, polygon_endpoint) + self.eth_endpoint, self.polygon_endpoint = eth_endpoint, polygon_endpoint - if not BlockchainInterfaceFactory.is_interface_initialized( - endpoint=eth_endpoint - ): - BlockchainInterfaceFactory.initialize_interface(endpoint=eth_endpoint) - - self.eth_endpoint = eth_endpoint self.registry = registry or ContractRegistry.from_latest_publication( domain=domain ) - self.application_agent = ContractAgency.get_agent( - TACoApplicationAgent, + self.taco_child_application_agent = ContractAgency.get_agent( + TACoChildApplicationAgent, registry=self.registry, - blockchain_endpoint=self.eth_endpoint, + blockchain_endpoint=self.polygon_endpoint, ) super().__init__(save_metadata=True, domain=domain, node_class=node_class, *args, **kwargs) @@ -125,6 +123,22 @@ def __init__( self.log.info(BANNER) + @staticmethod + def _initialize_endpoints(eth_endpoint: str, polygon_endpoint: str): + if not eth_endpoint: + raise ValueError("ETH Provider URI is required for Porter.") + if not BlockchainInterfaceFactory.is_interface_initialized( + endpoint=eth_endpoint + ): + BlockchainInterfaceFactory.initialize_interface(endpoint=eth_endpoint) + + if not polygon_endpoint: + raise ValueError("Polygon Provider URI is required for Porter.") + if not BlockchainInterfaceFactory.is_interface_initialized( + endpoint=polygon_endpoint + ): + BlockchainInterfaceFactory.initialize_interface(endpoint=eth_endpoint) + def get_ursulas(self, quantity: int, exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, @@ -224,7 +238,7 @@ def _make_reservoir( include_ursulas: Optional[Sequence[ChecksumAddress]] = None, ): return make_staking_provider_reservoir( - application_agent=self.application_agent, + application_agent=self.taco_child_application_agent, exclude_addresses=exclude_ursulas, include_addresses=include_ursulas, ) From 59d12d97985f3348aa73d55a49f1cae84499d00f Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 14 Nov 2023 11:11:13 -0500 Subject: [PATCH 092/114] Update tests to accomodate required cli options, polygon-endpoint, and use of TACoChildApplicationAgent for sampling. --- tests/conftest.py | 5 +++-- tests/pre/conftest.py | 26 ++++++++++++++++++++++++++ tests/test_porter_cli.py | 28 +++++++++++++++++++++++++++- 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 tests/pre/conftest.py diff --git a/tests/conftest.py b/tests/conftest.py index 8826cbd..3f26f13 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,7 +13,7 @@ ContractAgency, CoordinatorAgent, StakingProvidersReservoir, - TACoApplicationAgent, + TACoChildApplicationAgent, ) from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import ContractRegistry @@ -182,7 +182,7 @@ def mock_reservoir( } return StakingProvidersReservoir(addresses) - mock_agent = mock_contract_agency.get_agent(TACoApplicationAgent) + mock_agent = mock_contract_agency.get_agent(TACoChildApplicationAgent) mock_agent.get_staking_provider_reservoir = mock_reservoir @@ -208,6 +208,7 @@ def porter(ursulas, mock_rest_middleware, test_registry): porter = Porter( domain=TEMPORARY_DOMAIN, eth_endpoint=MOCK_ETH_PROVIDER_URI, + polygon_endpoint=MOCK_ETH_PROVIDER_URI, registry=test_registry, abort_on_learning_error=True, start_learning_now=True, diff --git a/tests/pre/conftest.py b/tests/pre/conftest.py new file mode 100644 index 0000000..6d68a71 --- /dev/null +++ b/tests/pre/conftest.py @@ -0,0 +1,26 @@ +from typing import Iterable, Optional + +import pytest +from eth_typing import ChecksumAddress +from nucypher.blockchain.eth.agents import ( + StakingProvidersReservoir, + TACoApplicationAgent, +) + + +@pytest.fixture(scope="module", autouse=True) +def mock_sample_reservoir(testerchain, mock_contract_agency): + def mock_reservoir( + without: Optional[Iterable[ChecksumAddress]] = None, *args, **kwargs + ): + addresses = { + address: 1 + for address in testerchain.stake_providers_accounts + if address not in without + } + return StakingProvidersReservoir(addresses) + + # TODO - this is needed for PRE Policy.enact(...) sample functionality which + # uses TACoApplication - should we change this (in `nucypher`)? + mock_agent = mock_contract_agency.get_agent(TACoApplicationAgent) + mock_agent.get_staking_provider_reservoir = mock_reservoir diff --git a/tests/test_porter_cli.py b/tests/test_porter_cli.py index 87c586f..c398e78 100644 --- a/tests/test_porter_cli.py +++ b/tests/test_porter_cli.py @@ -24,6 +24,8 @@ def test_porter_cli_run_simple(click_runner, teacher_uri): TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, + "--polygon-endpoint", + TEST_ETH_PROVIDER_URI, "--teacher", teacher_uri, ) @@ -42,6 +44,8 @@ def test_porter_cli_run_simple(click_runner, teacher_uri): TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, + "--polygon-endpoint", + TEST_ETH_PROVIDER_URI, "--http-port", non_default_port, "--teacher", @@ -60,12 +64,30 @@ def test_porter_cli_run_eth_provider_must_be_provided(click_runner, teacher_uri) "--dry-run", "--domain", TEMPORARY_DOMAIN_NAME, + "--polygon-endpoint", + TEST_ETH_PROVIDER_URI, "--teacher", teacher_uri, ) result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) assert result.exit_code != 0, result.output - assert f"--eth-endpoint is required" in result.output + assert "Missing option '--eth-endpoint'" in result.output + + +def test_porter_cli_run_polygon_provider_must_be_provided(click_runner, teacher_uri): + porter_run_command = ( + "run", + "--dry-run", + "--domain", + TEMPORARY_DOMAIN_NAME, + "--eth-endpoint", + TEST_ETH_PROVIDER_URI, + "--teacher", + teacher_uri, + ) + result = click_runner.invoke(porter_cli, porter_run_command, catch_exceptions=False) + assert result.exit_code != 0, result.output + assert "Missing option '--polygon-endpoint'" in result.output def test_cli_run_with_cors_origin(click_runner, teacher_uri): @@ -78,6 +100,8 @@ def test_cli_run_with_cors_origin(click_runner, teacher_uri): TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, + "--polygon-endpoint", + TEST_ETH_PROVIDER_URI, "--teacher", teacher_uri, "--allow-origins", @@ -99,6 +123,8 @@ def test_cli_run_with_empty_string_cors_origin(click_runner, teacher_uri): TEMPORARY_DOMAIN_NAME, "--eth-endpoint", TEST_ETH_PROVIDER_URI, + "--polygon-endpoint", + TEST_ETH_PROVIDER_URI, "--teacher", teacher_uri, "--allow-origins", From 64c507d2f07378d55eae93dcb513b7df569a505e Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 17 Nov 2023 10:39:17 -0500 Subject: [PATCH 093/114] Update help text for polygon endpoint cli option. --- porter/cli/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/porter/cli/main.py b/porter/cli/main.py index 65c5e11..e3fb436 100644 --- a/porter/cli/main.py +++ b/porter/cli/main.py @@ -35,7 +35,7 @@ def porter_cli(): @click.option( "--polygon-endpoint", "polygon_endpoint", - help="Connection URL for PRE payment method", + help="Connection URL for Polygon chain", type=click.STRING, required=True, ) From 7723d6ed23da27a5f07e068685a61474623e6008 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 17 Nov 2023 10:49:53 -0500 Subject: [PATCH 094/114] Ensure required values are provided to Porter object initialization via CLI and programmatically. --- porter/main.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/porter/main.py b/porter/main.py index b9c6c73..f2095a8 100644 --- a/porter/main.py +++ b/porter/main.py @@ -9,7 +9,7 @@ ContractAgency, TACoChildApplicationAgent, ) -from nucypher.blockchain.eth.domains import TACoDomain +from nucypher.blockchain.eth.domains import DEFAULT_DOMAIN, TACoDomain from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory from nucypher.blockchain.eth.registry import ContractRegistry from nucypher.characters.lawful import Ursula @@ -87,16 +87,23 @@ class DecryptOutcome(NamedTuple): def __init__( self, - domain: TACoDomain = None, + eth_endpoint: str, + polygon_endpoint: str, + domain: TACoDomain = DEFAULT_DOMAIN, registry: ContractRegistry = None, controller: bool = True, node_class: object = Ursula, - eth_endpoint: str = None, - polygon_endpoint: str = None, execution_timeout: int = DEFAULT_EXECUTION_TIMEOUT, *args, **kwargs, ): + if not domain: + raise ValueError("TACo Domain must be provided.") + if not eth_endpoint: + raise ValueError("ETH Provider URI must be provided.") + if not polygon_endpoint: + raise ValueError("Polygon Provider URI must be provided.") + self._initialize_endpoints(eth_endpoint, polygon_endpoint) self.eth_endpoint, self.polygon_endpoint = eth_endpoint, polygon_endpoint @@ -125,19 +132,15 @@ def __init__( @staticmethod def _initialize_endpoints(eth_endpoint: str, polygon_endpoint: str): - if not eth_endpoint: - raise ValueError("ETH Provider URI is required for Porter.") if not BlockchainInterfaceFactory.is_interface_initialized( endpoint=eth_endpoint ): BlockchainInterfaceFactory.initialize_interface(endpoint=eth_endpoint) - if not polygon_endpoint: - raise ValueError("Polygon Provider URI is required for Porter.") if not BlockchainInterfaceFactory.is_interface_initialized( endpoint=polygon_endpoint ): - BlockchainInterfaceFactory.initialize_interface(endpoint=eth_endpoint) + BlockchainInterfaceFactory.initialize_interface(endpoint=polygon_endpoint) def get_ursulas(self, quantity: int, From b23a3e926a6bc2ffa5b6138c12c89159e2bdb1d1 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 17 Nov 2023 13:13:46 -0500 Subject: [PATCH 095/114] Update Porter's nucypher depedency to be v7.0.0-rc.10 and relock all dependencies. --- Pipfile | 4 ++-- Pipfile.lock | 13 +++++-------- dev-requirements.txt | 2 +- requirements.txt | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Pipfile b/Pipfile index afb96cf..c1b6378 100644 --- a/Pipfile +++ b/Pipfile @@ -7,13 +7,13 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "child-sampling"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.10"} nucypher-core = "==0.13.0" # must be the same as nucypher flask-cors = "*" prometheus-flask-exporter = "*" [dev-packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "child-sampling", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.10", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index efbc513..c563ed2 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7d055e62ad6d8e60f11ef25f6d304d46167bc7009c0876180421d4f18235d19c" + "sha256": "cb97453b370ef434cc8ac515b2e63564cf07c9b8b997e24f155f3ed25f5bbfb2" }, "pipfile-spec": 6, "requires": { @@ -1124,8 +1124,8 @@ "version": "==1.0.0" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "f751cb385e03909529c733a402b674c7c2f28cdd" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "c0d12e14e4526f3fb3549a1176d0b2a79923c5ca" }, "nucypher-core": { "hashes": [ @@ -2517,9 +2517,6 @@ "version": "==15.1.0" }, "coverage": { - "extras": [ - "toml" - ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -3641,8 +3638,8 @@ "version": "==1.8.0" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "f751cb385e03909529c733a402b674c7c2f28cdd" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "c0d12e14e4526f3fb3549a1176d0b2a79923c5ca" }, "nucypher-core": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 267bc3e..8a7eb14 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -83,7 +83,7 @@ msgspec==0.18.4 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/derekpierre/nucypher.git@f751cb385e03909529c733a402b674c7c2f28cdd#egg=nucypher +git+https://github.com/nucypher/nucypher.git@c0d12e14e4526f3fb3549a1176d0b2a79923c5ca#egg=nucypher nucypher-core==0.13.0 numpy==1.26.1 ; python_version < '3.13' and python_version >= '3.9' packaging==23.2 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 72821b1..b41e52e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,7 +53,7 @@ msgpack==1.0.7 ; python_version >= '3.8' msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/derekpierre/nucypher.git@f751cb385e03909529c733a402b674c7c2f28cdd#egg=nucypher +git+https://github.com/nucypher/nucypher.git@c0d12e14e4526f3fb3549a1176d0b2a79923c5ca#egg=nucypher nucypher-core==0.13.0 packaging==23.2 ; python_version >= '3.7' parsimonious==0.9.0 From 028931c33094dd3d5386a8d15328d833d0d4da9a Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 17 Nov 2023 13:14:19 -0500 Subject: [PATCH 096/114] Update RitualStatus to use ACTIVE instead of FINALIZED for tests. --- tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 3f26f13..7b5293b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -341,7 +341,7 @@ def dkg_setup( # Configure CoordinatorAgent coordinator_agent.get_ritual.return_value = ritual coordinator_agent.get_ritual_status.return_value = ( - CoordinatorAgent.Ritual.Status.FINALIZED + CoordinatorAgent.Ritual.Status.ACTIVE ) coordinator_agent.is_encryption_authorized.return_value = True From f82f30a8e8cb4a7ff98ff1f1b127fd6f2ec49d78 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 17 Nov 2023 13:28:45 -0500 Subject: [PATCH 097/114] =?UTF-8?q?Bump=20version:=203.2.0=20=E2=86=92=203?= =?UTF-8?q?.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- porter/__about__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 58bbdf1..a9b34ca 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.2.0 +current_version = 3.3.0 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?P[^.]*)\.(?P\d+))? diff --git a/porter/__about__.py b/porter/__about__.py index da51ac5..0fa0282 100644 --- a/porter/__about__.py +++ b/porter/__about__.py @@ -14,7 +14,7 @@ __summary__ = "Pipe for TACo on Threshold Network" -__version__ = "3.2.0" +__version__ = "3.3.0" __author__ = "NuCypher" From 856cc6818b80925a7f86e97c15937614b93b199f Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 10 Nov 2023 14:35:11 -0500 Subject: [PATCH 098/114] Allow a timeout to be specified as a parameter to Porter decrypt (web and python API). --- porter/interfaces.py | 2 ++ porter/main.py | 9 ++++++++- porter/schema.py | 15 +++++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/porter/interfaces.py b/porter/interfaces.py index 0dcdf23..04bc882 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -80,10 +80,12 @@ def decrypt( self, threshold: int, encrypted_decryption_requests: Dict[ChecksumAddress, bytes], + timeout: Optional[int] = None, ): decrypt_outcome = self.implementer.decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests, + timeout=timeout, ) response_data = {"decryption_results": decrypt_outcome} return response_data diff --git a/porter/main.py b/porter/main.py index f2095a8..031ae28 100644 --- a/porter/main.py +++ b/porter/main.py @@ -224,11 +224,18 @@ def decrypt( encrypted_decryption_requests: Dict[ ChecksumAddress, EncryptedThresholdDecryptionRequest ], + timeout: Optional[int] = None, ) -> DecryptOutcome: decryption_client = ThresholdDecryptionClient(self) - successes, failures = decryption_client.gather_encrypted_decryption_shares( + + kwargs = dict( encrypted_requests=encrypted_decryption_requests, threshold=threshold ) + if timeout: + kwargs["timeout"] = timeout + successes, failures = decryption_client.gather_encrypted_decryption_shares( + **kwargs + ) decrypt_outcome = Porter.DecryptOutcome( encrypted_decryption_responses=successes, errors=failures diff --git a/porter/schema.py b/porter/schema.py index 838af47..dad67fc 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -3,7 +3,7 @@ from marshmallow import fields as marshmallow_fields from porter.cli.types import EIP55_CHECKSUM_ADDRESS -from porter.fields.base import JSON, Integer, PositiveInteger, StringList +from porter.fields.base import JSON, PositiveInteger, StringList from porter.fields.exceptions import InvalidArgumentCombo, InvalidInputData from porter.fields.retrieve import CapsuleFrag, RetrievalKit from porter.fields.taco import ( @@ -224,7 +224,7 @@ class Meta: class Decrypt(BaseSchema): - threshold = Integer( + threshold = PositiveInteger( required=True, load_only=True, click=click.option( @@ -245,6 +245,17 @@ class Decrypt(BaseSchema): "-e", help="Encrypted decryption requests dictionary keyed by ursula checksum address", type=click.STRING, + required=True, + ), + ) + timeout = PositiveInteger( + required=False, + load_only=True, + click=click.option( + "--timeout", + "-t", + help="Timeout for decryption operation", + type=click.INT, required=False, ), ) From b7e2624d76adae966d9a828c16c0dc29c56e4c7b Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 10 Nov 2023 14:36:42 -0500 Subject: [PATCH 099/114] Update TACo decrypt tests to include timeout. --- .../taco/test_porter_taco_python_interface.py | 27 +++- tests/taco/test_porter_taco_web_interface.py | 33 ++++- tests/taco/test_taco_specifications.py | 130 ++++++++++++------ 3 files changed, 146 insertions(+), 44 deletions(-) diff --git a/tests/taco/test_porter_taco_python_interface.py b/tests/taco/test_porter_taco_python_interface.py index 26b8554..0f5bcf9 100644 --- a/tests/taco/test_porter_taco_python_interface.py +++ b/tests/taco/test_porter_taco_python_interface.py @@ -1,3 +1,4 @@ +import pytest from nucypher_core import SessionStaticSecret, ThresholdDecryptionRequest from nucypher_core.ferveo import ( DecryptionShareSimple, @@ -6,7 +7,8 @@ ) -def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): +@pytest.mark.parametrize("timeout", [None, 5, 7, 9]) +def test_taco_decryption_success(porter, dkg_setup, dkg_encrypted_data, timeout): ritual_id, public_key, cohort, threshold = dkg_setup threshold_message_kit, expected_plaintext = dkg_encrypted_data @@ -37,7 +39,9 @@ def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): shared_secrets[ursula.checksum_address] = shared_secret decrypt_outcome = porter.decrypt( - threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests + threshold=threshold, + encrypted_decryption_requests=encrypted_decryption_requests, + timeout=timeout, ) # sufficient successes @@ -67,6 +71,21 @@ def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): cleartext = threshold_message_kit.decrypt_with_shared_secret(combined_shares) assert bytes(cleartext) == expected_plaintext + +@pytest.mark.parametrize("timeout", [None, 5, 7, 9]) +def test_taco_decryption_failure(porter, dkg_setup, dkg_encrypted_data, timeout): + ritual_id, public_key, cohort, threshold = dkg_setup + threshold_message_kit, expected_plaintext = dkg_encrypted_data + + decryption_request = ThresholdDecryptionRequest( + ritual_id=ritual_id, + variant=FerveoVariant.Simple, + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, + ) + + requester_secret_key = SessionStaticSecret.random() + # # errors - invalid encrypting key used for request # @@ -82,7 +101,9 @@ def test_taco_decryption(porter, dkg_setup, dkg_encrypted_data): ) decrypt_outcome = porter.decrypt( - threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests + threshold=threshold, + encrypted_decryption_requests=encrypted_decryption_requests, + timeout=timeout, ) # sufficient successes diff --git a/tests/taco/test_porter_taco_web_interface.py b/tests/taco/test_porter_taco_web_interface.py index a319e1f..d124335 100644 --- a/tests/taco/test_porter_taco_web_interface.py +++ b/tests/taco/test_porter_taco_web_interface.py @@ -1,6 +1,7 @@ import json from base64 import b64decode +import pytest from eth_utils import to_checksum_address from nucypher_core import ( EncryptedThresholdDecryptionResponse, @@ -16,11 +17,16 @@ from porter.fields.taco import EncryptedThresholdDecryptionRequestField -def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_data): +def test_taco_decrypt_bad_input(porter_web_controller): # Send bad data to assert error return response = porter_web_controller.post("/decrypt", data=json.dumps({"bad": "input"})) assert response.status_code == 400 + +@pytest.mark.parametrize("timeout", [None, 5, 7, 9]) +def test_taco_decrypt( + porter, porter_web_controller, dkg_setup, dkg_encrypted_data, timeout +): # Setup ritual_id, public_key, cohort, threshold = dkg_setup threshold_message_kit, expected_plaintext = dkg_encrypted_data @@ -59,6 +65,8 @@ def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_da "threshold": threshold, "encrypted_decryption_requests": encrypted_decryption_requests, } + if timeout: + request_data["timeout"] = timeout # # Success @@ -106,6 +114,26 @@ def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_da cleartext = threshold_message_kit.decrypt_with_shared_secret(combined_shares) assert bytes(cleartext) == expected_plaintext + +@pytest.mark.parametrize("timeout", [None, 5, 10, 15]) +def test_taco_decrypt_errors( + porter, porter_web_controller, dkg_setup, dkg_encrypted_data, timeout +): + # Setup + ritual_id, public_key, cohort, threshold = dkg_setup + threshold_message_kit, expected_plaintext = dkg_encrypted_data + + requester_secret_key = SessionStaticSecret.random() + + encrypted_request_field = EncryptedThresholdDecryptionRequestField() + + decryption_request = ThresholdDecryptionRequest( + ritual_id=ritual_id, + variant=FerveoVariant.Simple, + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, + ) + # # Errors (some invalid threshold decryption requests) # @@ -143,6 +171,9 @@ def test_taco_decrypt(porter, porter_web_controller, dkg_setup, dkg_encrypted_da "threshold": threshold, "encrypted_decryption_requests": encrypted_decryption_requests, } + if timeout: + request_data["timeout"] = timeout + response = porter_web_controller.post("/decrypt", data=json.dumps(request_data)) response_data = json.loads(response.data) diff --git a/tests/taco/test_taco_specifications.py b/tests/taco/test_taco_specifications.py index f13d6ae..cdc160c 100644 --- a/tests/taco/test_taco_specifications.py +++ b/tests/taco/test_taco_specifications.py @@ -12,39 +12,24 @@ from porter.schema import Decrypt, DecryptOutcomeSchema -def test_taco_decrypt( - porter, dkg_setup, dkg_encrypted_data, get_random_checksum_address -): +def test_taco_decrypt_schema(dkg_setup, dkg_encrypted_data): ritual_id, public_key, cohort, threshold = dkg_setup threshold_message_kit, expected_plaintext = dkg_encrypted_data decrypt_schema = Decrypt() - decryption_request = ThresholdDecryptionRequest( - ritual_id=ritual_id, - variant=FerveoVariant.Simple, - ciphertext_header=threshold_message_kit.ciphertext_header, - acp=threshold_message_kit.acp, - context=None, - ) - requester_secret_key = SessionStaticSecret.random() + encrypted_decryption_requests = _generate_encrypted_requests( + cohort, requester_secret_key, ritual_id, threshold_message_kit + ) encrypted_request_field = EncryptedThresholdDecryptionRequestField() - encrypted_decryption_requests = {} - for ursula in cohort: - ursula_decryption_request_static_key = ( - ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) - ) - shared_secret = requester_secret_key.derive_shared_secret( - ursula_decryption_request_static_key - ) - encrypted_decryption_request = decryption_request.encrypt( - shared_secret=shared_secret, - requester_public_key=requester_secret_key.public_key(), - ) + for ( + checksum_address, + encrypted_decryption_request, + ) in encrypted_decryption_requests.items(): encrypted_decryption_requests[ - ursula.checksum_address + checksum_address ] = encrypted_request_field._serialize( value=encrypted_decryption_request, attr=None, obj=None ) @@ -87,6 +72,46 @@ def test_taco_decrypt( } decrypt_schema.load(request_data) + # invalid threshold value + with pytest.raises(InvalidInputData): + request_data = { + "threshold": 0, + "encrypted_decryption_requests": encrypted_decryption_requests, + } + decrypt_schema.load(request_data) + + with pytest.raises(InvalidInputData): + request_data = { + "threshold": -1, + "encrypted_decryption_requests": encrypted_decryption_requests, + } + decrypt_schema.load(request_data) + + # ivnalid timeout value + with pytest.raises(InvalidInputData): + request_data = { + "threshold": threshold, + "encrypted_decryption_requests": encrypted_decryption_requests, + "timeout": "some number", + } + decrypt_schema.load(request_data) + + with pytest.raises(InvalidInputData): + request_data = { + "threshold": threshold, + "encrypted_decryption_requests": encrypted_decryption_requests, + "timeout": 0, + } + decrypt_schema.load(request_data) + + with pytest.raises(InvalidInputData): + request_data = { + "threshold": threshold, + "encrypted_decryption_requests": encrypted_decryption_requests, + "timeout": -1, + } + decrypt_schema.load(request_data) + # invalid param combination with pytest.raises(InvalidArgumentCombo): request_data = { @@ -103,23 +128,18 @@ def test_taco_decrypt( } decrypt_schema.load(request_data) - # actual outcomes - encrypted_decryption_requests = {} - for ursula in cohort: - ursula_decryption_request_static_key = ( - ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) - ) - shared_secret = requester_secret_key.derive_shared_secret( - ursula_decryption_request_static_key - ) - encrypted_decryption_request = decryption_request.encrypt( - shared_secret=shared_secret, - requester_public_key=requester_secret_key.public_key(), - ) - encrypted_decryption_requests[ - ursula.checksum_address - ] = encrypted_decryption_request +def test_taco_decrypt(porter, dkg_setup, dkg_encrypted_data): + ritual_id, public_key, cohort, threshold = dkg_setup + threshold_message_kit, expected_plaintext = dkg_encrypted_data + + decrypt_schema = Decrypt() + + requester_secret_key = SessionStaticSecret.random() + + encrypted_decryption_requests = _generate_encrypted_requests( + cohort, requester_secret_key, ritual_id, threshold_message_kit + ) decrypt_outcome = porter.decrypt( threshold=threshold, encrypted_decryption_requests=encrypted_decryption_requests ) @@ -192,3 +212,33 @@ def test_taco_decrypt( ) assert output == {"decryption_results": faked_outcome_json} + + +def _generate_encrypted_requests( + cohort, requester_secret_key, ritual_id, threshold_message_kit +): + decryption_request = ThresholdDecryptionRequest( + ritual_id=ritual_id, + variant=FerveoVariant.Simple, + ciphertext_header=threshold_message_kit.ciphertext_header, + acp=threshold_message_kit.acp, + context=None, + ) + + encrypted_decryption_requests = {} + for ursula in cohort: + ursula_decryption_request_static_key = ( + ursula.threshold_request_power.get_pubkey_from_ritual_id(ritual_id) + ) + shared_secret = requester_secret_key.derive_shared_secret( + ursula_decryption_request_static_key + ) + encrypted_decryption_request = decryption_request.encrypt( + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), + ) + encrypted_decryption_requests[ + ursula.checksum_address + ] = encrypted_decryption_request + + return encrypted_decryption_requests From 2d0c943a7850d2c9503fd160ac810a57ef874604 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 16 Nov 2023 17:08:30 -0500 Subject: [PATCH 100/114] Add max timeout for decryption operation. --- porter/main.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/porter/main.py b/porter/main.py index 031ae28..535cf7a 100644 --- a/porter/main.py +++ b/porter/main.py @@ -1,3 +1,4 @@ +import os from pathlib import Path from typing import Dict, List, NamedTuple, Optional, Sequence @@ -53,10 +54,10 @@ class Porter(Learner): _LONG_LEARNING_DELAY = 30 _ROUNDS_WITHOUT_NODES_AFTER_WHICH_TO_SLOW_DOWN = 25 - DEFAULT_EXECUTION_TIMEOUT = 15 # 15s - DEFAULT_PORT = 9155 + MAX_DECRYPTION_TIMEOUT = os.getenv("PORTER_MAX_DECRYPTION_TIMEOUT", default=15) # same default as `nucypher` + _interface_class = PorterInterface class UrsulaInfo(NamedTuple): @@ -232,7 +233,7 @@ def decrypt( encrypted_requests=encrypted_decryption_requests, threshold=threshold ) if timeout: - kwargs["timeout"] = timeout + kwargs["timeout"] = min(self.MAX_DECRYPTION_TIMEOUT, timeout) successes, failures = decryption_client.gather_encrypted_decryption_shares( **kwargs ) From 7fc275b24ae881f788e5755a24a7ce99bc8cec80 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 16 Nov 2023 19:43:55 -0500 Subject: [PATCH 101/114] Add timeout parameter for /get_ursulas endpoint - limited by a max value (default that can be modified via an environment variable). --- porter/interfaces.py | 12 ++++--- porter/main.py | 42 +++++++++++++--------- porter/schema.py | 12 +++++++ tests/conftest.py | 1 - tests/taco/test_taco_specifications.py | 2 +- tests/test_get_ursulas.py | 48 +++++++++++++++++++++++--- 6 files changed, 90 insertions(+), 27 deletions(-) diff --git a/porter/interfaces.py b/porter/interfaces.py index 04bc882..894b876 100644 --- a/porter/interfaces.py +++ b/porter/interfaces.py @@ -33,14 +33,18 @@ def __init__(self, porter: "main.Porter" = None, *args, **kwargs): super().__init__(implementer=porter, *args, **kwargs) @attach_schema(schema.GetUrsulas) - def get_ursulas(self, - quantity: int, - exclude_ursulas: Optional[List[ChecksumAddress]] = None, - include_ursulas: Optional[List[ChecksumAddress]] = None) -> Dict: + def get_ursulas( + self, + quantity: int, + exclude_ursulas: Optional[List[ChecksumAddress]] = None, + include_ursulas: Optional[List[ChecksumAddress]] = None, + timeout: Optional[int] = None, + ) -> Dict: ursulas_info = self.implementer.get_ursulas( quantity=quantity, exclude_ursulas=exclude_ursulas, include_ursulas=include_ursulas, + timeout=timeout, ) response_data = {"ursulas": ursulas_info} # list of UrsulaInfo objects diff --git a/porter/main.py b/porter/main.py index 535cf7a..fe5e6e9 100644 --- a/porter/main.py +++ b/porter/main.py @@ -56,7 +56,10 @@ class Porter(Learner): DEFAULT_PORT = 9155 - MAX_DECRYPTION_TIMEOUT = os.getenv("PORTER_MAX_DECRYPTION_TIMEOUT", default=15) # same default as `nucypher` + MAX_GET_URSULAS_TIMEOUT = os.getenv("PORTER_GET_URSULAS_TIMEOUT", default=15) + MAX_DECRYPTION_TIMEOUT = os.getenv( + "PORTER_MAX_DECRYPTION_TIMEOUT", default=15 + ) # TODO use same default constant as `nucypher` _interface_class = PorterInterface @@ -94,7 +97,6 @@ def __init__( registry: ContractRegistry = None, controller: bool = True, node_class: object = Ursula, - execution_timeout: int = DEFAULT_EXECUTION_TIMEOUT, *args, **kwargs, ): @@ -120,7 +122,6 @@ def __init__( super().__init__(save_metadata=True, domain=domain, node_class=node_class, *args, **kwargs) self.log = Logger(self.__class__.__name__) - self.execution_timeout = execution_timeout # Controller Interface self.interface = self._interface_class(porter=self) @@ -143,10 +144,18 @@ def _initialize_endpoints(eth_endpoint: str, polygon_endpoint: str): ): BlockchainInterfaceFactory.initialize_interface(endpoint=polygon_endpoint) - def get_ursulas(self, - quantity: int, - exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, - include_ursulas: Optional[Sequence[ChecksumAddress]] = None) -> List[UrsulaInfo]: + def get_ursulas( + self, + quantity: int, + exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, + include_ursulas: Optional[Sequence[ChecksumAddress]] = None, + timeout: Optional[int] = None, + ) -> List[UrsulaInfo]: + timeout = ( + min(timeout, self.MAX_GET_URSULAS_TIMEOUT) + if timeout + else self.MAX_GET_URSULAS_TIMEOUT + ) reservoir = self._make_reservoir(exclude_ursulas, include_ursulas) available_nodes_to_sample = len(reservoir.values) + len(reservoir.reservoir) if available_nodes_to_sample < quantity: @@ -172,16 +181,17 @@ def get_ursula_info(ursula_address) -> Porter.UrsulaInfo: self.log.debug(f"Ursula ({ursula_address}) is unreachable: {str(e)}") raise - self.block_until_number_of_known_nodes_is(quantity, - timeout=self.execution_timeout, - learn_on_this_thread=True, - eager=True) + self.block_until_number_of_known_nodes_is( + quantity, timeout=timeout, learn_on_this_thread=True, eager=True + ) - worker_pool = WorkerPool(worker=get_ursula_info, - value_factory=value_factory, - target_successes=quantity, - timeout=self.execution_timeout, - stagger_timeout=1) + worker_pool = WorkerPool( + worker=get_ursula_info, + value_factory=value_factory, + target_successes=quantity, + timeout=timeout, + stagger_timeout=1, + ) worker_pool.start() try: successes = worker_pool.block_until_target_successes() diff --git a/porter/schema.py b/porter/schema.py index dad67fc..55fe6b8 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -95,6 +95,18 @@ class GetUrsulas(BaseSchema): required=False, load_only=True) + timeout = PositiveInteger( + required=False, + load_only=True, + click=click.option( + "--timeout", + "-t", + help="Timeout for getting the required quantity of ursulas", + type=click.INT, + required=False, + ), + ) + # output ursulas = marshmallow_fields.List(marshmallow_fields.Nested(UrsulaInfoSchema), dump_only=True) diff --git a/tests/conftest.py b/tests/conftest.py index 7b5293b..0de3ac5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -214,7 +214,6 @@ def porter(ursulas, mock_rest_middleware, test_registry): start_learning_now=True, known_nodes=ursulas, verify_node_bonding=False, - execution_timeout=2, network_middleware=mock_rest_middleware, ) yield porter diff --git a/tests/taco/test_taco_specifications.py b/tests/taco/test_taco_specifications.py index cdc160c..5162a9d 100644 --- a/tests/taco/test_taco_specifications.py +++ b/tests/taco/test_taco_specifications.py @@ -87,7 +87,7 @@ def test_taco_decrypt_schema(dkg_setup, dkg_encrypted_data): } decrypt_schema.load(request_data) - # ivnalid timeout value + # invalid timeout value with pytest.raises(InvalidInputData): request_data = { "threshold": threshold, diff --git a/tests/test_get_ursulas.py b/tests/test_get_ursulas.py index bcb50e6..c1db261 100644 --- a/tests/test_get_ursulas.py +++ b/tests/test_get_ursulas.py @@ -54,6 +54,13 @@ def test_get_ursulas_schema(get_random_checksum_address): updated_data["include_ursulas"] = include_ursulas GetUrsulas().load(updated_data) + # both exclude and include and timeout + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = include_ursulas + updated_data["timeout"] = 20 + GetUrsulas().load(updated_data) + # list input formatted as ',' separated strings updated_data = dict(required_data) updated_data["exclude_ursulas"] = ",".join(exclude_ursulas) @@ -118,6 +125,27 @@ def test_get_ursulas_schema(get_random_checksum_address): # 1 address in both include and exclude lists GetUrsulas().load(updated_data) + # invalid timeout value + with pytest.raises(InvalidInputData): + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["timeout"] = "some number" + GetUrsulas().load(updated_data) + + with pytest.raises(InvalidInputData): + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = include_ursulas + updated_data["timeout"] = 0 + GetUrsulas().load(updated_data) + + with pytest.raises(InvalidInputData): + updated_data = dict(required_data) + updated_data["exclude_ursulas"] = exclude_ursulas + updated_data["include_ursulas"] = include_ursulas + updated_data["timeout"] = -1 + GetUrsulas().load(updated_data) + # # Output i.e. dump # @@ -139,7 +167,8 @@ def test_get_ursulas_schema(get_random_checksum_address): assert output == {"ursulas": expected_ursulas_info} -def test_get_ursulas_python_interface(porter, ursulas): +@pytest.mark.parametrize("timeout", [None, 15, 20]) +def test_get_ursulas_python_interface(porter, ursulas, timeout): # simple quantity = 4 ursulas_info = porter.get_ursulas(quantity=quantity) @@ -156,7 +185,7 @@ def test_get_ursulas_python_interface(porter, ursulas): ursulas_list[1].checksum_address, ] ursulas_info = porter.get_ursulas( - quantity=quantity, include_ursulas=include_ursulas + quantity=quantity, include_ursulas=include_ursulas, timeout=timeout ) returned_ursula_addresses = { ursula_info.checksum_address for ursula_info in ursulas_info @@ -171,7 +200,7 @@ def test_get_ursulas_python_interface(porter, ursulas): for i in range(number_to_exclude): exclude_ursulas.append(ursulas_list[i].checksum_address) ursulas_info = porter.get_ursulas( - quantity=quantity, exclude_ursulas=exclude_ursulas + quantity=quantity, exclude_ursulas=exclude_ursulas, timeout=timeout ) returned_ursula_addresses = { ursula_info.checksum_address for ursula_info in ursulas_info @@ -193,6 +222,7 @@ def test_get_ursulas_python_interface(porter, ursulas): quantity=quantity, include_ursulas=include_ursulas, exclude_ursulas=exclude_ursulas, + timeout=timeout, ) returned_ursula_addresses = { ursula_info.checksum_address for ursula_info in ursulas_info @@ -208,7 +238,8 @@ def test_get_ursulas_python_interface(porter, ursulas): porter.get_ursulas(quantity=len(ursulas) + 1) -def test_get_ursulas_web_interface(porter_web_controller, ursulas): +@pytest.mark.parametrize("timeout", [None, 10, 20]) +def test_get_ursulas_web_interface(porter_web_controller, ursulas, timeout): # Send bad data to assert error return response = porter_web_controller.get( "/get_ursulas", data=json.dumps({"bad": "input"}) @@ -232,6 +263,9 @@ def test_get_ursulas_web_interface(porter_web_controller, ursulas): "exclude_ursulas": exclude_ursulas, } + if timeout: + get_ursulas_params["timeout"] = timeout + # # Success # @@ -254,11 +288,15 @@ def test_get_ursulas_web_interface(porter_web_controller, ursulas): # # Test Query parameters # - response = porter_web_controller.get( + query_params = ( f"/get_ursulas?quantity={quantity}" f'&include_ursulas={",".join(include_ursulas)}' f'&exclude_ursulas={",".join(exclude_ursulas)}' ) + if timeout: + query_params += f"&timeout={timeout}" + + response = porter_web_controller.get(query_params) assert response.status_code == 200 response_data = json.loads(response.data) ursulas_info = response_data["result"]["ursulas"] From ce5af4e9eba2a7c6da9e26bccd837bfaf2dcdce0 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 16 Nov 2023 20:01:01 -0500 Subject: [PATCH 102/114] Log a warning whenever parameterized timeout exceeds maximum allowed timeout. Ensure that timeout for decryption is always passed to ThresholdDecryptionClient. --- porter/main.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/porter/main.py b/porter/main.py index fe5e6e9..0fdc3b5 100644 --- a/porter/main.py +++ b/porter/main.py @@ -151,11 +151,16 @@ def get_ursulas( include_ursulas: Optional[Sequence[ChecksumAddress]] = None, timeout: Optional[int] = None, ) -> List[UrsulaInfo]: - timeout = ( - min(timeout, self.MAX_GET_URSULAS_TIMEOUT) - if timeout - else self.MAX_GET_URSULAS_TIMEOUT - ) + if timeout and timeout > self.MAX_GET_URSULAS_TIMEOUT: + self.log.warn( + f"Provided sampling timeout ({timeout}s) exceeds " + f"maximum ({self.MAX_GET_URSULAS_TIMEOUT}s); " + f"using {self.MAX_GET_URSULAS_TIMEOUT}s instead" + ) + timeout = self.MAX_GET_URSULAS_TIMEOUT + else: + timeout = timeout or self.MAX_GET_URSULAS_TIMEOUT + reservoir = self._make_reservoir(exclude_ursulas, include_ursulas) available_nodes_to_sample = len(reservoir.values) + len(reservoir.reservoir) if available_nodes_to_sample < quantity: @@ -238,14 +243,20 @@ def decrypt( timeout: Optional[int] = None, ) -> DecryptOutcome: decryption_client = ThresholdDecryptionClient(self) + if timeout and timeout > self.MAX_DECRYPTION_TIMEOUT: + self.log.warn( + f"Provided decryption timeout ({timeout}s) exceeds " + f"maximum ({self.MAX_DECRYPTION_TIMEOUT}s); " + f"using {self.MAX_DECRYPTION_TIMEOUT}s instead" + ) + timeout = self.MAX_DECRYPTION_TIMEOUT + else: + timeout = timeout or self.MAX_DECRYPTION_TIMEOUT - kwargs = dict( - encrypted_requests=encrypted_decryption_requests, threshold=threshold - ) - if timeout: - kwargs["timeout"] = min(self.MAX_DECRYPTION_TIMEOUT, timeout) successes, failures = decryption_client.gather_encrypted_decryption_shares( - **kwargs + encrypted_requests=encrypted_decryption_requests, + threshold=threshold, + timeout=timeout, ) decrypt_outcome = Porter.DecryptOutcome( From ae1720c08d50c08f3c4549b1de823eb65120ce24 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 18 Nov 2023 18:44:44 -0500 Subject: [PATCH 103/114] Relock dependencies based on change in `nucypher`. --- Pipfile | 4 ++-- Pipfile.lock | 13 ++++++++----- dev-requirements.txt | 4 ++-- requirements.txt | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Pipfile b/Pipfile index c1b6378..723c475 100644 --- a/Pipfile +++ b/Pipfile @@ -7,13 +7,13 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0-rc.10"} +nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "node-timeouts"} nucypher-core = "==0.13.0" # must be the same as nucypher flask-cors = "*" prometheus-flask-exporter = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0-rc.10", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "node-timeouts", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index c563ed2..e4c7742 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "cb97453b370ef434cc8ac515b2e63564cf07c9b8b997e24f155f3ed25f5bbfb2" + "sha256": "921be080430cd3c8426997b002acb20e83bc40fe0680c7f2dfeb1ca35a211027" }, "pipfile-spec": 6, "requires": { @@ -1124,8 +1124,8 @@ "version": "==1.0.0" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "c0d12e14e4526f3fb3549a1176d0b2a79923c5ca" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "98e565c925f0eca0dda015e9cae98f8818e15c7b" }, "nucypher-core": { "hashes": [ @@ -2517,6 +2517,9 @@ "version": "==15.1.0" }, "coverage": { + "extras": [ + "toml" + ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -3638,8 +3641,8 @@ "version": "==1.8.0" }, "nucypher": { - "git": "https://github.com/nucypher/nucypher.git", - "ref": "c0d12e14e4526f3fb3549a1176d0b2a79923c5ca" + "git": "https://github.com/derekpierre/nucypher.git", + "ref": "98e565c925f0eca0dda015e9cae98f8818e15c7b" }, "nucypher-core": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index 8a7eb14..d1c65a3 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -24,7 +24,7 @@ colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3 commonmark==0.9.1 constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -coverage==6.5.0 +coverage[toml]==6.5.0 cryptography==41.0.5 ; python_version >= '3.7' cytoolz==0.12.2 ; python_version >= '3.6' dataclassy==0.11.1 ; python_version >= '3.6' @@ -83,7 +83,7 @@ msgspec==0.18.4 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/nucypher/nucypher.git@c0d12e14e4526f3fb3549a1176d0b2a79923c5ca#egg=nucypher +git+https://github.com/derekpierre/nucypher.git@98e565c925f0eca0dda015e9cae98f8818e15c7b#egg=nucypher nucypher-core==0.13.0 numpy==1.26.1 ; python_version < '3.13' and python_version >= '3.9' packaging==23.2 ; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index b41e52e..ba8f781 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,7 +53,7 @@ msgpack==1.0.7 ; python_version >= '3.8' msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/nucypher/nucypher.git@c0d12e14e4526f3fb3549a1176d0b2a79923c5ca#egg=nucypher +git+https://github.com/derekpierre/nucypher.git@98e565c925f0eca0dda015e9cae98f8818e15c7b#egg=nucypher nucypher-core==0.13.0 packaging==23.2 ; python_version >= '3.7' parsimonious==0.9.0 From 6335c3df8a7f27a357ae0c75c1354cea42318011 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 18 Nov 2023 18:45:17 -0500 Subject: [PATCH 104/114] Used default timeout for ThresholdDecryptionClient.DEFAULT_DECRYPTION_TIMEOUT so that it always matches the default timeout used in `nucypher`. --- porter/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/porter/main.py b/porter/main.py index 0fdc3b5..b06e0c5 100644 --- a/porter/main.py +++ b/porter/main.py @@ -58,8 +58,9 @@ class Porter(Learner): MAX_GET_URSULAS_TIMEOUT = os.getenv("PORTER_GET_URSULAS_TIMEOUT", default=15) MAX_DECRYPTION_TIMEOUT = os.getenv( - "PORTER_MAX_DECRYPTION_TIMEOUT", default=15 - ) # TODO use same default constant as `nucypher` + "PORTER_MAX_DECRYPTION_TIMEOUT", + default=ThresholdDecryptionClient.DEFAULT_DECRYPTION_TIMEOUT, + ) _interface_class = PorterInterface From b06e46c982fb78fd68712daf560d512766208238 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 1 Dec 2023 11:11:58 -0500 Subject: [PATCH 105/114] Update `nucypher` dependency to be `v7.0.0`. --- Pipfile | 4 ++-- Pipfile.lock | 31 ++++++++++++++----------------- dev-requirements.txt | 8 ++++---- requirements.txt | 4 ++-- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/Pipfile b/Pipfile index 723c475..84a1f3f 100644 --- a/Pipfile +++ b/Pipfile @@ -7,13 +7,13 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", ref = "node-timeouts"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0"} nucypher-core = "==0.13.0" # must be the same as nucypher flask-cors = "*" prometheus-flask-exporter = "*" [dev-packages] -nucypher = {git = "https://github.com/derekpierre/nucypher.git", editable = true, ref = "node-timeouts", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index e4c7742..4700cce 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "921be080430cd3c8426997b002acb20e83bc40fe0680c7f2dfeb1ca35a211027" + "sha256": "44245636b42b4077da1acbb4f6bc0e651f83dbcd54475f7fd5991cf5a767916d" }, "pipfile-spec": 6, "requires": { @@ -1124,8 +1124,8 @@ "version": "==1.0.0" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "98e565c925f0eca0dda015e9cae98f8818e15c7b" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "c3d126f522cdf19e8badf76ed20af034897e2b4b" }, "nucypher-core": { "hashes": [ @@ -1254,11 +1254,11 @@ }, "prometheus-client": { "hashes": [ - "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17", - "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184" + "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1", + "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92" ], "markers": "python_version >= '3.8'", - "version": "==0.18.0" + "version": "==0.19.0" }, "prometheus-flask-exporter": { "hashes": [ @@ -2517,9 +2517,6 @@ "version": "==15.1.0" }, "coverage": { - "extras": [ - "toml" - ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -3641,8 +3638,8 @@ "version": "==1.8.0" }, "nucypher": { - "git": "https://github.com/derekpierre/nucypher.git", - "ref": "98e565c925f0eca0dda015e9cae98f8818e15c7b" + "git": "https://github.com/nucypher/nucypher.git", + "ref": "c3d126f522cdf19e8badf76ed20af034897e2b4b" }, "nucypher-core": { "hashes": [ @@ -3888,11 +3885,11 @@ }, "prometheus-client": { "hashes": [ - "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17", - "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184" + "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1", + "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92" ], "markers": "python_version >= '3.8'", - "version": "==0.18.0" + "version": "==0.19.0" }, "prompt-toolkit": { "hashes": [ @@ -4536,10 +4533,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:04e392db9a0d59bd49a51b9e3a92410ac5867556820465057c2ef89a38e953e9", - "sha256:a7865952701e46d38b41315c16c075367675c48d049b90a4cc2e41991ebc7efa" + "sha256:0017fa73b8ae2d4e57fd2522ee3df30453715b29d2692142793ec5d5f90b94a6", + "sha256:8feab81de6bbf64f53279b085bd3820e3e737403b0a0d9317f73a2c3374ae359" ], - "version": "==1.35.0" + "version": "==1.38.0" }, "service-identity": { "hashes": [ diff --git a/dev-requirements.txt b/dev-requirements.txt index d1c65a3..398dbd8 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -24,7 +24,7 @@ colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3 commonmark==0.9.1 constant-sorrow==0.1.0a9 ; python_version >= '3' constantly==15.1.0 -coverage[toml]==6.5.0 +coverage==6.5.0 cryptography==41.0.5 ; python_version >= '3.7' cytoolz==0.12.2 ; python_version >= '3.6' dataclassy==0.11.1 ; python_version >= '3.6' @@ -83,7 +83,7 @@ msgspec==0.18.4 ; python_version >= '3.8' multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/derekpierre/nucypher.git@98e565c925f0eca0dda015e9cae98f8818e15c7b#egg=nucypher +git+https://github.com/nucypher/nucypher.git@c3d126f522cdf19e8badf76ed20af034897e2b4b#egg=nucypher nucypher-core==0.13.0 numpy==1.26.1 ; python_version < '3.13' and python_version >= '3.9' packaging==23.2 ; python_version >= '3.7' @@ -96,7 +96,7 @@ pickleshare==0.7.5 platformdirs==3.11.0 ; python_version >= '3.7' pluggy==1.3.0 ; python_version >= '3.8' pre-commit==2.12.1 -prometheus-client==0.18.0 ; python_version >= '3.8' +prometheus-client==0.19.0 ; python_version >= '3.8' prompt-toolkit==3.0.39 ; python_full_version >= '3.7.0' protobuf==4.25.0rc2 ; python_version >= '3.8' ptyprocess==0.7.0 @@ -140,7 +140,7 @@ rlp==3.0.0 rpds-py==0.10.6 ; python_version >= '3.8' safe-pysha3==1.0.4 semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.35.0 +sentry-sdk==1.38.0 service-identity==23.1.0 ; python_version >= '3.8' setuptools==68.2.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' diff --git a/requirements.txt b/requirements.txt index ba8f781..58fc6cb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,12 +53,12 @@ msgpack==1.0.7 ; python_version >= '3.8' msgpack-python==0.5.6 multidict==5.2.0 ; python_version >= '3.6' mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/derekpierre/nucypher.git@98e565c925f0eca0dda015e9cae98f8818e15c7b#egg=nucypher +git+https://github.com/nucypher/nucypher.git@c3d126f522cdf19e8badf76ed20af034897e2b4b#egg=nucypher nucypher-core==0.13.0 packaging==23.2 ; python_version >= '3.7' parsimonious==0.9.0 pendulum==3.0.0b1 ; python_version >= '3.8' -prometheus-client==0.18.0 ; python_version >= '3.8' +prometheus-client==0.19.0 ; python_version >= '3.8' prometheus-flask-exporter==0.23.0 protobuf==4.25.0rc2 ; python_version >= '3.8' py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' From acdd731d27f8856c868967475a9ee87a30fb5764 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 1 Dec 2023 11:12:26 -0500 Subject: [PATCH 106/114] Update call to retrieve_cfrags to use context as dictionary instead of kwargs. --- porter/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/porter/main.py b/porter/main.py index b06e0c5..d0e5187 100644 --- a/porter/main.py +++ b/porter/main.py @@ -225,7 +225,7 @@ def retrieve_cfrags( alice_verifying_key, bob_encrypting_key, bob_verifying_key, - **context, + context, ) result_outcomes = [] for result, error in zip(results, errors): From f6086adb8fe5de7f207bb377a7d233ab03d68ad4 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 12 Dec 2023 11:28:43 -0500 Subject: [PATCH 107/114] Relock dependencies. --- Pipfile | 4 +- Pipfile.lock | 65 ++++------- dev-requirements.txt | 254 +++++++++++++++++++++---------------------- requirements.txt | 152 +++++++++++++------------- 4 files changed, 225 insertions(+), 250 deletions(-) diff --git a/Pipfile b/Pipfile index 84a1f3f..1c58fc6 100644 --- a/Pipfile +++ b/Pipfile @@ -7,13 +7,13 @@ name = "pypi" python_version = "3" [packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.0"} +nucypher = {git = "https://github.com/nucypher/nucypher.git", ref = "v7.0.3"} nucypher-core = "==0.13.0" # must be the same as nucypher flask-cors = "*" prometheus-flask-exporter = "*" [dev-packages] -nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.0", extras = ["dev"]} # needed for testerchain, and must be editable +nucypher = {git = "https://github.com/nucypher/nucypher.git", editable = true, ref = "v7.0.3", extras = ["dev"]} # needed for testerchain, and must be editable pytest = "<7" # match with nucypher/nucypher pytest-cov = "*" pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 4700cce..7c34022 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "44245636b42b4077da1acbb4f6bc0e651f83dbcd54475f7fd5991cf5a767916d" + "sha256": "e398b5eaea6dafa3790f13f3600966fed6b6c184781208606cef9b7e85e2092c" }, "pipfile-spec": 6, "requires": { @@ -533,7 +533,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "python_version >= '3.6'", + "markers": "implementation_name == 'cpython'", "version": "==0.12.2" }, "dateparser": { @@ -1125,7 +1125,8 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "c3d126f522cdf19e8badf76ed20af034897e2b4b" + "markers": "python_version >= '3'", + "ref": "4b029f707c021da8e87f5a753c9eadd86dbe4b30" }, "nucypher-core": { "hashes": [ @@ -1753,7 +1754,7 @@ "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7", "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237" ], - "markers": "python_version >= '3.8'", + "markers": "implementation_name != 'pypy'", "version": "==2.13.0" }, "toolz": { @@ -2177,7 +2178,6 @@ "sha256:c923809f4f3542e86b18cbeb325b08800461b4af38366a8950d26afc15431e35", "sha256:ccd58558fad2a0003d1e0c026b8bfb5e35ec1600aa06ba2c2260daa5c64a2299" ], - "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.6.9" }, "appdirs": { @@ -2517,6 +2517,9 @@ "version": "==15.1.0" }, "coverage": { + "extras": [ + "toml" + ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -2570,6 +2573,7 @@ "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==6.5.0" }, "cryptography": { @@ -2697,7 +2701,7 @@ "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" ], - "markers": "python_version >= '3.6'", + "markers": "implementation_name == 'cpython'", "version": "==0.12.2" }, "dataclassy": { @@ -2705,7 +2709,6 @@ "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" ], - "markers": "python_version >= '3.6'", "version": "==0.11.1" }, "dateparser": { @@ -2721,7 +2724,6 @@ "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" ], - "markers": "python_version >= '3.5'", "version": "==5.1.1" }, "deprecated": { @@ -2729,7 +2731,6 @@ "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.14" }, "distlib": { @@ -2744,7 +2745,6 @@ "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" ], - "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.2.1" }, "eth-abi": { @@ -2768,7 +2768,6 @@ "sha256:78001209dfdf8c7973c649b8cbba73d3399cd649aeee4223d0b29078ae997201", "sha256:f6c5137a10edcc2a37a8f8736882e412b2fb3b326d00d8128538e73dc031f89b" ], - "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.6.19" }, "eth-bloom": { @@ -2841,7 +2840,6 @@ "sha256:1fcf4fd551133ec917b99406b206713f34112f5e3c030ece5dcb3e5ed8562ee3", "sha256:deaa9ec75cc8d02a047d5a2b065bd038ee6654ba2ffcf6e4c969181eacfdffc2" ], - "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.5.8" }, "evm-trace": { @@ -2849,7 +2847,6 @@ "sha256:0e5b6d6977bf42c3a5157ee3c5cdc5e57bd23827855283b516fa4e68d09e32e2", "sha256:5cd30ba28dcb2c7ba2461c124ad9059629c78bd0781f5c3f2a9939427f50cb47" ], - "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.1.0a25" }, "executing": { @@ -2864,7 +2861,6 @@ "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd" ], - "markers": "python_version >= '3.8'", "version": "==3.12.4" }, "flask": { @@ -3007,7 +3003,6 @@ "sha256:f351479a6914fd81a55c8e68963609f792d9b067fb8a60a042c585a621e0de4f", "sha256:f47932c434a3c8d3c86d865443fadc1fbf574e9b11d6650b656e602b1797908a" ], - "markers": "python_version >= '3.7'", "version": "==3.0.0" }, "hendrix": { @@ -3045,7 +3040,6 @@ "sha256:b45b8a651dfe4ce26f900ce6ccbce997d4fbec39ba03dd243516bf81fea8c0b8", "sha256:f4c2c004b9ec3e0e25332ad2cb6b91eba477a855557a7b5c6e79068809ff8b51" ], - "markers": "python_version >= '3.8'", "version": "==6.88.1" }, "identify": { @@ -3163,7 +3157,6 @@ "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" ], - "markers": "python_version >= '3.8'", "version": "==6.8.0" }, "incremental": { @@ -3186,7 +3179,6 @@ "sha256:0852469d4d579d9cd613c220af7bf0c9cc251813e12be647cb9d463939db9b1e", "sha256:ad52f58fca8f9f848e256c629eff888efc0528c12fe0f8ec14f33205f23ef938" ], - "markers": "python_version >= '3.9'", "version": "==8.16.1" }, "itsdangerous": { @@ -3202,7 +3194,6 @@ "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0" ], - "markers": "python_version >= '3.6'", "version": "==0.19.1" }, "jinja2": { @@ -3409,7 +3400,6 @@ "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" ], - "markers": "python_version >= '3.5'", "version": "==0.1.6" }, "maya": { @@ -3540,7 +3530,6 @@ "sha256:f6229dd49438d81ed7a3470e3cbc9646b1cc1b120d415a1786df880dabb1d1c4", "sha256:f668102958841c5bbd3ba7cf569a65d17aa3bdcf22124f394dfcfcf53cc5a9b9" ], - "markers": "python_version >= '3.8'", "version": "==0.18.4" }, "multidict": { @@ -3639,7 +3628,8 @@ }, "nucypher": { "git": "https://github.com/nucypher/nucypher.git", - "ref": "c3d126f522cdf19e8badf76ed20af034897e2b4b" + "markers": "python_version >= '3'", + "ref": "4b029f707c021da8e87f5a753c9eadd86dbe4b30" }, "nucypher-core": { "hashes": [ @@ -3698,7 +3688,6 @@ "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617", "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" ], - "markers": "python_version < '3.13' and python_version >= '3.9'", "version": "==1.26.1" }, "packaging": { @@ -3739,7 +3728,6 @@ "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" ], - "markers": "python_version >= '3.8'", "version": "==1.5.3" }, "parsimonious": { @@ -3753,7 +3741,6 @@ "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" ], - "markers": "python_version >= '3.6'", "version": "==0.8.3" }, "pendulum": { @@ -3864,7 +3851,6 @@ "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3", "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e" ], - "markers": "python_version >= '3.7'", "version": "==3.11.0" }, "pluggy": { @@ -3881,6 +3867,7 @@ "sha256:900d3c7e1bf4cf0374bb2893c24c23304952181405b4d88c9c40b72bda1bb8a9" ], "index": "pypi", + "markers": "python_full_version >= '3.6.1'", "version": "==2.12.1" }, "prometheus-client": { @@ -3896,7 +3883,6 @@ "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" ], - "markers": "python_full_version >= '3.7.0'", "version": "==3.0.39" }, "protobuf": { @@ -3965,7 +3951,6 @@ "sha256:1eb9c1d05b51133a6961889ec508cdcb19d24d32888704c4e034cae86a3accad", "sha256:f3563e2de8e78599cb9c69ee5bf3bded858ac6cf59891a04177f2353c425fdb7" ], - "markers": "python_version >= '3.7' and python_version < '4'", "version": "==3.13.0" }, "py-multibase": { @@ -3994,7 +3979,6 @@ "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" ], - "markers": "python_version >= '3.6' and python_version < '4'", "version": "==1.1.1" }, "pyasn1": { @@ -4103,7 +4087,6 @@ "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5", "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0" ], - "markers": "python_version >= '3.7'", "version": "==1.10.13" }, "pyethash": { @@ -4117,7 +4100,6 @@ "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9", "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217" ], - "markers": "python_version >= '3.7'", "version": "==1.59.1" }, "pygments": { @@ -4125,7 +4107,6 @@ "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" ], - "markers": "python_version >= '3.7'", "version": "==2.16.1" }, "pyjwt": { @@ -4136,7 +4117,6 @@ "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" ], - "markers": "python_version >= '3.7'", "version": "==2.8.0" }, "pynacl": { @@ -4169,6 +4149,7 @@ "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==6.2.5" }, "pytest-cov": { @@ -4177,6 +4158,7 @@ "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==4.1.0" }, "pytest-mock": { @@ -4185,6 +4167,7 @@ "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==3.12.0" }, "pytest-timeout": { @@ -4192,7 +4175,6 @@ "sha256:3b0b95dabf3cb50bac9ef5ca912fa0cfc286526af17afc806824df20c2f72c90", "sha256:bde531e096466f49398a59f2dde76fa78429a09a12411466f88a07213e220de2" ], - "markers": "python_version >= '3.7'", "version": "==2.2.0" }, "pytest-twisted": { @@ -4200,7 +4182,6 @@ "sha256:1b63b73182bd1b995f30826a1d870c9ac0d08244ab0c871eb8bd0c8243acfb3d", "sha256:209bf5a6452cfbfb61de8f015902c14ec8126400911507074bb2ee4ce8dfe313" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.14.0" }, "python-baseconv": { @@ -4402,7 +4383,6 @@ "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" ], - "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", "version": "==12.6.0" }, "rlp": { @@ -4533,10 +4513,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:0017fa73b8ae2d4e57fd2522ee3df30453715b29d2692142793ec5d5f90b94a6", - "sha256:8feab81de6bbf64f53279b085bd3820e3e737403b0a0d9317f73a2c3374ae359" + "sha256:67f62238af273eebd6432f85116dc6cd5422d4bc02df886514e8139e755f48e4", + "sha256:9d3644b7c36a2c290f0d3275cba250202773f37545ef9097c8bcf561c6f5cdea" ], - "version": "==1.38.0" + "version": "==1.39.0" }, "service-identity": { "hashes": [ @@ -4627,7 +4607,6 @@ "sha256:f146c61ae128ab43ea3a0955de1af7e1633942c2b2b4985ac51cc292daf33222", "sha256:f776c2c30f0e5f4db45c3ee11a5f2a8d9de68e81eb73ec4237de1e32e04ae81c" ], - "markers": "python_version >= '3.7'", "version": "==2.0.22" }, "stack-data": { @@ -4704,7 +4683,7 @@ "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7", "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237" ], - "markers": "python_version >= '3.8'", + "markers": "implementation_name != 'pypy'", "version": "==2.13.0" }, "toml": { @@ -4728,7 +4707,6 @@ "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" ], - "markers": "python_version >= '3.7'", "version": "==4.66.1" }, "traitlets": { @@ -4736,7 +4714,6 @@ "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e", "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae" ], - "markers": "python_version >= '3.8'", "version": "==5.11.2" }, "trie": { @@ -5016,7 +4993,6 @@ "sha256:f9e10c3bf07074377fbbff3d2b02d740c17602ce5d6c91455977bdb32fbbebe8", "sha256:fc43eb869c6baba54dda3264109354a5d0ea621c51ba945ff71308347f24a1c9" ], - "markers": "python_version >= '3.6'", "version": "==1.16.0rc1" }, "yarl": { @@ -5104,7 +5080,6 @@ "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" ], - "markers": "python_version >= '3.8'", "version": "==3.17.0" }, "zope-interface": { diff --git a/dev-requirements.txt b/dev-requirements.txt index 398dbd8..d7de2a6 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,174 +1,174 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2 ; python_version >= '3.6' -aiosignal==1.3.1 ; python_version >= '3.7' -ape-solidity==0.6.9 ; python_version >= '3.8' and python_version < '4' +aiohttp==3.8.2; python_version >= '3.6' +aiosignal==1.3.1; python_version >= '3.7' +ape-solidity==0.6.9 appdirs==1.4.4 -appnope==0.1.3 ; sys_platform == 'darwin' +appnope==0.1.3; sys_platform == 'darwin' asttokens==2.4.0 -async-timeout==4.0.3 ; python_version >= '3.7' -attrs==23.1.0 ; python_version >= '3.7' -autobahn==23.6.2 ; python_version >= '3.9' +async-timeout==4.0.3; python_version >= '3.7' +attrs==23.1.0; python_version >= '3.7' +autobahn==23.6.2; python_version >= '3.9' automat==22.10.0 backcall==0.2.0 base58==1.0.3 bitarray==2.8.2 -blinker==1.6.3 ; python_version >= '3.7' +blinker==1.6.3; python_version >= '3.7' bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.7.22 ; python_version >= '3.6' -cffi==1.16.0 ; python_version >= '3.8' -cfgv==3.4.0 ; python_version >= '3.8' -charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.7 ; python_version >= '3.7' -colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +certifi==2023.7.22; python_version >= '3.6' +cffi==1.16.0; python_version >= '3.8' +cfgv==3.4.0; python_version >= '3.8' +charset-normalizer==2.1.1; python_full_version >= '3.6.0' +click==8.1.7; python_version >= '3.7' +colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' commonmark==0.9.1 -constant-sorrow==0.1.0a9 ; python_version >= '3' +constant-sorrow==0.1.0a9; python_version >= '3' constantly==15.1.0 -coverage==6.5.0 -cryptography==41.0.5 ; python_version >= '3.7' -cytoolz==0.12.2 ; python_version >= '3.6' -dataclassy==0.11.1 ; python_version >= '3.6' -dateparser==1.1.8 ; python_version >= '3.7' -decorator==5.1.1 ; python_version >= '3.5' -deprecated==1.2.14 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +coverage[toml]==6.5.0; python_version >= '3.7' +cryptography==41.0.5; python_version >= '3.7' +cytoolz==0.12.2; implementation_name == 'cpython' +dataclassy==0.11.1 +dateparser==1.1.8; python_version >= '3.7' +decorator==5.1.1 +deprecated==1.2.14 distlib==0.3.7 -eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' -eth-abi==4.2.1 ; python_full_version >= '3.7.2' and python_version < '4' -eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' -eth-ape==0.6.19 ; python_version >= '3.8' and python_version < '4' -eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' -eth-hash[pycryptodome]==0.5.2 ; python_version >= '3.7' and python_version < '4' +eip712==0.2.1 +eth-abi==4.2.1; python_version < '4' and python_full_version >= '3.7.2' +eth-account==0.8.0; python_version >= '3.6' and python_version < '4' +eth-ape==0.6.19 +eth-bloom==2.0.0; python_version >= '3.7' and python_version < '4' +eth-hash[pycryptodome]==0.5.2; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.1b1 ; python_full_version >= '3.6.8' and python_version < '4' -eth-typing==3.5.1 ; python_full_version >= '3.7.2' and python_version < '4' -eth-utils==2.3.0 ; python_version >= '3.7' and python_version < '4' -ethpm-types==0.5.8 ; python_version >= '3.8' and python_version < '4' -evm-trace==0.1.0a25 ; python_version >= '3.8' and python_version < '4' +eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' +eth-tester==0.9.1b1; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.5.1; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.3.0; python_version >= '3.7' and python_version < '4' +ethpm-types==0.5.8 +evm-trace==0.1.0a25 executing==2.0.0 -filelock==3.12.4 ; python_version >= '3.8' -flask==3.0.0 ; python_version >= '3.8' -frozenlist==1.4.0 ; python_version >= '3.8' -greenlet==3.0.0 ; python_version >= '3.7' +filelock==3.12.4 +flask==3.0.0; python_version >= '3.8' +frozenlist==1.4.0; python_version >= '3.8' +greenlet==3.0.0 hendrix==4.0.0 -hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' -humanize==4.8.0 ; python_version >= '3.8' +hexbytes==0.3.1; python_version >= '3.7' and python_version < '4' +humanize==4.8.0; python_version >= '3.8' hyperlink==21.0.0 -hypothesis==6.88.1 ; python_version >= '3.8' -identify==2.5.30 ; python_version >= '3.8' -idna==3.4 ; python_version >= '3.5' +hypothesis==6.88.1 +identify==2.5.30; python_version >= '3.8' +idna==3.4; python_version >= '3.5' ijson==3.2.3 -importlib-metadata==6.8.0 ; python_version >= '3.8' +importlib-metadata==6.8.0 incremental==22.10.0 -iniconfig==2.0.0 ; python_version >= '3.7' -ipython==8.16.1 ; python_version >= '3.9' -itsdangerous==2.1.2 ; python_version >= '3.7' -jedi==0.19.1 ; python_version >= '3.6' -jinja2==3.1.2 ; python_version >= '3.7' -jsonschema==4.19.1 ; python_version >= '3.8' -jsonschema-specifications==2023.7.1 ; python_version >= '3.8' +iniconfig==2.0.0; python_version >= '3.7' +ipython==8.16.1 +itsdangerous==2.1.2; python_version >= '3.7' +jedi==0.19.1 +jinja2==3.1.2; python_version >= '3.7' +jsonschema==4.19.1; python_version >= '3.8' +jsonschema-specifications==2023.7.1; python_version >= '3.8' lazyasd==0.1.4 lru-dict==1.2.0 -mako==1.2.4 ; python_version >= '3.7' -markupsafe==2.1.3 ; python_version >= '3.7' -marshmallow==3.20.1 ; python_version >= '3.8' -matplotlib-inline==0.1.6 ; python_version >= '3.5' +mako==1.2.4; python_version >= '3.7' +markupsafe==2.1.3; python_version >= '3.7' +marshmallow==3.20.1; python_version >= '3.8' +matplotlib-inline==0.1.6 maya==0.6.1 -mnemonic==0.20 ; python_version >= '3.5' +mnemonic==0.20; python_version >= '3.5' morphys==1.0 -msgpack==1.0.7 ; python_version >= '3.8' +msgpack==1.0.7; python_version >= '3.8' msgpack-python==0.5.6 -msgspec==0.18.4 ; python_version >= '3.8' -multidict==5.2.0 ; python_version >= '3.6' -mypy-extensions==1.0.0 ; python_version >= '3.5' -nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -git+https://github.com/nucypher/nucypher.git@c3d126f522cdf19e8badf76ed20af034897e2b4b#egg=nucypher +msgspec==0.18.4 +multidict==5.2.0; python_version >= '3.6' +mypy-extensions==1.0.0; python_version >= '3.5' +nodeenv==1.8.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +nucypher@ git+https://github.com/nucypher/nucypher.git@4b029f707c021da8e87f5a753c9eadd86dbe4b30 nucypher-core==0.13.0 -numpy==1.26.1 ; python_version < '3.13' and python_version >= '3.9' -packaging==23.2 ; python_version >= '3.7' -pandas==1.5.3 ; python_version >= '3.8' +numpy==1.26.1 +packaging==23.2; python_version >= '3.7' +pandas==1.5.3 parsimonious==0.9.0 -parso==0.8.3 ; python_version >= '3.6' -pendulum==3.0.0b1 ; python_version >= '3.8' +parso==0.8.3 +pendulum==3.0.0b1; python_version >= '3.8' pexpect==4.8.0 pickleshare==0.7.5 -platformdirs==3.11.0 ; python_version >= '3.7' -pluggy==1.3.0 ; python_version >= '3.8' -pre-commit==2.12.1 -prometheus-client==0.19.0 ; python_version >= '3.8' -prompt-toolkit==3.0.39 ; python_full_version >= '3.7.0' -protobuf==4.25.0rc2 ; python_version >= '3.8' +platformdirs==3.11.0 +pluggy==1.3.0; python_version >= '3.8' +pre-commit==2.12.1; python_full_version >= '3.6.1' +prometheus-client==0.19.0; python_version >= '3.8' +prompt-toolkit==3.0.39 +protobuf==4.25.0rc2; python_version >= '3.8' ptyprocess==0.7.0 pure-eval==0.2.2 -py==1.11.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +py==1.11.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' py-cid==0.3.0 -py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' +py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' py-evm==0.7.0a4 -py-geth==3.13.0 ; python_version >= '3.7' and python_version < '4' +py-geth==3.13.0 py-multibase==1.0.3 py-multicodec==0.2.1 py-multihash==0.2.3 -py-solc-x==1.1.1 ; python_version >= '3.6' and python_version < '4' -pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +py-solc-x==1.1.1 +pyasn1==0.5.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.19.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -pydantic==1.10.13 ; python_version >= '3.7' +pycryptodome==3.19.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pydantic==1.10.13 pyethash==0.1.27 -pygithub==1.59.1 ; python_version >= '3.7' -pygments==2.16.1 ; python_version >= '3.7' -pyjwt[crypto]==2.8.0 ; python_version >= '3.7' -pynacl==1.5.0 ; python_version >= '3.6' -pyopenssl==23.2.0 ; python_version >= '3.6' -pytest==6.2.5 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-timeout==2.2.0 ; python_version >= '3.7' -pytest-twisted==1.14.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pygithub==1.59.1 +pygments==2.16.1 +pyjwt[crypto]==2.8.0 +pynacl==1.5.0; python_version >= '3.6' +pyopenssl==23.2.0; python_version >= '3.6' +pytest==6.2.5; python_version >= '3.6' +pytest-cov==4.1.0; python_version >= '3.7' +pytest-mock==3.12.0; python_version >= '3.8' +pytest-timeout==2.2.0 +pytest-twisted==1.14.0 python-baseconv==1.2.2 -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' +python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3.post1 -pyunormalize==15.0.0 ; python_version >= '3.6' -pyyaml==6.0.1 ; python_version >= '3.6' -referencing==0.30.2 ; python_version >= '3.8' -regex==2023.10.3 ; python_version >= '3.7' -requests==2.31.0 ; python_version >= '3.7' -rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' +pyunormalize==15.0.0; python_version >= '3.6' +pyyaml==6.0.1; python_version >= '3.6' +referencing==0.30.2; python_version >= '3.8' +regex==2023.10.3; python_version >= '3.7' +requests==2.31.0; python_version >= '3.7' +rich==12.6.0 rlp==3.0.0 -rpds-py==0.10.6 ; python_version >= '3.8' +rpds-py==0.10.6; python_version >= '3.8' safe-pysha3==1.0.4 -semantic-version==2.10.0 ; python_version >= '2.7' -sentry-sdk==1.38.0 -service-identity==23.1.0 ; python_version >= '3.8' -setuptools==68.2.2 ; python_version >= '3.8' -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' +semantic-version==2.10.0; python_version >= '2.7' +sentry-sdk==1.39.0 +service-identity==23.1.0; python_version >= '3.8' +setuptools==68.2.2; python_version >= '3.8' +six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 -sqlalchemy==2.0.22 ; python_version >= '3.7' +sqlalchemy==2.0.22 stack-data==0.6.3 -tabulate==0.9.0 ; python_version >= '3.7' -time-machine==2.13.0 ; python_version >= '3.8' -toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' -toolz==0.12.0 ; python_version >= '3.5' -tqdm==4.66.1 ; python_version >= '3.7' -traitlets==5.11.2 ; python_version >= '3.8' -trie==2.1.1 ; python_version >= '3.7' and python_version < '4' -twisted==23.8.0 ; python_full_version >= '3.7.1' -txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.8.0 ; python_version >= '3.8' -tzdata==2023.3 ; python_version >= '2' -tzlocal==5.2 ; python_version >= '3.8' -urllib3==2.0.7 ; python_version >= '3.7' +tabulate==0.9.0; python_version >= '3.7' +time-machine==2.13.0; implementation_name != 'pypy' +toml==0.10.2; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2' +toolz==0.12.0; python_version >= '3.5' +tqdm==4.66.1 +traitlets==5.11.2 +trie==2.1.1; python_version >= '3.7' and python_version < '4' +twisted==23.8.0; python_full_version >= '3.7.1' +txaio==23.1.1; python_version >= '3.7' +typing-extensions==4.8.0; python_version >= '3.8' +tzdata==2023.3; python_version >= '2' +tzlocal==5.2; python_version >= '3.8' +urllib3==2.0.7; python_version >= '3.7' varint==1.0.2 -virtualenv==20.24.6 ; python_version >= '3.7' -watchdog==3.0.0 ; python_version >= '3.7' +virtualenv==20.24.6; python_version >= '3.7' +watchdog==3.0.0; python_version >= '3.7' wcwidth==0.2.8 -web3==6.11.1 ; python_full_version >= '3.7.2' -websockets==12.0 ; python_version >= '3.8' -werkzeug==3.0.1 ; python_version >= '3.8' -wrapt==1.16.0rc1 ; python_version >= '3.6' -yarl==1.9.2 ; python_version >= '3.7' -zipp==3.17.0 ; python_version >= '3.8' -zope-interface==6.1 ; python_version >= '3.7' +web3==6.11.1; python_full_version >= '3.7.2' +websockets==12.0; python_version >= '3.8' +werkzeug==3.0.1; python_version >= '3.8' +wrapt==1.16.0rc1 +yarl==1.9.2; python_version >= '3.7' +zipp==3.17.0 +zope-interface==6.1; python_version >= '3.7' diff --git a/requirements.txt b/requirements.txt index 58fc6cb..e601874 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,103 +1,103 @@ -i https://pypi.python.org/simple -aiohttp==3.8.2 ; python_version >= '3.6' -aiosignal==1.3.1 ; python_version >= '3.7' +aiohttp==3.8.2; python_version >= '3.6' +aiosignal==1.3.1; python_version >= '3.7' appdirs==1.4.4 -async-timeout==4.0.3 ; python_version >= '3.7' -attrs==23.1.0 ; python_version >= '3.7' -autobahn==23.6.2 ; python_version >= '3.9' +async-timeout==4.0.3; python_version >= '3.7' +attrs==23.1.0; python_version >= '3.7' +autobahn==23.6.2; python_version >= '3.9' automat==22.10.0 bitarray==2.8.2 -blinker==1.6.3 ; python_version >= '3.7' +blinker==1.6.3; python_version >= '3.7' bytestring-splitter==2.4.1 cached-property==1.5.2 -certifi==2023.7.22 ; python_version >= '3.6' -cffi==1.16.0 ; python_version >= '3.8' -charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.7 ; python_version >= '3.7' -colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -constant-sorrow==0.1.0a9 ; python_version >= '3' +certifi==2023.7.22; python_version >= '3.6' +cffi==1.16.0; python_version >= '3.8' +charset-normalizer==2.1.1; python_full_version >= '3.6.0' +click==8.1.7; python_version >= '3.7' +colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' +constant-sorrow==0.1.0a9; python_version >= '3' constantly==15.1.0 -cryptography==41.0.5 ; python_version >= '3.7' -cytoolz==0.12.2 ; python_version >= '3.6' -dateparser==1.1.8 ; python_version >= '3.7' -eth-abi==4.2.1 ; python_version < '4' and python_full_version >= '3.7.2' -eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' -eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' -eth-hash[pycryptodome]==0.5.2 ; python_version >= '3.7' and python_version < '4' +cryptography==41.0.5; python_version >= '3.7' +cytoolz==0.12.2; implementation_name == 'cpython' +dateparser==1.1.8; python_version >= '3.7' +eth-abi==4.2.1; python_version < '4' and python_full_version >= '3.7.2' +eth-account==0.8.0; python_version >= '3.6' and python_version < '4' +eth-bloom==2.0.0; python_version >= '3.7' and python_version < '4' +eth-hash[pycryptodome]==0.5.2; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 -eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' -eth-tester==0.9.1b1 ; python_version < '4' and python_full_version >= '3.6.8' -eth-typing==3.5.1 ; python_version < '4' and python_full_version >= '3.7.2' -eth-utils==2.3.0 ; python_version >= '3.7' and python_version < '4' -flask==3.0.0 ; python_version >= '3.8' +eth-rlp==0.3.0; python_version >= '3.7' and python_version < '4' +eth-tester==0.9.1b1; python_version < '4' and python_full_version >= '3.6.8' +eth-typing==3.5.1; python_version < '4' and python_full_version >= '3.7.2' +eth-utils==2.3.0; python_version >= '3.7' and python_version < '4' +flask==3.0.0; python_version >= '3.8' flask-cors==4.0.0 -frozenlist==1.4.0 ; python_version >= '3.8' +frozenlist==1.4.0; python_version >= '3.8' hendrix==4.0.0 -hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' -humanize==4.8.0 ; python_version >= '3.8' +hexbytes==0.3.1; python_version >= '3.7' and python_version < '4' +humanize==4.8.0; python_version >= '3.8' hyperlink==21.0.0 -idna==3.4 ; python_version >= '3.5' +idna==3.4; python_version >= '3.5' incremental==22.10.0 -itsdangerous==2.1.2 ; python_version >= '3.7' -jinja2==3.1.2 ; python_version >= '3.7' -jsonschema==4.19.1 ; python_version >= '3.8' -jsonschema-specifications==2023.7.1 ; python_version >= '3.8' +itsdangerous==2.1.2; python_version >= '3.7' +jinja2==3.1.2; python_version >= '3.7' +jsonschema==4.19.1; python_version >= '3.8' +jsonschema-specifications==2023.7.1; python_version >= '3.8' lru-dict==1.2.0 -mako==1.2.4 ; python_version >= '3.7' -markupsafe==2.1.3 ; python_version >= '3.7' -marshmallow==3.20.1 ; python_version >= '3.8' +mako==1.2.4; python_version >= '3.7' +markupsafe==2.1.3; python_version >= '3.7' +marshmallow==3.20.1; python_version >= '3.8' maya==0.6.1 -mnemonic==0.20 ; python_version >= '3.5' -msgpack==1.0.7 ; python_version >= '3.8' +mnemonic==0.20; python_version >= '3.5' +msgpack==1.0.7; python_version >= '3.8' msgpack-python==0.5.6 -multidict==5.2.0 ; python_version >= '3.6' -mypy-extensions==1.0.0 ; python_version >= '3.5' -git+https://github.com/nucypher/nucypher.git@c3d126f522cdf19e8badf76ed20af034897e2b4b#egg=nucypher +multidict==5.2.0; python_version >= '3.6' +mypy-extensions==1.0.0; python_version >= '3.5' +nucypher@ git+https://github.com/nucypher/nucypher.git@4b029f707c021da8e87f5a753c9eadd86dbe4b30 nucypher-core==0.13.0 -packaging==23.2 ; python_version >= '3.7' +packaging==23.2; python_version >= '3.7' parsimonious==0.9.0 -pendulum==3.0.0b1 ; python_version >= '3.8' -prometheus-client==0.19.0 ; python_version >= '3.8' +pendulum==3.0.0b1; python_version >= '3.8' +prometheus-client==0.19.0; python_version >= '3.8' prometheus-flask-exporter==0.23.0 -protobuf==4.25.0rc2 ; python_version >= '3.8' -py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' +protobuf==4.25.0rc2; python_version >= '3.8' +py-ecc==6.0.0; python_version >= '3.6' and python_version < '4' py-evm==0.7.0a4 -pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1==0.5.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +pyasn1-modules==0.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pychalk==2.0.1 pycparser==2.21 -pycryptodome==3.19.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +pycryptodome==3.19.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' pyethash==0.1.27 -pynacl==1.5.0 ; python_version >= '3.6' -pyopenssl==23.2.0 ; python_version >= '3.6' -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pynacl==1.5.0; python_version >= '3.6' +pyopenssl==23.2.0; python_version >= '3.6' +python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pytz==2023.3.post1 -pyunormalize==15.0.0 ; python_version >= '3.6' -referencing==0.30.2 ; python_version >= '3.8' -regex==2023.10.3 ; python_version >= '3.7' -requests==2.31.0 ; python_version >= '3.7' +pyunormalize==15.0.0; python_version >= '3.6' +referencing==0.30.2; python_version >= '3.8' +regex==2023.10.3; python_version >= '3.7' +requests==2.31.0; python_version >= '3.7' rlp==3.0.0 -rpds-py==0.10.6 ; python_version >= '3.8' -semantic-version==2.10.0 ; python_version >= '2.7' -service-identity==23.1.0 ; python_version >= '3.8' -setuptools==68.2.2 ; python_version >= '3.8' -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +rpds-py==0.10.6; python_version >= '3.8' +semantic-version==2.10.0; python_version >= '2.7' +service-identity==23.1.0; python_version >= '3.8' +setuptools==68.2.2; python_version >= '3.8' +six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' snaptime==0.2.4 sortedcontainers==2.4.0 -tabulate==0.9.0 ; python_version >= '3.7' -time-machine==2.13.0 ; python_version >= '3.8' -toolz==0.12.0 ; python_version >= '3.5' -trie==2.1.1 ; python_version >= '3.7' and python_version < '4' -twisted==23.8.0 ; python_full_version >= '3.7.1' -txaio==23.1.1 ; python_version >= '3.7' -typing-extensions==4.8.0 ; python_version >= '3.8' -tzdata==2023.3 ; python_version >= '2' -tzlocal==5.2 ; python_version >= '3.8' -urllib3==2.0.7 ; python_version >= '3.7' -watchdog==3.0.0 ; python_version >= '3.7' -web3==6.11.1 ; python_full_version >= '3.7.2' -websockets==12.0 ; python_version >= '3.8' -werkzeug==3.0.1 ; python_version >= '3.8' -yarl==1.9.2 ; python_version >= '3.7' -zope-interface==6.1 ; python_version >= '3.7' +tabulate==0.9.0; python_version >= '3.7' +time-machine==2.13.0; implementation_name != 'pypy' +toolz==0.12.0; python_version >= '3.5' +trie==2.1.1; python_version >= '3.7' and python_version < '4' +twisted==23.8.0; python_full_version >= '3.7.1' +txaio==23.1.1; python_version >= '3.7' +typing-extensions==4.8.0; python_version >= '3.8' +tzdata==2023.3; python_version >= '2' +tzlocal==5.2; python_version >= '3.8' +urllib3==2.0.7; python_version >= '3.7' +watchdog==3.0.0; python_version >= '3.7' +web3==6.11.1; python_full_version >= '3.7.2' +websockets==12.0; python_version >= '3.8' +werkzeug==3.0.1; python_version >= '3.8' +yarl==1.9.2; python_version >= '3.7' +zope-interface==6.1; python_version >= '3.7' From 532643ba52101f2c2bc0f84f2928de2eeba71aef Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 12 Dec 2023 12:30:05 -0500 Subject: [PATCH 108/114] Remove nginx docker folders since this is not something we want to specifically support in the repos. Porter operators can choose how they do TLS/SSL individually. --- deploy/docker/nginx/Dockerfile | 4 --- deploy/docker/nginx/docker-compose.yml | 38 ----------------------- deploy/docker/nginx/porter.local_location | 19 ------------ 3 files changed, 61 deletions(-) delete mode 100644 deploy/docker/nginx/Dockerfile delete mode 100644 deploy/docker/nginx/docker-compose.yml delete mode 100644 deploy/docker/nginx/porter.local_location diff --git a/deploy/docker/nginx/Dockerfile b/deploy/docker/nginx/Dockerfile deleted file mode 100644 index f7bb6b1..0000000 --- a/deploy/docker/nginx/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM nginxproxy/nginx-proxy:alpine - -# Copy porter.local virtual host location configuration file -COPY ./deploy/docker/nginx/porter.local_location /etc/nginx/vhost.d/ diff --git a/deploy/docker/nginx/docker-compose.yml b/deploy/docker/nginx/docker-compose.yml deleted file mode 100644 index 3834eb3..0000000 --- a/deploy/docker/nginx/docker-compose.yml +++ /dev/null @@ -1,38 +0,0 @@ -version: '3' - -services: - - nginx-proxy: - restart: always - image: nginxproxy/nginx-proxy:alpine - build: - context: ../../.. - dockerfile: deploy/docker/nginx/Dockerfile - ports: - - "443:443" - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - # because of the vhost name used below, the cert and key should be named "porter.local.crt" and "porter.local.key" respectively; - # otherwise a conf file needs to be specified that providers server configuration values including ssl_certificate and ssl_certificate_key - - "${TLS_DIR}:/etc/nginx/certs/" - - nginx-porter: - restart: on-failure - image: porter:latest - build: - context: ../../.. - dockerfile: deploy/docker/Dockerfile - expose: - # Default Porter port - - "9155" - volumes: - - .:/code - - ~/.local/share/nucypher:/nucypher - command: [ "nucypher-porter", "run", - "--eth-domain", "${WEB3_PROVIDER_URI}", - "--domain", "${NUCYPHER_NETWORK}" ] - environment: - - VIRTUAL_HOST=porter.local - - VIRTUAL_PORT=9155 - depends_on: - - nginx-proxy diff --git a/deploy/docker/nginx/porter.local_location b/deploy/docker/nginx/porter.local_location deleted file mode 100644 index 8c4771b..0000000 --- a/deploy/docker/nginx/porter.local_location +++ /dev/null @@ -1,19 +0,0 @@ -# -# Allow CORS for any domain by default - modify if not desired -# -# https://enable-cors.org/server_nginx.html -# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin -# -if ($request_method ~* "(GET|POST)") { - add_header "Access-Control-Allow-Origin" *; -} - -# Preflighted requests -if ($request_method = 'OPTIONS' ) { - add_header "Access-Control-Allow-Origin" *; - add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD"; - # Tell client that this pre-flight info is valid for 20 days - add_header 'Access-Control-Max-Age' 1728000; - add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept"; - return 204; -} From 7164d7492c2b0f47d1d982b35137bc23722ba0a4 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 12 Dec 2023 12:32:31 -0500 Subject: [PATCH 109/114] Update documentation and docker-compose. --- README.rst | 41 ++++++++++++++++++++++++-------- deploy/docker/docker-compose.yml | 6 ++--- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/README.rst b/README.rst index a69b0bd..7585c86 100644 --- a/README.rst +++ b/README.rst @@ -27,6 +27,8 @@ operate their own. Running a Porter Instance ------------------------- +By default, Porter runs on port ``9155``. + Security Considerations *********************** @@ -39,16 +41,33 @@ Security Considerations .. note:: - - Ideally, you would run Porter behind a reverse proxy (e.g. `nginx `_) for additional - functionality such as HTTPS, CORS, authentication etc. + Managing a Porter instance on ``mainnet`` requires solid server + administration skills. This includes understanding how to provision and + secure servers, applying security best practices, and maintaining + consistent system performance. Key competencies like network configuration, + SSL/TLS encryption, and CORS, are also essential to ensure the + secure and efficient operation of your Porter instance. + +.. warning:: + + By default, Porter runs over HTTP. However, Porter instances must be + secured with a valid HTTPS certificate in order to be compatible with + network applications. A Porter instance running without SSL/TLS is not + only insecure but also browser-based apps and websites will be + unable to connect. + + To secure your Porter instance with HTTPS, use a reverse proxy + like `Nginx `_ or + `Apache `_ for SSL + processing, and potentially `Let's Encrypt `_ + for automated SSL certificate issuance and renewal. Additionally, consider + using cloud-based services like AWS/Digital Ocean load balancers or + Cloudflare for SSL termination and enhanced security. Run via Docker ************** -By default, Porter runs on port ``9155``. - #. Get the latest ``porter`` image: .. code:: bash @@ -66,7 +85,8 @@ By default, Porter runs on port ``9155``. --restart=unless-stopped \ nucypher/porter:latest \ nucypher-porter run \ - --eth-endpoint \ + --eth-endpoint \ + --polygon-endpoint \ --domain The command above is for illustrative purposes and can be modified as @@ -113,7 +133,7 @@ For a full list of CLI options after installation ``nucypher-porter``, run: * Run Porter service via HTTP .. code:: console - $ nucypher-porter run --eth-endpoint --domain + $ nucypher-porter run --eth-endpoint --polygon-endpoint --domain ______ @@ -127,6 +147,7 @@ For a full list of CLI options after installation ``nucypher-porter``, run: TACo Domain: ETH Endpoint URI: ... + Polygon Endpoint URI: ... Running Porter Web Controller at http://127.0.0.1:9155 @@ -256,7 +277,7 @@ Example Response } } }, - "version":"1.0.0" + "version": "3.3.0" } .. note:: @@ -351,7 +372,7 @@ Example Response } ] }, - "version": "1.0.0" + "version": "3.3.0" } @@ -455,5 +476,5 @@ Example Response } ] }, - "version": "1.0.0" + "version": "3.3.0" } diff --git a/deploy/docker/docker-compose.yml b/deploy/docker/docker-compose.yml index a077432..ac6edda 100644 --- a/deploy/docker/docker-compose.yml +++ b/deploy/docker/docker-compose.yml @@ -15,6 +15,6 @@ services: - .:/code - ~/.local/share/nucypher:/nucypher command: ["nucypher-porter", "run", - "--eth-endpoint", "${WEB3_PROVIDER_URI}", - "--domain", "${NUCYPHER_NETWORK}", - "--allow-origins", "${PORTER_CORS_ALLOW_ORIGINS}"] # empty string if env var not defined which translates to CORS not enabled by default + "--eth-endpoint", "${ETH_WEB3_PROVIDER_URI}", + "--polygon-endpoint", "${POLY_WEB3_PROVIDER_URI}", + "--domain", "${TACO_DOMAIN}"] From fab46b5867d74533b450640ce9164a56403efa03 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 12 Dec 2023 14:54:13 -0500 Subject: [PATCH 110/114] Refactor timeout code so that it can be unit tested. Added unit test for timeout adjustment. --- porter/main.py | 40 ++++++++++++----------- tests/test_porter_configure_timeout.py | 44 ++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 tests/test_porter_configure_timeout.py diff --git a/porter/main.py b/porter/main.py index d0e5187..63c31e0 100644 --- a/porter/main.py +++ b/porter/main.py @@ -1,6 +1,6 @@ import os from pathlib import Path -from typing import Dict, List, NamedTuple, Optional, Sequence +from typing import Dict, List, NamedTuple, Optional, Sequence, Union from constant_sorrow.constants import NO_CONTROL_PROTOCOL from eth_typing import ChecksumAddress @@ -152,15 +152,9 @@ def get_ursulas( include_ursulas: Optional[Sequence[ChecksumAddress]] = None, timeout: Optional[int] = None, ) -> List[UrsulaInfo]: - if timeout and timeout > self.MAX_GET_URSULAS_TIMEOUT: - self.log.warn( - f"Provided sampling timeout ({timeout}s) exceeds " - f"maximum ({self.MAX_GET_URSULAS_TIMEOUT}s); " - f"using {self.MAX_GET_URSULAS_TIMEOUT}s instead" - ) - timeout = self.MAX_GET_URSULAS_TIMEOUT - else: - timeout = timeout or self.MAX_GET_URSULAS_TIMEOUT + timeout = self._configure_timeout( + "sampling", timeout, self.MAX_GET_URSULAS_TIMEOUT + ) reservoir = self._make_reservoir(exclude_ursulas, include_ursulas) available_nodes_to_sample = len(reservoir.values) + len(reservoir.reservoir) @@ -244,15 +238,9 @@ def decrypt( timeout: Optional[int] = None, ) -> DecryptOutcome: decryption_client = ThresholdDecryptionClient(self) - if timeout and timeout > self.MAX_DECRYPTION_TIMEOUT: - self.log.warn( - f"Provided decryption timeout ({timeout}s) exceeds " - f"maximum ({self.MAX_DECRYPTION_TIMEOUT}s); " - f"using {self.MAX_DECRYPTION_TIMEOUT}s instead" - ) - timeout = self.MAX_DECRYPTION_TIMEOUT - else: - timeout = timeout or self.MAX_DECRYPTION_TIMEOUT + timeout = self._configure_timeout( + "decryption", timeout, self.MAX_DECRYPTION_TIMEOUT + ) successes, failures = decryption_client.gather_encrypted_decryption_shares( encrypted_requests=encrypted_decryption_requests, @@ -265,6 +253,20 @@ def decrypt( ) return decrypt_outcome + def _configure_timeout( + self, operation: str, timeout: Union[int, None], max_timeout: int + ): + if timeout and timeout > max_timeout: + self.log.warn( + f"Provided {operation} timeout ({timeout}s) exceeds " + f"maximum ({max_timeout}s); " + f"using {max_timeout}s instead" + ) + timeout = max_timeout + else: + timeout = timeout or max_timeout + return timeout + def _make_reservoir( self, exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, diff --git a/tests/test_porter_configure_timeout.py b/tests/test_porter_configure_timeout.py new file mode 100644 index 0000000..d628ec6 --- /dev/null +++ b/tests/test_porter_configure_timeout.py @@ -0,0 +1,44 @@ +import pytest + +from porter.main import Porter + + +@pytest.mark.parametrize( + "timeout_scenarios", + [ + (None, 10, 10), + (1, 10, 1), + (5, 10, 5), + (9, 10, 9), + (10, 10, 10), + (11, 10, 10), + (20, 10, 10), + (25, 10, 10), + ( + Porter.MAX_GET_URSULAS_TIMEOUT - 1, + Porter.MAX_GET_URSULAS_TIMEOUT, + Porter.MAX_GET_URSULAS_TIMEOUT - 1, + ), + ( + Porter.MAX_GET_URSULAS_TIMEOUT + 1, + Porter.MAX_GET_URSULAS_TIMEOUT, + Porter.MAX_GET_URSULAS_TIMEOUT, + ), + ( + Porter.MAX_DECRYPTION_TIMEOUT / 2, + Porter.MAX_DECRYPTION_TIMEOUT, + Porter.MAX_DECRYPTION_TIMEOUT / 2, + ), + ( + Porter.MAX_DECRYPTION_TIMEOUT * 2, + Porter.MAX_DECRYPTION_TIMEOUT, + Porter.MAX_DECRYPTION_TIMEOUT, + ), + ], +) +def test_porter_configure_timeout_defined_results(porter, timeout_scenarios): + provided_timeout, max_timeout, expected_timeout = timeout_scenarios + resultant_timeout = porter._configure_timeout( + operation="test", timeout=provided_timeout, max_timeout=max_timeout + ) + assert resultant_timeout == expected_timeout From 61710c3b2693754a8833796d9643481e10d7b73e Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 12 Dec 2023 15:21:16 -0500 Subject: [PATCH 111/114] Update README to provide information about configurable timeouts. --- README.rst | 59 +++++++++++++++++++++++++++++++++++++++----------- porter/main.py | 2 +- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/README.rst b/README.rst index 7585c86..27c3f18 100644 --- a/README.rst +++ b/README.rst @@ -65,6 +65,22 @@ Security Considerations Cloudflare for SSL termination and enhanced security. +Configurable Operation Timeouts +******************************* +Some Porter endpoints allow optional integer timeouts to be specified as a +parameter. However, to prevent DDOS attacks, timeouts are capped. By default +the ``/decrypt`` and ``/get_ursulas`` endpoints limit their timeouts at 15s. If +the optional timeout parameter is not provided or the provided timeout +parameter value is greater than the default timeout, the timeout used for the +operation will be the default timeout. + +If modifying the default timeout values is desirable, they can be configured +via environment variables: + +* ``PORTER_MAX_DECRYPTION_TIMEOUT`` for ``/decrypt`` operations +* ``PORTER_MAX_GET_URSULAS_TIMEOUT`` for ``/get_ursulas`` operations + + Run via Docker ************** @@ -226,6 +242,15 @@ Parameters | ``encrypted_decryption_requests`` | Dict[String, String] | | Base64 encoded encrypted decryption requests | | | | | keyed by node staking provider address. | +-----------------------------------+----------------------+------------------------------------------------+ +| ``timeout`` | *(Optional)* int | | The timeout for the operation. Default value | +| | | | is 15s unless the Porter instance is | +| | | | configured to modify the default setting via | +| | | | the ``PORTER_MAX_DECRYPTION_TIMEOUT`` env | +| | | | variable on startup. Timeouts provided that | +| | | | are greater than this max default value are | +| | | | capped at the default value | ++-----------------------------------+----------------------+------------------------------------------------+ + Returns ^^^^^^^ @@ -293,19 +318,27 @@ and associated information. Parameters ^^^^^^^^^^ -+----------------------------------+---------------+-----------------------------------------------+ -| **Parameter** | **Type** | **Description** | -+==================================+===============+===============================================+ -| ``quantity`` | Integer | Number of total TACo nodes to return. | -+----------------------------------+---------------+-----------------------------------------------+ -| ``include_ursulas`` *(Optional)* | List[String] | | List of Ursula checksum addresses to | -| | | | give preference to. If any of these Ursulas | -| | | | are unavailable, they will not be included | -| | | | in result. | -+----------------------------------+---------------+-----------------------------------------------+ -| ``exclude_ursulas`` *(Optional)* | List[String] | | List of Ursula checksum addresses to not | -| | | | include in the result. | -+----------------------------------+---------------+-----------------------------------------------+ ++----------------------------------+------------------+------------------------------------------------+ +| **Parameter** | **Type** | **Description** | ++==================================+==================+================================================+ +| ``quantity`` | Integer | Number of total TACo nodes to return. | ++----------------------------------+------------------+------------------------------------------------+ +| ``include_ursulas`` *(Optional)* | List[String] | | List of Ursula checksum addresses to | +| | | | give preference to. If any of these Ursulas | +| | | | are unavailable, they will not be included | +| | | | in result. | ++----------------------------------+------------------+------------------------------------------------+ +| ``exclude_ursulas`` *(Optional)* | List[String] | | List of Ursula checksum addresses to not | +| | | | include in the result. | ++----------------------------------+------------------+------------------------------------------------+ +| ``timeout`` | *(Optional)* int | | The timeout for the operation. Default value | +| | | | is 15s unless the Porter instance is | +| | | | configured to modify the default setting via | +| | | | the ``PORTER_MAX_GET_URSULAS_TIMEOUT`` env | +| | | | variable on startup. Timeouts provided that | +| | | | are greater than this max default value are | +| | | | capped at the default value | ++----------------------------------+------------------+------------------------------------------------+ Returns diff --git a/porter/main.py b/porter/main.py index 63c31e0..90d0073 100644 --- a/porter/main.py +++ b/porter/main.py @@ -56,7 +56,7 @@ class Porter(Learner): DEFAULT_PORT = 9155 - MAX_GET_URSULAS_TIMEOUT = os.getenv("PORTER_GET_URSULAS_TIMEOUT", default=15) + MAX_GET_URSULAS_TIMEOUT = os.getenv("PORTER_MAX_GET_URSULAS_TIMEOUT", default=15) MAX_DECRYPTION_TIMEOUT = os.getenv( "PORTER_MAX_DECRYPTION_TIMEOUT", default=ThresholdDecryptionClient.DEFAULT_DECRYPTION_TIMEOUT, From f0998d49243ede7e52b6840210df67d2c83f7c35 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 13 Dec 2023 08:15:48 -0500 Subject: [PATCH 112/114] Cleanup test to make it clearer. --- tests/test_porter_configure_timeout.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_porter_configure_timeout.py b/tests/test_porter_configure_timeout.py index d628ec6..fd49d24 100644 --- a/tests/test_porter_configure_timeout.py +++ b/tests/test_porter_configure_timeout.py @@ -4,7 +4,7 @@ @pytest.mark.parametrize( - "timeout_scenarios", + "provided_timeout,max_timeout,expected_timeout", [ (None, 10, 10), (1, 10, 1), @@ -36,8 +36,9 @@ ), ], ) -def test_porter_configure_timeout_defined_results(porter, timeout_scenarios): - provided_timeout, max_timeout, expected_timeout = timeout_scenarios +def test_porter_configure_timeout( + porter, provided_timeout, max_timeout, expected_timeout +): resultant_timeout = porter._configure_timeout( operation="test", timeout=provided_timeout, max_timeout=max_timeout ) From e2d6ad5b75241bc5aa9a0d76578765145737a456 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 13 Dec 2023 14:51:36 -0500 Subject: [PATCH 113/114] Fix linter errors. --- porter/cli/main.py | 3 +-- porter/fields/umbralkey.py | 5 +++-- porter/main.py | 7 ++++--- porter/schema.py | 5 +++-- porter/utils.py | 12 +++++++++--- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/porter/cli/main.py b/porter/cli/main.py index e3fb436..730ef95 100644 --- a/porter/cli/main.py +++ b/porter/cli/main.py @@ -114,8 +114,7 @@ def run( emitter.message(PORTER_CORS_ALLOWED_ORIGINS.format(allow_origins=allow_origins_list), color='green') controller = PORTER.make_web_controller( - crash_on_error=False, - cors_allow_origins_list=allow_origins_list + crash_on_error=False, cors_allow_origins_list=allow_origins_list ) message = PORTER_RUN_MESSAGE.format(http_port=http_port) emitter.message(message, color='green', bold=True) diff --git a/porter/fields/umbralkey.py b/porter/fields/umbralkey.py index 241db40..0c2bc7f 100644 --- a/porter/fields/umbralkey.py +++ b/porter/fields/umbralkey.py @@ -6,7 +6,6 @@ class UmbralKey(BaseField, fields.Field): - def _serialize(self, value, attr, obj, **kwargs): if isinstance(value, PublicKey): data = value.to_compressed_bytes() @@ -19,4 +18,6 @@ def _deserialize(self, value, attr, data, **kwargs): try: return PublicKey.from_compressed_bytes(bytes.fromhex(value)) except InvalidNativeDataTypes as e: - raise InvalidInputData(f"Could not convert input for {self.name} to an Umbral Key: {e}") + raise InvalidInputData( + f"Could not convert input for {self.name} to an Umbral Key: {e}" + ) diff --git a/porter/main.py b/porter/main.py index 90d0073..3beb5a7 100644 --- a/porter/main.py +++ b/porter/main.py @@ -303,10 +303,11 @@ def make_web_controller(self, # static information as metric - self.controller.metrics.info('app_info', 'Application info', version='1.0.3') + self.controller.metrics.info("app_info", "Application info", version="1.0.3") by_path_counter = controller.metrics.counter( - 'by_path_counter', 'Request count by request paths', - labels={'path': lambda: request.path} + "by_path_counter", + "Request count by request paths", + labels={"path": lambda: request.path}, ) # CORS origins diff --git a/porter/schema.py b/porter/schema.py index 55fe6b8..cecb9d7 100644 --- a/porter/schema.py +++ b/porter/schema.py @@ -134,6 +134,7 @@ def check_include_and_exclude_are_mutually_exclusive(self, data, **kwargs): # PRE Endpoints # + class PRERevoke(BaseSchema): pass # TODO need to understand revoke process better @@ -244,8 +245,8 @@ class Decrypt(BaseSchema): "-d", help="Threshold of decryption responses required", type=click.INT, - required=True - ) + required=True, + ), ) encrypted_decryption_requests = marshmallow_fields.Dict( keys=UrsulaChecksumAddress(), diff --git a/porter/utils.py b/porter/utils.py index b0c8a66..e6feef7 100644 --- a/porter/utils.py +++ b/porter/utils.py @@ -91,9 +91,15 @@ def decode_bytes(field, data): decode_bytes(RetrievalKitField, kit) for kit in retrieval_params["retrieval_kits"] ], - alice_verifying_key=decode_bytes(UmbralKey, retrieval_params["alice_verifying_key"]), - bob_encrypting_key=decode_bytes(UmbralKey, retrieval_params["bob_encrypting_key"]), - bob_verifying_key=decode_bytes(UmbralKey, retrieval_params["bob_verifying_key"]), + alice_verifying_key=decode_bytes( + UmbralKey, retrieval_params["alice_verifying_key"] + ), + bob_encrypting_key=decode_bytes( + UmbralKey, retrieval_params["bob_encrypting_key"] + ), + bob_verifying_key=decode_bytes( + UmbralKey, retrieval_params["bob_verifying_key"] + ), ) # context is optional if "context" in retrieval_params: From 391fb36760e56604c723d0525b33e13efe3aa25e Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 13 Dec 2023 14:54:35 -0500 Subject: [PATCH 114/114] Fix linter errors for tests. --- tests/conftest.py | 17 ++++++++++------ tests/pre/test_pre_specifications.py | 10 ++++++---- .../taco/test_porter_taco_python_interface.py | 20 +++++++++---------- tests/taco/test_porter_taco_web_interface.py | 8 ++++---- tests/taco/test_taco_specifications.py | 19 +++++++++--------- tests/test_fields.py | 4 +++- 6 files changed, 44 insertions(+), 34 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 0de3ac5..bdd9d04 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -49,7 +49,7 @@ def pytest_addhooks(pluginmanager): - pluginmanager.set_blocked('ape_test') + pluginmanager.set_blocked("ape_test") def pytest_collection_modifyitems(config, items): @@ -68,6 +68,7 @@ def pytest_collection_modifyitems(config, items): @pytest.fixture(scope='session') def monkeysession(): from _pytest.monkeypatch import MonkeyPatch + mpatch = MonkeyPatch() yield mpatch mpatch.undo() @@ -118,7 +119,7 @@ def mock_condition_blockchains(module_mocker): ) -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def test_registry(module_mocker): with mock_registry_sources(mocker=module_mocker): mock_source = MockRegistrySource(domain=TEMPORARY_DOMAIN) @@ -137,7 +138,7 @@ def faked(self, *args, **kwargs): return testerchain.stake_providers_accounts -@pytest.fixture(scope='module', autouse=True) +@pytest.fixture(scope="module", autouse=True) def mock_contract_agency(): from tests.mock.agents import MockContractAgency @@ -145,7 +146,9 @@ def mock_contract_agency(): get_agent = ContractAgency.get_agent get_agent_by_name = ContractAgency.get_agent_by_contract_name ContractAgency.get_agent = MockContractAgency.get_agent - ContractAgency.get_agent_by_contract_name = MockContractAgency.get_agent_by_contract_name + ContractAgency.get_agent_by_contract_name = ( + MockContractAgency.get_agent_by_contract_name + ) # Test yield MockContractAgency() @@ -188,7 +191,7 @@ def mock_reservoir( @pytest.fixture(scope="module", autouse=True) def mock_substantiate_stamp(module_mocker, monkeymodule): - fake_signature = b'\xb1W5?\x9b\xbaix>\'\xfe`\x1b\x9f\xeb*9l\xc0\xa7\xb9V\x9a\x83\x84\x04\x97\x0c\xad\x99\x86\x81W\x93l\xc3\xbde\x03\xcd"Y\xce\xcb\xf7\x02z\xf6\x9c\xac\x84\x05R\x9a\x9f\x97\xf7\xa02\xb2\xda\xa1Gv\x01' + fake_signature = b"\xb1W5?\x9b\xbaix>'\xfe`\x1b\x9f\xeb*9l\xc0\xa7\xb9V\x9a\x83\x84\x04\x97\x0c\xad\x99\x86\x81W\x93l\xc3\xbde\x03\xcd\"Y\xce\xcb\xf7\x02z\xf6\x9c\xac\x84\x05R\x9a\x9f\x97\xf7\xa02\xb2\xda\xa1Gv\x01" module_mocker.patch.object(Ursula, "_substantiate_stamp", autospec=True) module_mocker.patch.object(Ursula, "operator_signature", fake_signature) module_mocker.patch.object(Teacher, "validate_operator") @@ -251,7 +254,9 @@ def random_treasure_map_data(alice, bob, ursulas): def porter_web_controller(porter, monkeymodule): def _setup_prometheus(_porter, app): _porter.controller.metrics = PrometheusMetrics(app) - _porter.controller.metrics.registry = prometheus_client.CollectorRegistry(auto_describe=True) + _porter.controller.metrics.registry = prometheus_client.CollectorRegistry( + auto_describe=True + ) Porter._setup_prometheus = _setup_prometheus web_controller = porter.make_web_controller(crash_on_error=False) diff --git a/tests/pre/test_pre_specifications.py b/tests/pre/test_pre_specifications.py index 833c7d3..90dd316 100644 --- a/tests/pre/test_pre_specifications.py +++ b/tests/pre/test_pre_specifications.py @@ -161,9 +161,9 @@ def test_bob_retrieve_cfrags( specific_kit_errors = dict() for j in range(i): # different number of errors for each kit; 1 error for kit 1, 2 errors for kit 2 etc. - specific_kit_errors[ - get_random_checksum_address() - ] = error_message_template.format(i, j) + specific_kit_errors[get_random_checksum_address()] = ( + error_message_template.format(i, j) + ) new_retrieval_outcomes_with_errors.append( Porter.PRERetrievalOutcome( cfrags=retrieval_outcomes[i].cfrags, errors=specific_kit_errors @@ -251,7 +251,9 @@ class BobKeyInputRequirer(BaseSchema): # lets just take a couple bytes off (less bytes than required) BobKeyInputRequirer().load( { - "bobkey": "02f0cb3f3a33f16255d9b2586e6c56570aa07bbeb1157e169f1fb114ffb40037" + "bobkey": ( + "02f0cb3f3a33f16255d9b2586e6c56570aa07bbeb1157e169f1fb114ffb40037" + ) } ) assert "Could not convert input for bobkey to an Umbral Key" in str(e) diff --git a/tests/taco/test_porter_taco_python_interface.py b/tests/taco/test_porter_taco_python_interface.py index 0f5bcf9..a8f7112 100644 --- a/tests/taco/test_porter_taco_python_interface.py +++ b/tests/taco/test_porter_taco_python_interface.py @@ -30,11 +30,11 @@ def test_taco_decryption_success(porter, dkg_setup, dkg_encrypted_data, timeout) shared_secret = requester_secret_key.derive_shared_secret( ursula_decryption_request_static_key ) - encrypted_decryption_requests[ - ursula.checksum_address - ] = decryption_request.encrypt( - shared_secret=shared_secret, - requester_public_key=requester_secret_key.public_key(), + encrypted_decryption_requests[ursula.checksum_address] = ( + decryption_request.encrypt( + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), + ) ) shared_secrets[ursula.checksum_address] = shared_secret @@ -93,11 +93,11 @@ def test_taco_decryption_failure(porter, dkg_setup, dkg_encrypted_data, timeout) shared_secret = requester_secret_key.derive_shared_secret(random_public_key) encrypted_decryption_requests = {} for ursula in cohort: - encrypted_decryption_requests[ - ursula.checksum_address - ] = decryption_request.encrypt( - shared_secret=shared_secret, - requester_public_key=requester_secret_key.public_key(), + encrypted_decryption_requests[ursula.checksum_address] = ( + decryption_request.encrypt( + shared_secret=shared_secret, + requester_public_key=requester_secret_key.public_key(), + ) ) decrypt_outcome = porter.decrypt( diff --git a/tests/taco/test_porter_taco_web_interface.py b/tests/taco/test_porter_taco_web_interface.py index d124335..50058ce 100644 --- a/tests/taco/test_porter_taco_web_interface.py +++ b/tests/taco/test_porter_taco_web_interface.py @@ -54,10 +54,10 @@ def test_taco_decrypt( shared_secret=shared_secret, requester_public_key=requester_secret_key.public_key(), ) - encrypted_decryption_requests[ - ursula.checksum_address - ] = encrypted_request_field._serialize( - value=encrypted_decryption_request, attr=None, obj=None + encrypted_decryption_requests[ursula.checksum_address] = ( + encrypted_request_field._serialize( + value=encrypted_decryption_request, attr=None, obj=None + ) ) shared_secrets[ursula.checksum_address] = shared_secret diff --git a/tests/taco/test_taco_specifications.py b/tests/taco/test_taco_specifications.py index 5162a9d..dc99354 100644 --- a/tests/taco/test_taco_specifications.py +++ b/tests/taco/test_taco_specifications.py @@ -28,10 +28,10 @@ def test_taco_decrypt_schema(dkg_setup, dkg_encrypted_data): checksum_address, encrypted_decryption_request, ) in encrypted_decryption_requests.items(): - encrypted_decryption_requests[ - checksum_address - ] = encrypted_request_field._serialize( - value=encrypted_decryption_request, attr=None, obj=None + encrypted_decryption_requests[checksum_address] = ( + encrypted_request_field._serialize( + value=encrypted_decryption_request, attr=None, obj=None + ) ) # no args @@ -115,8 +115,9 @@ def test_taco_decrypt_schema(dkg_setup, dkg_encrypted_data): # invalid param combination with pytest.raises(InvalidArgumentCombo): request_data = { - "threshold": len(encrypted_decryption_requests) - + 1, # threshold larger than number of requests + "threshold": ( + len(encrypted_decryption_requests) + 1 + ), # threshold larger than number of requests "encrypted_decryption_requests": encrypted_decryption_requests, } decrypt_schema.load(request_data) @@ -237,8 +238,8 @@ def _generate_encrypted_requests( shared_secret=shared_secret, requester_public_key=requester_secret_key.public_key(), ) - encrypted_decryption_requests[ - ursula.checksum_address - ] = encrypted_decryption_request + encrypted_decryption_requests[ursula.checksum_address] = ( + encrypted_decryption_request + ) return encrypted_decryption_requests diff --git a/tests/test_fields.py b/tests/test_fields.py index fa98fb6..ab351df 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -289,7 +289,9 @@ def test_taco_dict_field(get_random_checksum_address): with pytest.raises(InvalidInputData): # attempt to deserialize invalid value; must be base64 string - json_to_deserialize = {get_random_checksum_address(): "✨ not a valid base64 ✨"} + json_to_deserialize = { + get_random_checksum_address(): "✨ not a valid base64 ✨" + } field._deserialize(value=json_to_deserialize, attr=None, data=None)