Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
f9c75bbd
Commit
f9c75bbd
authored
Feb 26, 2021
by
madengji
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add parse public input
parent
62e2139c
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
382 additions
and
221 deletions
+382
-221
testcase.sh
plugin/dapp/mix/cmd/build/testcase.sh
+59
-12
input.go
plugin/dapp/mix/cmd/gnark/circuit/transfer/input/input.go
+1
-1
input_test.go
...n/dapp/mix/cmd/gnark/circuit/transfer/input/input_test.go
+1
-1
output.go
plugin/dapp/mix/cmd/gnark/circuit/transfer/output/output.go
+1
-1
output_test.go
...dapp/mix/cmd/gnark/circuit/transfer/output/output_test.go
+1
-1
mix.go
plugin/dapp/mix/commands/mix.go
+72
-1
kv.go
plugin/dapp/mix/executor/kv.go
+2
-2
query.go
plugin/dapp/mix/executor/query.go
+1
-1
mix.proto
plugin/dapp/mix/proto/mix.proto
+2
-0
mix.pb.go
plugin/dapp/mix/types/mix.pb.go
+175
-158
mixbizdb.go
plugin/dapp/mix/wallet/mixbizdb.go
+3
-0
mixbiztable.go
plugin/dapp/mix/wallet/mixbiztable.go
+4
-1
txauth.go
plugin/dapp/mix/wallet/txauth.go
+2
-2
txdeposit.go
plugin/dapp/mix/wallet/txdeposit.go
+4
-4
txtransfer.go
plugin/dapp/mix/wallet/txtransfer.go
+7
-8
txwithdraw.go
plugin/dapp/mix/wallet/txwithdraw.go
+2
-2
util.go
plugin/dapp/mix/wallet/util.go
+30
-19
util_test.go
plugin/dapp/mix/wallet/util_test.go
+15
-7
No files found.
plugin/dapp/mix/cmd/build/testcase.sh
View file @
f9c75bbd
...
@@ -102,9 +102,9 @@ function mix_transfer() {
...
@@ -102,9 +102,9 @@ function mix_transfer() {
##config withdraw vk
##config withdraw vk
${
CLI
}
send mix config vk
-c
1
-z
1f8b08000000000000ff6c51795093671a7f9fe4230d1a15224705c508b845442520ba8a42498c8051ea8180656345fc20c190484850504428208756a11e8834d80d663d285854c6455d0705d68a2e5a0b54915a8ecaacb25e94f5316abf9d2f48776667fffacdfb1cbfe37db83cc29532d95c004114ad5325a4ab3489723a1d981c0214800c985c029c503f60f6b02806663f01c14ac346b52a3e5cb3c5a04f05e61021641af33917804b8bfd46368023f505269f00472a6691102f268f0bc0a1e759cb5ce0487c812920c09188dfa31f8b848898ddd641bf913270427c812922c00911b34888335308001fc8d47432add15b7b3ce0134233c55c80c054bdce10af176d1785c62527c745d089a28d1abf8079b343fd421212541a3a50b48456ebff4f4394399212f8a39bc07c41803f3acebe08f164f67201f8a34bd6110e408cd52dac1bc9e0c7ece3024cf9dd8a5c14ab782f26feafd87e02002007e60021642af32507c0ee7fe7d82630a5ac6e8955f7f77ae9a86ed1882efb354ecc410e003f5691aad7a93489ec6d4040c86fd44f4c0eab45e12187da976e973aabd1609719e9bd7e7e3d862b266ccefdb2d88cfc6de6575b87172c060ac34f788ea76ebcedc42237fb17e3e70e34a278d1bf1fdbbb19fa519074fc68439a5d1661d9d28f4df0ba1a552cc54f7f21394be53307f06ceef449bb1206f720e772e3b46a557713507876f79a28a540198ccf85fab4825f2c4d981677fd9213d40a10247f9d27b3bd61b4b2694f9676c6ce9afa161d25f2e3073687ea50d6973fe540a47e2c728dd75fb6bdae3c0714ba24a698e65d72e8c4ccaf5fa65efea7b01ee70cb62462c87205daad9924fb3ee0761c21d6ac70abac3f68da15231e98fb8af9a02ce52b6c444515efeefa4014c6dd7c9066bce00d143eb333276f2bfabc0a677a78fd1679adfa28ba1b5f4b2ddf9fea43f76f331774a9fc5badeedcae79d5dc0af639843faa4b9eb53ff97339da563de9d1b41e7b8393d3164dfe35d04309140e2b3cebb76524987068e87a073743f402a34abe49bc27a91122372b5aeb5f3cff9d956da7474f53cd3a37172c684f1faea14d6d98a48a5c1814ebf00edd9cb5a6e045d93380c287cbd5bb453b3e2c45bed3706d94a3d20605ce6dd2b1376c2ea27df4acd28e6bfb7389352c50e871bf3da95aba54820de3a06d7b952909a7381dc1757fea35a1f041c599b13d55dd40e1969b8e3197fed1558bd5852edc85e27d0c1e3978b5f2c7ae9f3538ee62d8daa91794df8ca4ed79d46cd8d94e630bf793def696d077d81db9a94c360414baca2abd7c6c6eca81c2ee7ee17c5e5653d2eb8d2dde0ecbb29bf13196c2b0c7e06514cc0ce63fb5ef5efafe14eee54b66c2ed53c518b48a1fb3baf3b010b38e7ee178e77a4a310a9f0c99ff55b8b50428347977f9da3fec50e2e0ca079399882b9e287e53985ef807d88b3e675f1dd605ae1bb29ab33c13edd207ac7d81d3eb6225b6b5eeade86df9587238758c33dafa9bfd1a88e318a05013b03eafa2313319d396f795df3b33e482cb368d3fd6d27bad1f79572ed43f4affa1cefa79364061c8dc5d374c4f7136fec55c10b63d6222852736c4d9449b3df27186d673d58c0fd36380c2f3f93d2b94ab3e6d47c71503b67b8dcdcdf89d7c41fc361551e19c57cfa77f3b58ee4180c28a8b6a1f4d59c30614a5c406145df13e81cb02b79e74ceddf8314e38b628eaa974ee65a0509193974bf6fdfd34bafb6484259794203eef73b50bf85b5617f2440e5bca3c17b4b0643ba3e7f7d59f32f2b06671ac4b6f6b228d3fc4db6cb8630a32be1e0abb5fd7f2f82e5018e3ab769a762e7c32f29ad6dece769e65c2ca239b732c735a0770a2daa971c9cae1cf582ef9f99f024e3f6d4841b3ff8a3da136a78370383bbfeeeeb984669c7ae6966bc67dea3950b87052de573513f30ee2d8f57f7cd46e5155e28e3bf11f7df7ab220067b7f576081a62642c595271d29c299d05fe7877cf47e1272dd96538e6ade55447c5bd12e49bfb5de5c7f75d050a076e693216ef1808c52eb7a28775c1272a5053effab25c7efe6be4bf7998f1b3cfde0984800d2f24596bd0e8f99f44c83e8b0e5f2d1344ea687ab556ab0f8b4b550a430c7aa556a7caa0d76ca1359bd8d2b808835aad4a50d13af645fe130000ffff37a667a7c7060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
${
CLI
}
send mix config vk
-c
1
-z
1f8b08000000000000ff6c51795093671a7f9fe4230d1a15224705c508b845442520ba8a42498c8051ea8180656345fc20c190484850504428208756a11e8834d80d663d285854c6455d0705d68a2e5a0b54915a8ecaacb25e94f5316abf9d2f48776667fffacdfb1cbfe37db83cc29532d95c004114ad5325a4ab3489723a1d981c0214800c985c029c503f60f6b02806663f01c14ac346b52a3e5cb3c5a04f05e61021641af33917804b8bfd46368023f505269f00472a6691102f268f0bc0a1e759cb5ce0487c812920c09188dfa31f8b848898ddd641bf913270427c812922c00911b34888335308001fc8d47432add15b7b3ce0134233c55c80c054bdce10af176d1785c62527c745d089a28d1abf8079b343fd421212541a3a50b48456ebff4f4394399212f8a39bc07c41803f3acebe08f164f67201f8a34bd6110e408cd52dac1bc9e0c7ece3024cf9dd8a5c14ab782f26feafd87e02002007e60021642af32507c0ee7fe7d82630a5ac6e8955f7f77ae9a86ed1882efb354ecc410e003f5691aad7a93489ec6d4040c86fd44f4c0eab45e12187da976e973aabd1609719e9bd7e7e3d862b266ccefdb2d88cfc6de6575b87172c060ac34f788ea76ebcedc42237fb17e3e70e34a278d1bf1fdbbb19fa519074fc68439a5d1661d9d28f4df0ba1a552cc54f7f21394be53307f06ceef449bb1206f720e772e3b46a557713507876f79a28a540198ccf85fab4825f2c4d981677fd9213d40a10247f9d27b3bd61b4b2694f9676c6ce9afa161d25f2e3073687ea50d6973fe540a47e2c728dd75fb6bdae3c0714ba24a698e65d72e8c4ccaf5fa65efea7b01ee70cb62462c87205daad9924fb3ee0761c21d6ac70abac3f68da15231e98fb8af9a02ce52b6c444515efeefa4014c6dd7c9066bce00d143eb333276f2bfabc0a677a78fd1679adfa28ba1b5f4b2ddf9fea43f76f331774a9fc5badeedcae79d5dc0af639843faa4b9eb53ff97339da563de9d1b41e7b8393d3164dfe35d04309140e2b3cebb76524987068e87a073743f402a34abe49bc27a91122372b5aeb5f3cff9d956da7474f53cd3a37172c684f1faea14d6d98a48a5c1814ebf00edd9cb5a6e045d93380c287cbd5bb453b3e2c45bed3706d94a3d20605ce6dd2b1376c2ea27df4acd28e6bfb7389352c50e871bf3da95aba54820de3a06d7b952909a7381dc1757fea35a1f041c599b13d55dd40e1969b8e3197fed1558bd5852edc85e27d0c1e3978b5f2c7ae9f3538ee62d8daa91794df8ca4ed79d46cd8d94e630bf793def696d077d81db9a94c360414baca2abd7c6c6eca81c2ee7ee17c5e5653d2eb8d2dde0ecbb29bf13196c2b0c7e06514cc0ce63fb5ef5efafe14eee54b66c2ed53c518b48a1fb3baf3b010b38e7ee178e77a4a310a9f0c99ff55b8b50428347977f9da3fec50e2e0ca079399882b9e287e53985ef807d88b3e675f1dd605ae1bb29ab33c13edd207ac7d81d3eb6225b6b5eeade86df9587238758c33dafa9bfd1a88e318a05013b03eafa2313319d396f795df3b33e482cb368d3fd6d27bad1f79572ed43f4affa1cefa79364061c8dc5d374c4f7136fec55c10b63d6222852736c4d9449b3df27186d673d58c0fd36380c2f3f93d2b94ab3e6d47c71503b67b8dcdcdf89d7c41fc361551e19c57cfa77f3b58ee4180c28a8b6a1f4d59c30614a5c406145df13e81cb02b79e74ceddf8314e38b628eaa974ee65a0509193974bf6fdfd34bafb6484259794203eef73b50bf85b5617f2440e5bca3c17b4b0643ba3e7f7d59f32f2b06671ac4b6f6b228d3fc4db6cb8630a32be1e0abb5fd7f2f82e5018e3ab769a762e7c32f29ad6dece769e65c2ca239b732c735a0770a2daa971c9cae1cf582ef9f99f024e3f6d4841b3ff8a3da136a78370383bbfeeeeb984669c7ae6966bc67dea3950b87052de573513f30ee2d8f57f7cd46e5155e28e3bf11f7df7ab220067b7f576081a62642c595271d29c299d05fe7877cf47e1272dd96538e6ade55447c5bd12e49bfb5de5c7f75d050a076e693216ef1808c52eb7a28775c1272a5053effab25c7efe6be4bf7998f1b3cfde0984800d2f24596bd0e8f99f44c83e8b0e5f2d1344ea687ab556ab0f8b4b550a430c7aa556a7caa0d76ca1359bd8d2b808835aad4a50d13af645fe130000ffff37a667a7c7060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#transferInput
#transferInput
${
CLI
}
send mix config vk
-c
2
-z
1f8b08000000000000ff6c517
b5493e7197f9fe4330404440f8c8a42422a22179504c5212a77b9ca1c8a0b60865c827c02e19614c56820822001b954f0d0dac12c1aaca0c3b276e87003ad50aa6b6147109cad2268c1b3a3526d1f2ef2ed7c41bab39dfef53befef7d9edfe57db93cc2f5670ab800a67be4d974f2215ab13f4c7e08182d010a20109842029c200930652c8a81a92460ba539590462786283255ca1c606a0921f6cc312e00572e96cc6f00c7df0d98e30438fe62160959c314710138720f03cd058e9f1b302504387ee2b72861911021536c1894ccd3c0f17503a69400c757cc2221d6cc0900300a4c93a7cb154ac31d0ff884c8191d17c02b4799ad4a540a0f0b83e2d3d3e323e4fb85090ac9468f754112dfe4645a21f71206c8d394bf70213c32df12f80b9bc09c24c05f18674f84ac62cab900fc8525c30807406a480bd1f31d244c0517c0f6e72861c258d95b33f17fcd2a0900401830a7082102e67d0e80c5ffcfb197c054b3be5506df9ff9ea05dfd2795ff6697ec5d47000f8b1b21c6536add8cffe0d981232b7c897d1b25e142e6af6e935d6d8cd61cdf7cdff76e0e4d9a05e16a5916ad6f7a0a3cbaed43b5e51a781425e62dcadb9e8ebe3d8b22418bf5adca9c6eeadc468f6c131095a7471072ff77b5b1156ad5b5a14533cb2f9188eb5e7eb361cac2ac719937d3fbadbd439a399f16bf23038ef53a030981f531e597e5b837b921f191ddb6b72121f0d3f7ee2a3ef14e0f2b3479bedaf28571bd46897d2c4e17fa95fa2e7dde53f38fd25b406cb9cdeebf774f2f1408b468e9197f9277940e16dbb8f9aaf4c061cc0d6b313d3ae45df8ca2cf8e2d25079c5cd7a24df0d1d9e7e1a56e8418ba369e5fd95171e6ae251e1124b936251558e2c582be5261fda211743d7cd2eee6846537506872a1df66cbd2d9a7582312da4e0aee6bf1d27d37dfef337c8ad021c475e4f21f5ee80ce95a8354b4f55442001eacd58e985d6b3a88fe5fcb4c2e5947b621b874ba5749ea9381c2cb82ca8cb51d32c00c7dcf8e8ffd8ab661c9d10669c37d751d1a999f5ba6d0a77e6850fbb1adbdf0a2ca6f1a07b6a5e4e6df8d6b43cf4aab7f466cef97a1d3e9829aa83a710050282beebe119e17d78f93b156d666b3d513b8bbb05c9f1e3bb909b9f7c26c444d457c62280b1416393ddb69f3a62615a93e7dd9f5a03e3d6ed099a967429385f8ce9343b70519a952a070fcf76543d776b77e8bf196a2de07b18e2948edfd7c9b7756f179b40ed9b4d2b9647a95219f9bf33b7d2513a11dd8f01d8f67de75e0031c2c1e6f1cfeea9b67b83efa9cb82360ac1828bcfebae3ce1ddd9ee7483b7e5b95dd1c3280a27c998cef3d1c83c23bf6fde6d4d0f6b77f9196f0397dffba47014ab33347475ebf6c43dd998a30c7579ba2d0a42c54e03d38bd04283ca199644a9e9a79a2f9253a3a26e06f2e38dbf2d1c8e17d9aade8faeb4c0778e69c694817b9f561fe87499fdae28a3193f192776bafe0b0ddcea9c76d6a7774141eb9e5ae3d320a1436e57ff0e426bfc50ab3cea6aa07a66b291c936ccb718a0a8b43eef81bf7ca99883ac3ebf180c2d01fe20bc73ccf7c8dda6b5dd567ec92bec3fd1bf4014ba29f5e45d1b0ead09acf74536c8b65138385ffd09cc3cd9a2c4dcce52fcfa2bf6050267a9f31416351947702e1e610a0b08eeffc93a568b51e4b2b0657faeea8dd88071b7a476a32f3aa91772a592afe636a3350f82c5f329794e42041b7a15c356f877608d798abb7b72f3f378baeaff42b7cd4faa5ac983dff92f352da548577dfbbb5a5f6f409115aac7bb8d96252dd8b5ccbb512afbdadd640e1859db6bdf57f5fdd8d95c27aaa215c7614a7786a554578fb6d7436b20af36ef9b29c157bf9b1cb8b39e3ed7e183876355c92ebf0190e896ffcb6b1db2a13ad677a7a8c4e658502858f5b2d52ed732fe6a1ffc61789d1f7ce97a1d9c9ab6b8d7f52b4e30ac9bd9681acca47ac5894765237d9d93b8a7e13f417c66273633cdcb5a2986e3c3e8816b1bbde5d5fb9de16a8a9f6b4dd4191766fb0a3e154a324a5fd01dabaf54dcfd85b3248657d11d9b68fb387d572b9a069ca5557dfc074af4fea27ea5b11cb052957b43d03c7d134a2a262d38d3fcb81c2578ffc9e4bf2a55338fad7b69bcfab96756271bcc79f16afd275e1e2ad4deb665dae3610023cb35d29b43c2dc9373d43a5504affe7146d16a14a4ba393697976707c4eca325f953225239bce93efca942b92588aff9b88c0b8df8544069aeece96cb233332942c4bfe130000fffffc0ee399
2a070000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
${
CLI
}
send mix config vk
-c
2
-z
1f8b08000000000000ff6c517
95094f719febddf7ee062b8e4f640562428f7ee1a560a465960478e46b985414281fdc0b5bb0bc26ee5d288241c2208180e2347b6296245a64504ac442523a0099682065302040c686c4982e3487c41c3d7d945d369277f3df35ecff3bcefcbd1271c7f369f036018cd64c852b265cad410261bd8e304680009b0ef13a0760b813da94501b015040c43d54972597290325dadca04b68610b2892de000701881706502287f3eb08504287f811609d9ca7ec001a018912ecd01ca8f0f6c3101ca4ff00a855a2484c716e91a852b69a0c47c604f10a0c4022d1262cd9600c02a899c51304a95aea60f5c4218b69403e093a9ca5027ab78b9bcdd890a45e21e269597a4147a8adc770bc529293225e3c30b60e4aa5f29f08eac6c09dcd793c09613e0be6ed7468438b0651c00eeeb215d0b0510a3730bb12b3b08d9531c00db5fac84f0e2e25f8909fe2b564100004280fd901062c79ea6004cffbf4f5b04b64aab5ba9d3fd255ff55af7c48aaef634566c3505c08d8bcf5465c894a9dadf802121cb7a62f6b8568bc6cac84e72d8d7c1100bfe309c2ee8cbe94597e6f5c3e7caae25a39e32f0eea4f95c0ed09816ece275ade05613debbb9ef54988f9f27faadda35bcaefd6fb1e83aedeca0e96cd844b46cf571d7e9c8fb75df61dd4e1127d83bcb14f916f94349cd9b846816cd17142f58bf0d34e696ad4d5faa94001ed5dc37b9df965a86d529e78a3fbcfc532752ecaaa68d4cf8bc8ead5d3269492eb63dc586cc99566e5b8b0053138b4ea917251de8a609490cb09d6d001a373ca63aff92e7648be6f6eeb6c5212a1106bf1c0c9bc936f7c6ad0e751f6b465c3611a2dbf52d4944686bd0800ddaff66bcb1fb8864022f5e32e96f3bf6b610ad0d367b3e7bee5606347e1569ac3ef30f511eeeb6886ebc3f505b8b8207a331f94d776671cb0475f2d865fb429d3b7e7790666de0d7755812fef3fa86e59e5bf8385aa22a7f366f836b7bff9eaefa486c05347eacf9f1bd1fde31f0c1aefded337bf3a20bb1e1d9a453c56c54079aeb7dd1fa3272728b8e4ddaf2469165666d15362d5d22d2bfce2e6342cebaed1bf517a6d1defb9122a0a6d418683c7f63cdadae3c173d9ca97b5eec51eee1825bbc7071b6a360075aba7ec41f979d6f22ba65814683a100f34f9f04f071aed5d3e4d09f2cabd122fd7c5d99db9326745724d84b34c41068ec1c9bf824bdbba719377e5e98f3a6dde40c565ebfc6bbf47cd40b3788120cb2bf3d5eaff3b7c1ef0dcde3de417d745f476647f44ac7f0c08dc3ad67be3f1a83a68315366eb6cfe781c69a2e876db969a54fd1542fb8e8ca255725064f1fea6b8c588e42d758a387ff1a8a3bf1ea1709fca5b36bbc3fa170f44a7bf2a091340b574dee28352c178fa3435b63ffbf576fcf021a372f4e8d1d546d35462fe1d4f0f268e075742e1c387f74756809ba4962c6db2f58b9e9dc39bbfdde4c11181a8ed641b519c71f2a9df19f7da3dfdc89347642ab2f4ef531bc933f038dcbd44de983390583e88c094355dd11c8ebc95699543d152fda4bdfd30c247da73b9e3ed02809bb7076ff8b7777608fcdd5a6b8dcac293cfce54fd1738ee7a4689a75c378a444d405346eeba8f15ef8e6c513c42de50aabe435bea8f0ffb4aa6e61fa07740c6fbd6bddf8e202d1fef6ec1133618bef34b2ef7efdd03dde7a1fcebe1c0eedff716d041a4decb01dddd9a6061a9b0f7e7efb50dcf745e82c3710bf53536d8905328f9cab1b175bd02c28d2dbf1ca114f2dd9e9c22b8525b96388be0e6dc551f2450a635dfd3d8e2eff3913dfccdadc9cd41f2e071a7d77e10839abf900172e48fdb685ea01aee9bbbccb8e6ffc00cd8cc20e77357e36a625f38d5126877c16df87dbefd5fb3e9ddf1f8f7315ebc3c6a8b776a2e5c52e6e4efecd28a071e08e53f5d6f75336a3d18407f9ed6d5530762ea7bde8f569ff1dda3aeeed9f0a989768c92af3ef74b46696e461ccb586afba3841625cba77d5d6f76eef335c6f213ebded61f53da0d1875d34aa1eb4fc2376a688ef0acce4223c936623da3fbfaf1e9df463d8c85d5ffa6bc91c9a1ccbea6b8fbd4461d041de54d4a312dca9b1700b6ca9bf8d56715eab279c045e4063ecb9785e614f97230e8ddb3c3ad6e7bc84b78ab98b76d3d5ddb8dacea434ece4b7238480be616406c384a7a5a90213330f70f7ee9124ec0b0a979889d5aa036919b21c26229d514ab535a33d6ab95c962263327451c4011923978a15696aa52ae67fa258f29f000000ffff7fdd3e0e
2a070000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#transferOutput
#transferOutput
${
CLI
}
send mix config vk
-c
3
-z
1f8b08000000000000ff6c5
47b50536716ff4e728d49094e902aac2b25561418284b6265456b0b0126a9b441a0f252d749f44682101e49da52dafadaa28020529e858115a4252c56684b812c202882e2545e2b415e5b2ab432c802d62ec7b6787712a43bbbb37ffde69ec7eff19d99cbe610b61f73920dc00fa393d4aa64b5e668209d0ccc2902144000307f26c0928a813967461130d904f87bf5ca58f5e1d735097a9d16987c42c826e6341b804d8bc4cb1bc0f2f304269500cb4f6446425c988fd8002cdacb5266034be209cc59022c89e8198acd488890396319142f9781e5eb094c3a0196afc88c84d8316900b03a20968ea3353a4b8f035c426826830db04bab4bd21fd609538452455c9c424e1f152a35e2ed5e1e52b1af4aa5d6d0bb84fe74aceeff34841f2ca704eeca26305904b82be3e62f429c984c36007765c932c20288b0b885c8e50c62e63c1bc0e1372b81c2fd079f8989fe23964d00000281c9258438321fb30004ff3b676e029363d6bd60d1fdad9eb3a29bbeac6b7e9af54c1e0b80bbffa05697a4d61c35df06f8843ca54e31a7cc5a14da041b3dc38fe893d1bd68cd7b45fc3d9f60ca21eba01d535d7db8e9736f9fe61f7bbe040abdedc33cfeeeb2fd3aaedd20fb2a21284a801dc5ef9cdce130e584eec1a3416f25aed212339b5061dc5cf853210fff3af0fdd9ae7cfb254cc53cb7b62ce60072ab1fc97cdb5dd44061fe9c69d274f7ee43bc3b39ee7efa4e25071f74cca40546d6aec52d9dd9afaeaa98a72d6ce99fdd38a7b93c2dc5a09fa2e21f734edcc687d14386e96e5e02bab97d76252c66dba039c193d129c70fadfc3058e17ff1a8b45f858de336b5af18fe188fb69b5fbe2adfd0b09e104bd69171d3ce2d76c7ac51249973cae9ab7a8aa1ed357bde18591841b70b1a7f6f929808141a2a0d1353857fa251d8b23635c0737d2d963eba979f5becbe03d93e079c43f3bbfd2ceede1f8b6908abf0e6606f5ef174f9b0c71ebc58717ddb588cf4355c77a8bce5fdb7e6b3817ad2f392c475c3874be864b4196bf4aace44e189f4353b1795efe21fb0e54e4f79dda716b289def632b52626054dbb83b503b47320e6f0b92d3f27f5ad46e7fc84840a2ffb10a010db5b55da5733caf0bbcce4accfddfed686036fdffa57c66cca5ab4776dab3ee812694b2c598142d904949e4fda72157b1b0a422fd54725e0f1c9e254d2b4f535a4faaff9a8be9c6d050a8da6e18f6c83671e63e74bdf408bd7e22ebcd2656a7d518feee881b20c87967e7f8bbf2f6e18146431fb38867b47df33197a1df19a42c70bb7126d455e5562bde22b831350e8f32bbcb0affc6d099639476cf478908af8c43740f94f5e57150a871c9d1b7ffca0f9d92916d638d71b06b6cbb1fcfbc6f83cfe994df8c398e0fe778d0dafa0f52f8fabef4d1d9301858f5236c9d21c6bd231f7e0e259d7596515c638077c7b76bd60149fb39a2a5cd774789fc5dde0aafb025bb7bdcd98f886a1cbff8af13452596ee7beadb9d589cf27a5b95ff2534d0385fb4becfe12faf505131a8f501bad861417b1c7e1eb2f26877367706382aa3fe2e3f91f2caf4701858e92b6ebc3739eae38d465ad97dce774e0e5c1e7e607136df4c8d19e96ffce376c16281c523e38ff5eddd0250c3d73eb1f51ca251facf41a7d31ece13bd7705de9bae3a50571e6df26c69b5ab39aea6ffbe0af45754319cd521e3649be495dbab14f82ae25937505a3215781c23ba3f6328da0a50175a6f1859bb135724cfb545ef0a6a05b8c9bc34b9e6f4ffafd5333995dce4db5edeee893b87afef0f82a63248d052c7e9155de81636823d08470593b7940e12f56535d99b75dfc708ba3b16d589bfa2e86744bd419d5b39d68dd1023b53bd68a66b285ddfe7bc7dade2c44d89d6c1715a45160b4d04b30d2d73987fc8ee49f8d2fbb4e0085f2dac292a6cbf30ef809727827cab65662c3ccc99108a5fd6ae476dc0cdd16fe42252140598746abe9d823be71f17a8d2e822b8fd7d1328536fabfca91dc2079c0a1f0d74302c8bf030000ffff9d91ce826b
060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
${
CLI
}
send mix config vk
-c
3
-z
1f8b08000000000000ff6c5
3795454e715ffeecc0b8e040988a23058864a5482b53328102521308088a3ac1621c836f818a61d1ecb0c844541a7b2045904a284260a078f444243596493838c1288a2294903270d614969122ab40a81948b82afe70d929ef6e4afdf79f7bbf7b77cf77b7c03c2f760cff2018c82e964656cba9251c8e87460b50428002f60cf11e0793b005bc8a104d80b048cfc53e42a658c0f9398a251037b891062c3fe9e0fc0a7250eab13c0f310039b4b80e721e190905d6c0e1f80473be9cb7ce049c5c0e613e04925cfd1814342446c9ebed161b50c3c7731b0050478ee120e09d9c2be0d00ebbc54743ccd68f4670620208466cff3015cd49ae494188d2853e41d1d1f1fed4b2b4472c6c1d1698fb7837b6cac92a15d449eb44af33307a2d3ab2941b036096c3101c15a3bf745882d5bc40710ac0de95b7800217ab710ba9ac1812de1036cfbc98a4c1416fe5c4cf25fb10b04004006ec3b84106bb69c0760f2ff7ddc21b0659c6ea95ef7a77ad99a6ec1aa2e7735e6ec451e80202c5cad4956320a6e376044c833ea0cabe5b428cc1e32e9931d731bc1e8f69a3783852f4830e0d0b7bd864f978651b829585b5e3a970a147a4a07cf7e6db2f9d852d50b01994fbc5ad0283c5f7da275d74eb45eceed1d3dfa592ce1c80eb95eeef1fd68b005cfda66a5557db5f5204eb1b333c5eb3227d1a4cf79792afbc309a0f06ad7878bd7b5fc52d4dcaa341ccb7d7300ed5f0c7f6db0738f155a1fb9ffb7f3ae9e7c3d5bb733e3d77e7bab25ee91876e9835a8e842d9b714c3741ae6e146435327c946e90ea070cb97effdd163c2428ba637e79bcf141933b86f8f0b8ed9642ce03a4bc3bf4c1b4b5d09d147cd799dae8cf9ad360dab4ac2824e279c13e3173702986ab92a02ed6607747707dda780c2b611d76ee77d651fe0a507858af428c3719cb9af3b597d25418be656d2b9297e4795de1d3db1b2f489e30f5578bd2bd5398bd73e83a3a75c859fbf78b97a4935ad7b634bc04ea0f0ada39587beac693d85c6b5dec5af375fdb81eb3a7c73827f74bf8a42d9a2e88969b3a59eecdef62097818583a36855f7e7c6bd23bd973073a8492812bb45a2ddc31ebb8fe71aa380c2a6c3db4a22695b5b6477fbed10ffc26f04b50714babf3f7bd6b754712af495f503dc7fb5ba569f10cfc11941c16da42c99a9deac923b387981c4d6cb22929012decd9bd444ff06289c6a895c7ef9c4f84d6c4b69d6ceb7cd6f43a7b73bdb82c6ef4ad126a62bb1a9eda9a3de9e7d71cc6c606c9e19aecf49fef40d92cde2e2d4fbdf0cf61137848ea8df0972e728a050e1b92c504b5712b1fe56f3f6f3bb4b1dd1d03c57346eb5e93b14d6ce9d58aadf9cf87c13ce1989d6dfef77aac58be6f7884503dae0ca62a197b67f7d160a0b6f46c4fcdbfd63a0b0a7d65ef6d75f8319be97f528f6465d6214bafe68ffea44f9fb0b28e6ef7a6d20df40a477f781d9156974ead14034ae78e99decb4cf55e82f4dd8eed29cdc8d3b3514ed7df85a2550281e6d1b8ea971fa149ddefa83ddbfba775ec4efbf0e78a594b54dc7ad8e9bf66ed3768cea6f8f4b127278e19b3b293231be7be3001d3813dc827f6234f50ab7e3fe68feb872ce63afc12250f874e687be80e53b23f840e77940fe51ad31de9657e5adefb9178194e255fbe4e96133c2858d1aeadb600ad358f0a4b4a2bcb1fc1c1ec146d3c756712648edcef1696c481ae49eb1e53f7ed520955d47f13138d21ad51982d92bf2ab8f5fda2745934ff2d3268b0e0a38b2afc67cbe535d69fd0c8bc693fce3bb8eef4756b962735f571d861665a2eae18e876aeea1300ae3d4c6f964746cada93b5d7726035fde5d7e3963a4ff018ac5ed6e8c7af95d8eec9624d07a7e8ba80be9cea2450bbbb87e4c78d42f67473bcbd0dcf461eac6cd5f3c020a278dcc06c61449bd38d4f04ff1c952b9057685ebaef935a995f8cb9ac8fdbdba8c01428012f8f97a451ef709f4da1014a7a45527dde31352184d88c03741431f8a56c7fd4f3994fc270000ffff89296a6769
060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#auth
#auth
${
CLI
}
send mix config vk
-c
4
-z
1f8b08000000000000ff6c517b5493e7197f9fe403a2244a89c14b0563a5e014038905d6c2985c82040aa21525440a09fd80b41069122617071228144cc7451438a0a5038695035527a52d475bb9163a540e058a041d7a86b6bb7070b43e22f8ed24883b67677ffdce73fb5dde976d4dd8814c1e1b807b88d6aa1333d59aa4303a131803010a400a4c0101d65e093046338a812923c08d4c57a5a813649ab474bd0e98338490ad4c3e1b804d8b25cb17c00af400a690002b506c4642b6331fb00158b497a5cd06568007301f126005889fa3c48c84089922cba264b90d2c7f0f604a08b0fcc56624643d530c0036d2143a95d6e82d336be010423327d9003e3abd363d412fcc16ee55a6a62a23e824a14a23f1f412ed95f82726aa35b48f30884ed1ff9f81f0f7cb2981b37209cc1f087056d6cd1521cecc476c00ceca91658505106d710bf2e50c12a6940de0f8c24a985011fb5c4cfc5fb132020010064c2521640b738a0560f7bf7be621301566dd728bee8b7ec58a6ec9b2aef9691c98d32c008e2256a7d7aa3549e6bf012e21cf282363306b5118fb679b70c65eb006efb5ec7a6974d5e4437c1297e8a7fec06a003746482f1a868cb5402137f2f6dcdfbc459fa3a05738683a55398c395b68b746db81dfe1b6f315aaa95fadca2466b63f5dea8e709705b7e398527cf17a505701cef86528ae66707fc2d5f762a90dc73aff0a1446554fe78d1e79f019ce04c4bf54f686751b86a4c7e617ebfb3dd1a9f88bc1463baf1c0b5bc30f616e63cefd3b51b4fb84d27d47ef26bcb5b150b42dc1251c9d4d8f96ee44178e01858ced46e6b45ed58b4c42ab5b50c3d231d40e70e4df45bdd68cbcfe62df94bb5f9f25c49255e9e7f115dcec13e0ccf0b3ace18e605f8c979d130ae6eab2d12935f4ec178ff9ae40e1c87b335622bfbe494c9edb961b3fbb781c3b568dcf1d715c47a395cef434c406ab2cee40341a2ff07b7301f97b0c9ddffa38aec3beede24cf8542b44a1c2747891e7c0070a5f6db3af1b7f1c33886bd639f27ed42aa5989bbbfbead933dddd08edfb474e464a7658d81cd67b7b8eb95251a8735e78ddb7f2181f8d8dce7db32f3ff91cb9b19d3155139e52a0b07fa75c7b0ba01303c603123e5c25edc656438bb0e13da72728c8f9aae469505632b184050a559afb4e891e833fe342fe081e9a14cc62c5eaf56151c5a79ee206eb7d2dbe46d525a0f0daab293e25312379d874f11f3fa97efee33738f17ebda9c6e43087ceffba7fc28be3df65f1576e54d72daeb59bc0f2b23d45f3c36bf93814b7f64cb04ea846d748aaa85c96310714264cb754c75c2efd357a15253797650f75e177792107bd3f698ec2cdaf7fefb6e1e1c7d9cfffc2295e21ae6fd26fc7da78d9a8e8b35db7f1df87834b9a7daf10dcc16efae54068da23a030c9aa612afc6a413de6fdd6d028dff04d16ceff5dee68eccdaa439e9b7da8c0b7966d71f7b2cb5d4dfec9f5ad989adc546d15a309c54db5edaec777f730b8e617dbe145d5e34ca0d0601b0a6bc2d2687c67a6a4a370e1c2252cf0fea72eeaae0720af27ffcb736e824396d7a380426dd6c0ce0677661ef7dd7cffa3d4a567720c1f9c3454664ef5a0b5c1d1e6c175f770a0b0be9fc9589db3b30d5f2b4b87894f67af63c638cfe85a937502d9d5a7fb5ca6276e10a070da46596ebdfffb3bf86eeb95e4a9c24d6bd121f42fbf91f9bcd2846e76fca984523a1828bc5daa38f8b6a2cb154bf7a5bc7bfee3a4b7f1789ef79dcd3d7b6f20e7c1919bbee73debcc64eeafd86ebd1c7dad035d3e71bc2ff48aa23174f78f6fd484b4c4a0dd46d3b74bf6f90e40e11679f38d1a7957048aee756cbe35f1e665346d2d75e7ebeb8690dd32aab810b62bd54c1677ae86efb43d7a1e9302d3f4171eb669b17d8f8b3da31a8bc6cd8955bcafdb3bae01854185dc7581c16f65e2123720e34bc9fe2bf8a8e307595b6f6e155a456eaa2fe7e74a08018ae79fae4f3eaa5567d1214a5db2fd8beaad345af38eb9c53da8a5e903478feacd05675f8434eeb0ec8094fc270000ffff6794568075060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
${
CLI
}
send mix config vk
-c
4
-z
1f8b08000000000000ff6c517b5493e7197f9fe403a2244a89c14b0563a5e014038905d6c2985c82040aa21525440a09fd80b41069122617071228144cc7451438a0a5038695035527a52d475bb9163a540e058a041d7a86b6bb7070b43e22f8ed24883b67677ffdce73fb5dde976d4dd8814c1e1b807b88d6aa1333d59aa4303a131803010a400a4c0101d65e093046338a812923c08d4c57a5a813649ab474bd0e98338490ad4c3e1b804d8b25cb17c00af400a690002b506c4642b6331fb00158b497a5cd06568007301f126005889fa3c48c84089922cba264b90d2c7f0f604a08b0fcc56624643d530c0036d2143a95d6e82d336be010423327d9003e3abd363d412fcc16ee55a6a62a23e824a14a23f1f412ed95f82726aa35b48f30884ed1ff9f81f0f7cb2981b37209cc1f087056d6cd1521cecc476c00ceca91658505106d710bf2e50c12a6940de0f8c24a985011fb5c4cfc5fb132020010064c2521640b738a0560f7bf7be621301566dd728bee8b7ec58a6ec9b2aef9691c98d32c008e2256a7d7aa3549e6bf012e21cf282363306b5118fb679b70c65eb006efb5ec7a6974d5e4437c1297e8a7fec06a003746482f1a868cb5402137f2f6dcdfbc459fa3a05738683a55398c395b68b746db81dfe1b6f315aaa95fadca2466b63f5dea8e709705b7e398527cf17a505701cef86528ae66707fc2d5f762a90dc73aff0a1446554fe78d1e79f019ce04c4bf54f686751b86a4c7e617ebfb3dd1a9f88bc1463baf1c0b5bc30f616e63cefd3b51b4fb84d27d47ef26bcb5b150b42dc1251c9d4d8f96ee44178e01858ced46e6b45ed58b4c42ab5b50c3d231d40e70e4df45bdd68cbcfe62df94bb5f9f25c49255e9e7f115dcec13e0ccf0b3ace18e605f8c979d130ae6eab2d12935f4ec178ff9ae40e1c87b335622bfbe494c9edb961b3fbb781c3b568dcf1d715c47a395cef434c406ab2cee40341a2ff07b7301f97b0c9ddffa38aec3beede24cf8542b44a1c2747891e7c0070a5f6db3af1b7f1c33886bd639f27ed42aa5989bbbfbead933dddd08edfb474e464a7658d81cd67b7b8eb95251a8735e78ddb7f2181f8d8dce7db32f3ff91cb9b19d3155139e52a0b07fa75c7b0ba01303c603123e5c25edc656438bb0e13da72728c8f9aae469505632b184050a559afb4e891e833fe342fe081e9a14cc62c5eaf56151c5a79ee206eb7d2dbe46d525a0f0daab293e25312379d874f11f3fa97efee33738f17ebda9c6e43087ceffba7fc28be3df65f1576e54d72daeb59bc0f2b23d45f3c36bf93814b7f64cb04ea846d748aaa85c96310714264cb754c75c2efd357a15253797650f75e177792107bd3f698ec2cdaf7fefb6e1e1c7d9cfffc2295e21ae6fd26fc7da78d9a8e8b35db7f1df87834b9a7daf10dcc16efae54068da23a030c9aa612afc6a413de6fdd6d028dff04d16ceff5dee68eccdaa439e9b7da8c0b7966d71f7b2cb5d4dfec9f5ad989adc546d15a309c54db5edaec777f730b8e617dbe145d5e34ca0d0601b0a6bc2d2687c67a6a4a370e1c2252cf0fea72eeaae0720af27ffcb736e824396d7a380426dd6c0ce0677661ef7dd7cffa3d4a567720c1f9c3454664ef5a0b5c1d1e6c175f770a0b0be9fc9589db3b30d5f2b4b87894f67af63c638cfe85a937502d9d5a7fb5ca6276e10a070da46596ebdfffb3bf86eeb95e4a9c24d6bd121f42fbf91f9bcd2846e76fca984523a1828bc5daa38f8b6a2cb154bf7a5bc7bfee3a4b7f1789ef79dcd3d7b6f20e7c1919bbee73debcc64eeafd86ebd1c7dad035d3e71bc2ff48aa23174f78f6fd484b4c4a0dd46d3b74bf6f90e40e11679f38d1a7957048aee756cbe35f1e665346d2d75e7ebeb8690dd32aab810b62bd54c1677ae86efb43d7a1e9302d3f4171eb669b17d8f8b3da31a8bc6cd8955bcafdb3bae01854185dc7581c16f65e2123720e34bc9fe2bf8a8e307595b6f6e155a456eaa2fe7e74a08018ae79fae4f3eaa5567d1214a5db2fd8beaad345af38eb9c53da8a5e903478feacd05675f8434eeb0ec8094fc270000ffff6794568075060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
...
@@ -116,18 +116,65 @@ function mix_deposit() {
...
@@ -116,18 +116,65 @@ function mix_deposit() {
echo
"
${
hash
}
"
echo
"
${
hash
}
"
query_tx
"
${
CLI
}
"
"
${
hash
}
"
query_tx
"
${
CLI
}
"
"
${
hash
}
"
${
MIX_CLI1
}
mix wallet notes
-a
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
query_note
"
${
MIX_CLI1
}
"
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 3
${
MIX_CLI2
}
mix wallet notes
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
query_note
"
${
MIX_CLI2
}
"
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR 3
${
MIX_CLI3
}
mix wallet notes
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
query_note
"
${
MIX_CLI3
}
"
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k 3
noteReturn
=
$(${
MIX_CLI1
}
mix wallet notes
-a
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 | jq
-r
".notes[0].noteHash"
)
noteAuth
=
$(${
MIX_CLI1
}
mix wallet notes
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR | jq
-r
".notes[0].noteHash"
)
notePeer
=
$(${
MIX_CLI1
}
mix wallet notes
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k | jq
-r
".notes[0].noteHash"
)
# hash=$(${CLI} send mix deposit -m 1000000000 -p ./gnark/circuit/deposit/ -t 1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k -a 1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR -r 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 -k 4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01)
echo
"auth"
# echo "${hash}"
authHash
=
$(${
MIX_CLI2
}
mix wallet notes
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
-s
3 | jq
-r
".notes[0].noteHash"
)
# query_tx "${1}" "${hash}"
authKey
=
$(${
MIX_CLI2
}
mix wallet notes
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
-s
3 | jq
-r
".notes[0].secret.returnKey"
)
# ${MIX_CLI2} send mix auth -n 5631471018742471897033294565915884019145970028744895604889956301276708177410 -a 7922952968605110993699808851901993086405084846049488287958179300126299607225 -p ./gnark/circuit/authorize/ -k 4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
echo
"authHash=
$authHash
,authKey=
$authKey
"
hash
=
$(${
MIX_CLI2
}
send mix auth
-n
"
$authHash
"
-a
"
$authKey
"
-p
./gnark/circuit/authorize/
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
)
echo
"
${
hash
}
"
query_tx
"
${
MIX_CLI2
}
"
"
${
hash
}
"
query_note
"
${
MIX_CLI1
}
"
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 1
echo
"transfer to 1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"
transHash
=
$(${
MIX_CLI1
}
mix wallet notes
-a
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
-s
1 | jq
-r
".notes[0].noteHash"
)
hash
=
$(${
MIX_CLI1
}
send mix transfer
-m
600000000
-n
"
$transHash
"
-t
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
-i
./gnark/circuit/transfer/input/
-o
./gnark/circuit/transfer/output/
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
)
echo
"
${
hash
}
"
query_tx
"
${
CLI
}
"
"
${
hash
}
"
query_note
"
${
MIX_CLI3
}
"
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k 1
echo
"withdraw"
withdrawHash
=
$(${
MIX_CLI3
}
mix wallet notes
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
-s
1 | jq
-r
".notes[0].noteHash"
)
hash
=
$(${
MIX_CLI3
}
send mix withdraw
-m
600000000
-n
"
$withdrawHash
"
-p
./gnark/circuit/withdraw/
-k
0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115
)
echo
"
${
hash
}
"
query_tx
"
${
CLI
}
"
"
${
hash
}
"
query_note
"
${
MIX_CLI3
}
"
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k 2
${
CLI
}
account balance
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
-e
mix
balance
=
$(${
CLI
}
account balance
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
-e
mix | jq
-r
".balance"
)
if
[
"
${
balance
}
"
!=
"6.0000"
]
;
then
echo
"account 1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k should be 6.0000, real is
$balance
"
# exit 1
fi
}
function
query_note
()
{
block_wait
"
${
1
}
"
1
local times
=
200
while
true
;
do
ret
=
$(${
1
}
mix wallet notes
-a
"
${
2
}
"
-s
"
${
3
}
"
| jq
-r
".notes[0].status"
)
echo
"query wallet notes addr=
${
2
}
,status=
$3
return
${
ret
}
"
if
[
"
${
ret
}
"
!=
"
${
3
}
"
]
;
then
block_wait
"
${
1
}
"
1
times
=
$((
times
-
1
))
if
[
$times
-le
0
]
;
then
echo
"query notes addr=
${
2
}
failed"
exit
1
fi
else
echo
"query notes addr=
${
2
}
,status=
$3
success"
${
1
}
mix wallet notes
-a
"
${
2
}
"
-s
"
${
3
}
"
break
fi
done
}
}
function
query_tx
()
{
function
query_tx
()
{
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer/input/
transferI
nput.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer/input/
i
nput.go
View file @
f9c75bbd
package
input
package
main
import
(
import
(
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer/input/
transfer
input_test.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer/input/input_test.go
View file @
f9c75bbd
package
input
package
main
import
(
import
(
"testing"
"testing"
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer/output/
transferO
utput.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer/output/
o
utput.go
View file @
f9c75bbd
package
output
package
main
import
(
import
(
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer/output/
transferO
utput_test.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer/output/
o
utput_test.go
View file @
f9c75bbd
package
output
package
main
import
(
import
(
"testing"
"testing"
...
...
plugin/dapp/mix/commands/mix.go
View file @
f9c75bbd
...
@@ -32,6 +32,7 @@ func MixCmd() *cobra.Command {
...
@@ -32,6 +32,7 @@ func MixCmd() *cobra.Command {
CreateTransferRawTxCmd
(),
CreateTransferRawTxCmd
(),
CreateWithdrawRawTxCmd
(),
CreateWithdrawRawTxCmd
(),
CreateAuthRawTxCmd
(),
CreateAuthRawTxCmd
(),
CreateConfigCmd
(),
CreateConfigCmd
(),
QueryCmd
(),
QueryCmd
(),
...
@@ -54,7 +55,7 @@ func CreateConfigCmd() *cobra.Command {
...
@@ -54,7 +55,7 @@ func CreateConfigCmd() *cobra.Command {
Short
:
"Proof parameters config to mix coin contract"
,
Short
:
"Proof parameters config to mix coin contract"
,
}
}
cmd
.
AddCommand
(
mixConfigVerifyKeyParaCmd
())
cmd
.
AddCommand
(
mixConfigVerifyKeyParaCmd
())
cmd
.
AddCommand
(
mixConfigAuthPubKeyParaCmd
())
//
cmd.AddCommand(mixConfigAuthPubKeyParaCmd())
cmd
.
AddCommand
(
mixConfigPaymentPubKeyParaCmd
())
cmd
.
AddCommand
(
mixConfigPaymentPubKeyParaCmd
())
return
cmd
return
cmd
...
@@ -589,10 +590,50 @@ func SecretCmd() *cobra.Command {
...
@@ -589,10 +590,50 @@ func SecretCmd() *cobra.Command {
cmd
.
AddCommand
(
DecodeSecretDataCmd
())
cmd
.
AddCommand
(
DecodeSecretDataCmd
())
cmd
.
AddCommand
(
EncryptSecretDataCmd
())
cmd
.
AddCommand
(
EncryptSecretDataCmd
())
cmd
.
AddCommand
(
DecryptSecretDataCmd
())
cmd
.
AddCommand
(
DecryptSecretDataCmd
())
cmd
.
AddCommand
(
DecodePubInputDataCmd
())
return
cmd
return
cmd
}
}
// DecodePublicInputDataCmd decode zk public data
func
DecodePubInputDataCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"parse"
,
Short
:
"parse zk public input data"
,
Run
:
decodePubInput
,
}
decodePubInputCmdFlags
(
cmd
)
return
cmd
}
func
decodePubInputCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"data"
,
"d"
,
""
,
"public input data"
)
cmd
.
MarkFlagRequired
(
"data"
)
cmd
.
Flags
()
.
Int32P
(
"type"
,
"t"
,
0
,
"type 0:deposit,1:withdraw,2:transIn,3:transOut,4:auth"
)
cmd
.
MarkFlagRequired
(
"type"
)
}
func
decodePubInput
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
//rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
data
,
_
:=
cmd
.
Flags
()
.
GetString
(
"data"
)
ty
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"type"
)
v
,
err
:=
mixTy
.
DecodePubInput
(
mixTy
.
VerifyType
(
ty
),
data
)
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
}
rst
,
err
:=
json
.
MarshalIndent
(
v
,
""
,
" "
)
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
}
fmt
.
Println
(
string
(
rst
))
}
// EncodeSecretDataCmd get para chain status by height
// EncodeSecretDataCmd get para chain status by height
func
DecodeSecretDataCmd
()
*
cobra
.
Command
{
func
DecodeSecretDataCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
...
@@ -750,6 +791,8 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
...
@@ -750,6 +791,8 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
StringP
(
"exec"
,
"e"
,
"coins"
,
"asset executor(coins, token, paracross), default coins"
)
cmd
.
Flags
()
.
StringP
(
"exec"
,
"e"
,
"coins"
,
"asset executor(coins, token, paracross), default coins"
)
cmd
.
Flags
()
.
StringP
(
"path"
,
"p"
,
""
,
"deposit circuit path "
)
cmd
.
Flags
()
.
StringP
(
"path"
,
"p"
,
""
,
"deposit circuit path "
)
cmd
.
Flags
()
.
Int32P
(
"privacy"
,
"w"
,
0
,
"get zk privacy data print, 1:print, default not"
)
cmd
.
Flags
()
.
Int32P
(
"verify"
,
"v"
,
0
,
"verify on chain:0 on local:1, default 0 "
)
}
}
...
@@ -764,6 +807,8 @@ func depositSecret(cmd *cobra.Command, args []string) {
...
@@ -764,6 +807,8 @@ func depositSecret(cmd *cobra.Command, args []string) {
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
privacy
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"privacy"
)
verify
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"verify"
)
deposit
:=
&
mixTy
.
DepositInfo
{
deposit
:=
&
mixTy
.
DepositInfo
{
ReceiverAddrs
:
targets
,
ReceiverAddrs
:
targets
,
...
@@ -783,6 +828,8 @@ func depositSecret(cmd *cobra.Command, args []string) {
...
@@ -783,6 +828,8 @@ func depositSecret(cmd *cobra.Command, args []string) {
AssetExec
:
assetExec
,
AssetExec
:
assetExec
,
AssetToken
:
token
,
AssetToken
:
token
,
Title
:
paraName
,
Title
:
paraName
,
Privacy
:
privacy
,
Verify
:
verify
,
}
}
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
...
@@ -822,6 +869,9 @@ func transferSecretCmdFlags(cmd *cobra.Command) {
...
@@ -822,6 +869,9 @@ func transferSecretCmdFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
StringP
(
"outpath"
,
"o"
,
""
,
"output pk file "
)
cmd
.
Flags
()
.
StringP
(
"outpath"
,
"o"
,
""
,
"output pk file "
)
cmd
.
MarkFlagRequired
(
"outpath"
)
cmd
.
MarkFlagRequired
(
"outpath"
)
cmd
.
Flags
()
.
Int32P
(
"privacy"
,
"w"
,
0
,
"get zk privacy data print, 1:print, default not"
)
cmd
.
Flags
()
.
Int32P
(
"verify"
,
"v"
,
0
,
"verify on chain:0 on local:1, default 0 "
)
}
}
func
transferSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
transferSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
...
@@ -839,6 +889,9 @@ func transferSecret(cmd *cobra.Command, args []string) {
...
@@ -839,6 +889,9 @@ func transferSecret(cmd *cobra.Command, args []string) {
assetExec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
assetExec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
privacy
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"privacy"
)
verify
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"verify"
)
input
:=
&
mixTy
.
TransferInputTxReq
{
input
:=
&
mixTy
.
TransferInputTxReq
{
NoteHashs
:
noteHash
,
NoteHashs
:
noteHash
,
ZkPath
:
inpath
,
ZkPath
:
inpath
,
...
@@ -867,6 +920,8 @@ func transferSecret(cmd *cobra.Command, args []string) {
...
@@ -867,6 +920,8 @@ func transferSecret(cmd *cobra.Command, args []string) {
AssetExec
:
assetExec
,
AssetExec
:
assetExec
,
AssetToken
:
token
,
AssetToken
:
token
,
Title
:
paraName
,
Title
:
paraName
,
Privacy
:
privacy
,
Verify
:
verify
,
}
}
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
...
@@ -896,6 +951,10 @@ func withdrawSecretCmdFlags(cmd *cobra.Command) {
...
@@ -896,6 +951,10 @@ func withdrawSecretCmdFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
StringP
(
"path"
,
"p"
,
""
,
"withdraw pk file "
)
cmd
.
Flags
()
.
StringP
(
"path"
,
"p"
,
""
,
"withdraw pk file "
)
cmd
.
MarkFlagRequired
(
"path"
)
cmd
.
MarkFlagRequired
(
"path"
)
cmd
.
Flags
()
.
Int32P
(
"privacy"
,
"w"
,
0
,
"get zk privacy data print, 1:print, default not"
)
cmd
.
Flags
()
.
Int32P
(
"verify"
,
"v"
,
0
,
"verify on chain:0 on local:1, default 0 "
)
}
}
func
withdrawSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
withdrawSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
...
@@ -908,6 +967,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
...
@@ -908,6 +967,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
privacy
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"privacy"
)
verify
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"verify"
)
req
:=
&
mixTy
.
WithdrawTxReq
{
req
:=
&
mixTy
.
WithdrawTxReq
{
TotalAmount
:
amount
,
TotalAmount
:
amount
,
...
@@ -921,6 +982,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
...
@@ -921,6 +982,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
AssetExec
:
assetExec
,
AssetExec
:
assetExec
,
AssetToken
:
token
,
AssetToken
:
token
,
Title
:
paraName
,
Title
:
paraName
,
Privacy
:
privacy
,
Verify
:
verify
,
}
}
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
...
@@ -951,6 +1014,9 @@ func authSecretCmdFlags(cmd *cobra.Command) {
...
@@ -951,6 +1014,9 @@ func authSecretCmdFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
StringP
(
"path"
,
"p"
,
""
,
"auth path file "
)
cmd
.
Flags
()
.
StringP
(
"path"
,
"p"
,
""
,
"auth path file "
)
cmd
.
MarkFlagRequired
(
"path"
)
cmd
.
MarkFlagRequired
(
"path"
)
cmd
.
Flags
()
.
Int32P
(
"privacy"
,
"w"
,
0
,
"get zk privacy data print, 1:print, default not"
)
cmd
.
Flags
()
.
Int32P
(
"verify"
,
"v"
,
0
,
"verify on chain:0 on local:1, default 0 "
)
}
}
func
authSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
authSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
...
@@ -964,6 +1030,9 @@ func authSecret(cmd *cobra.Command, args []string) {
...
@@ -964,6 +1030,9 @@ func authSecret(cmd *cobra.Command, args []string) {
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
privacy
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"privacy"
)
verify
,
_
:=
cmd
.
Flags
()
.
GetInt32
(
"verify"
)
req
:=
&
mixTy
.
AuthTxReq
{
req
:=
&
mixTy
.
AuthTxReq
{
AuthorizeToAddr
:
toKey
,
AuthorizeToAddr
:
toKey
,
NoteHash
:
noteHash
,
NoteHash
:
noteHash
,
...
@@ -976,6 +1045,8 @@ func authSecret(cmd *cobra.Command, args []string) {
...
@@ -976,6 +1045,8 @@ func authSecret(cmd *cobra.Command, args []string) {
AssetExec
:
assetExec
,
AssetExec
:
assetExec
,
AssetToken
:
token
,
AssetToken
:
token
,
Title
:
paraName
,
Title
:
paraName
,
Privacy
:
privacy
,
Verify
:
verify
,
}
}
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.CreateRawTransaction"
,
params
,
nil
)
...
...
plugin/dapp/mix/executor/kv.go
View file @
f9c75bbd
...
@@ -26,12 +26,12 @@ func setPrefix() {
...
@@ -26,12 +26,12 @@ func setPrefix() {
authPubKeys
=
"mavl-mix-auth-pubkeys-"
authPubKeys
=
"mavl-mix-auth-pubkeys-"
paymentPubKey
=
"mavl-mix-payment-pubkey-"
paymentPubKey
=
"mavl-mix-payment-pubkey-"
commitTreeArchiveRoots
=
"mavl-mix-commitTree-roots-archive-"
commitTreeArchiveRoots
=
"mavl-mix-commitTree-roots-archive-"
commitTreeCurrentRoots
=
"mavl-mix-commitTree-
current-roots
"
commitTreeCurrentRoots
=
"mavl-mix-commitTree-
roots-current-
"
commitTreeCurrentLeaves
=
"mavl-mix-commitTree-current-leaves-"
commitTreeCurrentLeaves
=
"mavl-mix-commitTree-current-leaves-"
commitTreeRootLeaves
=
"mavl-mix-commitTree-rootLeaves-"
commitTreeRootLeaves
=
"mavl-mix-commitTree-rootLeaves-"
authorizeHash
=
"mavl-mix-authorizeHash"
authorizeHash
=
"mavl-mix-authorizeHash"
authorizeSpendHash
=
"mavl-mix-authorize
Hash-spend
-"
authorizeSpendHash
=
"mavl-mix-authorize
SpendHash
-"
nullifierHash
=
"mavl-mix-nullifierHash"
nullifierHash
=
"mavl-mix-nullifierHash"
}
}
...
...
plugin/dapp/mix/executor/query.go
View file @
f9c75bbd
...
@@ -69,5 +69,5 @@ func (m *Mix) Query_PaymentPubKey(addr *types.ReqString) (types.Message, error)
...
@@ -69,5 +69,5 @@ func (m *Mix) Query_PaymentPubKey(addr *types.ReqString) (types.Message, error)
// Query_PaymentPubKey 批量查询
// Query_PaymentPubKey 批量查询
func
(
m
*
Mix
)
Query_VerifyProof
(
req
*
mixTy
.
VerifyProofInfo
)
(
types
.
Message
,
error
)
{
func
(
m
*
Mix
)
Query_VerifyProof
(
req
*
mixTy
.
VerifyProofInfo
)
(
types
.
Message
,
error
)
{
return
nil
,
zkProofVerify
(
m
.
GetStateDB
(),
req
.
Proof
,
req
.
Ty
)
return
&
types
.
ReqNil
{}
,
zkProofVerify
(
m
.
GetStateDB
(),
req
.
Proof
,
req
.
Ty
)
}
}
plugin/dapp/mix/proto/mix.proto
View file @
f9c75bbd
...
@@ -385,6 +385,8 @@ message CreateRawTxReq{
...
@@ -385,6 +385,8 @@ message CreateRawTxReq{
string
assetExec
=
2
;
string
assetExec
=
2
;
string
assetToken
=
3
;
string
assetToken
=
3
;
string
title
=
6
;
//平行链名字
string
title
=
6
;
//平行链名字
int32
privacy
=
7
;
//1:打印隐私数据
int32
verify
=
8
;
//0:链上验证,1:本地验证
}
}
...
...
plugin/dapp/mix/types/mix.pb.go
View file @
f9c75bbd
...
@@ -2976,6 +2976,8 @@ type CreateRawTxReq struct {
...
@@ -2976,6 +2976,8 @@ type CreateRawTxReq struct {
AssetExec
string
`protobuf:"bytes,2,opt,name=assetExec,proto3" json:"assetExec,omitempty"`
AssetExec
string
`protobuf:"bytes,2,opt,name=assetExec,proto3" json:"assetExec,omitempty"`
AssetToken
string
`protobuf:"bytes,3,opt,name=assetToken,proto3" json:"assetToken,omitempty"`
AssetToken
string
`protobuf:"bytes,3,opt,name=assetToken,proto3" json:"assetToken,omitempty"`
Title
string
`protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"`
Title
string
`protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"`
Privacy
int32
`protobuf:"varint,7,opt,name=privacy,proto3" json:"privacy,omitempty"`
Verify
int32
`protobuf:"varint,8,opt,name=verify,proto3" json:"verify,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -3041,6 +3043,20 @@ func (m *CreateRawTxReq) GetTitle() string {
...
@@ -3041,6 +3043,20 @@ func (m *CreateRawTxReq) GetTitle() string {
return
""
return
""
}
}
func
(
m
*
CreateRawTxReq
)
GetPrivacy
()
int32
{
if
m
!=
nil
{
return
m
.
Privacy
}
return
0
}
func
(
m
*
CreateRawTxReq
)
GetVerify
()
int32
{
if
m
!=
nil
{
return
m
.
Verify
}
return
0
}
type
PaymentKeysReq
struct
{
type
PaymentKeysReq
struct
{
PrivKey
string
`protobuf:"bytes,1,opt,name=privKey,proto3" json:"privKey,omitempty"`
PrivKey
string
`protobuf:"bytes,1,opt,name=privKey,proto3" json:"privKey,omitempty"`
Addr
string
`protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"`
Addr
string
`protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"`
...
@@ -3799,168 +3815,169 @@ func init() {
...
@@ -3799,168 +3815,169 @@ func init() {
}
}
var
fileDescriptor_5c21d519a9be369a
=
[]
byte
{
var
fileDescriptor_5c21d519a9be369a
=
[]
byte
{
// 25
67
bytes of a gzipped FileDescriptorProto
// 25
88
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xec
,
0x5a
,
0x4b
,
0x6f
,
0x1b
,
0xc9
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xec
,
0x5a
,
0x4b
,
0x6f
,
0x1b
,
0xc9
,
0x11
,
0xd6
,
0x0c
,
0x5f
,
0x62
,
0x89
,
0x94
,
0xa8
,
0xb6
,
0x57
,
0x4b
,
0x0b
,
0x1b
,
0x43
,
0xe9
,
0x75
,
0x11
,
0xd6
,
0x0c
,
0x5f
,
0x62
,
0x89
,
0x94
,
0xa8
,
0xb6
,
0x57
,
0x4b
,
0x0b
,
0x1b
,
0x43
,
0xe9
,
0x75
,
0xd6
,
0x5a
,
0x39
,
0x70
,
0x16
,
0xf2
,
0x66
,
0x83
,
0x00
,
0x59
,
0x27
,
0x5c
,
0x93
,
0xb2
,
0xb8
,
0xb6
,
0xd6
,
0x5a
,
0x39
,
0x70
,
0x16
,
0xf2
,
0x66
,
0x83
,
0x00
,
0x59
,
0x27
,
0x5c
,
0x93
,
0xb2
,
0xb8
,
0xb6
,
0x28
,
0xa1
,
0x45
,
0xf9
,
0xb5
,
0xd8
,
0x00
,
0x63
,
0xb2
,
0x25
,
0x0d
,
0x4c
,
0x71
,
0xe8
,
0x99
,
0xa1
,
0x28
,
0xa1
,
0x45
,
0xf9
,
0xb5
,
0xd8
,
0x00
,
0x63
,
0xb2
,
0x25
,
0x0d
,
0x4c
,
0x71
,
0xe8
,
0x99
,
0xa1
,
0x4c
,
0xed
,
0x2d
,
0x48
,
0x80
,
0x20
,
0xb7
,
0x00
,
0x09
,
0x90
,
0x5b
,
0x80
,
0x9c
,
0xb2
,
0xe7
,
0x20
,
0x4c
,
0xed
,
0x2d
,
0x48
,
0x80
,
0x20
,
0xb7
,
0x00
,
0x39
,
0xe4
,
0x16
,
0x20
,
0xa7
,
0xec
,
0x39
,
0x08
,
0xc8
,
0x21
,
0x3f
,
0x21
,
0xe7
,
0xfc
,
0x80
,
0xdc
,
0x72
,
0xcf
,
0x2f
,
0x08
,
0xaa
,
0x1f
,
0x33
,
0xdd
,
0x72
,
0xc8
,
0x0f
,
0xc8
,
0x21
,
0xe7
,
0xfc
,
0x80
,
0xdc
,
0x72
,
0xcf
,
0x2f
,
0x08
,
0xaa
,
0x1f
,
0x33
,
0x23
,
0xea
,
0xe5
,
0x6c
,
0x80
,
0x1c
,
0x72
,
0x53
,
0xd5
,
0x54
,
0x57
,
0x57
,
0x7d
,
0xf5
,
0xe8
,
0xea
,
0xdd
,
0x23
,
0xea
,
0xe5
,
0x6c
,
0x80
,
0x1c
,
0x72
,
0x63
,
0xd5
,
0x54
,
0xd7
,
0x54
,
0x7d
,
0x55
,
0x5d
,
0xa6
,
0xa0
,
0x7c
,
0xe4
,
0x4f
,
0xee
,
0x8e
,
0xc2
,
0x20
,
0x0e
,
0x48
,
0x21
,
0x3e
,
0x19
,
0xf1
,
0x68
,
0x5d
,
0x5d
,
0x43
,
0x28
,
0x1f
,
0xf9
,
0x93
,
0xbb
,
0xa3
,
0x30
,
0x88
,
0x03
,
0x52
,
0x88
,
0x4f
,
0x46
,
0xb9
,
0xd2
,
0x0b
,
0x8e
,
0x8e
,
0x82
,
0xa1
,
0x64
,
0x2e
,
0x2f
,
0xc6
,
0xa1
,
0x37
,
0x8c
,
0xbc
,
0x5e
,
0x3c
,
0x5a
,
0xae
,
0xf4
,
0x82
,
0xa3
,
0xa3
,
0x60
,
0x28
,
0x99
,
0xcb
,
0x8b
,
0x71
,
0xe8
,
0x0d
,
0x23
,
0xec
,
0x6b
,
0x16
,
0xfd
,
0x1c
,
0xe6
,
0x5e
,
0xbc
,
0x7a
,
0xc2
,
0x43
,
0x7f
,
0xff
,
0xe4
,
0x11
,
0x3f
,
0xaf
,
0x17
,
0xfb
,
0x9a
,
0x45
,
0x3f
,
0x87
,
0xb9
,
0x17
,
0xaf
,
0x9e
,
0xf0
,
0xd0
,
0xdf
,
0x3f
,
0x79
,
0x21
,
0xdf
,
0x81
,
0x3c
,
0x2e
,
0xac
,
0x3b
,
0x2b
,
0xce
,
0xea
,
0xfc
,
0xfa
,
0xe2
,
0x5d
,
0xa1
,
0xe5
,
0xc4
,
0x4f
,
0xc8
,
0x77
,
0x20
,
0x8f
,
0x0b
,
0xeb
,
0xce
,
0x8a
,
0xb3
,
0x3a
,
0xbf
,
0xbe
,
0x78
,
0x57
,
0xae
,
0xfc
,
0xde
,
0x3d
,
0x19
,
0x71
,
0x26
,
0x3e
,
0x93
,
0xeb
,
0x50
,
0x38
,
0xf6
,
0x06
,
0x63
,
0x5e
,
0x68
,
0xb9
,
0x2b
,
0x9f
,
0x77
,
0x4f
,
0x46
,
0x9c
,
0x89
,
0xc7
,
0xe4
,
0x3a
,
0x14
,
0x8e
,
0xbd
,
0xc1
,
0x77
,
0x57
,
0x9c
,
0xd5
,
0x32
,
0x93
,
0x04
,
0xfd
,
0x04
,
0x2a
,
0x86
,
0xae
,
0x88
,
0x7c
,
0x00
,
0xf9
,
0x98
,
0xd7
,
0xdd
,
0x15
,
0x67
,
0xb5
,
0xcc
,
0x24
,
0x41
,
0x3f
,
0x81
,
0x8a
,
0xa1
,
0x2b
,
0x22
,
0x1f
,
0xbe
,
0x17
,
0x7b
,
0x75
,
0x67
,
0x25
,
0xb7
,
0x3a
,
0xb7
,
0x4e
,
0x94
,
0x32
,
0x43
,
0x84
,
0x89
,
0xef
,
0x40
,
0xbe
,
0xef
,
0xc5
,
0x5e
,
0xdd
,
0x59
,
0xc9
,
0xad
,
0xce
,
0xad
,
0x13
,
0xa5
,
0xcc
,
0x10
,
0x61
,
0xf4
,
0x26
,
0xcc
,
0x36
,
0xc6
,
0xf1
,
0xa1
,
0x58
,
0x43
,
0x20
,
0xff
,
0x8a
,
0x9f
,
0x44
,
0x62
,
0x4d
,
0xe2
,
0x39
,
0xbd
,
0x09
,
0xb3
,
0x8d
,
0x71
,
0x7c
,
0x28
,
0xd6
,
0x10
,
0xc8
,
0xbf
,
0xe2
,
0x27
,
0x91
,
0x99
,
0x89
,
0xbf
,
0xe9
,
0x4b
,
0x80
,
0x1d
,
0xef
,
0xe4
,
0x88
,
0x0f
,
0x63
,
0x34
,
0x91
,
0x40
,
0xde
,
0x58
,
0x53
,
0x66
,
0xe2
,
0x37
,
0x7d
,
0x09
,
0xb0
,
0xe3
,
0x9d
,
0x1c
,
0xf1
,
0x61
,
0x8c
,
0x26
,
0x12
,
0xeb
,
0xf7
,
0x43
,
0x61
,
0x62
,
0x99
,
0x89
,
0xbf
,
0xc9
,
0x0a
,
0xcc
,
0x85
,
0xbc
,
0xc7
,
0xfd
,
0x63
,
0xc8
,
0x7b
,
0xfd
,
0x7e
,
0x28
,
0x4c
,
0x2c
,
0x33
,
0xf1
,
0x9b
,
0xac
,
0xc0
,
0x5c
,
0xc8
,
0x7b
,
0xdc
,
0x1e
,
0x3e
,
0xe2
,
0x27
,
0xca
,
0x2a
,
0x93
,
0x45
,
0x6e
,
0x02
,
0xf0
,
0x61
,
0x2f
,
0x3c
,
0x19
,
0xa1
,
0x3f
,
0xe6
,
0xe1
,
0x23
,
0x7e
,
0xa2
,
0xac
,
0x32
,
0x59
,
0xe4
,
0x26
,
0x00
,
0x1f
,
0xf6
,
0xc2
,
0x93
,
0x8e
,
0x7a
,
0x4e
,
0x08
,
0x18
,
0x1c
,
0xfa
,
0x2f
,
0x07
,
0x16
,
0xb6
,
0xfc
,
0xc9
,
0x83
,
0x60
,
0xb8
,
0x11
,
0xea
,
0xa8
,
0xe7
,
0x84
,
0x80
,
0xc1
,
0xa1
,
0xff
,
0x72
,
0x60
,
0x61
,
0xcb
,
0x9f
,
0x3c
,
0x08
,
0xef
,
0x1f
,
0x34
,
0x04
,
0x42
,
0xe4
,
0x16
,
0xb8
,
0xdd
,
0x13
,
0x05
,
0xc5
,
0x75
,
0x65
,
0x7d
,
0x22
,
0x86
,
0xfb
,
0xfe
,
0x41
,
0x43
,
0x20
,
0x44
,
0x6e
,
0x81
,
0xdb
,
0x3d
,
0x51
,
0x50
,
0x5c
,
0x57
,
0xd6
,
0x23
,
0xd0
,
0x70
,
0xbb
,
0x27
,
0xe4
,
0x0e
,
0x14
,
0xa5
,
0xbc
,
0xd8
,
0x76
,
0x7e
,
0xfd
,
0x5a
,
0x56
,
0x27
,
0x32
,
0x02
,
0x0d
,
0xb7
,
0x7b
,
0x42
,
0xee
,
0x40
,
0x51
,
0xca
,
0x8b
,
0xd7
,
0xce
,
0xaf
,
0x5f
,
0xb2
,
0xd1
,
0x8b
,
0x99
,
0x12
,
0x21
,
0xeb
,
0x50
,
0x3e
,
0xd6
,
0xde
,
0x0b
,
0x2b
,
0xa6
,
0xe2
,
0xb2
,
0xcb
,
0x4a
,
0x36
,
0x7a
,
0x31
,
0x53
,
0x22
,
0x64
,
0x1d
,
0xca
,
0xc7
,
0xda
,
0x7b
,
0x61
,
0xc5
,
0x54
,
0x39
,
0xc3
,
0x52
,
0x31
,
0xb2
,
0x0c
,
0x25
,
0x4f
,
0xc2
,
0x53
,
0xcf
,
0xa3
,
0xdd
,
0x9b
,
0x33
,
0x4c
,
0x5c
,
0x36
,
0x67
,
0x58
,
0x2a
,
0x46
,
0x96
,
0xa1
,
0xe4
,
0x49
,
0x78
,
0xea
,
0x79
,
0xb4
,
0x7b
,
0x73
,
0x33
,
0xc8
,
0x3d
,
0x80
,
0x51
,
0x02
,
0x4d
,
0xbd
,
0x20
,
0x14
,
0xea
,
0xa8
,
0xa5
,
0x98
,
0x6d
,
0xce
,
0x86
,
0x69
,
0x06
,
0xb9
,
0x07
,
0x30
,
0x4a
,
0xa0
,
0xa9
,
0x17
,
0x84
,
0x42
,
0x1d
,
0xb5
,
0x14
,
0xb3
,
0x30
,
0x43
,
0xec
,
0xb3
,
0x92
,
0x8a
,
0x1e
,
0xfd
,
0x11
,
0xcc
,
0x36
,
0x37
,
0x77
,
0x79
,
0x2f
,
0xe4
,
0xcd
,
0x19
,
0x66
,
0x88
,
0x7d
,
0x56
,
0x52
,
0xd1
,
0xa3
,
0x3f
,
0x82
,
0xd9
,
0xe6
,
0xe6
,
0x2e
,
0xef
,
0x31
,
0xa9
,
0x43
,
0x69
,
0xc4
,
0x25
,
0x7c
,
0x12
,
0x59
,
0x4d
,
0x92
,
0x25
,
0x28
,
0x46
,
0x42
,
0x46
,
0x85
,
0x3c
,
0x26
,
0x75
,
0x28
,
0x8d
,
0xb8
,
0x84
,
0x4f
,
0x22
,
0xab
,
0x49
,
0xb2
,
0x04
,
0xc5
,
0x48
,
0xe1
,
0xaa
,
0x28
,
0xca
,
0xa1
,
0xaa
,
0x57
,
0x3f
,
0x0c
,
0x83
,
0xf1
,
0x88
,
0x2c
,
0xc3
,
0xac
,
0x86
,
0xc8
,
0x28
,
0x5c
,
0x15
,
0x45
,
0x39
,
0x54
,
0xf5
,
0xea
,
0x87
,
0x61
,
0x30
,
0x1e
,
0x91
,
0x65
,
0x98
,
0x5c
,
0xe9
,
0x48
,
0x68
,
0xf9
,
0x2d
,
0x1e
,
0x87
,
0x43
,
0x1e
,
0x2a
,
0x35
,
0x09
,
0x4d
,
0xde
,
0x83
,
0xd5
,
0x90
,
0x2b
,
0x1d
,
0x09
,
0x2d
,
0x9f
,
0xc5
,
0xe3
,
0x70
,
0xc8
,
0x43
,
0xa5
,
0x26
,
0xa1
,
0xc9
,
0x32
,
0xfa
,
0x13
,
0x84
,
0xfe
,
0x57
,
0x5c
,
0x85
,
0x26
,
0x65
,
0xd0
,
0x31
,
0x66
,
0xe8
,
0x4e
,
0x18
,
0x7b
,
0x50
,
0x46
,
0x7f
,
0x82
,
0xd0
,
0xff
,
0x8a
,
0xab
,
0xd0
,
0xa4
,
0x0c
,
0x3a
,
0xc6
,
0x0c
,
0xdd
,
0x04
,
0xfb
,
0xed
,
0xe1
,
0x7e
,
0x80
,
0xa9
,
0x37
,
0x42
,
0x42
,
0xed
,
0x20
,
0x09
,
0x4c
,
0x80
,
0xd1
,
0x09
,
0x83
,
0x60
,
0xbf
,
0x3d
,
0xdc
,
0x0f
,
0x30
,
0xf5
,
0x46
,
0x48
,
0xa8
,
0x37
,
0x48
,
0x02
,
0x13
,
0xf8
,
0xe5
,
0xc0
,
0xef
,
0xb5
,
0x87
,
0xa3
,
0xb1
,
0x36
,
0xd4
,
0x64
,
0x91
,
0xbb
,
0x50
,
0x92
,
0x76
,
0x60
,
0x34
,
0x7e
,
0x39
,
0xf0
,
0x7b
,
0xed
,
0xe1
,
0x68
,
0xac
,
0x0d
,
0x35
,
0x59
,
0xe4
,
0x2e
,
0x94
,
0x47
,
0x0a
,
0x77
,
0x1d
,
0x51
,
0xcb
,
0x07
,
0xa6
,
0x85
,
0xe8
,
0x7d
,
0xa8
,
0x6d
,
0xf9
,
0x93
,
0x26
,
0xa4
,
0xdd
,
0x91
,
0xc2
,
0x5d
,
0x47
,
0xd4
,
0xf2
,
0x81
,
0x69
,
0x21
,
0x7a
,
0x1f
,
0x6a
,
0x5b
,
0xfe
,
0x1f
,
0x05
,
0x91
,
0x1f
,
0xab
,
0xe8
,
0xad
,
0x41
,
0x51
,
0x6c
,
0x17
,
0x9d
,
0x4a
,
0xe9
,
0xc4
,
0x3e
,
0xa4
,
0xc9
,
0x47
,
0x41
,
0xe4
,
0xc7
,
0x2a
,
0x7a
,
0x6b
,
0x50
,
0x14
,
0xaf
,
0x8b
,
0x4e
,
0xa5
,
0x74
,
0xa6
,
0x24
,
0xe8
,
0xef
,
0x1c
,
0x58
,
0xdc
,
0xf2
,
0x27
,
0x5d
,
0xac
,
0xb8
,
0x7d
,
0x1e
,
0xa6
,
0x1a
,
0x62
,
0x1f
,
0x53
,
0x12
,
0xf4
,
0xb7
,
0x0e
,
0x2c
,
0x6e
,
0xf9
,
0x93
,
0x2e
,
0xee
,
0xb8
,
0x7d
,
0x1e
,
0x7c
,
0x34
,
0xe7
,
0x5c
,
0x0d
,
0x52
,
0x02
,
0x65
,
0x83
,
0x71
,
0xac
,
0xdd
,
0x39
,
0x43
,
0x56
,
0x4a
,
0xa6
,
0x1a
,
0x7c
,
0x34
,
0xe7
,
0x5c
,
0x0d
,
0x52
,
0x02
,
0x65
,
0x83
,
0x71
,
0xac
,
0xdd
,
0x39
,
0x43
,
0xa0
,
0x6c
,
0xef
,
0xd0
,
0x1b
,
0x1e
,
0xf0
,
0x53
,
0x49
,
0x65
,
0xc8
,
0x4a
,
0x09
,
0xfa
,
0x54
,
0x18
,
0x56
,
0x4a
,
0xa0
,
0x6c
,
0xef
,
0xd0
,
0x1b
,
0x1e
,
0xf0
,
0x53
,
0x49
,
0x65
,
0xc8
,
0x4a
,
0x09
,
0xfa
,
0xf6
,
0xd4
,
0x8f
,
0x0f
,
0xfb
,
0xa1
,
0xf7
,
0x46
,
0x19
,
0xb6
,
0x04
,
0x45
,
0xef
,
0x28
,
0x18
,
0x0f
,
0x54
,
0x18
,
0xf6
,
0xd4
,
0x8f
,
0x0f
,
0xfb
,
0xa1
,
0xf7
,
0x46
,
0x19
,
0xb6
,
0x04
,
0x45
,
0xef
,
0x28
,
0x63
,
0x81
,
0x6b
,
0x9e
,
0x29
,
0xca
,
0x70
,
0xd9
,
0xbd
,
0xd0
,
0xe5
,
0xfb
,
0x40
,
0xb6
,
0xfc
,
0x49
,
0x18
,
0x0f
,
0x63
,
0x81
,
0x6b
,
0x9e
,
0x29
,
0xca
,
0x70
,
0xd9
,
0xbd
,
0xd0
,
0xe5
,
0xfb
,
0x40
,
0xb6
,
0x43
,
0x47
,
0x4e
,
0x69
,
0x5e
,
0x35
,
0x03
,
0x36
,
0x5d
,
0x81
,
0x14
,
0xa0
,
0x7f
,
0x71
,
0xa1
,
0x8c
,
0xfc
,
0x49
,
0x43
,
0x47
,
0x4e
,
0x69
,
0x5e
,
0x35
,
0x03
,
0x36
,
0x5d
,
0x81
,
0x14
,
0xa0
,
0x7f
,
0x76
,
0x0a
,
0xe4
,
0xba
,
0x79
,
0x70
,
0x63
,
0x99
,
0x8b
,
0x05
,
0xe6
,
0xc6
,
0x27
,
0xe4
,
0x23
,
0x28
,
0xf6
,
0xa1
,
0x8c
,
0x0a
,
0xe4
,
0xba
,
0x79
,
0x70
,
0x63
,
0x99
,
0x8b
,
0x05
,
0xe6
,
0xc6
,
0x27
,
0xe4
,
0x23
,
0x44
,
0x3d
,
0x29
,
0x38
,
0x96
,
0xa6
,
0xd4
,
0x99
,
0x1f
,
0x0c
,
0x37
,
0x67
,
0x98
,
0x92
,
0x23
,
0xf7
,
0x28
,
0xf6
,
0xc4
,
0x7e
,
0x52
,
0x70
,
0x2c
,
0x4d
,
0xd9
,
0x67
,
0x7e
,
0x30
,
0xdc
,
0x9c
,
0x61
,
0x4a
,
0xa0
,
0xd4
,
0x97
,
0xf1
,
0x53
,
0xa8
,
0xbc
,
0x9b
,
0x2e
,
0xb1
,
0x02
,
0x8b
,
0x15
,
0xa5
,
0x24
,
0xc9
,
0x8e
,
0xdc
,
0x83
,
0x52
,
0x5f
,
0xc6
,
0x4f
,
0xa1
,
0xf2
,
0x6e
,
0xba
,
0xc4
,
0x0a
,
0x2c
,
0xee
,
0x28
,
0x27
,
0x30
,
0xfb
,
0x46
,
0x41
,
0x23
,
0xca
,
0x6d
,
0x6e
,
0xbd
,
0x9e
,
0xae
,
0xb2
,
0x41
,
0xdb
,
0x9c
,
0x25
,
0x49
,
0x3e
,
0x81
,
0xd9
,
0x37
,
0x0a
,
0x1a
,
0xb1
,
0xdd
,
0xe6
,
0xd6
,
0xeb
,
0xe9
,
0x2a
,
0x1b
,
0x61
,
0x89
,
0x2c
,
0xae
,
0x8b
,
0x55
,
0xac
,
0x55
,
0x1d
,
0x1a
,
0xeb
,
0xec
,
0x2c
,
0xc0
,
0x75
,
0x5a
,
0xb4
,
0xcd
,
0x19
,
0x96
,
0xc8
,
0xe2
,
0xba
,
0x58
,
0xc5
,
0x5a
,
0xed
,
0x43
,
0x63
,
0x9d
,
0x9d
,
0x05
,
0x96
,
0xfc
,
0xd0
,
0x4c
,
0xfe
,
0xa2
,
0x58
,
0x78
,
0x23
,
0x5d
,
0x98
,
0x01
,
0x13
,
0x1b
,
0x43
,
0x22
,
0xb8
,
0x4e
,
0xcb
,
0x92
,
0x1f
,
0x9a
,
0xc9
,
0x5f
,
0x14
,
0x0b
,
0x6f
,
0xa4
,
0x0b
,
0x33
,
0x60
,
0x62
,
0x9d
,
0xd6
,
0xf1
,
0x26
,
0x10
,
0xe5
,
0xcf
,
0x8e
,
0x91
,
0xf1
,
0xcb
,
0x30
,
0x3b
,
0x0c
,
0x62
,
0xbe
,
0x61
,
0x48
,
0xa4
,
0xd3
,
0x7d
,
0xbc
,
0x09
,
0x44
,
0xf9
,
0xb3
,
0x63
,
0x64
,
0xfc
,
0x32
,
0xcc
,
0x0e
,
0xe9
,
0x45
,
0x87
,
0xba
,
0x1c
,
0x35
,
0x6d
,
0x84
,
0x5b
,
0xd5
,
0xb4
,
0xa4
,
0xe8
,
0x1f
,
0x1d
,
0xb8
,
0x83
,
0x98
,
0x6f
,
0x7a
,
0xd1
,
0xa1
,
0xde
,
0x8e
,
0x9a
,
0x36
,
0xc2
,
0xad
,
0xf6
,
0xb4
,
0xa4
,
0xe8
,
0xa6
,
0x9d
,
0x34
,
0x75
,
0x51
,
0xa8
,
0xc4
,
0x21
,
0xe7
,
0x2c
,
0x08
,
0x62
,
0x43
,
0x9f
,
0xc5
,
0x23
,
0x1f
,
0x1c
,
0xb8
,
0xa6
,
0x9d
,
0x34
,
0x75
,
0x51
,
0xa8
,
0xc4
,
0x21
,
0xe7
,
0x2c
,
0x08
,
0x62
,
0x43
,
0xb7
,
0xa0
,
0x3a
,
0x1c
,
0x0f
,
0x06
,
0xfe
,
0xbe
,
0xcf
,
0x43
,
0x21
,
0x24
,
0x55
,
0xdb
,
0x4c
,
0x72
,
0x9f
,
0xc5
,
0x23
,
0xb7
,
0xa0
,
0x3a
,
0x1c
,
0x0f
,
0x06
,
0xfe
,
0xbe
,
0xcf
,
0x43
,
0x21
,
0x24
,
0x55
,
0x17
,
0x48
,
0xe2
,
0xc1
,
0xee
,
0x88
,
0x0f
,
0xfb
,
0x42
,
0x54
,
0x56
,
0xfd
,
0x94
,
0x2f
,
0x86
,
0xa5
,
0xdb
,
0x4c
,
0x72
,
0x17
,
0x48
,
0xe2
,
0xc1
,
0xee
,
0x88
,
0x0f
,
0xfb
,
0x42
,
0x54
,
0xee
,
0xfa
,
0x29
,
0x79
,
0xcb
,
0xd2
,
0x7f
,
0x38
,
0x50
,
0xd7
,
0xb0
,
0x0a
,
0x1b
,
0xdf
,
0xc2
,
0xdc
,
0xe8
,
0xd0
,
0xe7
,
0x4f
,
0x0c
,
0x4b
,
0xf3
,
0x96
,
0xa5
,
0xff
,
0x70
,
0xa0
,
0xae
,
0x61
,
0x15
,
0x36
,
0xbe
,
0x85
,
0xb9
,
0x83
,
0x7e
,
0x43
,
0x28
,
0x7c
,
0xa6
,
0xcd
,
0xb5
,
0x98
,
0x59
,
0xa9
,
0xe7
,
0xca
,
0x52
,
0x9b
,
0x79
,
0xd1
,
0xa1
,
0xcf
,
0x07
,
0xfd
,
0x86
,
0x50
,
0xf8
,
0x4c
,
0x9b
,
0x6b
,
0x31
,
0xb3
,
0x52
,
0xcf
,
0x95
,
0x86
,
0x53
,
0xf9
,
0x33
,
0x9d
,
0x3a
,
0x05
,
0x55
,
0x61
,
0x0a
,
0x54
,
0xf4
,
0xe7
,
0x0e
,
0xdc
,
0xd0
,
0xa5
,
0x36
,
0xf3
,
0x0c
,
0xa7
,
0xf2
,
0x67
,
0x3a
,
0x75
,
0x0a
,
0xaa
,
0xc2
,
0x14
,
0xa8
,
0xe8
,
0xcf
,
0x2e
,
0x6e
,
0x8b
,
0x3a
,
0xbf
,
0x6c
,
0x78
,
0xbf
,
0x41
,
0xdf
,
0xe8
,
0x5f
,
0x1d
,
0xb8
,
0x9e
,
0xa4
,
0x1d
,
0xb8
,
0xa1
,
0x5d
,
0xdc
,
0x16
,
0xfb
,
0xfc
,
0xb2
,
0xe1
,
0xfd
,
0x06
,
0x7d
,
0xa3
,
0x7f
,
0x71
,
0xe1
,
0x55
,
0x41
,
0x5e
,
0x85
,
0x05
,
0xcf
,
0x58
,
0x9b
,
0x1e
,
0xce
,
0x59
,
0x36
,
0x1a
,
0x93
,
0xb0
,
0xe0
,
0x7a
,
0x92
,
0x86
,
0x57
,
0x05
,
0x79
,
0x15
,
0x16
,
0x3c
,
0x63
,
0x6d
,
0x7a
,
0x38
,
0x67
,
0xd9
,
0x8c
,
0x94
,
0xb0
,
0x99
,
0x57
,
0x05
,
0x9a
,
0xfe
,
0x14
,
0x16
,
0xe4
,
0xa9
,
0x9a
,
0x1e
,
0x20
,
0xdf
,
0x68
,
0x4c
,
0xc2
,
0x32
,
0x52
,
0xc2
,
0x66
,
0x5e
,
0x15
,
0x68
,
0xfa
,
0x53
,
0x58
,
0x90
,
0xa7
,
0x6a
,
0x4e
,
0xfa
,
0xca
,
0xd4
,
0x01
,
0x07
,
0x5b
,
0x4d
,
0xd2
,
0xb2
,
0xdc
,
0x8b
,
0x5a
,
0xd6
,
0x4f
,
0x00
,
0x7a
,
0x80
,
0x7c
,
0x3b
,
0xa9
,
0x2b
,
0x53
,
0x1b
,
0x1c
,
0x2c
,
0x35
,
0x49
,
0xc9
,
0x72
,
0x2f
,
0x2a
,
0x5a
,
0x13
,
0x3f
,
0x8a
,
0x9f
,
0x60
,
0x1d
,
0xe2
,
0x41
,
0x96
,
0x44
,
0x50
,
0xc1
,
0x91
,
0x32
,
0xf0
,
0x59
,
0x3f
,
0x01
,
0x68
,
0x4d
,
0xfc
,
0x28
,
0x7e
,
0x82
,
0xfb
,
0x10
,
0x0f
,
0xb2
,
0x24
,
0x82
,
0x0a
,
0xe4
,
0xe2
,
0x28
,
0x2b
,
0xb4
,
0xce
,
0x32
,
0x49
,
0xd0
,
0x35
,
0xa8
,
0x3d
,
0x08
,
0x8e
,
0x8e
,
0xfc
,
0x8e
,
0x94
,
0x81
,
0x27
,
0x17
,
0x47
,
0x59
,
0xa1
,
0x75
,
0x96
,
0x49
,
0x82
,
0xae
,
0x41
,
0xed
,
0x41
,
0xb8
,
0x1b
,
0x72
,
0xfe
,
0x98
,
0x7b
,
0xc7
,
0x3c
,
0xc2
,
0x9c
,
0x1f
,
0x88
,
0xbf
,
0xc4
,
0x29
,
0x51
,
0x70
,
0x74
,
0xe4
,
0xc7
,
0xdd
,
0x90
,
0xf3
,
0xc7
,
0xdc
,
0x3b
,
0xe6
,
0x11
,
0xe6
,
0xfc
,
0x40
,
0xfc
,
0x61
,
0x8a
,
0xa2
,
0xb7
,
0x61
,
0x21
,
0x95
,
0x45
,
0x8c
,
0x23
,
0x54
,
0x1a
,
0xe2
,
0x1f
,
0x4a
,
0x52
,
0x12
,
0xa7
,
0x44
,
0x85
,
0x29
,
0x8a
,
0xde
,
0x86
,
0x85
,
0x54
,
0x16
,
0x31
,
0x8e
,
0x50
,
0x69
,
0x88
,
0x12
,
0xf4
,
0x0f
,
0x8e
,
0x29
,
0xb9
,
0x13
,
0x06
,
0xc7
,
0x5c
,
0x9c
,
0xc0
,
0x76
,
0xa8
,
0x12
,
0x1a
,
0x3f
,
0x94
,
0xa4
,
0x24
,
0xe8
,
0xef
,
0x1d
,
0x53
,
0x72
,
0x27
,
0x0c
,
0x8e
,
0xb9
,
0x38
,
0x81
,
0xed
,
0xbf
,
0x09
,
0x7f
,
0x76
,
0xc5
,
0x21
,
0x8f
,
0x93
,
0x57
,
0x42
,
0xe3
,
0xe4
,
0x34
,
0x92
,
0x6e
,
0xf7
,
0x50
,
0x25
,
0x34
,
0x3e
,
0x13
,
0xfe
,
0xec
,
0x8a
,
0x43
,
0x1e
,
0x3b
,
0xaf
,
0x84
,
0xc6
,
0xce
,
0x69
,
0xf9
,
0x44
,
0x44
,
0xa5
,
0xca
,
0x0c
,
0x8e
,
0x74
,
0xfa
,
0x48
,
0x5a
,
0x2e
,
0x22
,
0x51
,
0x65
,
0x29
,
0x24
,
0xdd
,
0xee
,
0xf3
,
0x89
,
0x88
,
0x4a
,
0x95
,
0x19
,
0x1c
,
0xe9
,
0xf4
,
0x91
,
0xb4
,
0x5c
,
0x44
,
0x03
,
0xc7
,
0x8a
,
0x43
,
0x3e
,
0x18
,
0xf1
,
0x30
,
0xaa
,
0x17
,
0x56
,
0x72
,
0xab
,
0x55
,
0xa6
,
0x49
,
0xa2
,
0xca
,
0x52
,
0x06
,
0xb6
,
0x15
,
0x87
,
0x7c
,
0x30
,
0xe2
,
0x61
,
0x54
,
0x2f
,
0xac
,
0xe4
,
0x56
,
0xda
,
0x82
,
0x39
,
0x34
,
0x4e
,
0xa0
,
0xc9
,
0x5f
,
0x5f
,
0x64
,
0xde
,
0x80
,
0x7b
,
0xfb
,
0x46
,
0x53
,
0xab
,
0x4c
,
0x93
,
0xb4
,
0x05
,
0x73
,
0x68
,
0x9c
,
0x40
,
0x93
,
0xbf
,
0xbe
,
0xc8
,
0xbc
,
0x01
,
0xf7
,
0x49
,
0x68
,
0xfa
,
0x01
,
0x54
,
0x04
,
0x72
,
0x7e
,
0x14
,
0x33
,
0x1e
,
0x8d
,
0x32
,
0xd8
,
0x95
,
0x13
,
0xf6
,
0x8d
,
0xa2
,
0x92
,
0xd0
,
0xf4
,
0x03
,
0xa8
,
0x08
,
0xe4
,
0xfc
,
0x28
,
0x66
,
0x3c
,
0x1a
,
0x65
,
0xec
,
0x1e
,
0xc3
,
0x7c
,
0x3a
,
0x10
,
0xed
,
0x78
,
0x7e
,
0x88
,
0x8e
,
0xa9
,
0xf1
,
0x24
,
0x1d
,
0x7a
,
0xb0
,
0x2b
,
0x27
,
0xd8
,
0x3d
,
0x86
,
0xf9
,
0xb4
,
0x21
,
0xda
,
0xf1
,
0xfc
,
0x10
,
0x1d
,
0x53
,
0xed
,
0x0c
,
0x0e
,
0xee
,
0x1a
,
0x61
,
0x22
,
0xa5
,
0x49
,
0x9b
,
0xd0
,
0xf4
,
0x33
,
0x98
,
0x6f
,
0x25
,
0xc3
,
0x49
,
0xda
,
0xf4
,
0x18
,
0x1c
,
0x7c
,
0x6b
,
0x84
,
0x89
,
0x94
,
0x26
,
0x6d
,
0x42
,
0xd3
,
0xcf
,
0x60
,
0xa3
,
0xd0
,
0x86
,
0xf3
,
0x53
,
0xe8
,
0x1f
,
0x9b
,
0xf3
,
0x93
,
0x24
,
0xd1
,
0xa2
,
0x91
,
0x99
,
0xfa
,
0xbe
,
0x95
,
0x34
,
0x8f
,
0x42
,
0x1b
,
0xf6
,
0x4f
,
0xa1
,
0x7f
,
0x6c
,
0xf6
,
0x4f
,
0x92
,
0x44
,
0x8b
,
0x8a
,
0xa2
,
0x3f
,
0x73
,
0x60
,
0xb1
,
0xd1
,
0xeb
,
0x61
,
0x95
,
0xed
,
0x84
,
0xfe
,
0xb1
,
0xd7
,
0x13
,
0x46
,
0x66
,
0xea
,
0x2b
,
0x8a
,
0xfe
,
0xcc
,
0x81
,
0xc5
,
0x46
,
0xaf
,
0x87
,
0xbb
,
0x6c
,
0x27
,
0xf4
,
0xd3
,
0xde
,
0xf7
,
0xad
,
0x89
,
0x4e
,
0x9e
,
0x99
,
0xef
,
0x9c
,
0x9a
,
0xe8
,
0x70
,
0x4b
,
0x73
,
0xa6
,
0x8f
,
0xbd
,
0x9e
,
0xe8
,
0xf6
,
0xbe
,
0x6f
,
0x75
,
0x74
,
0xf2
,
0xcc
,
0x7c
,
0xe7
,
0x54
,
0x47
,
0x87
,
0xc3
,
0x65
,
0xc6
,
0x7c
,
0xeb
,
0x5a
,
0xcb
,
0x6c
,
0x4b
,
0xad
,
0xb1
,
0xf7
,
0x0b
,
0x58
,
0x7c
,
0xea
,
0xaf
,
0x34
,
0x7b
,
0x3a
,
0x5c
,
0x66
,
0xf4
,
0xb7
,
0xae
,
0xb5
,
0xcc
,
0xb6
,
0xd4
,
0x6a
,
0x7b
,
0xbf
,
0x0d
,
0x06
,
0x3c
,
0x6e
,
0xf4
,
0xfb
,
0xa1
,
0xb2
,
0x82
,
0xac
,
0x4b
,
0x57
,
0xbc
,
0x9e
,
0xde
,
0x5f
,
0x80
,
0xc5
,
0xa7
,
0xde
,
0x60
,
0xc0
,
0xe3
,
0x46
,
0xbf
,
0x1f
,
0x2a
,
0x2b
,
0xc8
,
0xba
,
0x74
,
0xc5
,
0x9f
,
0x64
,
0xa7
,
0xac
,
0x65
,
0x5a
,
0x30
,
0x99
,
0xca
,
0xdd
,
0x74
,
0x2a
,
0xa7
,
0x5f
,
0x3b
,
0x00
,
0xeb
,
0xe9
,
0xf7
,
0xeb
,
0x93
,
0xec
,
0x94
,
0xb5
,
0x4c
,
0x0b
,
0x26
,
0x5d
,
0xb9
,
0x9b
,
0x76
,
0xe5
,
0x72
,
0xb6
,
0x6a
,
0x7a
,
0xb1
,
0x97
,
0x1d
,
0xd2
,
0x9d
,
0xd3
,
0x43
,
0xfa
,
0x7b
,
0x50
,
0x96
,
0x43
,
0xf4
,
0x6b
,
0x07
,
0x40
,
0xf6
,
0x56
,
0x4d
,
0x2f
,
0xf6
,
0xb2
,
0x4d
,
0xba
,
0x73
,
0xba
,
0x49
,
0x7f
,
0x61
,
0x0a
,
0x56
,
0xca
,
0xc0
,
0x7e
,
0x93
,
0x54
,
0x78
,
0x3a
,
0xc4
,
0x5b
,
0xbc
,
0xb3
,
0x4e
,
0x0b
,
0x0f
,
0xca
,
0xb2
,
0x29
,
0x4c
,
0xc1
,
0x4a
,
0x19
,
0x58
,
0x6f
,
0x92
,
0x1d
,
0x9e
,
0x36
,
0xf1
,
0x16
,
0x8c
,
0x35
,
0x36
,
0x47
,
0xe6
,
0x0d
,
0xfb
,
0xc1
,
0x91
,
0xea
,
0xb6
,
0x06
,
0x87
,
0xb6
,
0x60
,
0x51
,
0xef
,
0xac
,
0xd3
,
0x02
,
0x63
,
0x8d
,
0xc5
,
0x91
,
0x79
,
0xc3
,
0x7e
,
0x70
,
0xa4
,
0xaa
,
0xad
,
0xc1
,
0xa1
,
0x64
,
0x18
,
0x9c
,
0x0e
,
0xbe
,
0x8e
,
0x39
,
0xf8
,
0x9a
,
0xa3
,
0xb2
,
0x6b
,
0x8d
,
0xca
,
0xf4
,
0xa1
,
0x2d
,
0x58
,
0x54
,
0x28
,
0x19
,
0x06
,
0xa7
,
0x8d
,
0xaf
,
0x63
,
0x36
,
0xbe
,
0x66
,
0xab
,
0xec
,
0x4b
,
0x58
,
0x6c
,
0xf2
,
0xcb
,
0xaa
,
0xc1
,
0xbc
,
0x08
,
0x7d
,
0x33
,
0x2f
,
0x04
,
0x65
,
0xaa
,
0xcf
,
0x5a
,
0xad
,
0x32
,
0xfd
,
0x12
,
0x16
,
0x9b
,
0xfc
,
0xb2
,
0x6a
,
0x30
,
0x2f
,
0x42
,
0xdf
,
0xcc
,
0x0b
,
0xd9
,
0xea
,
0x7f
,
0xe3
,
0xc0
,
0x9c
,
0x3a
,
0xe8
,
0x45
,
0x2b
,
0xbb
,
0x05
,
0x55
,
0x0d
,
0x1f
,
0xc6
,
0x41
,
0x99
,
0xea
,
0x73
,
0xb6
,
0xfa
,
0xdf
,
0x38
,
0x30
,
0xa7
,
0x0e
,
0x7a
,
0x51
,
0xca
,
0x6e
,
0x41
,
0x2f
,
0x52
,
0x1b
,
0xd8
,
0x4c
,
0x99
,
0xe7
,
0x08
,
0x62
,
0x23
,
0x0d
,
0x90
,
0xc1
,
0xb1
,
0x3a
,
0xaf
,
0x55
,
0xc3
,
0x87
,
0xf1
,
0x8b
,
0xd4
,
0x0b
,
0x6c
,
0xa6
,
0xcc
,
0x73
,
0x04
,
0xb1
,
0x91
,
0x06
,
0xc8
,
0x10
,
0xc9
,
0x76
,
0x5e
,
0x21
,
0x55
,
0x87
,
0x92
,
0xc4
,
0x32
,
0x52
,
0xd0
,
0x6a
,
0x92
,
0x76
,
0xa1
,
0xe0
,
0x58
,
0x95
,
0x57
,
0x88
,
0x64
,
0x2b
,
0xaf
,
0x90
,
0xaa
,
0x43
,
0x49
,
0x62
,
0x19
,
0x29
,
0x68
,
0xa2
,
0x8c
,
0xea
,
0x4e
,
0xb0
,
0x92
,
0xbf
,
0x9b
,
0x8e
,
0x5d
,
0xf6
,
0xc8
,
0x67
,
0x98
,
0x9e
,
0xce
,
0x35
,
0x49
,
0xbb
,
0x50
,
0x51
,
0x46
,
0x75
,
0x27
,
0xb8
,
0x93
,
0xbf
,
0x9b
,
0xb6
,
0x5d
,
0x76
,
0xcb
,
0x5b
,
0x4b
,
0x50
,
0xfc
,
0xea
,
0xd5
,
0x8e
,
0x17
,
0xeb
,
0xca
,
0x56
,
0x14
,
0xfd
,
0xa5
,
0x03
,
0x35
,
0x67
,
0x98
,
0x9e
,
0xf6
,
0x5b
,
0x4b
,
0x50
,
0xfc
,
0xea
,
0xd5
,
0x8e
,
0x17
,
0xeb
,
0x9d
,
0xad
,
0x28
,
0x3d
,
0xd4
,
0x60
,
0xb3
,
0x11
,
0xc5
,
0x7d
,
0xde
,
0x99
,
0x77
,
0xdb
,
0x6e
,
0xda
,
0xba
,
0xb5
,
0xa7
,
0xfa
,
0x4b
,
0x07
,
0x6a
,
0xba
,
0xa9
,
0xc1
,
0x62
,
0x23
,
0x36
,
0xf7
,
0x79
,
0x67
,
0xde
,
0x6d
,
0xbb
,
0x81
,
0xd0
,
0x77
,
0x85
,
0xab
,
0xde
,
0x04
,
0x7c
,
0xa8
,
0x8a
,
0x2e
,
0xea
,
0xc5
,
0x87
,
0xc2
,
0x92
,
0x68
,
0xeb
,
0xd2
,
0x9e
,
0x06
,
0x42
,
0xdf
,
0x15
,
0xae
,
0x7a
,
0x13
,
0xf0
,
0xa1
,
0x2a
,
0xaa
,
0xa8
,
0x4b
,
0x1d
,
0x7c
,
0xcb
,
0x38
,
0x0e
,
0xca
,
0x45
,
0xba
,
0xa3
,
0x6a
,
0xda
,
0xec
,
0x89
,
0x39
,
0xbb
,
0x17
,
0x1f
,
0x0a
,
0x4b
,
0x2e
,
0x75
,
0xf0
,
0x2d
,
0x63
,
0x3b
,
0x28
,
0x17
,
0xe9
,
0x8a
,
0xaa
,
0x69
,
0x27
,
0x1e
,
0x40
,
0x55
,
0x4f
,
0x5f
,
0x12
,
0xcb
,
0x15
,
0x98
,
0x8b
,
0x83
,
0xd8
,
0x1b
,
0x34
,
0xcc
,
0xb3
,
0x26
,
0xe6
,
0xec
,
0x9a
,
0x78
,
0x00
,
0x55
,
0xdd
,
0x7d
,
0x49
,
0x2c
,
0x57
,
0x60
,
0x2e
,
0x0e
,
0xd9
,
0xdc
,
0x64
,
0x89
,
0xf6
,
0xab
,
0x20
,
0x88
,
0x74
,
0xcd
,
0x24
,
0x0c
,
0x03
,
0xdd
,
0x9c
,
0x85
,
0x62
,
0x6f
,
0xd0
,
0x30
,
0x7b
,
0x73
,
0x93
,
0x25
,
0xca
,
0xaf
,
0x82
,
0x20
,
0xd2
,
0x7b
,
0x26
,
0x61
,
0xee
,
0xdf
,
0x5c
,
0x58
,
0x48
,
0xe6
,
0x3c
,
0x09
,
0x2f
,
0xf9
,
0xd0
,
0xca
,
0xd3
,
0xa9
,
0x08
,
0xea
,
0x18
,
0xe8
,
0xe6
,
0x2c
,
0x74
,
0xff
,
0xe6
,
0xc2
,
0x42
,
0xd2
,
0xe7
,
0x49
,
0x78
,
0xc9
,
0x87
,
0x56
,
0xd4
,
0xfd
,
0xef
,
0x8c
,
0x7a
,
0x66
,
0x74
,
0xf3
,
0x99
,
0xe8
,
0x52
,
0xa8
,
0x88
,
0xe6
,
0xbb
,
0xa3
,
0x9e
,
0x4e
,
0x45
,
0x50
,
0xa7
,
0xee
,
0x7f
,
0xa7
,
0xd5
,
0x33
,
0xa3
,
0x9b
,
0xcf
,
0x44
,
0x97
,
0x42
,
0x7a
,
0xac
,
0x2c
,
0x61
,
0x8b
,
0x87
,
0x50
,
0x08
,
0x7a
,
0x63
,
0xe0
,
0x1d
,
0x88
,
0x51
,
0xba
,
0xcc
,
0x45
,
0x14
,
0xdf
,
0x1d
,
0x55
,
0x63
,
0xe5
,
0x16
,
0xb6
,
0x78
,
0x08
,
0x85
,
0xa0
,
0x37
,
0x06
,
0xde
,
0x52
,
0x86
,
0x95
,
0xe6
,
0x42
,
0xa2
,
0x94
,
0x49
,
0x73
,
0x21
,
0xb5
,
0x0e
,
0xe5
,
0x58
,
0x1e
,
0x99
,
0x81
,
0x68
,
0xa5
,
0xcb
,
0x2c
,
0x65
,
0x58
,
0x69
,
0x2e
,
0x24
,
0x4a
,
0x99
,
0x34
,
0x17
,
0x52
,
0xeb
,
0xc1
,
0x7e
,
0x7d
,
0xd6
,
0x4a
,
0x0f
,
0x2b
,
0x09
,
0x58
,
0x2a
,
0x46
,
0x7d
,
0x28
,
0xe3
,
0x80
,
0x24
,
0x50
,
0x8e
,
0xe5
,
0x91
,
0x19
,
0xec
,
0xd7
,
0x67
,
0xad
,
0xf4
,
0xb0
,
0x92
,
0x80
,
0xa5
,
0x62
,
0xd4
,
0x23
,
0x76
,
0x5e
,
0x8a
,
0x9a
,
0xd3
,
0x50
,
0x37
,
0x30
,
0x6a
,
0x2d
,
0xcb
,
0x36
,
0xe2
,
0x96
,
0xb7
,
0x87
,
0x32
,
0x36
,
0x48
,
0x32
,
0x62
,
0xe7
,
0xa5
,
0xa8
,
0xd9
,
0x0d
,
0x75
,
0x03
,
0x63
,
0xaf
,
0x65
,
0xe2
,
0xf6
,
0x27
,
0x17
,
0xe6
,
0x70
,
0x2f
,
0x1d
,
0xb3
,
0xdb
,
0xf6
,
0xe5
,
0xea
,
0xec
,
0xa4
,
0xbf
,
0xd9
,
0x46
,
0xdc
,
0xf2
,
0x56
,
0xdc
,
0xfe
,
0xe8
,
0xc2
,
0x1c
,
0xbe
,
0x4b
,
0xc7
,
0xec
,
0xb6
,
0x7d
,
0x09
,
0x80
,
0x7b
,
0x58
,
0x33
,
0x98
,
0xc1
,
0xc1
,
0x44
,
0x13
,
0x94
,
0x82
,
0x57
,
0x9a
,
0x65
,
0xb2
,
0xb9
,
0x3a
,
0x3b
,
0xe9
,
0x6f
,
0x02
,
0xe0
,
0x3b
,
0xac
,
0x1e
,
0xcc
,
0xe0
,
0x60
,
0xa2
,
0x09
,
0x4a
,
0xd0
,
0x31
,
0x24
,
0xcd
,
0xe8
,
0x68
,
0xfa
,
0x8c
,
0x48
,
0x17
,
0x2e
,
0x15
,
0xe9
,
0x62
,
0x06
,
0x24
,
0xc1
,
0x2b
,
0xcd
,
0x32
,
0x59
,
0xe8
,
0x18
,
0x92
,
0x66
,
0x74
,
0x34
,
0x7d
,
0x46
,
0xa4
,
0x0b
,
0x97
,
0x2b
,
0x8a
,
0xa5
,
0x6c
,
0x14
,
0xdf
,
0x26
,
0x3e
,
0x9f
,
0x03
,
0xb1
,
0x6e
,
0x0a
,
0x32
,
0x50
,
0x56
,
0x8a
,
0x74
,
0x31
,
0x03
,
0x92
,
0x15
,
0xc5
,
0x52
,
0x36
,
0x8a
,
0x6f
,
0x13
,
0x9f
,
0xcf
,
0x81
,
0x58
,
0xe1
,
0x38
,
0x67
,
0x17
,
0x8e
,
0xdd
,
0x96
,
0xbe
,
0x80
,
0x6b
,
0xf6
,
0x48
,
0xfe
,
0x4d
,
0xf6
,
0xbc
,
0x37
,
0x05
,
0x19
,
0x28
,
0x6b
,
0xe3
,
0x38
,
0x67
,
0x6f
,
0x1c
,
0xbb
,
0x2c
,
0x7d
,
0x01
,
0xd7
,
0xec
,
0x18
,
0x3b
,
0x8d
,
0x54
,
0x2e
,
0xd5
,
0x7e
,
0x0f
,
0x0a
,
0xe2
,
0x31
,
0x40
,
0x29
,
0xbd
,
0x91
,
0x78
,
0x96
,
0xfc
,
0x9b
,
0xac
,
0x79
,
0x31
,
0x56
,
0x1a
,
0xa9
,
0x5c
,
0xaa
,
0xfd
,
0x1e
,
0x14
,
0xc4
,
0x30
,
0x9a
,
0xf5
,
0x86
,
0x49
,
0x39
,
0xb2
,
0x9e
,
0x79
,
0x33
,
0x58
,
0xce
,
0xac
,
0x30
,
0x6c
,
0xd6
,
0x6f
,
0x40
,
0x29
,
0xbd
,
0x91
,
0x78
,
0x9a
,
0xf5
,
0x86
,
0x49
,
0x39
,
0xb2
,
0x9e
,
0x99
,
0x19
,
0x2c
,
0x67
,
0x07
,
0x74
,
0x0d
,
0x2a
,
0xbb
,
0xc6
,
0xc4
,
0x4f
,
0x2a
,
0xe0
,
0x3c
,
0x53
,
0x80
,
0x38
,
0xcf
,
0x90
,
0x56
,
0x18
,
0x36
,
0xeb
,
0xd9
,
0x01
,
0x5d
,
0x83
,
0xca
,
0xae
,
0xd1
,
0xf1
,
0x93
,
0x0a
,
0x38
,
0xcf
,
0x7a
,
0xae
,
0xcc
,
0x74
,
0x9e
,
0xd3
,
0xaf
,
0x73
,
0x19
,
0x2c
,
0x65
,
0x47
,
0xbc
,
0x74
,
0x1a
,
0xfe
,
0x14
,
0x20
,
0xce
,
0x33
,
0xa4
,
0x9e
,
0x2b
,
0x33
,
0x9d
,
0xe7
,
0xf4
,
0xeb
,
0x5c
,
0x06
,
0x4b
,
0x59
,
0xbf
,
0x71
,
0x18
,
0x89
,
0x49
,
0x7e
,
0x00
,
0x15
,
0xf3
,
0xae
,
0x55
,
0x2f
,
0x8b
,
0x65
,
0xfa
,
0x01
,
0x11
,
0x2f
,
0x9d
,
0x86
,
0xff
,
0x2f
,
0x1c
,
0x46
,
0x62
,
0x92
,
0x1f
,
0x40
,
0xc5
,
0xbc
,
0x6b
,
0xd5
,
0xd1
,
0x0c
,
0x0a
,
0xb3
,
0x04
,
0xc5
,
0x28
,
0x24
,
0xf9
,
0x72
,
0xa0
,
0x01
,
0x35
,
0x0a
,
0x19
,
0x3c
,
0xcb
,
0x62
,
0x99
,
0x1e
,
0x20
,
0x9a
,
0x41
,
0x61
,
0x96
,
0xa0
,
0x68
,
0x85
,
0x24
,
0x5f
,
0x36
,
0x34
,
0xfa
,
0x4f
,
0x27
,
0x9b
,
0xaa
,
0x57
,
0x8c
,
0x95
,
0x89
,
0xaa
,
0x9b
,
0x41
,
0xf5
,
0x8a
,
0x67
,
0xe8
,
0xa0
,
0x5a
,
0x21
,
0x83
,
0x47
,
0xff
,
0xe9
,
0x64
,
0x53
,
0xf5
,
0x8a
,
0xb1
,
0x32
,
0x51
,
0x75
,
0x33
,
0x29
,
0x4f
,
0xf3
,
0x6f
,
0xeb
,
0x69
,
0x61
,
0x8a
,
0xa7
,
0x7f
,
0x77
,
0x60
,
0x51
,
0x7b
,
0x9a
,
0xce
,
0xa8
,
0x5e
,
0xf1
,
0x0c
,
0x3d
,
0xe5
,
0x69
,
0xfe
,
0x6d
,
0x3d
,
0x2d
,
0x4c
,
0xf1
,
0xf4
,
0xef
,
0x0e
,
0x0a
,
0x3f
,
0x86
,
0x6a
,
0x6c
,
0x66
,
0xea
,
0x79
,
0x35
,
0x24
,
0x57
,
0xd9
,
0xf2
,
0xe4
,
0x3e
,
0x54
,
0x2c
,
0x6a
,
0x4f
,
0xd3
,
0x5e
,
0xe1
,
0xc7
,
0x50
,
0x8d
,
0xcd
,
0x4c
,
0x3d
,
0x6f
,
0x0f
,
0xc9
,
0x55
,
0x62
,
0x2f
,
0x3c
,
0xe0
,
0xf1
,
0xf6
,
0xc5
,
0x15
,
0x25
,
0x15
,
0x58
,
0xf2
,
0xb8
,
0x5e
,
0xbe
,
0xb8
,
0xb6
,
0x3c
,
0xb9
,
0x0f
,
0x95
,
0xd8
,
0x0b
,
0x0f
,
0x78
,
0xbc
,
0x7d
,
0xf1
,
0x8e
,
0x92
,
0x0a
,
0x2c
,
0xa9
,
0xf5
,
0xb9
,
0x8b
,
0xd7
,
0x9b
,
0xf2
,
0xf4
,
0x17
,
0x2e
,
0x2c
,
0x58
,
0xc8
,
0x44
,
0x02
,
0x0e
,
0x79
,
0x5c
,
0x2f
,
0x27
,
0x6e
,
0x6a
,
0x7d
,
0xee
,
0xe2
,
0xf5
,
0xa6
,
0x3c
,
0xfd
,
0x85
,
0x0b
,
0x0b
,
0x51
,
0xe8
,
0xd2
,
0x73
,
0x7d
,
0xc7
,
0xb1
,
0x78
,
0x28
,
0x23
,
0x2b
,
0x5b
,
0x41
,
0x26
,
0x63
,
0x67
,
0x16
,
0x32
,
0x91
,
0x80
,
0x43
,
0x6c
,
0x74
,
0xe9
,
0xb9
,
0xbe
,
0xe3
,
0x58
,
0x3c
,
0x94
,
0x91
,
0x3b
,
0xf1
,
0x50
,
0x46
,
0xee
,
0xa5
,
0x64
,
0xd4
,
0x2c
,
0x6d
,
0xf2
,
0xc8
,
0x9d
,
0xe4
,
0xad
,
0x32
,
0x2f
,
0x5b
,
0x41
,
0x26
,
0x63
,
0x67
,
0xf1
,
0x50
,
0x46
,
0xbe
,
0x4b
,
0xc9
,
0xa8
,
0x5e
,
0xda
,
0xe4
,
0x91
,
0x9e
,
0xfe
,
0xa6
,
0x46
,
0x4b
,
0x3f
,
0x56
,
0xde
,
0x49
,
0x1a
,
0x4f
,
0xe1
,
0xec
,
0xd0
,
0xea
,
0xd7
,
0x3b
,
0xc9
,
0xac
,
0x32
,
0x2f
,
0x46
,
0x7f
,
0x53
,
0xa3
,
0xa5
,
0x87
,
0x95
,
0x77
,
0x92
,
0xc2
,
0x53
,
0xca
,
0x3b
,
0xc9
,
0x6b
,
0x65
,
0xf1
,
0x1c
,
0x61
,
0xf5
,
0x5c
,
0xf9
,
0x5b
,
0x07
,
0xe6
,
0x1f
,
0x84
,
0x38
,
0x3b
,
0xb4
,
0x7a
,
0x5a
,
0x79
,
0x27
,
0x99
,
0x56
,
0x16
,
0xcf
,
0x11
,
0x56
,
0xe3
,
0xca
,
0xbf
,
0xdc
,
0xc3
,
0x59
,
0xfd
,
0x4d
,
0x72
,
0xc6
,
0xca
,
0x1f
,
0x31
,
0xba
,
0xfa
,
0x81
,
0x30
,
0xa1
,
0xf1
,
0x3a
,
0x30
,
0xff
,
0x20
,
0xe4
,
0x1e
,
0xf6
,
0xea
,
0x6f
,
0x92
,
0x33
,
0x56
,
0x7e
,
0xc4
,
0xe8
,
0xea
,
0x22
,
0x22
,
0x7e
,
0x74
,
0xc0
,
0x0c
,
0xab
,
0xc8
,
0x1f
,
0x18
,
0xc4
,
0x03
,
0x73
,
0x14
,
0xf1
,
0xb8
,
0x01
,
0x61
,
0x42
,
0xe3
,
0x45
,
0x44
,
0x7c
,
0x74
,
0xc0
,
0x0c
,
0xab
,
0xc8
,
0x0f
,
0x0c
,
0x62
,
0xc0
,
0x35
,
0xe1
,
0x3d
,
0x3d
,
0x23
,
0x25
,
0x0c
,
0x71
,
0x34
,
0x22
,
0xd1
,
0x0d
,
0x5e
,
0xf1
,
0xa1
,
0xfe
,
0x1c
,
0x45
,
0x3c
,
0x6e
,
0x4d
,
0x78
,
0x4f
,
0xf7
,
0x48
,
0x09
,
0x43
,
0x1c
,
0x8d
,
0x48
,
0x74
,
0x83
,
0x69
,
0x20
,
0xe5
,
0xe0
,
0x15
,
0x3b
,
0xf6
,
0xe3
,
0x01
,
0x57
,
0x9d
,
0x41
,
0x12
,
0xf4
,
0x89
,
0x79
,
0x57
,
0x7c
,
0xa8
,
0x3f
,
0x0d
,
0xa4
,
0x1c
,
0xbc
,
0x62
,
0xc7
,
0x7e
,
0x3c
,
0xe0
,
0xaa
,
0x32
,
0x48
,
0x9f
,
0x8c
,
0xd0
,
0xaa
,
0xb3
,
0x6f
,
0x80
,
0x53
,
0x2e
,
0x47
,
0x78
,
0x06
,
0xf4
,
0x79
,
0xec
,
0xf9
,
0x42
,
0xdf
,
0xf7
,
0xf0
,
0x92
,
0x54
,
0x12
,
0x26
,
0x24
,
0x57
,
0xa1
,
0x25
,
0x28
,
0xca
,
0xe1
,
0xbd
,
0x03
,
0xb1
,
0x63
,
0x81
,
0x29
,
0x8a
,
0xfe
,
0xda
,
0x85
,
0x79
,
0x79
,
0x25
,
0xeb
,
0x04
,
0xb1
,
0xb8
,
0x28
,
0x03
,
0x05
,
0xa6
,
0x28
,
0xfa
,
0xc4
,
0xbc
,
0x81
,
0x46
,
0xe8
,
0xc7
,
0xd9
,
0x77
,
0xc6
,
0x29
,
0x1d
,
0x9f
,
0x3b
,
0x52
,
0x58
,
0x4f
,
0x0e
,
0x6e
,
0xf6
,
0xc9
,
0xe1
,
0xaa
,
0x8d
,
0xf4
,
0xd4
,
0x23
,
0xd7
,
0x29
,
0xd4
,
0xdb
,
0xe7
,
0xb1
,
0xe7
,
0x0f
,
0x84
,
0x8d
,
0x05
,
0xa6
,
0x28
,
0xfa
,
0x6b
,
0x17
,
0x4c
,
0x7e
,
0xda
,
0x23
,
0x0c
,
0x5e
,
0x05
,
0xe4
,
0x4d
,
0x50
,
0x95
,
0xa3
,
0x26
,
0xc5
,
0x08
,
0x19
,
0xe6
,
0xe5
,
0x25
,
0xae
,
0x13
,
0xc4
,
0xe2
,
0x3e
,
0x7d
,
0x6e
,
0x13
,
0x62
,
0x0d
,
0x29
,
0xdc
,
0xec
,
0x7b
,
0xf1
,
0x38
,
0x12
,
0x58
,
0xa5
,
0xef
,
0x2b
,
0xe8
,
0xca
,
0xae
,
0xf8
,
0xc0
,
0x94
,
0x80
,
0x31
,
0x90
,
0xe2
,
0xaa
,
0xa5
,
0xf7
,
0xd4
,
0xd8
,
0x26
,
0x3f
,
0x6d
,
0x6c
,
0x83
,
0x97
,
0x07
,
0x79
,
0x77
,
0x6d
,
0x96
,
0x2e
,
0x98
,
0x36
,
0xe9
,
0x13
,
0x58
,
0x90
,
0x88
,
0x34
,
0x5f
,
0x6e
,
0xf9
,
0x13
,
0x01
,
0x54
,
0x1b
,
0x58
,
0x93
,
0xa2
,
0xe9
,
0x8c
,
0xbd
,
0x78
,
0x1c
,
0x09
,
0x74
,
0xd3
,
0x89
,
0x0c
,
0xba
,
0xc9
,
0x87
,
0x90
,
0xf7
,
0x87
,
0xfb
,
0x41
,
0xe6
,
0x7e
,
0x6c
,
0xe3
,
0xc6
,
0x84
,
0x08
,
0x5a
,
0x1b
,
0xb2
,
0x2b
,
0x1e
,
0x30
,
0x25
,
0x60
,
0xf4
,
0xa7
,
0xa5
,
0x0b
,
0xfa
,
0x53
,
0xfa
,
0x04
,
0x16
,
0x24
,
0x4f
,
0xe4
,
0xe3
,
0x85
,
0xba
,
0xad
,
0x29
,
0x92
,
0xfe
,
0xca
,
0xd5
,
0xb7
,
0x5f
,
0xa1
,
0xb6
,
0xcf
,
0x22
,
0xcd
,
0x97
,
0x5b
,
0xfe
,
0x44
,
0x40
,
0xf2
,
0x21
,
0xe4
,
0xfd
,
0xe1
,
0x7e
,
0x90
,
0xb9
,
0x51
,
0x2f
,
0x1c
,
0xe0
,
0xfe
,
0xb7
,
0xd0
,
0x5e
,
0xb2
,
0xd0
,
0x2e
,
0x24
,
0xd0
,
0x5e
,
0x87
,
0x82
,
0x94
,
0xdb
,
0xb8
,
0x31
,
0x21
,
0x82
,
0xd6
,
0xc6
,
0x13
,
0x39
,
0xee
,
0x50
,
0xf7
,
0x3b
,
0x45
,
0xd2
,
0x5f
,
0x2f
,
0x09
,
0xb6
,
0x24
,
0xd0
,
0xf6
,
0xbe
,
0x1f
,
0x72
,
0xf9
,
0x53
,
0xd5
,
0xac
,
0xf8
,
0x92
,
0x32
,
0xb9
,
0xfa
,
0xbe
,
0x2c
,
0xd4
,
0xf6
,
0xf9
,
0x85
,
0x2d
,
0xdf
,
0xff
,
0x16
,
0xda
,
0x4b
,
0x16
,
0xda
,
0xe8
,
0xa7
,
0x66
,
0xd6
,
0x89
,
0xfe
,
0x79
,
0x07
,
0x0a
,
0xe8
,
0xb7
,
0xfe
,
0xa5
,
0xe2
,
0x0c
,
0x8c
,
0x85
,
0x04
,
0xda
,
0xeb
,
0x50
,
0x90
,
0xf2
,
0x32
,
0x95
,
0x25
,
0x81
,
0xb6
,
0xf7
,
0xfd
,
0x90
,
0xcb
,
0xa5
,
0x0c
,
0x65
,
0xb0
,
0x24
,
0x3f
,
0xb4
,
0x86
,
0xde
,
0xcb
,
0x01
,
0x57
,
0x2f
,
0x04
,
0xd8
,
0xb1
,
0x8f
,
0x5b
,
0x32
,
0x97
,
0x53
,
0x06
,
0xfd
,
0xd4
,
0xcc
,
0x3a
,
0x51
,
0x71
,
0xef
,
0x40
,
0x01
,
0xfd
,
0xa6
,
0xfd
,
0x5c
,
0x47
,
0x20
,
0xef
,
0x47
,
0xdb
,
0x8f
,
0xd4
,
0x43
,
0x98
,
0xf8
,
0x9b
,
0xd4
,
0x20
,
0xd6
,
0xdf
,
0x36
,
0xce
,
0xc0
,
0x58
,
0xca
,
0x50
,
0x06
,
0x4b
,
0xf2
,
0x41
,
0x6b
,
0xe8
,
0xbd
,
0x1c
,
0x77
,
0x14
,
0x1d
,
0x28
,
0xb4
,
0xf0
,
0x4f
,
0xda
,
0x81
,
0x77
,
0xa7
,
0xe9
,
0x44
,
0xdb
,
0xee
,
0x41
,
0x70
,
0x35
,
0x53
,
0xc0
,
0x1a
,
0x37
,
0xed
,
0x03
,
0x1f
,
0x81
,
0xbc
,
0x1f
,
0x6d
,
0x3f
,
0x52
,
0xa3
,
0x21
,
0xe4
,
0xd1
,
0x48
,
0xdb
,
0xf6
,
0x2d
,
0xcb
,
0xb6
,
0xac
,
0x09
,
0x4c
,
0xca
,
0xd2
,
0x0e
,
0xc0
,
0x33
,
0xf1
,
0x9b
,
0xd4
,
0x20
,
0x77
,
0x14
,
0x1d
,
0x28
,
0xb4
,
0xf0
,
0x27
,
0xed
,
0xc0
,
0xbb
,
0xd3
,
0xe3
,
0xa0
,
0xe7
,
0x0d
,
0xb6
,
0xfc
,
0x49
,
0x77
,
0x82
,
0x36
,
0x1c
,
0xa6
,
0x21
,
0x16
,
0x7f
,
0x23
,
0x74
,
0xa2
,
0x6d
,
0xf7
,
0xa0
,
0x10
,
0xf2
,
0x68
,
0xa4
,
0x6d
,
0xfb
,
0x96
,
0x65
,
0x5b
,
0xd6
,
0x04
,
0xa0
,
0x87
,
0xdc
,
0x3f
,
0x38
,
0x94
,
0xbd
,
0x3e
,
0xc7
,
0x14
,
0x85
,
0x80
,
0xfa
,
0xc9
,
0xeb
,
0x57
,
0x26
,
0x65
,
0x69
,
0x07
,
0xe0
,
0x71
,
0xd0
,
0xf3
,
0x06
,
0x5b
,
0xfe
,
0xa4
,
0x3b
,
0x41
,
0x1b
,
0x0e
,
0x8e
,
0x49
,
0x82
,
0xfe
,
0xde
,
0x81
,
0x8a
,
0xd0
,
0x25
,
0xdf
,
0x9e
,
0x5e
,
0x9b
,
0x99
,
0xe6
,
0x58
,
0xd3
,
0x10
,
0x8b
,
0xdf
,
0x08
,
0xe8
,
0x21
,
0xf7
,
0x0f
,
0x0e
,
0xe5
,
0xe9
,
0x90
,
0x63
,
0x8a
,
0x42
,
0x99
,
0x96
,
0x6c
,
0xe6
,
0x4e
,
0xdd
,
0x2c
,
0x37
,
0x7d
,
0xb3
,
0xbc
,
0xb1
,
0x59
,
0x1a
,
0xd3
,
0xc2
,
0x40
,
0xfd
,
0x64
,
0x5e
,
0x96
,
0x63
,
0x92
,
0xa0
,
0xbf
,
0x73
,
0xa0
,
0x22
,
0x74
,
0xc9
,
0x69
,
0xd5
,
0x99
,
0x31
,
0x2d
,
0x66
,
0x63
,
0xfa
,
0x31
,
0x54
,
0x0d
,
0xfb
,
0xa2
,
0x11
,
0x79
,
0x1f
,
0x72
,
0xf1
,
0x6b
,
0x33
,
0xd3
,
0x1c
,
0x2b
,
0xd3
,
0x92
,
0x97
,
0xb9
,
0x53
,
0x5f
,
0x96
,
0x9b
,
0xfe
,
0xb2
,
0xbc
,
0x44
,
0x83
,
0xa6
,
0x0b
,
0x2e
,
0xc5
,
0x84
,
0xe1
,
0x57
,
0xba
,
0x05
,
0x8b
,
0x0a
,
0x3b
,
0xbc
,
0x89
,
0xf1
,
0xb2
,
0x34
,
0xa6
,
0x85
,
0x33
,
0x63
,
0x5a
,
0xcc
,
0xc6
,
0xf4
,
0x63
,
0xa8
,
0x1a
,
0xf6
,
0x45
,
0x30
,
0x1e
,
0x8d
,
0x07
,
0xff
,
0x49
,
0x14
,
0xdb
,
0x70
,
0x8d
,
0xf1
,
0xd7
,
0xa7
,
0xd2
,
0x62
,
0x1d
,
0x23
,
0xf2
,
0x3e
,
0xe4
,
0xe2
,
0x89
,
0x06
,
0x4d
,
0x6f
,
0xb8
,
0x14
,
0x13
,
0x86
,
0x4f
,
0xe9
,
0x16
,
0x4a
,
0xa1
,
0x50
,
0xad
,
0xcd
,
0xd1
,
0x6f
,
0x4c
,
0xa7
,
0xf6
,
0x66
,
0x5a
,
0x70
,
0xed
,
0x4b
,
0x80
,
0x2c
,
0x2a
,
0xec
,
0xf0
,
0xee
,
0xc2
,
0x78
,
0x34
,
0x1e
,
0xfc
,
0x27
,
0x51
,
0x6c
,
0xc3
,
0x35
,
0xc6
,
0xf4
,
0xa1
,
0x96
,
0xcc
,
0x41
,
0xa9
,
0xd9
,
0xda
,
0xd9
,
0xde
,
0x6d
,
0x77
,
0x6b
,
0x33
,
0xa4
,
0x02
,
0x5f
,
0x9f
,
0x4a
,
0x8b
,
0x75
,
0x28
,
0x85
,
0x42
,
0xb5
,
0x36
,
0x47
,
0x4f
,
0xa5
,
0x4e
,
0xbd
,
0x9b
,
0xb3
,
0x4f
,
0xdb
,
0xdd
,
0xcd
,
0x26
,
0x6b
,
0x3c
,
0xad
,
0x39
,
0x64
,
0x11
,
0xaa
,
0x5d
,
0xd6
,
0xe8
,
0x69
,
0xc1
,
0xb5
,
0x2f
,
0x01
,
0xd2
,
0xd1
,
0x2e
,
0x99
,
0x83
,
0x52
,
0xb3
,
0xb5
,
0xb3
,
0xbd
,
0xdb
,
0xec
,
0x6e
,
0xb4
,
0x58
,
0xbb
,
0xb3
,
0xb3
,
0xd7
,
0xad
,
0xb9
,
0x84
,
0xc0
,
0xbc
,
0x66
,
0x6d
,
0xef
,
0xee
,
0xd6
,
0x66
,
0x48
,
0x05
,
0x66
,
0x9f
,
0xb6
,
0xbb
,
0x9b
,
0x4d
,
0xd6
,
0x78
,
0x5a
,
0x73
,
0xc8
,
0x75
,
0x91
,
0x97
,
0x23
,
0x55
,
0x28
,
0x37
,
0xf6
,
0xba
,
0x9b
,
0xdb
,
0xac
,
0xfd
,
0xa2
,
0x55
,
0xcb
,
0x22
,
0x54
,
0xbb
,
0xac
,
0xd1
,
0xd9
,
0xdd
,
0x68
,
0xb1
,
0x76
,
0x67
,
0x67
,
0xaf
,
0x5b
,
0x73
,
0x09
,
0xaf
,
0xad
,
0x0b
,
0xb8
,
0xd2
,
0x5f
,
0x77
,
0x09
,
0x40
,
0x51
,
0xee
,
0x57
,
0x9b
,
0x21
,
0xb3
,
0x90
,
0x81
,
0x79
,
0xcd
,
0xda
,
0xde
,
0xeb
,
0x22
,
0x2f
,
0x47
,
0xaa
,
0x50
,
0x6e
,
0xec
,
0x75
,
0x37
,
0xb7
,
0xc7
,
0x7b
,
0x57
,
0xcd
,
0xc1
,
0x7d
,
0x55
,
0xe3
,
0xaf
,
0xb9
,
0x6b
,
0xef
,
0x8b
,
0x14
,
0x48
,
0x7e
,
0x59
,
0xfb
,
0x45
,
0xab
,
0x96
,
0x5f
,
0x5b
,
0x17
,
0x70
,
0xa5
,
0xdf
,
0x83
,
0x09
,
0x40
,
0x51
,
0xbe
,
0x7f
,
0x22
,
0x25
,
0xc8
,
0x35
,
0xfa
,
0xfd
,
0xda
,
0x0c
,
0xae
,
0x6d
,
0xf2
,
0x01
,
0x8f
,
0x79
,
0xcd
,
0xaf
,
0x36
,
0x43
,
0x66
,
0x21
,
0x8f
,
0x37
,
0xb5
,
0x9a
,
0x83
,
0xef
,
0x55
,
0x85
,
0xbf
,
0xe6
,
0xae
,
0x59
,
0xdb
,
0x00
,
0x48
,
0x1b
,
0x20
,
0x29
,
0x43
,
0x61
,
0xaf
,
0xd3
,
0x6c
,
0x6d
,
0xd4
,
0x66
,
0xf0
,
0xbd
,
0x2f
,
0x52
,
0x20
,
0xf9
,
0x62
,
0x45
,
0x4a
,
0x90
,
0x6b
,
0xf4
,
0xfb
,
0xb5
,
0x19
,
0x5c
,
0xdb
,
0xcf
,
0x27
,
0x8d
,
0xc7
,
0xed
,
0x66
,
0xcd
,
0x41
,
0xfd
,
0x7b
,
0xbb
,
0xad
,
0x66
,
0xcd
,
0xc5
,
0x95
,
0xe4
,
0x03
,
0x1e
,
0xf3
,
0x9a
,
0xb3
,
0xb6
,
0x01
,
0x90
,
0x16
,
0x40
,
0x52
,
0x86
,
0xc2
,
0x5e
,
0xa7
,
0x1b
,
0x6c
,
0xfb
,
0x45
,
0xab
,
0x53
,
0xcb
,
0xa1
,
0x5b
,
0x7b
,
0x1d
,
0x45
,
0xe5
,
0xd7
,
0x3e
,
0x85
,
0xd9
,
0xda
,
0xa8
,
0xcd
,
0xe0
,
0xcf
,
0x27
,
0x8d
,
0xc7
,
0xed
,
0x66
,
0xcd
,
0x41
,
0xfd
,
0x7b
,
0xbb
,
0x77
,
0xb6
,
0xfc
,
0x89
,
0x4c
,
0x72
,
0xc6
,
0xa3
,
0x9e
,
0x37
,
0x54
,
0x2a
,
0x67
,
0x21
,
0xdf
,
0x6e
,
0xad
,
0x66
,
0xcd
,
0xc5
,
0x95
,
0x1b
,
0x6c
,
0xfb
,
0x45
,
0xab
,
0x53
,
0xcb
,
0xa1
,
0x5b
,
0x7b
,
0x1d
,
0x3e
,
0x6e
,
0x49
,
0x1c
,
0x76
,
0x1f
,
0x34
,
0x3a
,
0x9d
,
0x76
,
0xe7
,
0x61
,
0xcd
,
0x41
,
0x6a
,
0xa3
,
0x45
,
0xe5
,
0xd7
,
0x3e
,
0x85
,
0x77
,
0xb6
,
0xfc
,
0x89
,
0x4c
,
0x72
,
0xc6
,
0xa3
,
0x9e
,
0x37
,
0x54
,
0xdd
,
0x69
,
0xef
,
0x6e
,
0xa2
,
0xe2
,
0xf5
,
0x3f
,
0x3b
,
0x00
,
0x47
,
0xfe
,
0x44
,
0xbf
,
0xf2
,
0x7d
,
0x2a
,
0x67
,
0x21
,
0xdf
,
0x6e
,
0x3e
,
0x6e
,
0x49
,
0x1c
,
0x76
,
0x1f
,
0x34
,
0x3a
,
0x9d
,
0x76
,
0xe7
,
0x0c
,
0x0b
,
0x0f
,
0x33
,
0x7a
,
0xaa
,
0x2a
,
0x06
,
0x8c
,
0xbf
,
0xee
,
0xf8
,
0x83
,
0xe5
,
0x5a
,
0x4a
,
0x61
,
0xcd
,
0x41
,
0x6a
,
0xa3
,
0xdd
,
0x69
,
0xef
,
0x6e
,
0xa2
,
0xe2
,
0xf5
,
0x3f
,
0x39
,
0x00
,
0x47
,
0xee
,
0xc6
,
0xa1
,
0x3f
,
0x3c
,
0xa0
,
0x33
,
0xe4
,
0x23
,
0x98
,
0x93
,
0x4b
,
0xd0
,
0xa3
,
0x4b
,
0xad
,
0xfe
,
0x44
,
0xcf
,
0x05
,
0x3f
,
0x86
,
0x85
,
0x87
,
0x19
,
0x3d
,
0x55
,
0x15
,
0x03
,
0xc6
,
0x5f
,
0x77
,
0xb8
,
0x0f
,
0x55
,
0x2b
,
0xfa
,
0x64
,
0x21
,
0x15
,
0x12
,
0x0f
,
0x54
,
0xcb
,
0xcb
,
0x29
,
0x23
,
0x9b
,
0xfc
,
0xc1
,
0x72
,
0x2d
,
0x25
,
0x77
,
0xe3
,
0xd0
,
0x1f
,
0x1e
,
0xd0
,
0x19
,
0xf2
,
0x11
,
0xcc
,
0xc9
,
0x27
,
0x74
,
0xe6
,
0x65
,
0x51
,
0xfc
,
0xa3
,
0xc2
,
0xbd
,
0x7f
,
0x07
,
0x00
,
0x00
,
0xff
,
0xff
,
0x40
,
0x25
,
0xe8
,
0xd1
,
0xa5
,
0x56
,
0xdc
,
0x87
,
0xaa
,
0x15
,
0x7d
,
0xb2
,
0x90
,
0x0a
,
0x89
,
0x91
,
0xd6
,
0x0f
,
0x00
,
0xa1
,
0xdd
,
0x20
,
0x00
,
0x00
,
0xf2
,
0x72
,
0xca
,
0xc8
,
0xe6
,
0x09
,
0x9d
,
0x79
,
0x59
,
0x14
,
0x7f
,
0x6d
,
0xb8
,
0xf7
,
0xef
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0xfd
,
0x6a
,
0xf8
,
0xd1
,
0x0f
,
0x21
,
0x00
,
0x00
,
}
}
// Reference imports to suppress errors if they are not otherwise used.
// Reference imports to suppress errors if they are not otherwise used.
...
...
plugin/dapp/mix/wallet/mixbizdb.go
View file @
f9c75bbd
...
@@ -224,6 +224,9 @@ func (p *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
...
@@ -224,6 +224,9 @@ func (p *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
indexName
=
"authSpendHash"
indexName
=
"authSpendHash"
}
else
if
len
(
req
.
Account
)
>
0
{
}
else
if
len
(
req
.
Account
)
>
0
{
indexName
=
"account"
indexName
=
"account"
if
req
.
Status
>
0
{
indexName
=
"owner_status"
}
}
else
if
req
.
Status
>
0
{
}
else
if
req
.
Status
>
0
{
indexName
=
"status"
indexName
=
"status"
}
}
...
...
plugin/dapp/mix/wallet/mixbiztable.go
View file @
f9c75bbd
...
@@ -25,7 +25,8 @@ var boardOpt = &table.Option{
...
@@ -25,7 +25,8 @@ var boardOpt = &table.Option{
"authHash"
,
"authHash"
,
"authSpendHash"
,
"authSpendHash"
,
"account"
,
"account"
,
"status"
},
"status"
,
"owner_status"
},
}
}
//NewStageTable 新建表
//NewStageTable 新建表
...
@@ -79,6 +80,8 @@ func (r *MixRow) Get(key string) ([]byte, error) {
...
@@ -79,6 +80,8 @@ func (r *MixRow) Get(key string) ([]byte, error) {
return
[]
byte
(
r
.
Info
.
Account
),
nil
return
[]
byte
(
r
.
Info
.
Account
),
nil
case
"status"
:
case
"status"
:
return
[]
byte
(
fmt
.
Sprintf
(
"%2d"
,
r
.
Info
.
Status
)),
nil
return
[]
byte
(
fmt
.
Sprintf
(
"%2d"
,
r
.
Info
.
Status
)),
nil
case
"owner_status"
:
return
[]
byte
(
fmt
.
Sprintf
(
"%s_%2d"
,
r
.
Info
.
Account
,
r
.
Info
.
Status
)),
nil
default
:
default
:
return
nil
,
types
.
ErrNotFound
return
nil
,
types
.
ErrNotFound
}
}
...
...
plugin/dapp/mix/wallet/txauth.go
View file @
f9c75bbd
...
@@ -134,12 +134,12 @@ func (p *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transaction,
...
@@ -134,12 +134,12 @@ func (p *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transaction,
return
nil
,
err
return
nil
,
err
}
}
proofInfo
,
err
:=
getZkProofKeys
(
auth
.
ZkPath
+
mixTy
.
AuthCircuit
,
auth
.
ZkPath
+
mixTy
.
AuthPk
,
*
input
)
proofInfo
,
err
:=
getZkProofKeys
(
auth
.
ZkPath
+
mixTy
.
AuthCircuit
,
auth
.
ZkPath
+
mixTy
.
AuthPk
,
*
input
,
req
.
Privacy
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
auth
.
NoteHash
)
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
auth
.
NoteHash
)
}
}
//verify
//verify
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_AUTHORIZE
,
proofInfo
,
auth
.
ZkPath
+
mixTy
.
AuthVk
);
err
!=
nil
{
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_AUTHORIZE
,
proofInfo
,
auth
.
ZkPath
+
mixTy
.
AuthVk
,
req
.
Verify
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
auth
.
NoteHash
)
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
auth
.
NoteHash
)
}
}
...
...
plugin/dapp/mix/wallet/txdeposit.go
View file @
f9c75bbd
...
@@ -128,7 +128,7 @@ func (p *mixPolicy) depositParams(receiver, returner, auth, amount string) (*mix
...
@@ -128,7 +128,7 @@ func (p *mixPolicy) depositParams(receiver, returner, auth, amount string) (*mix
}
}
func
(
p
*
mixPolicy
)
getDepositProof
(
receiver
,
returner
,
auth
,
amount
,
zkPath
string
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
func
(
p
*
mixPolicy
)
getDepositProof
(
receiver
,
returner
,
auth
,
amount
,
zkPath
string
,
verifyOnChain
,
privacyPrint
int32
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
resp
,
err
:=
p
.
depositParams
(
receiver
,
returner
,
auth
,
amount
)
resp
,
err
:=
p
.
depositParams
(
receiver
,
returner
,
auth
,
amount
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -143,13 +143,13 @@ func (p *mixPolicy) getDepositProof(receiver, returner, auth, amount, zkPath str
...
@@ -143,13 +143,13 @@ func (p *mixPolicy) getDepositProof(receiver, returner, auth, amount, zkPath str
input
.
ReturnPubKey
=
resp
.
Proof
.
ReturnKey
input
.
ReturnPubKey
=
resp
.
Proof
.
ReturnKey
input
.
NoteRandom
=
resp
.
Proof
.
NoteRandom
input
.
NoteRandom
=
resp
.
Proof
.
NoteRandom
proofInfo
,
err
:=
getZkProofKeys
(
zkPath
+
mixTy
.
DepositCircuit
,
zkPath
+
mixTy
.
DepositPk
,
input
)
proofInfo
,
err
:=
getZkProofKeys
(
zkPath
+
mixTy
.
DepositCircuit
,
zkPath
+
mixTy
.
DepositPk
,
input
,
privacyPrint
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
//线上验证proof,失败的原因有可能circuit,Pk和线上vk不匹配,或不是一起产生的版本
//线上验证proof,失败的原因有可能circuit,Pk和线上vk不匹配,或不是一起产生的版本
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_DEPOSIT
,
proofInfo
,
zkPath
+
mixTy
.
DepositVk
);
err
!=
nil
{
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_DEPOSIT
,
proofInfo
,
zkPath
+
mixTy
.
DepositVk
,
verifyOnChain
);
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"verifyProof fail"
)
return
nil
,
errors
.
Wrap
(
err
,
"verifyProof fail"
)
}
}
proofInfo
.
Secrets
=
resp
.
Secrets
proofInfo
.
Secrets
=
resp
.
Secrets
...
@@ -180,7 +180,7 @@ func (p *mixPolicy) createDepositTx(req *mixTy.CreateRawTxReq) (*types.Transacti
...
@@ -180,7 +180,7 @@ func (p *mixPolicy) createDepositTx(req *mixTy.CreateRawTxReq) (*types.Transacti
var
proofs
[]
*
mixTy
.
ZkProofInfo
var
proofs
[]
*
mixTy
.
ZkProofInfo
for
i
,
rcv
:=
range
receivers
{
for
i
,
rcv
:=
range
receivers
{
p
,
err
:=
p
.
getDepositProof
(
rcv
,
deposit
.
Deposit
.
ReturnAddr
,
deposit
.
Deposit
.
AuthorizeAddr
,
amounts
[
i
],
deposit
.
ZkPath
)
p
,
err
:=
p
.
getDepositProof
(
rcv
,
deposit
.
Deposit
.
ReturnAddr
,
deposit
.
Deposit
.
AuthorizeAddr
,
amounts
[
i
],
deposit
.
ZkPath
,
req
.
Verify
,
req
.
Privacy
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get Deposit proof for=%s"
,
rcv
)
return
nil
,
errors
.
Wrapf
(
err
,
"get Deposit proof for=%s"
,
rcv
)
}
}
...
...
plugin/dapp/mix/wallet/txtransfer.go
View file @
f9c75bbd
...
@@ -93,7 +93,6 @@ type TransferOutput struct {
...
@@ -93,7 +93,6 @@ type TransferOutput struct {
}
}
func
(
p
*
mixPolicy
)
getTransferInputPart
(
note
*
mixTy
.
WalletNoteInfo
)
(
*
TransferInput
,
error
)
{
func
(
p
*
mixPolicy
)
getTransferInputPart
(
note
*
mixTy
.
WalletNoteInfo
)
(
*
TransferInput
,
error
)
{
//get spend privacy key
//get spend privacy key
privacyKey
,
err
:=
p
.
getAccountPrivacyKey
(
note
.
Account
)
privacyKey
,
err
:=
p
.
getAccountPrivacyKey
(
note
.
Account
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -101,7 +100,7 @@ func (p *mixPolicy) getTransferInputPart(note *mixTy.WalletNoteInfo) (*TransferI
...
@@ -101,7 +100,7 @@ func (p *mixPolicy) getTransferInputPart(note *mixTy.WalletNoteInfo) (*TransferI
}
}
if
privacyKey
.
Privacy
.
PaymentKey
.
ReceiveKey
!=
note
.
Secret
.
ReceiverKey
&&
if
privacyKey
.
Privacy
.
PaymentKey
.
ReceiveKey
!=
note
.
Secret
.
ReceiverKey
&&
privacyKey
.
Privacy
.
PaymentKey
.
ReceiveKey
!=
note
.
Secret
.
ReturnKey
{
privacyKey
.
Privacy
.
PaymentKey
.
ReceiveKey
!=
note
.
Secret
.
ReturnKey
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"
payment pubkey from note=%s not match from privacyK
ey=%s,for account =%s"
,
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"
receiver key from note=%s not match from k
ey=%s,for account =%s"
,
note
.
Secret
.
ReceiverKey
,
privacyKey
.
Privacy
.
PaymentKey
.
ReceiveKey
,
note
.
Account
)
note
.
Secret
.
ReceiverKey
,
privacyKey
.
Privacy
.
PaymentKey
.
ReceiveKey
,
note
.
Account
)
}
}
...
@@ -367,32 +366,32 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -367,32 +366,32 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
//verify input
//verify input
var
inputProofs
[]
*
mixTy
.
ZkProofInfo
var
inputProofs
[]
*
mixTy
.
ZkProofInfo
for
i
,
input
:=
range
inputParts
{
for
i
,
input
:=
range
inputParts
{
inputProof
,
err
:=
getZkProofKeys
(
transfer
.
Input
.
ZkPath
+
mixTy
.
TransInputCircuit
,
transfer
.
Input
.
ZkPath
+
mixTy
.
TransInputPk
,
*
input
)
inputProof
,
err
:=
getZkProofKeys
(
transfer
.
Input
.
ZkPath
+
mixTy
.
TransInputCircuit
,
transfer
.
Input
.
ZkPath
+
mixTy
.
TransInputPk
,
*
input
,
req
.
Privacy
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"verify.input getZkProofKeys,the i=%d"
,
i
)
return
nil
,
errors
.
Wrapf
(
err
,
"verify.input getZkProofKeys,the i=%d"
,
i
)
}
}
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_TRANSFERINPUT
,
inputProof
,
transfer
.
Input
.
ZkPath
+
mixTy
.
TransInputVk
);
err
!=
nil
{
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_TRANSFERINPUT
,
inputProof
,
transfer
.
Input
.
ZkPath
+
mixTy
.
TransInputVk
,
req
.
Verify
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"input verifyProof fail,the i=%d"
,
i
)
return
nil
,
errors
.
Wrapf
(
err
,
"input verifyProof fail,the i=%d"
,
i
)
}
}
inputProofs
=
append
(
inputProofs
,
inputProof
)
inputProofs
=
append
(
inputProofs
,
inputProof
)
}
}
//verify output
//verify output
outputProof
,
err
:=
getZkProofKeys
(
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputCircuit
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputPk
,
*
outPart
)
outputProof
,
err
:=
getZkProofKeys
(
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputCircuit
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputPk
,
*
outPart
,
req
.
Privacy
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"output getZkProofKeys"
)
return
nil
,
errors
.
Wrapf
(
err
,
"output getZkProofKeys"
)
}
}
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
outputProof
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputVk
);
err
!=
nil
{
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
outputProof
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputVk
,
req
.
Verify
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"output verifyProof fail"
)
return
nil
,
errors
.
Wrapf
(
err
,
"output verifyProof fail"
)
}
}
outputProof
.
Secrets
=
outDHSecret
outputProof
.
Secrets
=
outDHSecret
//verify change
//verify change
changeProof
,
err
:=
getZkProofKeys
(
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputCircuit
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputPk
,
*
changePart
)
changeProof
,
err
:=
getZkProofKeys
(
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputCircuit
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputPk
,
*
changePart
,
req
.
Privacy
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"change getZkProofKeys"
)
return
nil
,
errors
.
Wrapf
(
err
,
"change getZkProofKeys"
)
}
}
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
changeProof
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputVk
);
err
!=
nil
{
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
changeProof
,
transfer
.
Output
.
ZkPath
+
mixTy
.
TransOutputVk
,
req
.
Verify
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"change verifyProof fail"
)
return
nil
,
errors
.
Wrapf
(
err
,
"change verifyProof fail"
)
}
}
changeProof
.
Secrets
=
changeDHSecret
changeProof
.
Secrets
=
changeDHSecret
...
...
plugin/dapp/mix/wallet/txwithdraw.go
View file @
f9c75bbd
...
@@ -139,12 +139,12 @@ func (p *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -139,12 +139,12 @@ func (p *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Transact
return
nil
,
errors
.
Wrapf
(
err
,
"getWithdrawParams note=%s"
,
note
)
return
nil
,
errors
.
Wrapf
(
err
,
"getWithdrawParams note=%s"
,
note
)
}
}
proofInfo
,
err
:=
getZkProofKeys
(
withdraw
.
ZkPath
+
mixTy
.
WithdrawCircuit
,
withdraw
.
ZkPath
+
mixTy
.
WithdrawPk
,
*
input
)
proofInfo
,
err
:=
getZkProofKeys
(
withdraw
.
ZkPath
+
mixTy
.
WithdrawCircuit
,
withdraw
.
ZkPath
+
mixTy
.
WithdrawPk
,
*
input
,
req
.
Privacy
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
note
)
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
note
)
}
}
//verify
//verify
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_WITHDRAW
,
proofInfo
,
withdraw
.
ZkPath
+
mixTy
.
WithdrawVk
);
err
!=
nil
{
if
err
:=
p
.
verifyProofOnChain
(
mixTy
.
VerifyType_WITHDRAW
,
proofInfo
,
withdraw
.
ZkPath
+
mixTy
.
WithdrawVk
,
req
.
Verify
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
note
)
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
note
)
}
}
...
...
plugin/dapp/mix/wallet/util.go
View file @
f9c75bbd
...
@@ -87,9 +87,9 @@ func decryptSecretData(req *mixTy.DecryptSecretData) (*mixTy.SecretData, error)
...
@@ -87,9 +87,9 @@ func decryptSecretData(req *mixTy.DecryptSecretData) (*mixTy.SecretData, error)
return
&
raw
,
nil
return
&
raw
,
nil
}
}
func
(
p
*
mixPolicy
)
verifyProofOnChain
(
ty
mixTy
.
VerifyType
,
proof
*
mixTy
.
ZkProofInfo
,
vkPath
string
)
error
{
func
(
p
*
mixPolicy
)
verifyProofOnChain
(
ty
mixTy
.
VerifyType
,
proof
*
mixTy
.
ZkProofInfo
,
vkPath
string
,
verifyOnChain
int32
)
error
{
//vkpath verify
//vkpath verify
if
len
(
vkPath
)
>
0
{
if
verifyOnChain
>
0
&&
len
(
vkPath
)
>
0
{
vk
,
err
:=
getVerifyKey
(
vkPath
)
vk
,
err
:=
getVerifyKey
(
vkPath
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrapf
(
err
,
"getVerifyKey path=%s"
,
vkPath
)
return
errors
.
Wrapf
(
err
,
"getVerifyKey path=%s"
,
vkPath
)
...
@@ -111,11 +111,7 @@ func (p *mixPolicy) verifyProofOnChain(ty mixTy.VerifyType, proof *mixTy.ZkProof
...
@@ -111,11 +111,7 @@ func (p *mixPolicy) verifyProofOnChain(ty mixTy.VerifyType, proof *mixTy.ZkProof
Proof
:
proof
,
Proof
:
proof
,
}
}
//onchain verify
//onchain verify
_
,
err
:=
p
.
walletOperate
.
GetAPI
()
.
QueryChain
(
&
types
.
ChainExecutor
{
_
,
err
:=
p
.
walletOperate
.
GetAPI
()
.
Query
(
mixTy
.
MixX
,
"VerifyProof"
,
verify
)
Driver
:
"mix"
,
FuncName
:
"VerifyProof"
,
Param
:
types
.
Encode
(
verify
),
})
return
err
return
err
}
}
...
@@ -284,19 +280,34 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) {
...
@@ -284,19 +280,34 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) {
}
}
}
}
//func printObj(obj interface{}) {
func
printObj
(
obj
interface
{})
{
// tv := reflect.ValueOf(obj)
ty
:=
reflect
.
TypeOf
(
obj
)
// for i:=0;i<tv.NumField();i++{
tv
:=
reflect
.
ValueOf
(
obj
)
// name := tv.Field(i).Elem()
n
:=
ty
.
NumField
()
// }
// for i, t := range treeProof.TreePath {
for
i
:=
0
;
i
<
n
;
i
++
{
// tv.Elem().FieldByName("Path" + strconv.Itoa(i)).SetString(t)
name
:=
ty
.
Field
(
i
)
.
Name
// tv.Elem().FieldByName("Helper" + strconv.Itoa(i)).SetString(strconv.Itoa(int(treeProof.Helpers[i])))
v
,
ok
:=
ty
.
Field
(
i
)
.
Tag
.
Lookup
(
"tag"
)
// tv.Elem().FieldByName("Valid" + strconv.Itoa(i)).SetString("1")
if
!
ok
{
// }
fmt
.
Println
(
"fieldname="
,
ty
.
Field
(
i
)
.
Name
,
"not set tag"
)
//}
}
fmt
.
Println
(
"fieldname="
,
ty
.
Field
(
i
)
.
Name
,
"| value="
,
tv
.
FieldByName
(
name
)
.
Interface
(),
"| tag="
,
v
)
}
}
func
getZkProofKeys
(
circuitFile
,
pkFile
string
,
inputs
interface
{},
privacyPrint
int32
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
if
privacyPrint
>
0
{
fmt
.
Println
(
"--output zk parameters for circuit:"
,
circuitFile
)
rst
,
err
:=
json
.
MarshalIndent
(
inputs
,
""
,
" "
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
}
fmt
.
Println
(
string
(
rst
))
}
func
getZkProofKeys
(
circuitFile
,
pkFile
string
,
inputs
interface
{})
(
*
mixTy
.
ZkProofInfo
,
error
)
{
assignments
,
err
:=
getAssignments
(
inputs
)
assignments
,
err
:=
getAssignments
(
inputs
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
plugin/dapp/mix/wallet/util_test.go
View file @
f9c75bbd
...
@@ -2,6 +2,7 @@ package wallet
...
@@ -2,6 +2,7 @@ package wallet
import
(
import
(
"encoding/hex"
"encoding/hex"
"encoding/json"
"fmt"
"fmt"
"reflect"
"reflect"
"testing"
"testing"
...
@@ -87,13 +88,20 @@ func TestGetAssignments(t *testing.T) {
...
@@ -87,13 +88,20 @@ func TestGetAssignments(t *testing.T) {
_
,
ok
:=
reduceAssign
[
"ReceiverPubKey"
]
_
,
ok
:=
reduceAssign
[
"ReceiverPubKey"
]
assert
.
Equal
(
t
,
ok
,
false
)
assert
.
Equal
(
t
,
ok
,
false
)
//tv := reflect.ValueOf(&deposit)
tv
:=
reflect
.
ValueOf
(
&
deposit
)
//tv.Elem().FieldByName("NoteHash").SetString("999")
tv
.
Elem
()
.
FieldByName
(
"NoteHash"
)
.
SetString
(
"999"
)
////tv.FieldByName("NoteHash").Elem().SetString("999")
//tv.FieldByName("NoteHash").Elem().SetString("999")
//assert.Equal(t,"999",deposit.NoteHash)
assert
.
Equal
(
t
,
"999"
,
deposit
.
NoteHash
)
var
in
WithdrawInput
//var in WithdrawInput
initTreePath
(
&
in
)
//initTreePath(&in)
assert
.
Equal
(
t
,
"99"
,
in
.
Path1
)
//assert.Equal(t, "99", in.Path1)
printObj
(
deposit
)
rst
,
err
:=
json
.
MarshalIndent
(
deposit
,
""
,
" "
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
return
}
fmt
.
Println
(
string
(
rst
))
}
}
func
TestVerifyProof
(
t
*
testing
.
T
)
{
func
TestVerifyProof
(
t
*
testing
.
T
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment