From e153b5080df8f58b2b41658f713e75842e385867 Mon Sep 17 00:00:00 2001 From: Jia Liu Date: Fri, 3 May 2024 13:55:47 +0100 Subject: [PATCH 1/3] use counter for rand input --- contracts/zkdvrf.sol | 5 ++- test/zkdvrf.spec.ts | 97 ++++++++++++++++++++++---------------------- 2 files changed, 52 insertions(+), 50 deletions(-) diff --git a/contracts/zkdvrf.sol b/contracts/zkdvrf.sol index 7402294..f89cdfd 100644 --- a/contracts/zkdvrf.sol +++ b/contracts/zkdvrf.sol @@ -37,6 +37,8 @@ contract zkdvrf is Ownable { Ready } + string public constant INPUT_PREFIX = "zkRand v1 2024: "; + uint32 public memberCount; uint32 public threshold; uint32 public ppLength; @@ -177,8 +179,7 @@ contract zkdvrf is Ownable { } currentRoundNum++; - uint256 currentTimestamp = block.timestamp; - roundInput[currentRoundNum] = currentTimestamp.toString(); + roundInput[currentRoundNum] = string(abi.encodePacked(INPUT_PREFIX, currentRoundNum.toString())); emit RandomInitiated(currentRoundNum, roundInput[currentRoundNum]); } diff --git a/test/zkdvrf.spec.ts b/test/zkdvrf.spec.ts index cc0d4a7..c541783 100644 --- a/test/zkdvrf.spec.ts +++ b/test/zkdvrf.spec.ts @@ -26,52 +26,53 @@ let account4Address: string let account5Address: string -let pubKeyAcc1 = {x: '0x2cc720a1634b2394873d5d8a6e89c1e4acb2eb34f3ca883e7a7801bac6e1cbed', y: '0x27c5bc0ec1256b3b194f8b792481683740f875ee0c71f28dead498e3e5a60f29'} -let pubKeyAcc2 = {x: '0x01605f92426842405d8b09f6363c1b6ed8b2f4ef6835116bc7b490e80a3920dc', y: '0x2d55f7625c019d24859db53bc4e87e46d2ef2fb947c0758ac5d932ba70841cdb'} -let pubKeyAcc3 = {x: '0x02c7fb9708b2781a705699c573d868391e012522c186a0b7648ba40288cba488', y: '0x112770494ea5d150e1c5fe25893a1115b8e32f330be5cc8d83d22edfc71cc6e2'} -let pubKeyAcc4 = {x: '0x09cb9dd2f6ab62caec7b81c5ae2952ad525f12e5a03a8fa0d1427be76cab2ce4', y: '0x039bf836e7a5c52161c6e22ed5b389b12b9921360bc767b4f87bba36d895bf90'} -let pubKeyAcc5 = {x: '0x24b6964dcbaff5be16a32608e5cc23defd2ba947e9d8dcef48d36135805f1c48', y: '0x26ad80446af9e409bc37ddc14d2f10dabea5e0ff232e88cfa3145ecb2a367e41'} - - -let ppAcc1 = ["0x000000000000000000000000000000cfad3e3427f33dece39f44d080c7b55aac","0x000000000000000000000000000000000011e453ba9449dee2147304706d1d82","0x000000000000000000000000000000545ae5fd4d2d3ce99ce2633c7bd8fad62a","0x0000000000000000000000000000000000263c1a28c196884c16a51b9ea56fde","0x0000000000000000000000000000001c61f95845d53c108b896c1c24b6a87ffa","0x000000000000000000000000000000000012dc53a63b5f6ace4d295b9a7f648f","0x000000000000000000000000000000265d4bc8c50fb0a0f02e1bf15069bff927","0x000000000000000000000000000000000015583d3d1318160be42b8562085ef0","0x00000000000000000000000000000034b0ac20b9d55fa37da60e868200fc32ca","0x0000000000000000000000000000000000191a59cb5cead66b4af220f15f48bc","0x000000000000000000000000000000c59d2b7d1e323acb8fbe40563c676548ca","0x000000000000000000000000000000000009e7a6b73d2cb7e8eb76a727690dac","0x0000000000000000000000000000008c1d40d9658817d2fd5e6b8b9a3c09ca72","0x00000000000000000000000000000000001ee5b774da1ce2137b776e7f6577bb","0x00000000000000000000000000000061e4bb38d378978c4d2d26f84afd4b14bb","0x000000000000000000000000000000000019a4bcd972b55ff9a92ff902b217d3","0x00000000000000000000000000000002737b3357c5e19dd5b82497b9eae89ae9","0x0000000000000000000000000000000000275c127a6661a65361a489ce975a75","0x000000000000000000000000000000dffb6c92a18983bc3c2c1e06efb9422cd7","0x000000000000000000000000000000000015f3c7d932edcd317035b785c4d5df","0x000000000000000000000000000000ccd481ad8e2223ccbb31c58c53e43fc098","0x00000000000000000000000000000000000e29d28366d7b79bb2d699f6be61a4","0x000000000000000000000000000000eb803a95fb1839bb6db5df88d3909b4951","0x00000000000000000000000000000000001712c1cffa5eb129fe40254146f03f","0x000000000000000000000000000000644ea9ff0b6b086da390b1bb164652b52a","0x000000000000000000000000000000000006695b52f1ef409a1696239af114ac","0x0000000000000000000000000000009030bac8cc0d124fd5fc499e731f1299e2","0x000000000000000000000000000000000025b2de6d159a368a7b3d24c4fb6963","0x00000000000000000000000000000000eac1ea73218e48af414afc2fed6e7e61","0x000000000000000000000000000000000016a566ca254b5ea64b0ab7b80c1664","0x000000000000000000000000000000e66286ce246ee1d86b957cd0a5290ed375","0x000000000000000000000000000000000020837958a7b861639a9ca9b906b5c2","0x0414cd1dde880c1118b5ca912ebe2c43adbb4193ade85db83bd172dd5e410d4e","0x0c08962ecd8dda710791c46a73081845263a342af8fa5b5bbc2a2b7d02d9c9c4","0x0b3f35ebab7183444a845a481077d654bc4bea4b20378bd46984468e6b31bec0","0x2baa7e296c86ec09310a1dfb709075a35c0546c8c85b022eefdda50e42c092e3","0x0a097c9bba33a36e9049649ec2ddda7b07870ddba07887a65c98c70871015996","0x1ed360f8708c6bc625de667e1c918c42465d7471d76cf998d0e3e1048657e343","0x24eb7d87ac20bffa27f3217c2d994568aeb18430bd0e1124cd002443c181fa86","0x2cc720a1634b2394873d5d8a6e89c1e4acb2eb34f3ca883e7a7801bac6e1cbed","0x27c5bc0ec1256b3b194f8b792481683740f875ee0c71f28dead498e3e5a60f29","0x01605f92426842405d8b09f6363c1b6ed8b2f4ef6835116bc7b490e80a3920dc","0x2d55f7625c019d24859db53bc4e87e46d2ef2fb947c0758ac5d932ba70841cdb","0x02c7fb9708b2781a705699c573d868391e012522c186a0b7648ba40288cba488","0x112770494ea5d150e1c5fe25893a1115b8e32f330be5cc8d83d22edfc71cc6e2","0x09cb9dd2f6ab62caec7b81c5ae2952ad525f12e5a03a8fa0d1427be76cab2ce4","0x039bf836e7a5c52161c6e22ed5b389b12b9921360bc767b4f87bba36d895bf90","0x24b6964dcbaff5be16a32608e5cc23defd2ba947e9d8dcef48d36135805f1c48","0x26ad80446af9e409bc37ddc14d2f10dabea5e0ff232e88cfa3145ecb2a367e41"] -let ppAcc2 = ["0x000000000000000000000000000000536ef6349ab8fad4426b4929c2bce5b59b","0x00000000000000000000000000000000001c4e004d1216a3091c8a9fc51d033c","0x00000000000000000000000000000034b8b68cdef732b6cb3cb9c3be7266ac68","0x000000000000000000000000000000000018b5f262151ebc5d68c78d6d621eb0","0x000000000000000000000000000000ee2919e386de4b4be542c498e9e97385eb","0x000000000000000000000000000000000013e5317b7a37242b709cad022ec6d2","0x000000000000000000000000000000a6eb24b648ba95aefdcebd7e5f623f0a64","0x00000000000000000000000000000000000ed1849ddc60970f073412a2539c2c","0x000000000000000000000000000000855f1ddd9593a98317e2708d0a27f7d5bc","0x00000000000000000000000000000000002ebbe958de5ebbd8958c86c8ca9fb9","0x000000000000000000000000000000199bfa9d76279377b564720e4720b65234","0x00000000000000000000000000000000002c28ebdd056cc4fb42dc44083dd253","0x000000000000000000000000000000671b63061070acd7e6a27adc4ea5c73f0e","0x00000000000000000000000000000000002797eeedeeabf53b7901197aa2eb8e","0x00000000000000000000000000000054db8f6c6bc912372c67bca0a91691d261","0x00000000000000000000000000000000002b92069da25596c69042b2921314b9","0x0000000000000000000000000000004ac5d53c4822006219946287b751ed87a8","0x000000000000000000000000000000000011cdcf1286c25d11e080392a9dffd6","0x00000000000000000000000000000078a270f7d8a9bc6973384ace9400a976da","0x00000000000000000000000000000000002c0ab0490fc5bf0c3ac9460b1ec4e2","0x0000000000000000000000000000008460ec3b16ed6ea55ed473f698803b7eca","0x000000000000000000000000000000000026fca7889208747dcf895b68c13140","0x000000000000000000000000000000515cca393c50fb1e9ff8bdd04405230ee1","0x000000000000000000000000000000000023aa132dc1fdda8192838506fa323a","0x0000000000000000000000000000007b4b6a7c425fea47dc6e449090278f1c46","0x00000000000000000000000000000000000c9de2e3cca72a57073334536fb0dc","0x000000000000000000000000000000e0e15d6221440cb853d881a6b18ced6e98","0x000000000000000000000000000000000023e8ceb93fecc305ed7ab55fc6807b","0x0000000000000000000000000000008d420f4364c7ddb546a207ab7029e66237","0x00000000000000000000000000000000000c9005cd727afbf661e0670c07b03a","0x000000000000000000000000000000ce6b28396227f94c3cc705df759d259c60","0x0000000000000000000000000000000000297055e3af341bb6687f735338033b","0x27fe8f5de2b371ae4f77d28148c405a559dcb2878a3271e11b4fd09c5a84886e","0x0f3a833abcc6ad72fee0fcd998d0d1ddd439077d429a42e928c8e45518f47e5f","0x17fcf0d0b54129816584bc3ea74ec6decd18967e9f67ae892c97c50fd21f6c30","0x036c085313b54a738d0a3de298b6ce2fe500f29e0da78f2a7954cf85f4951a0e","0x014d41033ca5e8e694e16799cfc5b1a9602e8d81e2278bbf85f9588f3c6d29bd","0x0aa980cff71a9740b18ed1a2135c5ff17270d9100eef7e80fd6a41cd43fbe069","0x1747c9c83e40c61230db47d4d55c1fe0abe33d9975df2140fd1613b413c8451b","0x2cc720a1634b2394873d5d8a6e89c1e4acb2eb34f3ca883e7a7801bac6e1cbed","0x27c5bc0ec1256b3b194f8b792481683740f875ee0c71f28dead498e3e5a60f29","0x01605f92426842405d8b09f6363c1b6ed8b2f4ef6835116bc7b490e80a3920dc","0x2d55f7625c019d24859db53bc4e87e46d2ef2fb947c0758ac5d932ba70841cdb","0x02c7fb9708b2781a705699c573d868391e012522c186a0b7648ba40288cba488","0x112770494ea5d150e1c5fe25893a1115b8e32f330be5cc8d83d22edfc71cc6e2","0x09cb9dd2f6ab62caec7b81c5ae2952ad525f12e5a03a8fa0d1427be76cab2ce4","0x039bf836e7a5c52161c6e22ed5b389b12b9921360bc767b4f87bba36d895bf90","0x24b6964dcbaff5be16a32608e5cc23defd2ba947e9d8dcef48d36135805f1c48","0x26ad80446af9e409bc37ddc14d2f10dabea5e0ff232e88cfa3145ecb2a367e41"] -let ppAcc3 = ["0x00000000000000000000000000000064a7fcef63eaa5d97e24c75fef0cd3c67c","0x0000000000000000000000000000000000128bc65394f5195f6a7579644100b2","0x000000000000000000000000000000c9117bd85fb24e64df28fa704bca446ec9","0x0000000000000000000000000000000000264d68a677288552f9816c04d5e451","0x000000000000000000000000000000ce1f6a273e3e1a990f78ff3d32206f0db8","0x0000000000000000000000000000000000025e1dcbbd10a77a259b34c4de2cdd","0x0000000000000000000000000000004ea75b1971cf218a3648d84f6bb455de1c","0x000000000000000000000000000000000004f3fde74a2095890cf4b36fb586a6","0x000000000000000000000000000000f1d7a263449222e50cb6af1cbdfa9be5d7","0x00000000000000000000000000000000000b35e2f373b43f225e706835a91e3e","0x000000000000000000000000000000bd162c1c5abe38adfbb71a11b3a9380892","0x0000000000000000000000000000000000119728060d3303e9e46f22d387ca66","0x000000000000000000000000000000bf7e6983439f148654e9c3bb73e5e5669e","0x00000000000000000000000000000000000492458b074bdefb5d9f4f8beb2403","0x000000000000000000000000000000ad64c1dc82758695a70b4c582c925e93af","0x0000000000000000000000000000000000252dac71432b131cb2ba353b60493a","0x000000000000000000000000000000d91aabbb697276ae6b03126e9a8c7ebc4b","0x000000000000000000000000000000000018dc01d8768e13dedf7b8b7d78cc9b","0x00000000000000000000000000000015ed76111351238f418f72879fd924b6ee","0x00000000000000000000000000000000001cffa097c9b878ac2f8928c46faea1","0x000000000000000000000000000000c81eaf8411a8ee41f2bdde147e1d464a57","0x00000000000000000000000000000000002fd7b4bfe3914e2c28ee60f5626936","0x00000000000000000000000000000095d3faf2c98b9123860e6ab61a4aba9d59","0x0000000000000000000000000000000000007fea343decd7a417066cadabcfe8","0x000000000000000000000000000000e7095711e3c1fb2867a1140383b795059d","0x00000000000000000000000000000000000e825be3ef98906632758b0cd60c0c","0x0000000000000000000000000000001790aca6611077f36e1bbbd522896822c7","0x00000000000000000000000000000000000685cbc1255e0f0439a9636b6fd7a2","0x000000000000000000000000000000bb773cf4244a3490a8a75edf4cdae80539","0x0000000000000000000000000000000000112c4e85fb06f323c5afefa0474081","0x0000000000000000000000000000005033307a16cac1d8d4e1521e736092e0b2","0x000000000000000000000000000000000010fca33cc246f360245f376de12b44","0x09910ceb07fc6503ee035dda745ff7b493fd4c2b21039f0f419899448eb3985b","0x2bd0ce866b63d8c9a5c6c420a53da8a7a8f060e97c496ed2d4e8b749815bcc0c","0x2e34232610c5a17c56a113c5b8419a36bc42cd5dc6d587b840532a7a7d8e8cb1","0x1f7c356efcbe7e9e4c232dad3c717aea969ae8309935d4d961aa14d6d5f8a8cb","0x2dfe35e79ca9b916076ca9e616d4d2691ddeca9f05d4986ad23e73e550970f95","0x0eb38646157b71abc3cd51d664aa393df89f4ac7484181cc784913bb4155a8a2","0x13acbbc1aabe6d98f4c2299f3666bfebb03c8a2954970d32faf5e3acf0b0b083","0x2cc720a1634b2394873d5d8a6e89c1e4acb2eb34f3ca883e7a7801bac6e1cbed","0x27c5bc0ec1256b3b194f8b792481683740f875ee0c71f28dead498e3e5a60f29","0x01605f92426842405d8b09f6363c1b6ed8b2f4ef6835116bc7b490e80a3920dc","0x2d55f7625c019d24859db53bc4e87e46d2ef2fb947c0758ac5d932ba70841cdb","0x02c7fb9708b2781a705699c573d868391e012522c186a0b7648ba40288cba488","0x112770494ea5d150e1c5fe25893a1115b8e32f330be5cc8d83d22edfc71cc6e2","0x09cb9dd2f6ab62caec7b81c5ae2952ad525f12e5a03a8fa0d1427be76cab2ce4","0x039bf836e7a5c52161c6e22ed5b389b12b9921360bc767b4f87bba36d895bf90","0x24b6964dcbaff5be16a32608e5cc23defd2ba947e9d8dcef48d36135805f1c48","0x26ad80446af9e409bc37ddc14d2f10dabea5e0ff232e88cfa3145ecb2a367e41"] -let ppAcc4 = ["0x00000000000000000000000000000030aa237214368010f6798069dd9b57364f","0x00000000000000000000000000000000001598e51f8df96aae136bfb9ef49e2f","0x000000000000000000000000000000089436a51bbfcb8200fd5f84f312417ab0","0x00000000000000000000000000000000001bb0a7df4717b3fd27862bf8392ee6","0x000000000000000000000000000000668e961fa0735ef85b52fa848a2ef0373e","0x000000000000000000000000000000000006aeafafd0bdf6484ff653d5463095","0x000000000000000000000000000000fd2b769f81aee1ddb64cf008e290e4606a","0x000000000000000000000000000000000007a0a496d3ceea63c331fc9b584369","0x000000000000000000000000000000e834e1e23c082552c39daa477237049b33","0x000000000000000000000000000000000001b753ce0528d4494b82439ee62b60","0x000000000000000000000000000000f61a5df59b9405289057d25a9218600139","0x00000000000000000000000000000000000979cac1edd7b66780041db37f0930","0x00000000000000000000000000000065c82dff79702d9d1025d9a09fad74749b","0x00000000000000000000000000000000000e2344c2d50ae85984e5d5f398bfed","0x0000000000000000000000000000008676dd725f7185413af1db849dae96cb74","0x00000000000000000000000000000000001e684eee3dca48d36d43abcb86e68f","0x00000000000000000000000000000029ca09cb2f2be42a327a623f9861af86bd","0x00000000000000000000000000000000002a26213a8864f1abc65490ebaf7309","0x000000000000000000000000000000335d2facaef296e2b6179efe93eaeab30a","0x0000000000000000000000000000000000054144521c4fb844e2159b847930f0","0x000000000000000000000000000000c992006adffb48f4cfa13bdfb73cf2a46f","0x0000000000000000000000000000000000261c49463609672124b790117656c4","0x000000000000000000000000000000757663ab8f0906d0a9455ab046ab53c0e0","0x00000000000000000000000000000000001d1a606555d718b663bd7a84d7c106","0x000000000000000000000000000000ee602bbf17cfc7d9f35604484231354ceb","0x0000000000000000000000000000000000219d930c1c4c776b3f1b94f8b73ff4","0x000000000000000000000000000000dad29909199c4820123fd0e6845154f9ee","0x00000000000000000000000000000000001c19b1e244b256e9b3c65e793a3841","0x000000000000000000000000000000d98ca10dcf03d77758e96fed52b2d6e80e","0x0000000000000000000000000000000000166a36cc9f5273f6f8958b1ed3eb40","0x000000000000000000000000000000b373c63b5cf2fc67299f44a17eb03cb049","0x00000000000000000000000000000000002113cf8953722a3fecb0834707bc08","0x1340ba7a2efae5adcae8ec6fb96f57c62e3b225f7d2cd9efb61c6eb8b3db3779","0x0e21c4864d53deeaf060d43164f200a0886aaaf4e7deac622cc34a0567719114","0x0bcff6d72c883dab74bc0ff8d6b49c82bca793bf2551b1871f844775b8eacfe9","0x2462ba90b3cb761022b18428cfc6e442a46b4b034cb7ea71cb616f8b3094d42d","0x0f8f895f472d3c8341dbfb1d2968bb98041d88efb212711c6806ab03b968eb64","0x24b9ce2c00ee5efe677d9835acb463d9f0824eef4a76138a12f9c4da9426cb57","0x08631d5b3e8038dc566f3f000e10d9e71c4c8e56f8d085dfd30cca73103e8bc5","0x2cc720a1634b2394873d5d8a6e89c1e4acb2eb34f3ca883e7a7801bac6e1cbed","0x27c5bc0ec1256b3b194f8b792481683740f875ee0c71f28dead498e3e5a60f29","0x01605f92426842405d8b09f6363c1b6ed8b2f4ef6835116bc7b490e80a3920dc","0x2d55f7625c019d24859db53bc4e87e46d2ef2fb947c0758ac5d932ba70841cdb","0x02c7fb9708b2781a705699c573d868391e012522c186a0b7648ba40288cba488","0x112770494ea5d150e1c5fe25893a1115b8e32f330be5cc8d83d22edfc71cc6e2","0x09cb9dd2f6ab62caec7b81c5ae2952ad525f12e5a03a8fa0d1427be76cab2ce4","0x039bf836e7a5c52161c6e22ed5b389b12b9921360bc767b4f87bba36d895bf90","0x24b6964dcbaff5be16a32608e5cc23defd2ba947e9d8dcef48d36135805f1c48","0x26ad80446af9e409bc37ddc14d2f10dabea5e0ff232e88cfa3145ecb2a367e41"] -let ppAcc5 = ["0x0000000000000000000000000000007fd7008d3e6e67558a21ad547c0ba4b1d5","0x000000000000000000000000000000000027c45073c294114164ecf5f917487b","0x000000000000000000000000000000d0e9b7c21122679e684aa8408ff5942a98","0x00000000000000000000000000000000001b34c80100a91426bf12b520e3f132","0x00000000000000000000000000000077b477fb27a023835a916224a6ca4f7c56","0x000000000000000000000000000000000025caee7b3d39b77950c2524489bd14","0x0000000000000000000000000000004ff9c87ffdf2789488e8eb515a7390b498","0x000000000000000000000000000000000019245e61cf3eeebe0ac67f8a7ebd67","0x0000000000000000000000000000002863c8a53f33e8f9bff339c5acfa5aa305","0x0000000000000000000000000000000000047d8a0bcba71319aecf2d19f2f40f","0x0000000000000000000000000000008f4f185191381f551340b63b2a37f644c2","0x000000000000000000000000000000000010818a67c2d535d28affcc78e27464","0x000000000000000000000000000000e232c99e65a3f35ed0f5a6b6b39b6a0856","0x00000000000000000000000000000000001d483120a684d2cd0d2a1c585a454a","0x0000000000000000000000000000006bac467bfbcb33cbd6c0a014bfe06aab82","0x00000000000000000000000000000000002e6c9cd98c983cb15a065088826801","0x000000000000000000000000000000494468c079f21ac3fc11b7ce82713a3614","0x00000000000000000000000000000000000d422044d905940a654d93d957c7c6","0x0000000000000000000000000000001767912996573c651099ea31cceb276b72","0x000000000000000000000000000000000019691456c1ff367b9be458e6cc1640","0x000000000000000000000000000000e2779776cefa139f156979c109ce9c2678","0x000000000000000000000000000000000005f6661e5583244724dc6410d924f9","0x000000000000000000000000000000539dcbee404062cf46d939aeedcade1553","0x00000000000000000000000000000000001255121e5dc1d57143653852f847b4","0x00000000000000000000000000000034d57d7e7cb935b63994ef75f8a7d29d8e","0x00000000000000000000000000000000002b9c433e5a487b2608f7c23767ccd3","0x0000000000000000000000000000005669128415eb66c78d4267e21597b64d52","0x0000000000000000000000000000000000032210ac04f5f3fcdd3cc623ac8be5","0x000000000000000000000000000000899986b77cdf912f133249279a16590b18","0x00000000000000000000000000000000001a820201e38d3a091f094f5432cea2","0x000000000000000000000000000000c3abea1954ab39a392de479a92a2a25734","0x000000000000000000000000000000000005c01d5ebe25affbee4f95b8795e3b","0x10ba6c9865ab37b862348becfda17bedab76ce342022046c54842081fbf710c2","0x048f947cb6bd5fa268fbe3e42ab235e29d6049842cd24c01582086202f2709aa","0x01ac14a69753093efc8e771e2b659fb0287b25288cbbb5ee2d2e2a1945310a1d","0x2b3f7eac7a937a860dcead7ceca64ba3047c4237194ea495be30eed29563b2d0","0x037ffddeb7618c50dbd56967f99e21a3049f3e8a56deca67313aee37810e2cd7","0x23f250e6c0ec66a814ac557690bd07fc8d6c970aa7f436cf30c53b86b808c537","0x03c6ec742f7eb82bdf497d0a9448ed822fba02ce249f87671e00ed8287e7479b","0x2cc720a1634b2394873d5d8a6e89c1e4acb2eb34f3ca883e7a7801bac6e1cbed","0x27c5bc0ec1256b3b194f8b792481683740f875ee0c71f28dead498e3e5a60f29","0x01605f92426842405d8b09f6363c1b6ed8b2f4ef6835116bc7b490e80a3920dc","0x2d55f7625c019d24859db53bc4e87e46d2ef2fb947c0758ac5d932ba70841cdb","0x02c7fb9708b2781a705699c573d868391e012522c186a0b7648ba40288cba488","0x112770494ea5d150e1c5fe25893a1115b8e32f330be5cc8d83d22edfc71cc6e2","0x09cb9dd2f6ab62caec7b81c5ae2952ad525f12e5a03a8fa0d1427be76cab2ce4","0x039bf836e7a5c52161c6e22ed5b389b12b9921360bc767b4f87bba36d895bf90","0x24b6964dcbaff5be16a32608e5cc23defd2ba947e9d8dcef48d36135805f1c48","0x26ad80446af9e409bc37ddc14d2f10dabea5e0ff232e88cfa3145ecb2a367e41"] - -let ppZkAcc1 = '0x2c95b934b8f34729862ca12a867eb526b1a70a6049272fa05bec85ed9617dd2e14776d44f5ec4546038fad8d4dd10b7cc26573731b760a37b317ea1caf7c0bc303b4a45b09f899138d8ece5241b5bf115b9df88c886a707e5c4c07fcb7ee8c702773ccc8a93479b9a9d519ebbbacaf255e244b396d331a5bce17471fe9c5cc2f1db097365ac15e323461ca22796da770de193635c9045b11993cb19e4a5698ee0c299036aa1f2dc19777c6ceb2a2b06c0f85dfddd0c8b2b4e9e1d98553e6d7ab2bd0f6ec0fdc94b51f2317d307e5ffb99ab19e9e41a514453d26eaf2d2fe8e4e2009e5d400f85714d4def1dfc5f05a1f9c2d52317aa82c46e72e472e5c62ac200b59389ff378fd73e55f21ba58cb08d5604b5113689b5d4904208446749346b3264cbef142fb9cb10d2c2f3ad2f4d4c75652e24cf183102b71e857b7dd6f04290e3e67f939848e6cc3433fc52466b9b626f4f62c0071830171df0469e5dd510010dfd6e7389ac645743a96f4b79732594fc788732ad4caecf0371b49f0de14582a78ce455df8d4eff99c39792fa29bab4606a507f099d46e6d953f5f3e08e96a10c7cc7be4e6d61e610e92e7afcb6807a45ae13cee9144d7ce43c430bef645f629d6c4b4a0d6c37bb8e0e9b5c80974ba1cab91d17319a6b400da69f6a8ad8c8717313f6c91b7c6c87b4cfe273e732197aa42076e6b671628590e1113ff0760151387e795b1528b69294d8c2313431bf8bfe24cfd57b98e82fbe347d9961f4b951b01a3dc3be03d37c999e939a7c9fba75995cbe30d083f19eb3973a601fc73ee2b0fe0d99e396dbca22dc9dd56f73b91660f93097c543aa1b42fd4da838f900706e553f8a1f2f7d8e19886a586213a804c3d8c0d604606e3fae8f473e4e237231e75a51d282935fecc442a1097a6def742d6022aa9eefe2dca52a38a5a3ed60329f772f5bfe3c4d8a21753e023125873b9208f024da0bb55f37bbf61a368518d1ef09b4dbd882b1be15d5cb0fecaaba9e711440007cf141e86d6860da952870205e7c394c395a69cd94011db1afa63232b474c61f4fabba6d6efc0be5057a462049ff54b2045bc099e64e51880da7b9ced95514ed1360c447cdf6a6b10f125b42cc2c97306fdeec44735a523861a3ee21352009865129aa4790d0de4770081cc28c5966b4e4332839fc4d1f9bafb9e4a9506815ac1ce7e2cbf393337e04efd2606857a90bf37e5bc9b4947012cd0e470297d79546041a395081c2bb1e4aa788a1ea2cc6d5f29e1c399f202575c82f0db9d4d56305c789f5fdf4f56133871b0fe028f8984e2a2b21454d4df2de6a8544175627daa03fdcf57dcff6dc07cf28a491a796c664bc3b2c5b2fb6175d48839a9bc873cd49695ef8d1543f2f9f2152e242172ee8581e2c7314f8ec41f06569975d9a5a0a3482d3ed894dc7b0401cf389617ae8f5b506c309d60c44fa8968535120d87bad76cbdfaa489db4dc52ad26de22b7deff99da52b166b5d54a233a5ad75c41921a67e8e8c171a5630b6d28a2997230fcbd118fdf5cdb82986afc8864e5bfbf79bdb30bad2ada91e255b6b0b0bf7183e6edb2aeee77645f8c0f2296fa6d6acc072859c2724d6f9e9775e9e28f18a1b42e534d114ebd7f5bea4e09df3ed0081b8413d2c117a504cd272537ae6153e2f9209b0cd40c903963da806f0214b951ed8ce558ee2416f9478228e0fd969b2031f0faaeefc826b396201586ed41c5863de5725749470751001917697e5c34b1d6f0a2b4b5f3e270fba96a5ba6650377be68451994710c735098e5279a8ac922b543558198420b3d74ff4578100aaa3814e06a067703b981bd3e4cdf2ce8f33285a59a1c55843749a3f065979fc8e86f23cc804b3977cc41a8f4c8fd8e2afca2f8edff3127599c104b4c93e394027ba4639cfc378225c28d40494afa2b24bd70f8f5f07d0570a20d1d29ad4a1cb6e634a6b2056bc35e264368f87e838d4ba0006c87ed215a235f1c60bab0175044371964bd8961ce80f500dd8a42699cbaf372294dc610b2266cbdcf3584e1907dd85b7e8408ffee58a5f8a6bfbed108892a72c6983d0b4dc8d595a1ae33ee89e0791c4bbd52ab9483102816169f3193bfc071097e4dc0e28d999d1e5fbd009382ba123f916a219e700a195f30802bb158dc12f2bca66c1d72c6c8decbb7c16a4aebffbf307cfb3cb2ce7096c6bab08d8989a155b6ca87d8b4f92adde0610c4cda9d4713e18d4f506fbabd6d88f43d1f8c89f07b32c885f774128868cebcfc0ef4838a81f159665d14449f3ec6179a21d52ce17db16faf5356da44ab6ed37880631c82aa08b92031a1864d2b9dd22e558a5c429605996702dd4d23420b2318452cee3f3e08e281decde16ad8af7e57eb166322771d7b4e9ea5670fea78ed882fca9df4e0f71dee06bd116d3422195b6fc29210cbcdc4c7f497b2c3702173b031b56e36a8fb2285983d32b0a0c8fbe8e601a7c258ad78f0fa671c91c476a800515d46c15aa5a9ca80496680176568c9caafe4f2d07e2e5004b1e54a1f6ba6967f45b53c99f98fd1950170f0ffe138efd7de1502bc5cd414e74ba0c51929416e9bea31ba816b8341d0eeeabe336f96b1338f6471247f7c6c20cf27880df562c8b9cbc50ee7fe5800853c5ca8a6104b3393d5445283ca05aad5eab9c647fd6c59d0430cbcbbec270a7bf5387ce1a1fa850a79cd515976d533d45830b5bfac21400f1a5aba4a4cba3ebc55270e4366dd2f45af9c4067d8f2157aeae6cc33a8b25a57acb0072845dc40b02c0da9a1cd9fce58c4297303195b97f01138363e04329b0021de112f56da9cb23736afd81bfef99e286b307415cd3e40b07610035b10a63108a0ed4eacdd047f7f8cbd95f8556bc7eeaa61adf88128f5c7062a4eee3cafd7b62c0a4f6b88d9238acc989b35bfa318968d6244e959ef4803ffef8f3a36c249433839f2f95bc1f9debbc3a0b28131d4288222a353e67d68cbeae06e38297b676d5ddb522daedcacebccdbb5ba7c8442da14f123725e7d9c01ef9c7ea2569b40f9c9e26085895cbc0c315f796d2422a76d2562a3f8c991efe02a5f5360d2138abd0fed2aadf1ec32840935453ce12840c9f1a0f076b86227528f17d88d6a89b0caa524d8f643545c9031071df084ce1dd5d9a0095866a7b392f1c29ac94a07eb7397d00179aae75cbaba5844ff3891a1b25a326e1a9775946af38fc9cc7dc31e1309c433f50c6f0b966808a1c381812cd2a5113f9ddad4b3ad0b6316246f442e2a889caae6bd8f39f1b17f1e689d4c20e55c2232df18dc6f75b6087c79dd55ac55db3cebee6e3ed0c775c452bafe47d677f8b2ae69a62a4629fc03f19ab8c8bb560b172253d6dc40a246b594c108d98201d3a0e7047103df4ab485056b674c46c379bcbe687987f60d5d99c4eea04d254afdf04ef0c32a42dfdebb4bfeba4f31b832dd25fc52efc818ce6a299c8aca96a313f047e3ff7129d0135799fd4e1ae88ceedd4be081f978fdb716fef23560791c73a1aa2c9c0b34a807357c0a0e08fbdbca03fc11827dd41c9c173498f0d272ab3212282356f187b38a4b836970773bd954fd09e33c288a36b9ed695fc918af4b7012b05ad2a80633ae33fce68c45202fd80af73ce3a5c29a4cd3d0be31a0db482832f0351dda2474fdd795174932ef38498a5193bd08d8360a5b49080ed447d9d9a1a9b2b3d7a02f64c61751e11d05ff1f260261d68d5a5cd927ba72c1997bd486e263efc4b33bf83058f1473a56c866aa4c4c607fea5941ed71b3ee4134b408f6a08474ccfd9abda7267cf30cfcdccd54e1b0776d7aafae9e7b8f4d76bea4f33720ce4eb5f2b56e6a96a26ec472f8e8749328deab27d945cbe1a9aa06c2c624c7a1777b4febb786efd37c1a42a5436408a88fddf744d8aa86a07dc556c133e42831ef56efa5824a4605225df9ba362c331564d0d67878b225967aa5e34ec0879261820e7ff47bd3161c2dd43a48cdf6733ec5360c4c9e5ebfd74452de7beb52a7e254393e901969be81e79582fb15e9ce83d9a77ed2ed5d9aecb55119d7d8c88bf16bc23c8c7f9c88a0b72d31e0adc62e05a4e1fc0605381f3f22e1e52d88510d61f7108efb30e129331e8e57a20e486b6160804eb91569f0b903a96e1de96c2700b406ff33853c0a5b959cfdf90fec0c88d9d690fff90796a03db096884601d2510e151c01acd6dab15d1d584f1afc3c115ec6d5927adf7c06ef80cc6f69ef4c620412774867b8d4a0bfec640566100c6c98e4e30179e190d39ed9f029361838d0d10b94b0cd575e0419489e388259c354c1510a25caedf40586145d0d0c674bc26db5447d359657efa046131a89275d790a4ae52e41e883050ba1e030f1becaf1cc28974dc3989c06837ee7f7de7e8e54213cbff0c732ef05c5edce615ec43541240affb85a147cbc790d5638fce7e23019818bb5049bd7d5315b1f28c34d6400d64ef0562d258df2cc271230d93ec74905ccd3e4809ca7cb4d732786ee5083a26e11fba46f1cfa4ef6cb2c670d50bed41acab9937c705418508de9446c1e0ca3039bd1bfb4f664d3565187bfc8a808b3e693973a661d9e0acea416b7132f67a2f431253bb26b8992b34d4e083e56f89ab67ef998764de7acf3069e481ed0ad313984c7eab10265dcd4e590b01ded86a7d1ca8ad4f28446a7b22bd90ea69088a01352941ad86cc7cb4d934909fc57c66c8ff02a646fd1ddb7e442d8c038862081ffdcfc84b73e05bc85a8baa65435fb226c68c04223fabccb2d2e3e5d3aea8ad17f10bec4678983087ae20af3fc4094c7c0364e96e8cedbfb8cb717cfa1c0c9d07fd42d0be0c4d6f6c6a964515cd2b7983d501ca27cde44081041ce820999cdf1734be4e8b6a0258fa9c915cc276bee935a0f283027e87fef28082323145c3801af2c3d9f9bd86aa1b0b71a891d9982cf4ad4a694f06c9d535a3f667298d6bcb1ef86626f5711f6339316d297c14fefaadf7131c82a221cc3397cf7cd4c22a2520621874055d1d6b23fd813725abf6c03e3583d85b0d492fd5eb37113d6e042b2e7aee39f76f81f8ad079c35fb1f9978c31a3f68121beb128b93a88568cc0abd2dbc413e169f229e7a8e49bc8c299a017dfc80b8c637efaca37eb26c564193fc0c7dacf8898445025deafccba95bbd1ef189d9a2afa50a69fbb048f51ea0a8322c3a620accf714ce83983bb1f675e833c1945c72c62480a2f0645f2c8db234371b5f062d75886d8fb7cbdb22e2d1d3d49470da3b8a6250421b9d6fc1549606cd29ed4c32b5e4722c1d26ed1dd42014e650349e52fe4b79d61f95b9774f185ac31da81a6730dbadeef606f2409e8d2d96919af6cfa260c0c0e2b66c2e7f2201a5225700dd7a04b7600c655579f2f8047205b4f25fb791374b5dbe7148b40a11692272d13dd3fa46520dd8eaad0310ec864a6782a02eb997788349d96c18cfaa3d053e1681802af64b726695730c489596236546246e34beac65a28a5f0d072f552314f721f30f9da097903879cd119ef114ee3e2a47f3d2658931ab6142791f612d998f878d2ff3d0411abded8cb2a245f576f482516d48fd13075713f7adaa851ff2de84cfee6960b2bde7fc6bd49010234bf545483c52132ad0156a91fa5bdd14065d33927650fd97413d1b605eea2723773e133c0a9953a0cf471a928c55170fdc71aaa9710ac7b5b986a17754908832857c15012405021db60da18be4c070035c8633d6abc84de4653cf3939f2693cf71edea72c86840f7e493f89e90e6c81bd07f56d450dd457136e6a546a38dfc95bee6fce50e891930f71deee62c21231cbcd13591bfdf02d5f5d410fed9cc4c85eae95c0f06162d8c31c375ec62615c18f1f0577ef7c67572e195cc62c109d374d99179d605af8af022a2300838a254085ef8637077bfcb3aeb0e20b705eb8e4b83828ef151977772674acdca71f7831ad9e5f01a96b16bfd24dda7afa67d7819cf734314c6978c9fda3cfb156f26eb262fc1cf1ee6e3bb8a126f39966d331e5c4f6c0cdd85a6dddd80be165c9274e622af1b7f51e8e4f46cfee66d0eb3c8b2d1085167a59c77a7bcb450a51c63be3f05124045bde5f470765eb72082d41bf0fb02b470036bb31b55d6a473da1f0e8f27b7e9719f4ad9431b955b2436fff032f26b693a29393ad8720d34a78b1f78030306e3948ca4c1e22e1a8531395c5fcc07c08d191308baa9cd4027bedfcebcb505ff82afd85266becd97066abd003ac542ea9e3d81ccbaa274b634ada40d9bc1014f2a1cb58e20bfadf20cc60f917521052dfbebae88f109853e68dde0e81e87' -let ppZkAcc2 = '0x1576be809ce3e117e4cbb2d6ea9550107b3767079de86c1a9cf249d5ad4121452a91dd50f5ff3b8c9ea40f9eb6a6967bd3dfc7eade1f35541fab6701282f09eb13910628eb56415663232429c5b841548877a548ee472cc0704807193b7db0412363d562b5ef4fa7979a1d996e4a19423019925e1c1c302ae4fbb54860ca19023009acf65e8272ffdb850b84a32c26a6d6b1b5beeb2e1998100155398b3fe4852741d10f4a843870156484a880e095ae9544ad2bffd8c57ced4f425eea5942470dceae2f30a1db4ab80f267b9b4a789728ad707c074eb2c242251b2a49dd51e21e1808bcf9a58134498530b66af95c3a493a2bec7df7ad81f22ff3b977016966025d0f8279ec8f26b4543ef3bacd29dd85301b7a3b2a67e8f28188e4f841e516288f7294ec3a000d35b3aaf5deea923a45e220aa64dfbbae805c936e63c21724301c0b079de90acf48c74d632955fd6107bb97dd41324e3f2cdee2973a2cb7691ffdfd4a1c9afe58c82d6535dad44125273c176389e4be034b8bc86501635f6b04362c478a8a8cca2942ce343ccb3c6c02cd82d18da9ce2301b853965bd2b7512474f97f1915ee38ca3d202ffabe45610501e5abc6ff3cc92dea7ec55686e2bc1c9c0782a99ef71c75440bd8553236b9f7e776a2a43c661d7045e1c3d6fbc5360c49cb716831dc994b993e50d29049257a961c831d2aeb8ce258b09ef2515c231e97afee3cc41b599eba8b03a1a06e31a7ac379603f322464b21d4288b82f3e9023a944e59a7703dc58c3dbb03ecacc542e3b2e511a81d2a430ea732c35b84eb2984ee7c76c3c1f9996fb43d04bcc145ee173cb99bc2a7014e5605f8f74124bc14ba77fd79f4647627a1bf25a84a893f21cd65f1ee7e26f7318a076c5bfdbb570ba777a993878d675e97139e3b07f85565944c2ed14222ff3ad9914197cdda18023ada6213697f9414fc7321c0c45a245c5ee0e142e43a16747fc3a28cbfb505206a43bb02eae46366540d4a766285331756fdff7c375ea3d7bc2c61b05be36c216db672d1104d712d6ab2d5ac5fd11ef3fe9390897549e2e29a07aea08e9e35091bcfa31bf1f80ec0e9bc1c955373a40c9db002bb2c0b120c4b4d058e9f68cc266ae331d0c7344132720d52b84854fd410e9bdcd24b83f4876a0c6418c8b73f14ed5b638657d2d0d0fe024e39530e11ec449861328ef1cd3fe5251caae8595d0c3c23c34f8e12ba4b684cb962ab443eab47d42122b7d6fa579a64c3beb2c45a261edf2dc0bc93a7744fa9be91e2f6a6c2773a42223d0362c756dcdfb28324ce228066347c34d56cbc866d0d7f9a2c1751b4dd048c4130322d2364a29320c0600a685e93876785e3f9baebe8da95d467b65cce72e183c1a32308c181b4c39d6129968de6b63d27906771825a0590e316032c4171405c8ff1f7dd905102f3c45913871114358581da57255e2590825362115c37e202ee1a6e306996c543588cc51ee7208ad659d64e88148df1936c1fe62ad8c5110d3979f60a6434c7549ba5480d4b56f2770c8085734114135f7bca7f58dbfa38f9514576fe671568e038201b04509ec5851c4f9bfacb234721e7c40f02de4d27998d0c8b98a671c685d0d3c7194b9d75b6a7c7b8e3b409717c02261f487f7f8a8f284cff85ac1a006b102e0e2db6449eaca89864d66c22351659e78218628cad1f659ff1075a6fc9dff958e4268d99525641a91535bde4d635f793c5a0efec46ecbbaa840c84c74ccf4af50f06b43c569ea54a53c996886f38a8e1f07f8d8fb7ccf4b929b669e92e8aa59bf822e9bb6f7c09681982a0fc48b8234961303db07ee3f3bad9beb30120b433c1ff0d5550eea00438fc50a4fd700fd12a1bba5e6878709901aaf7d937550c18ac341c0308ae434fae926cd5d5b89f2753a3c45b8e03e929ce1ef847ee6732718f32289cc5aa5c99f03510769dce03f4e03b6611970045c60d32c7d04d4d9878bac321f6e767142e1d17be8aa3baf8b87681961cc550ac2e1cd447f9010dae186b70013e6b2e2138e8fe56e2ace89715dbc83afec3f5ff52480f54d3595aa1ec2ef52be630573fba0629797575cff5f426e6b6a8e6d918401c1bc4804537dbc9df4a102ebe0fddfda2fbd355aafab7026f46d4a0ecd255c3cdc3b7483015d920ace5087e6eacb0184b5d78330139782776e0d752af5dc278dc4217dee845d55a3a5f1a3e106f5c04a013f6b21d8199d109941dab995ed15d7f3fef0fdf8848942f7a2b091cbe81cc9d3516a27c4c72e55620308e9f9876dd71ecbb2280be092cf01b05c6b22189571216e64fed69171cf3acd66240405b5a10a25de2a6a65b5c4bf910f67f0e08233ce26802896cd485650ecb7d4d44440767ef0f5709e7f34be989292e8ace3edd90a5d32d81f74378c4209cca5acf387e56231dcd9e6bd3a3722516276317d20a425ed0c106f285fd8cefa863ca3c4133b0895d852882ee8b977524d3ab37d9d4514b76681da7c88e718e294a01a449fa2da03a27d863c82ef99d0a039660c843e0cea0d086949599fd7e566fe764737639cc3f2ef693862932951a5ddefb7a2d65e7a6e96d1c4788c6cc24e23959d638125fc7101414e0f37e501dc2c5fce10c518c7b7cb713d61640a1ceabc63161ef4987ef713480d7ab569f288ad4a722b3f9b6b833c8b1605285120ed963e0b7da455031b47e7e0128cab21541939435cf7cfd67b9d1688d5f0f004c25a9cfd431f68602fb025b02be8d1b1a508866eda5219d4b172f5c7e0ec26583eaf01903592a746ca2fd3be5ddea1a188f64594ebb14b8e3f207a21ef53b3930558145ec46b81e198a008fce5f53810d32cad903c52426fc4a403471437adbe70dfd827ff019be7ba16ee1a4429a9f2be6758b28952c953346ddf08d91c0ee8aacee607da6a84a4e40defc6f4fc0bd2f66237ea08ec3fa0f348ff582cabb9dcfe41f52e9e491101f1291e728a6d5e7012687ba554c12a9cb00f85f5b9d0ec6d06821c44037ef70d9fb242faa6b9e092aa2f9a6bc3f37e94d5e5365e680f8c38dc20712414a093ec0d34cc7ee68b4f5102dee2f73e8c2be7e8f835c4f6714204dfee0f8e6243bcfd5e81a1617742cac1d7363c8ba6847c70fdd7912f15df6121dadb6e650bffcaca9c2d226aa87e4be19ba26c8f8cfdcad79e3fb22352a95e6303fb342f2862646c7d5bbb07f225a1d1f76291e5014c83e8024b4299042a753f3d0f70f26e616dcf56dae78c5b716390fb1b9d91256f54a3dd8f6fd71635c740431e166b03772ac43d685b09127a9d1169410776697d5a0fed3f228502a5a36cc1b7ac07691d94417cb4ea0f7427c710a80edeb49c716ebeb0ac374d152d92bae8572994c0d9540e1a2d0897d440d382d087352a202967418da7a95daac31c2144f74c4c8f1b90fa82ce178dff3b88a0e9296c13a068c984989ec0b2806e5e4b526146d9ea7ea21df9b23441d01781c2506d8afc44336ed9b3ae3ca3359b13c5b83621431b3f1943019b6fc93b62c510da06e9d550d482dc43b7301ab3b8176c3ebf1a8f3ea37e132d5f2d3b96387a82bffa8b40e250ae2c4e842d60b0d7978ce18397057e5a19a64c59af012de47eb1e77e65ad3138aa9501abc2a280db31a43d2a3151eb069aa09dc5316472642162ef200300940a66e6e598c506413da30b59ef664b436433dc9d411f07092d5ed2a5126ffcb5520814daa66fa29f1788669eeb4a26b6dde69e161f2c7506235541cb5d664329d7b9ef418df52a5289bf4f5e7a9453768439c3ec828d6af399a4203e17340f13bd15a0848d83433a4c1cbbcdb929f1ea874e91ab846c21671f0170618732176449746433aaa1d4e218dcde8553459abf6c9e473b6a73f9557e7000bdf50a9579fd1de417aafb3205a6d7603b5562e768917c5ab9bc0b43bcc405a269b3ad345952da3bf81c91a56b2caf7cf35f4521e6fb817c75d6cefa270bcf9301240a8401fa93d804dc7243de6de1caa961554dcc7a678a0dbeebe7710b6e70c0ebc0f004bc2ac40c62d7bc5779efb31bb4c2730a443fc23729113ea99a85b0f4bbcb2aeb59283eb94540995e4fd44fc387ed203c659cc5c075ba78bde15b3301de7660e724b558a562a335215baaedfa3d7acb7f3352b6af230e616700a9920aace3952a6f7f40c318b62e0d87065fea79548f50a41c19bafbc699e8a69a82f283c0f87a3d180252d8609695771d51d012a7beb10d24302540c98de7e6b1119a2070d2b2d83ef14120f2a3e76db4d530e95842ae46297b42ffd5ff10bb95a2a6021ae232396798093dc66722c01ace10f5172093d741583a9c00c2cc4581c24e2b9e869fef91fea55d181326f58888e75021947dce8121bacb2086349e49c21f442182d5f8d244eb18ca7904f54ce3445158f157af05882e1f8a71a1bb803142975dcfc7ad96c70123ff3945b5e9d54483e824ba70bf106b04a2151523593227a68de0d891fa349becb09edae27719e6a154ac1ec101e71e97f286a987ce8163493d0090007a94cad0319ddd117cf3286630e3bd28e3b0a5a8c1f4f68016726922f13fbbc26835d1aa9dd4a1cef320ce134a5d887ae51998c0ccce09baa6d283a5047c18b158499cfce86ec578a2afb524fb1d80235ba8692f8e6d72de8e51aaca2acb41f5299812d5401743edf182200e298c68095d14a90fa8b1fc59839062bcc16da0bb38c7b77102c346eb028f2a043be13cef36ef7aea1e2bc8345ec245fabb4f0a85858b888235ceb815e58d48bb47cc3148bcc9a5d963781435a0b15aca93274f6e607cbe9ef907c861b948d985831b123f0f9d02a6ccc54082919272919e0f8710951412ed87a76dd5c24a126b196b9975a4866e7142209a944ac258e3167b12d4d9240b6ae446c7ef44ad332a25c4fd232c0a576dba2666b88f9103a5eee07efe358b4ea5a6e461b281fb307f8b140b163c226fa8b63643a46ce2670b20ad07259da5f78dfbf839231d5be50bb70aab328ac8c17627e84a6125e21efe4ee3c024af3b35e0832b546bcab1fbfcee9d930f238993d2d8a5ee2f2ba1c56097d6daeeb05372217ccad65b79a2662a9d0b30e04313d2a29e07adad7b810e27edeff117366d534ebac0bea01126c6240b86c00485a4017ee7f05c4764127671f68d7b578f97ffe835e5d55326b3cdc45d2a6757021e1ad9675009fcbf2283582a04a5c14593f806c1e8b97c62e3fa5f458ac08c5602b8ee0363ff9dda308cb626728beed7a2e7924d2d4a31dc7a8a4f29d0b9f226b04d1c0fe66238c5e29f15f62fb30d44f6c6a1cd1e28c607b7613412377238d2da2b4371c09162dd00f09b5d4d8bb39b20d2d538ada2d7319e9cd5094cf5cf3e01b33ca481990746819e9891e69a8d4f82b8075512717df7e4dc46fb26091f9a1223f3c98aeb0df500639b88259b477afadb45bcaa8172ea2c676198844a735d0333b3be9f88c1d852634b81ac48ccaaab927dbfe1fd4c6be0482f9e43d05fc9d1b0be7b058e21c3e14c26e897c10668c6cd2879ecee592347cd877addc2b20a8821563a8a3dc31210bb2e5d87621944d5c7682529b43ba8057011174a27f8a6cdc56e1b84a40c7870116167eedf430acd3d7ce967c462fe5a30fa500dc413f0c480e6fd0777cd8d70a744c975797ce1a5162629cbec29c3aaf9024b5076f1baacb5866f0253eef8b1168de81450a5d67b58aa014da66b1f141b1a8b9aff5d166e9e11682967f40f40be5d9d70822f77ac7a327676f2787249d8641d82fa69f26b6cdcf3676e8153628b4758e6958d37e815230664bb1ab820b67e869bf1337b3059ab56b91f00ab90be5e6d7adcb774bdb03196675dee86a77034a1bb2f6b1ae6235ba897add9c3a17ce2c8b0e4251c5431a2746b7ad1da8a434e6080cec97d1bfc3bc3040c946522800fdfafd7297e78e4a4ddf8360b66553fa1bcc96439e74c0502c3e62e0ffa823f0993a5aba7429cdb0e2628e692f52fe353cf47401e35734acb582c473430702c56c77290acaa25fb8009a47dacd4389cac01fc8e91a049a6cbea654a63def0d46cf41cd9a887eab45179a4f8417f7f02dc1c28c06f3c7606cb1d5b6ac0cea0c4ddb3c2a46ca9b7d85010865bb88db4f3a17ab7e23138bcb5306545aeb194e10d90d6dbc0801d7d29e55a55c585d082fff15e7ce6707bd650b80296e186c5422cc737632553ad36bd0b449240bcd95d3aad39c6704fa3876afa209f0c472e41e5ec5fab4d6d8279ccda7e6c3d60253912d15eed56a25d76285fe4fb8399dbe15bd15bbcdc47a9aed69f710cd2f74b249bca43f1533a692c1a9b7a32241e3e3' -let ppZkAcc3 = '0x1763f4c98990a87995c090547b9dfd393528494b46836564a77c99827f7ca1f80dd5125ec4bafba6fe5b04f054b005939255553e01148934e3ae7f8d3f17296e219efa8a1f80f1779bb16917bd2b411a8d9fc5482c465332aa0afa0fa6db737c25286344860e7b4a65ecba56da3650fe51b5a7be14701644983aed9add0eb823269b5ecd92e4e3d521a57c2f0350c9dd125bc8b0cd3847d75fcb91ce2b6a51f311857130b3adaa048d4ba909cefb366e9f8ecdb05d8fae685e315dc8cd21395001346390a5c6d926e45d976361f9af72108be461e8e276ed00171e111c752d7b194d3d1d0ebf9380c5f1933e5ef5cddec9fef4c2ea37827f69dab5386cb96c4c0a1dcec491cb96b1a98724685be0a3d2c3082efbe8906fcbfa21c8663669b4740af48499eb478da3f463f1aa2438773757097bd9c91d51120331a116644e753d1dba15e568c88b7edf9099e6fe1785ae4e11684f96dfef775c829dbfc555e25f0bda9b1f3905d0cc47dad9b8a58f4d55efaca321c15c51b49b0028d30e4af3c8140c8239a2e40c8b28ee1e7ed12b780f27e717d3791f0052d44b7254d3e4099f1e37c89d3df04e828356ee3bd2660841b5b68b6c369f149e9facbd409335f85d0a2b58420ae826f376364c56f9dcabe3fe961744d1a4a5372be1328f98189d372c70d9e951f702e80fed699df9b9136c3ddd2c27865090fb3fd258f70726928f1caafd123012392fe4c8a268c339db0ff1ead8289a1e78f831b5947aafb2e88d14f39c3a6de0ceafd833794a9115f8d64f24d45a41fd2b1bfa8d6cb7d9b3d7c82008f78c42645fb3dc5166010a0d7dbc69ece0256fd610c86ebd98155dad3bec03aeb3add62b4a12fab733bad5706a55351ae55f9007930aa32998d5491c2d8f0b240456a429f1467504bd6f2217012a28eac0985afd22389c4bd2c7ff18546f171182dd60a2e15ec4f1ecc49584e2fec81014067d79d1248cfb9d648ff255d606af343c89cc7ae9132b9f885024594e3c2bada073b165f13111f13c4ac7bfd01f8830d055045acbe94b37ad8454b7009a1d651e36338993a99c513547994fcc12528b6edcb9b235a71655d1e64c80c9c97d4f0c335c1d3ffe608699c0256a16015811e9953d6767b10cb2aa9ef24401ea63b2a63e3162895200ad2c043532f1279d92f945fe0d52f987c0ee5511d77782e97dc7593e235b008665419742517f160bba80062f95e9febd99806caf7b368ced0a33c206088a6b05370db3ea678424798f13af47898092262e13adb4f3cfe6ff3afcff94b04e2cc6788d93113a6017a95afcd28bc666388f4ffb39ef04e82a64c1bd96f7c80b93605579012d4cee134925b5acda9a098e5bab015a9ee904899acd61ce35f5fc70660f2306cbfceb210e33ce4aede584079c9e96251c62aa43841a9a3307274c1be7f7d42144740f2df8a16f2247adaa55e9000a678bcb2c0e21e04f6acb16402bf9b0a6dda7dcd72737480c6dde286418885a9dbff7d7f388dca572f340a6f30690e3b7f801ec491c25f0cfe6b1b467476a82e26a81e2dafff77201d982b07d9e7b2dcf55ada0e40ba0a9431a34477f00dfdd90abd4e2513edbd6e4a4fc20cd8e86574a60bdb9fe1515ff0bbb8582635dd9d2c251e0b3b23752f6fba83180994679a81f89dee95a2da3bc56a99005d242c482f6ae8912ec15a7215d3da808f0bb2877e5d0ce74232e4e5ccaf4be1f0d690dbcee352fa9855b827ec7e51c25e684ee07eada46e2ce292d3e17de48e987401876a5b78192978400f74d6cd935253a731bbf48ac9d161811539deb26aa8c1fae09bb1e1fa91ab6f3e8e44891478c7e5a971cc88b268205df3d2eab5f4e3cabfef3d742975812923088ae31803018a36a2740b31297d41522fabf410f11015135e22c2dcc02385d03c1125a0c48fa2b49c52a44edce8f2a526cbb357a827c9f93fdbd119b79b6081f01405fe46a6cbc40e3f21907b63d1c1aec1657ba16f419918f4f8ff7a4101a1aa59d6a08083d669a43bc771045360d7e7a4954e7f61e25879fbfb8afdbb2a21d475d8121b8d0120c44f1eb14632f114e0c222c2163a8e748446e850550ba97721f6983c4154be5bead78f45b5a4505514d2fb9dcbf24110b22b606ca672c1174e10133843374b9218d4f8f753e662d7db50eb74f6c42ebcc9058be9198220bb1ab888653d98e606cacad372aa6642aee6401c04623d1795ac40d155633620b8dd64226950808597654c8d8e253e20cf8479e875378b509768f3a1b27b0b6c27b0db9fe358ce5af6f8640b6a7930a2715e3468626f6cd1a98a1a83a98c8b387e3f6b05584551903874a96c389d18f1d2af2402a99ba03766a2c2075c8539806b8612a7ade434622f0dc66a0a047cd28c33b751fbd620d0704058c89f9ab435cafd2c76a15fa7b408eb2b5bd2cd88a0752e0c557779eeb753b137881a76f1c4785e23887e662151f0047d64e24f18103c08dae4d23af28c8274e59d694e30f3c90028c9dbdcefd3fbd4f2ba178c23f077eb7cd2ee9a5254cbf472a1c2ddf977bfba0824f88433956f062b7c8a21e0928c7e15d0bf9eb6fb985a5bee806639c876e255514433fb10ad0a5b16ba290c1159d8dd05692a3bd717af87ec080ccf477019ab78700e8f2b363788cc178ce282e4f2269445fa6b07477c5cd2613e07edeaa31d7dfc12a37ddecafed6bcf7345285e9ab93ae6104bf61465ef06a70f9696ad280bf703d5c7841f1ef16ee2c5722039b1e17913b224f50bd2e4acd00e7206a28b706377b034882f15ea62f29d780c9ea3fa4eac0198069b4282d00cf5e0412aecfb487bc86020a0623b09d3646425b8b36089fcff464d146bf98d1872c6119414a419cee6bb1d3e999494392b3316aa1db7c75f8bc8917b51392d53a97383d0e84b43b8c448e67d860c2af03da6116336522f32381ac9e5b7bf863c52295dcce55b35c2cdcf2f09d00715bca8c3019b52679c1233682ab55a45c58c6a37a9621a2b52298f98f95a236c574bd60723fd2ce53a679b74a302e944769b8f4ce1d64cd8ae82d68bf30b80f523b52aa32ca4de8b926524152792dfa2081be1fbfe3d09646681886e32a83736839c7c9b2bb8f74eef178cd41c2d22c22b6d0d15461ff55669b085461f9e78e412fef1c11bbd15020ab1a9c7191f7f700912fc8acc143b1c535e4addc5a063d8d80897550ecbb2e0f0a036e6762bf0fd2ac982a85371f0809b788d046859047829e6349329cbb86ddd14cedf3b4d1cf0b3eced25cbb7994942ad30e6d3ac19f156c1f6bb125cf1bdba254cde00f82d99e53dbebbbe8efa859f33cf3a543a6e2974cda05d1b8c85dc3bb1b41dc8f218d4c459ba6579194bdbe5948c34ae0f58e6be4366f702b8f67b5ab5bacb63697dcae783db91fd2d70b1f9b438236c4ce62b455bcce709b4b3717bff3f51dce81bf5c0303967496cb93e511205130d00609a1f56bb58146b989e3577611e473229f689ff425378b7d717a697afc9240e3b3335ef2c950371eeba6ba025abab8faeef676ad06dfa9a95e01086ff19ea1bdb65525848990a73553fc8e0213d43dcbfd021ede23c54846dae22a5506c12eb77fe9a349f1904ec232ad77a1adf3aab91df62910a0083e81552bbd7694c0a81027e222712c113816df49aaba34e3c6bf305d4c497c838dcdc4117083f185626183d29d53bd41e13d61810bedd16732544cf472a7afb6d5398908096c299ac20d5b50c15928c04dd82c9534468e0a29f84cf5113d2c11b8ac368268634d0ab795e96555346200d58fa984e19f75423125889d3bbebb2cf803ecbc805b60f31706be35b996d191cfb9c80c95b56aa0567353fd3ad97caab550ebfe36423a32b357517c04042f42271c6f6ff6ddece44816ff8cd086522f4a8b2e51d3edf636feec3bb0f7f2b4f08cfa65225007a6609780af32c6d590ad46df5be6ca197d9fc7d3ad13db7ebec1b48e6fe6739f44ff9bb59b5705d7c09d8e7bec8adc047a425fb12c52507a03024da2233f8da560dd65ef1882b40cd0e1af64c870f70c0076aec4e0c5468474e080d588a1aa7514d94ca295df642ccba88ce67329a8cc0332cf75484ec062c1b1d11d0abead5a5cf1fdbb8ace44b70765a15ae067fd16f5a3ec3043553ec78b307c8b54ea2228c3ea06e1c248ff0157c8b7ed5f902f3945409127399a8ffa12a27642906d5224b0ed0cac72e5be0ccf92f42f3deeaea646c6553900660109b6e1c0503f10da9f3274ef32bbdfb914ef058fdd5f701c0bda413eed2152bbeb64a245490ad6b85d4c8638116c336afb3c4df75e5b0b1c1ea1725320f70c2cd47561e701f6b40259f66171461d53449253981bd17a14bb15169a5cd4d06635c420e2565c826dbef2b1eceda2868f688816677b2dd4e644138f6f79024f7ee5e0ab40091ab5d2d1266782129408cfc050ad47124a230557431ddc10c680caecd62620121e410a80363dbbab0ff5a4717597d02f57f5752f7fa2a34214e285b3aae0a09eca61ecdb6bd3ea5f67d77c28f2460ca6038d3d74c77f240e6bf3a594ef3dc2f431163f42ca6a5762394c8bc1d5a3e941d8374ab16772ac28a6e2cfeec3dbc1088c6a55c9763cbcd8a1cd5d358e513bd3603a6a94b68bde2a57a1ee0dea1ba12254262427a5b15cdda73de7a7b03b0e5ed390160d097d6ebdae8edcba8bc980de98ccd872690d2cb7f0447c5af4c8192b7e5bb8ee02f0918fa74f2da67478c06320a157db013555834eb40db0a9ec189d8f7dd0116d32041b0c8a567307955101ded99043512ab69e6689fffc8bd0cefce0c61db64e2170468ed046a68962e11f86cb4b51f4277a99d82992c34d717ff3af98133e04ce9fa07af5aacf378022b8fa849d1455deab309b1e8fcf4270db84797e6b458a1af56776351aed1ce4d09ecfcbba2931472e45bcc07a2b9acd8b19aced8c51e925538e52210062b1d8701803da89cbab6cffddd225c09db71609464a58c2e85a9654e7af4bd84a437070f6a63ac798cb525fa546d9ad755674425b0b6392d21b228bf8e2af94d185c5a1b3c6afc8e8da49fba4f07204f729aff9bebcb2c5ee2ff5f425385bb1237034127fa0607e2757e0b0b937a852eb4f5af7358b5e36adf31881488128cfe8c50fd22e803519c50da504c7534a8f711cc7a76d7295559ad98be25c363a786cc405509626d9308f208d1d912713047a1f7e9e871344671cb8e7d91181de434191741035fcc7eb2590c10e93aac08b452408ca5efb477acc74a0e5c9422413af08e2b2cf997c6ea67ac46afe51784e0ce6bea1c2ad5bdef094c97edd95c252f446e311386a4f23bb3d87ee1d15c95c5b3697f185f022b681175ebca4e1d009335fec025f35234451f67030dbf3887acd4bff32f2df7bda9514084d7e1b582dc8094df27160a43c75384e665d8f7f6f55654234d86eba611fbf98ae2d6d47da23bca4d1196247abced0d11b07a2d4c1a8e5893a10b093683da30677ed6f40c1229e8a80a770867d797e2f2ac7a5185d0b2ae05bff3b572df71ecaa01bc57de0e91a57d292120cbdfb2795603fde63ef1a536f66b472734ed417e16bdeccb3a9029955a06aad30bb9fd0576f28a506d656fbaabc76d7cb2210d8076b0de4c9c46bd19cf06263861fd2c550c682208966132c0d8601e65e53c9962e3d9ff4f9e725dc9701275ecc3fa74572915b12befc8ff62266ce168bb608cad627c2a0c4cb1ac70450e9d5043c66032f12850e156e7b85713c7ba658b46850d5fa8a8d5cf74aa310501677bcc8267d1ebe0cfdb5cf1d9bcf40f258ab171d97a8b3de7b109070308d82e7d14ba7712f19f84caafaa2e8603f4a0bdfe4a596a5b46df619052f3ec5bf61cd848ff2819bd49f7cb31712c3454c51e5a4716b0ba6f4ea885ee3d294296bf2e9696cdd78b3dbad9d735d0712f8837bd732f934cb476d35c287beda2a907610d4732875d3c79873245268a4a0f4f4e1043f40857b40843da61c7d897ed7dfe163c570d8284533f376596643ed71e3bc190916c27265dd2613a7a4ecbb4b2a11e817ace975af0478e8d2a901546493c759c908dd0af2dbe2a55d2e45e22924513f06f7e00da8db67b24f05fa86b279cbe534242b81d765ea44de2262b183a072b6aedabf89a749c6dbed28cd68ebaaf00d4a3338035d7ffd87c475012f9221804fd8230ce84bcb3d4c1a5a800c826ccba6ab8a6f437d9f0f249fbfec267598f1e1fe67cd44fd54e30c897770168b8f7edb8158be514ef13b138f2274d72b76007b4ce4a95191ce675f3ea7419901b29efd70143289cac9058a6ff733638cfc9' -let ppZkAcc4 = '0x1fe1da1041f5ecc957ac16259a8547556ace9d5dac8741961331d7b4db985e4d25c64aa23c913ad5633bd4fd5cd7155e2d8e9a3da2b9c74d7c07e5eb486c2c090a8c01ec7586a1ca42eb2af69e934a8b58d251e722aaf33f198f7496134b52d50c075eae207b8e10d4171b2af916e41fd3d1c8e022dd25b25ebba1b1dbb436a52981446ffef39da8aa3b49f3dfe8c73ea8d42fc9b1680513260535269de4c80b1f0a240571f9d061e7d861a9fb0726c113aadd6bfb65dd7e854915a3f8682641159b6d3487f6d997cc5ebe85c0bb50632175f26c6b34434886a331e69b0f822f138f83c35a242b2a0cda29aea1fb80cb73f0c2a24586e52f8a1217e7ab3bc78b0b75966b937561c6b89cdca41e8a7fcf13e30cb3fca679e98dafc701e23bef1112c6248b0c073cc419cc2d0e223330d7953bb5c79331ecd8871b8971367a53d41f68006c728ea28188f96cf6d9ec6e73d838e7755e1a034c68ff843aabeebc292e0a896b3efda4e0b833b1012c038ed6e5adbc31f4c2184ce36089ed039069d00282732986e4f94d9d7138e343d37b7818273821ef8f658ff5ef50e55b7c8c962965404204afd0b92cef1e07d90bc1a10342072844ad20bf5ab40df2365bcacb242050127876f2f35552c52a7b55f30f0f49fd3dd757e711de23f74f12a97d6a24bf8304d54a32a03b242c46b3eec53244f64c99f39be34c05344735105c5e0a1c9d8df10bcc0c2ef23389440396951f149249f0c38ef4907e8a03b73e55725726e293ce75bb2cada37770e16b6fdd100f5a280ddde690a51f1eef4aeb483f702a7207717c3dbf1a793e9029948580479b69cf768e13cf6ead44a570a514f5a5193d52e6a7b8751f0a53dfcd612b4906a67f419b2079efaecc37e2547ec6979a2d9fa9a6678f0862e09de6a8fa6b96aabb5084281fb2a1bb888787129ad9262224306c3b2f2638ad0dbb372ecaaf06943aec9e054eca86be87888ef36d8797722208b24b1db9307515d5c85e16202f556f854c1ba97178c44802c164631f392e0668a872b2a9dd4594e3ec0f283262c6b0d501c851849e05c62e3afb389cd63727a0d16e544638b4b93622de86a5591f236e731f1a6fd8b6e7b4c8f9a867076901a903520125df882c237c42c9d60a5d6fc7a23c2cea616af1875593cf005cf72a51a604d5c68af17505bdbc5f34e24ffb7c8e9ab758f64289e83a87ee3420722ce2ae5bd813bdf83ba594aeb9253ce52d12b3087a8ba75ca5fabdb4d538824418b67e2019560a4590284c2ad7b919149a1d99f1d36f53b7a5b25ce89cd3140418e5497bcc969dfbf9e055991826d2732c1b6d33cdd2ed68eefa67d6e59b82f10257228e6327e1a6b253062a99453447bf96b13f21329d4cd6a05ecc1f63fe032eb53c9b9b5da279abc2474863d2da78c3117f3c9c5ffa82146d1b3be3e670d4209f4a22bb498380e53d42caa2b6ea4d6fa7ac58cf48b73de450f12b09a7a106251cddfc6555b88f6e266f4e48776b5b24858df99fd75438690c71114f92a7290886387c8487894580adf9ed7aabb71e83907ca454d531f47d12f0e3658a3b6730170237546155664678ba6d4a561b5434e483c07dc1fd4075ce375eb84e00ac0c336570d009669007f85e8b1024cd71913e2bc00747aad56a67d4998402c9082eb1afa68e8a2a472d207fa41a732310dcb3ce34efded95c522a993e0f966a9523d077a453572d83f6ff234e4971b6f4eedf01a1658088f0f6e43843c25098520a03081cf25894b47ee2d6725a4ec7054ad4bd5f0d2eb36e0751ae604a7356ae1bbd7e6d7bbe82a518360b32104bc7155ddaa46b4acfbe7afbfcfc1e977b22451a2a1a51197193b658d2f9272aab32a5f32781827a26bab6f7246af83908cc8c11cc68a4339abae767bf8e8f68923a7b828c202a9c7182a4055edcd73204b9ab072cc500ec5761376738b93d03222a7e3f32a6c9c4864002dada06cf9907a62c28c4127f149ed6735acc661fa0d76978176e5d49f97ae5d2807e2d010c23ba81147e7ab2b8e21b88a4ddd6a7dd3b71a9621017c766b252032a06ed4a31057e7314c5bab810e467d11e3e1e2512f578863b959afc734bc31746d85344477b678e2e49e58f866d0e645de512aed54b2b24ad9226d6a9056826046606906e441c4b1799a404c685199d2f27e403af6463a2a8a33de4b0319af5d97ff8750bff24c60471067e58c2bec990620c89ef1bcfa0ecc510c1dab08d7b0caf183f0585818d15638df11c0d8a95af4d9ed4fb7a847a6b9c1d9613eacd3fd352f2dbe14e92130d026e5aff0591c3f5a74f3545b29c476e7831649a1b4ba767cd0b3e2ac9af4f2fecba3d9ef20322aad03160f1ce34a33290737b323d159fe6b99014ea463b8410eb68d5515e076ed1fb4fe15e510c24d38c35b1a172f3a9117fe73803a52e6b268867cfa532139f5a3823744fe875cc5fcf04c1a3a1804653754f13098c18130597e0e382bae9aecd05da59d7f79cb28204627db95f1bc75d7f2b22f0c1809d2d44f05584a907da63e5befa4f26d1868f7b9e5aa5fe21b854189b93f63ec467255d23fdb7b06ff20f5d083ebd5224c7932caddb24815c0f2964513c4116af990a83a6cad22958564d0e27e0d620328eb5c083958bf37643d8c60287c95264bb1200dfbb59d969072041d583b2b095fb904ebcee659b5a0adaf52c19fcd379b4124349916ad3866080ebd8a2ae47bba6bbd6f2927c32f2188a9d550aaf88983c1bc4448b48d764ce77cc79f36abe48e51b056189b25bf0b2e01e3f956974c4d3034efc22c3989538fec254a431c105102c15d3967498e56f1f3e5ab8b74e25a0270e40659ea31ef6a5a86cb374018b417c94ed3ae559a4eee116888056a0864409b102373f41b53ca2315a0f268412c21a4a7a61f1b5b7c325d14b7626f52a8e26fa2b49f5d9c8f76b4da0e8159df83209a45dea6e4e8082b58a9b966801d23c25db5bab71e61d34e64442a92d42d9f8a30820d14996a41fd12d10e5c196ab9e2ced9ec45a20fb5cb01679f5aebb814448f67441053f5f903e06d987f0dcd6d40187fb4cef178f83dec793ee9e03fb609583c0c1ee66e0bbeb93cddbb641a99c2ac95a6f0ede1056523616aec7879198e37d93d7820c151be84efaa76f7e5f1e12ed95a87c39cbd84af39c3a764f411869dbf9af241476969c462d3a7c28db751c12df91718df699bd55840d62e168a5b64cc10190d4e8a032c0c9063adffa260ecd2fb818504149d8bc73794b5193539205203fd8dbc07b641cbedc8efdbff41b5eb7ea67fa20d3c037da34a70c2ed629770d1b23eb2b0bc6bcee991edc841c0cfa7556ed89ada8bb1e5da911cfa49f58ad9ccf0f6b5ada7cacd0ff9f7dc0a62bf88f00ebf278fd254cd083ca69413c08db2c18ebae07227cd0fc61a82504ae18b862fb2aaf10e9e0024ec030cd48f2cfd31b9a92397ae96028f9636a36573f0d4a1f3694865bd25335f7999665e3614e62681beaee1c04d469048f7aba61a13053a6816661bc3015a35d991baa045a7c73fc33b872b9f6a2109c913d0266b1302f56990736b3ea227867fcce296c57f39a1f38f9d64f711bfaa81d2dd6d38304b3e80f5cf737a988569cbe0e595bdbb5e19cd6ec810572464bbb9429ed0a5a22ff4293cbd3d61ae4513bcac057a26b9c54aea98f4266901ff21c5787b6539d0fcec510fa2dee42b435beaf4d9e5b919a0754d3d9c0e9ebd50b6f236de6a39612f40ea88e2e8e137dec4b142c992d70f6e87a5b6c6fedcac9deb07fa7d603f71c920b6c24ce49deb2cbab665785965bc2989fab63a5ce08b6492e4060cbbb27228ca5b6b99d54b5b8942d322a6a33b519e79a0f63bdb84ce37beff9e511307d2d48aa4c71f086a8ea8b60aefa2c2f5cc66fae0cf677e0d94ad030261a5faedb23a98d268f0f5985c01b2152c48b5591f7ce5d32514caff88abf5867f17f3eca0cfaa5dce79086200ea6345ae59a22caac7a931481da6eff5aca1638fa97ea0e0d18868f388bd2f62e5e7a3d0360103133bad52d3bd72fb0dd0a5e580cfbdd59238391f1828fa59f614175d234b8a88b1a50aee168beba0fd4d896c6b28c38712105b39e94f62913c784599173cf23615616282446859935a1018f839115eaa90db44cb481bf26b9883d5eec2f575a35d605514499e88d3723c01a81674464602c62f4e6d2b750999ce5f0349e9003611a2b4aa8ea8a6602fb7556dabac070260cd30b455ed258571897ebe0591ff035bbf12732d40684d2ebb148b81a51c67f13f3a4e2805380cceeb4ceaa0e116dad5c7ff13cf2318f5ad95d7a16dbd2045130351725af9f0cfb07891ea16ac29dd161ff446cb74fa931d2cdd43b9f5acd2627f455756996968bda2de971b44166c8b4ac87a39ea09282f0aa58613b4f041a16271ba2421eb629a2ebf1232338f92333fb8e3ad829d78b9f14213cd3cf70f117c3eedc92b1f8302effe979d53fec3c9528f0799f5644d54ad285909dad82292ba48f16ccb41cb292bd35e4ece968839067a20b19c1c03b4ecf245c0179134717d23dd448950bd61a259d4540b34df2be9279f233303c9fa081a3ff749068a90a76924b1e395cfbd5b4ae9eab61ad17a54f8d5224ebf304e62921e62c5a6feb0e778dccf67404c6a4b3826fc0b6e2eb61fd3f8befb886357a960f22917ca19b0763d63e4be1d65aaaa4dda6ec8c85819dcde7adfae2256f72b8d9282e85b245054bcb3b8259ef24ff3361c8e87ee41ad2c71c2f076856f7ff8f3fbe442352f12d4bdd67d1fcdeaf203f7cd51808966bb99f8692b65943217df93f3dd7f9cc94185e1e4f5e20d3b7c5350a503d5f5296d5a51829b76b9e6d6b873079c407d4c92a405b5cf26ab014fe2a0c4f91ac1d5e332b6154c912e393a255f988b06e33672e3ce3d9d4e455b30885737c70915616c40a9e50badf8fac18afb9ef9b727dec1f66ea6310ad90e96945fab99613098fabef9733d651bfc953e3c1930d519b9904f395939fb14201956c16349b1268cc3fd47e468301b2e46becea7034e4409c135dbc043dcb589d4f25fc8bbbe17a8afdae00142674a516bda123f8864f624e1dbf945bd03bbfb80ca474c172e62262d5690085e321fcbf99e0cb1970b340fc09c8fa82c520cc3c0b5dda6ea83772d5f98937cb1e2fef395b2cdac292ffda742fb9a6666c03dad658ae523e41293d7cc40ed78b4cbb79ca302624952f9b742b111244cd0b3beb5b08fcd28430ba6ee7a1de6d9608db91d719ceda6742bf9e28111f2049fbbc2b5e70960417091a30ca3e4425a539b47dbdd5de963a0d8fe67e0960e981e6d713cf8bf910d1d90a563ba0b5628ccfdba1c6b333017d0420ecc6128cc6df31193bd1249b0f80c1e5cc6182675cc8cfd1080e855c022a1bae31b10cd2a60cff499bf6716ef360350211bd77d74b444cd112f091e9b5a08c42ebc12a2767385ae011d27ae06376a3eb6597c0f729ceacd3ad80fc48c873bd38912c13f8caf7ab81f29620e10f6c1a95d44f69e333f4f71951c922d9cf459231e2a41983a837939a323ae66b5e11ade1df77e87c611cfaca401d2c6f14a363a7c0490b1d9b5c476bd4d5b4ebdc48a013cc4a5c83f4e6b9884147e69754aa4fc2b6332496d47c95fb4b7320218b86726b79f562499a76add49ed46dd8fd2ca6a555172c8e5267458059acb0841d7c8435d3739b1a3e8c3353f80590dbc88f8edb728f2481d10679b2e9de863a2c4287a84a149e97c8ca281cfc50aa4bca7593fc3078188227ed7e5c013dffe8543f182aa96989b644dffa89b1c3363d376dc2ce3b0916b98a2d4a7303a96fb637ad581de55770d7a84b3a83184017cb5273a03e50d0061761989a0091343568c1b4185c51f73c84a3b6c2698935da747723a108b4e704d549de6854f72473e99bffa5764a36f67f15dfd2a839f343f5004dcffdec81204e09bd3eccee506a8dae2a0691e7d94dad5ae85898d5e12f61654604593a5d286c1de1d1a26ff0ff30afc2c2ec7df5852da123ad64e3f6aede72496868038c2bbb93655023fa9f0dd1ef612b0c55cef1a8d5498b045a610facff5bdc328517023bebbe5af115e46a2c4ee6e0c4d4f4517b1018b2ec60de3a622fcaed4f26ff239fbbb7dda75bdc0301271e598edd32030686d26d980e9e063311323b56e0080f43aaae86fd3ede96345567ed1a4051270c0d96019c2d32f56367a9e31c3cdf049f8c7ed97db4dd6280209e02ce662dc48e7adc36bdf2e648235e6a79bdbc6622bc562a6e847aea79cc78786402dd55e41b5d969fdc6649799719d47c709a83' -let ppZkAcc5 = '0x20c68a703f8b929aa82d1e9d3432c6d0fe94831b3e76c78a2feb1493b2751bca28164d167fb52a64a5003ce3fc52f252b9a0b895d58fb6019eb234f7bf06af4e10f3f8b75a0b3d99a3794581b7ed9b06eb95b11f4c053fafd1b73a7b8c53dbbb070fac92cde626020bd44b3e510959b0c4937ddce397687c0161c8b35855fb871068d0ee0f6980e6ee68e1d85dc306e199f023d188982a84b4918cae1afcc8db0e2d057f6e7df48e781abff0b6b586e9b61eed86d6d2fc6f9aae9734129eff830a0eccd8bf0686c21a181670aeca9b8c8cc0724f66f9883071a92f66784bd3840a166a565c656797dacb4477169ea83bee203ddaf29ee1b5e5097675b346b970280e227a26200431dfaee7771bd15a1dd904bccfbb6a26de6d8358b577f3f8dc1375a946c1483f80c3d22301c77819479a016551316703985f49e277ada325a0113e053ce2665524f234ce11ca8880a2d887d75d4ea8667dba4d90d43bec607a16f6069d139e32dfaa61be216cd5a090d05a66f9d34215b6bb138c80cb4c83230adacfd7e3bc71025600f3ae9a82a407254589ec1a16e93a634274801654ebd8064918c5869de5932c5880ea7ea1017bc7292ba1b09e8d759202a4d584db06c22c8b7d63ba7a052a1dc9ce2ca071b1a3b295e102a5b9f5a98e4e5f81e1da23432e733a5f41788d52cdb6af4e3cc95bb7202d812670fe1c4508f449888bc297fd0b7f8418083db9b5a2135427d696a69cc4c7c4167b081ce088cbdef1d5939e53136435d07399f0495e4b9cb4d10c05c1f25c56052de587efcf8636b81406500309819809682dd8c57dbae28dc9df332f74a300602c39ee5746beb6ce2613ac1c257e3ae07da58d835ed7ae0f708ceb4ebaa0c91bd5d6ee42d26e7f9b503250fd032c998dd6b765299d0b4ec85ef4b47ed7f2a94d81312f967535bdf2e5d93fad13ed85333b03127428e0a549a1610a0e0452eb7cb24b76567ff98849518472961ee62db8f9f43c2c33585506c775fb472215b05eb3b222c956f474a7591019982c54ee0804f17594333a9bb839d98c7857606ad0b7d95cfd10e4f6fb92bd14d425d5b9a623bc446d6a6098782d74c8a28ac66ae2b996b038f042124dde3795de0b89372c427156551a3d4c4f885df2567bbf6259a3166c60e94a9dce3c477f3f2691ac93127689d6f733e815a162ddab78395e39fad92c26812fce4482460c58288b043a5a66ee803a3200e8efe7f88cd2f5290057f61151db73d3393b9f7d66288bd1bcdc7c6a58d3913a335441ea0518c6b9364ca519534ce63bb3fb1ffff4129ecb9173e5d18e0efc228a6615ab7a99107f7c5a5f57ce4d16a1f6b1fcc7f80316026d2febb042115db47cd5cd208e661e01528eae06e70b880ab015fc55522913fdbb04ce3fca754dc9b7e9a011a7be8dbbc0878236caf7d76359beb8067f2638f05a0e184968a7e09ba03ed2f0f3db8433f39f5a6b8278d17b89be6cb311258a056e745412ab70d7e21bcba450b917f97c177e06435b1b97d8c0e22fc2841d87d5aa2bf49564458b54a89aaa6b7d91858a639a449a7ce8dc932b8a0401f72c8234b795a86c793b3d0ac164fd034fb6bf8bd1e542bc436da4cdf7639b9cd82b8c0e7cd28b562303b522fb97f9c82684bcab73e16775bc18d2dd57af95a9ba2e38fd97156b90bae34289543c23d642652a63664dd73208a1f4e000b1bd6c501b42c8759a5623091310c62c3af4ee663cbe0c7125a0dc1fb85478c2068dae700821577040a36514940dcb8d806fa6b67262ccea5c8f413f2879072efb8595151a99f2df21db22c50f43defa0f1bacdf8cd2dfeb4f11e7bd57e861cdf040f57f175e44041f6a997036595a484d4b348d785601975467cd403a603900ee0f25960a019ef71c96d77b964b4af11afba7cc5466807de440573d3d2487cd6c4eee9b0d3fc6050339cdb04451024261d8d407d94b70e66deb4b2ed7b754acb2f85c6b1d3721cd346c8def122b2f98fba5bec1666721bd54f4252b3837cfa98411dc210166389b5b29c107b0a3e9fee3894b2623f4d5942f8d11482ede6c72f4afa10d2f16ea4a671947bad5d2216dcdba693ebc9d5460e93859464db261a894d01e8412f45b561af412e96e6982afc548e19800f1718b5a890b224a208f3f367def032b17a989712fe5164b6f5410df1a10c037c764d42feafea2b77672a9cbf85d1d0c3e7ed5576f189af8c5f07a15e56c8538d013edc5b6f93ee67dc25f9d90521a2c20555301795076eda371a7470473f14c9140ec074eef8b88bfdc0e217f395825a615b9c3eeaeae4bdbc32b72c86677ac03ad08482f364d7c9f8326b6c75a8b0bfd4228c8572af835e9d453af7cc6c5d2e7dacfb9ab793606dd5f092105001f28a1ab64c2cff0552806b22c421e7b5f8e84c2279a9bcc56cfff78e10b444df42bc0c14e51fa410dc69377df931e56490548a475a8eb92240e39d28f4b07af321dc30eed7add803445bd1dea19d5a52f39180c9024522f64169cc69c5904dda40282d20d382ee4fffb827e39401016db3b5b3a0e2b1f4557e17a0d3763a0035b1b804f621a2f127d0cedaaac709a9b9393d0c7dc98d37dc846135368565b1f042c145028e19624f3b44bf570001dfde4a878b235b86746d5cb3b3d664ba0862e204b1d3f4281ad34cd71a5a429d243aaf0f6af9aecceb36fc8af63a1d6800d1f061158aa1c31216feb74934dac730ea08e1f67cb40eabfe285bd7cfba8cba0a826fe3c0ab617df0b77ef70f532490278a5877f4d60ac63ccf36c3eda3fa45e560025d5a9b05c221e55928d170273e078c0cc2667d9fc5425033910d9d1e26e64151fb7f5d5ec89652632f8c30ea4dbbd44e5c201df4610a80194ae6ff65c68a90c593748636a900b794d8253b16e9e6010a4886610d48d7ce5c977e654a07de9207c232a94b7fb6627a40716187aae0d58e26684fdc97ca826ad1208413040d6078cc977553cdd965db45aab09d8516da27520af7d1618e1b10fd977c6d9cdc4273943511e00f3933e58a52e0017853cd23a915ca3c0abd41fd974f50ca912bc270eac36807937d461f5858eb7ece393727dd85be55e585feb3192bee386504f196db69445a9be81f2b5062be17edf148cd5b858b411907376f18342a5505b0929ae0c15bf1c601cb69d6dcbbed3e9461dac8865a57efaedd1bf6c566cb6c044070396ee69ccabf65ef6b6ca9143cfb07a886383258c9031fb0874cc4249e2d50ce000a3555c6b27fa548f476b913604090d6fa7392e5e4fa07c06b79dea0ca415757203c178be5c29e12c11cda00a5fe189f5e7f764274589872f00ff34ca220ff9c8778831936c8f38ce785979362214771d501251bff41c4f622320e8e22910ec32e109cd3f712273e2bb8552ae164bcb94551062eba7145ca7fe2ebbc7721f867b09779a24be20c5654c032e506f571ddce6ec24bd714823e19e2f5b2356213cd2b6c0303ff2e75f3421ed9c2e2d6e3c5606189a7f3b6d4a4f69d9a1d0d1197e44dcef961fdcdddc83e52ec5cc5239843ee137b2c5cc5c3318cc038ffb5b1a452f209f662ec2147f6b243e9f59f8693b574226733d7d7cbff5a266e9ebc323aec04c2b998dc37595d1d54e8d4435ad7d5906e746d5db062223c993b2c3cd1b50d85c086c041496db8da74c037644b8ce9702e75a1c0fa127e1995fd8c6d30f0592766f9870a99f166787c7834f65ee788401f0f7ffcde0154657fd0c7bd626cd4c63a134e18171b42f1b4f82d455680a518ec3b8b818ae39f811fc245dd117411bf0d4b8d09adb98b8217757a17fbb61b7a16be174292f995b77ee7b89712cc6e0fb110d1ff8e2914162178238d51a9d1e037316b20582ed9f252f0cd60c1dc6aad26b6e166ee26d4efeec2a25bbe50188d3d500e6cfb2093c0cbdc2fb7e0223bd1434d325dd971436c257de734ad906d7864b4f07df24289989aad3dda80e1e28ac9510335863d79529c3eda628d604003859b6a92784540ded2760b8511cc6b9b17bfc75faa7ac17c7cfb4ab98608382c44708f5a9d98236db6cbcbd8118083e52a36fa250cb89eb577061ad9d479eae62ad892240c6df8afb6579cbc017ca68192d66d9b8710f3bb6dee406deb1391aaf60f004267e827729a95ab11b083f14edbf0ae25c0fdf339f7d96cbac1378c3705a9a3fb5b621b10c7cfa92420e7317bb26b678e36aef01f8c7760d3ec73b71e05a83ef5a6cf72b82df7bd3680a96fc2035c00445ff99cc61addac5a884f4c69e6cb7aa9fc2dbc3663d677ee51c5e6f7d03ab903ddae00c8e196f6d39be5bdb90a489e5ae5b896c1e4504832227bfb7082851f9df1056096f8e235b74253c17efbc470b984ac3d507374e44f906d3aae214ac5b466494ed98f1005b74cc98c841cd582c45bf0d23553eb5908c22c1275259665246a647f04d9994e84edb3c0c868f01d162beca37bee579ae4c013e3215003238fc0838fc72d25db8bb636324722d705d85eee2b2a9673c11c12372c718196cef3b139c8490d8f5b783c51721bb5d48e71856c91abc991545950ecabbe62855c1dc47461c941901860828f24e94e42cb9fa2310212979d2c59d1d604e9a7805478bbf545e551b00701a2a3e10e5c40cb01398f9ef0db014f57302e67463b6762167bb569e765d341231e8f7e0568bee917232ebe659cbe6cc310189299302e9f8361dac4eaefb3575f442e0fdfc1d0ae838a8357a18fac9154007963e598d0853d57676deef8f7924e31b2dc5f30cadcd0926be208a63f905bb1474b1eb933bd0e32ea8c6347ad9888a269821a8aabbc4c43c9a083bfb5eb7041765b856c3a5caf3394ffb1d27820174cc7b45b05ab39c5646d3eedc8a80f7da21a71d75ea5b7caf27790799f3dccf91ea9cf84f43a8c010ecc35e554f9a2da90a54f3f274a5125acb9e00482d165aaa4b3654144590946c8d95f343188d25e10aade3d2ac93bcf8082acb59a0bb34caaa953feeb59671bd07b0317e3ac89a241ce1961145c5d98cfeef58f7dd9122f04d60c445d33ea3e495fb44fc17dbbf902769780c3d764ed6bc38e0e44dd5761d2d540c87e9324da7965cbfcdf2fb5cdf15685e33683589dfbe54285cf62f76ccf4e703c35f1608dcffc4e3d9a123b19d21472e7944dfbe7e799ce0c695eeecb0a585c011e52dbf6679ae4bc221cd8d3a271304a47ea2d794032ffbdd3f1783fdfae31bd83e92fe232a4e32b6f1aa4f682b03c89161cd966d91c934c28553a8f166748814e7ddc8f813c71cd9c5ec9f942c4273b18d61f195620a007cc449a934f55682a7775952dfc7ef777605c6a564176837504680cfdd907f84f5206057e6b1bee5500910bd77e499da621f931af00892d4e760872ebc41bd880e3b3ffb7c83a618f6f3cd0a60d518138320cf414527599b18c07e5aa0fa44f4ce881a4c646039af8c4ff0c40b0d91a12663ba6e752ab460437d5bffa79d9b628327881452ea23a47d4b9e00b89029f5cbde52889d2930a27be7a04f5c815c285de813bf723e2f3537902997aefdcb0efa939ee21c049d98c406c3a9e888f3e0fa3916bd9b0209347b94d1385178ad1566a4e7e25917d95cd1c5b4676a9fcf4dda377b31abefd96226bd6fb77f56bd1f59418274b117b9cdd190c31371612a8fd464c443025f7325ccfec691238d2481ecdab0cff726f4b103a6cc9db4a5e0cb7fa5551a5b6072601bedb91ce2f2760ed071ccb91b0c03f22b78361700c2c157e0a08e0cd8e669ed7f3d7897b4608f5efef05e3d65284cf4ba3dffc795a8af462e875b197b67163385fef6d04d14ee998c7afc2f90110cc34b92b4381ed0c938ee0ea035ade2169a39f5a99c3c3f93e03b89d231552c068a284ce1650adbba5ecfdc528437c8264003c199507413aa37ea49de5e280f42c517ec4d2f5aa0d6d651156dc0a9e0e6cc36976a0a3a8e29cbbe9f751d8719229ee1c0eb4ecc173e92e3e279f1d985d4bdf22ec26cbb477882e1e0a4fb4805cd18322a7866e458982862d161e60989ddc71ce1ca866cb11a39a63718114713d58242ecd8fef4db45a411ecb09e9e7999903d6816e9720770ffd33e11538d0e7dd951862bcd4f87547ce3733bd9a4272befadb651f968f28c7af02e4f512624c3ad368b65149e82f336351f6863a15a8f93764f544ce3c5f3edca07319ca40b882455d008e21de3a2d0e60f9bcf236b1eac10cf15eea23ee73637542cb3952c702adf7f9dcb1c91dc01274df760a23b9da08ccaa7d62d5e862a6bdc9cbedb0f049c22ffd8842a0128bf7d6877bd6beb7e84cd3c769be7f956f1627aa3e7e0' - -let gpk = {x: ['0x124c4b7c4838cb025a33347ed0311ebc59cae6809670a1868f377980ee38ff17', '0x2f344c0c62d9deab6eb5367d558a4c3f1f1f0f61a2deecbb8505379fbcce9e6a'], y: ['0x16a2e3971a46240c0ee9380dfbfd2ffe38dfb0ef1641ba2fd00dc61fefc377d2', '0x04b939169b7bc0103975a43fa5baaa233fd38221c2c69b872911ef3ee341fd2e']} - -// pEvals for input: 2655988642 -let valueAcc1 = {x: '0x0aa06e25ae7be82895afb10f9eb859671b929cb18f590b1f7eca7e5ed2f6edb8', y: '0x25d82353f39628544aec24a491447c44dea9da639cae8a1c70bfa1415a121e71'} -let proofAcc1 = {z: '0x01d11529b4d25e5b97860184f5c5c4a20466bc254666b07525f5fd1c413cf0d1', c: '0x0af43b75018b04c5af8546f734d090e0320bcdf0f095b601af4d91c0a9e20633'} +let pubKeyAcc1 = {x:"0x1c5dd8ff5b131cbcd6c38d8143a5db4c6bd1593f436390b24880a4ce41ca5a47", y:"0x23976573e74b5ed2daa1ae1870a90d3463d86cf751381e2486c36a83ae2ee5dd"} +let pubKeyAcc2 = {x:"0x213c1d8acf39ba783cbc7d5f678c768736c0c1a1aee852adb041c9d66294391a", y:"0x2468b7c61830e845f883d6469479d7a5b4b33692f45ffaf24e22159c91413992"} +let pubKeyAcc3 = {x:"0x0cbe88d0c6a16c258431d5112881bb24fd2e3fc7f00b88a09dd2673c3756edc6", y:"0x1fa10c321ccd822b0f1389541fd3b86f2ded61a21200509f5efedfc785c13f67"} +let pubKeyAcc4 = {x:"0x2784164c9c9091b30707853f7a22b593b20607993cd3d079ca9b0bac2a8c1dd8", y:"0x0607d39d53891e8a62f3ccd0dc683a10e659cabc5416a3b8850149b20ddfeb1e"} +let pubKeyAcc5 = {x:"0x0b693d44636ce447d4ce0e77c2fdde4b3adf8ee3f2e57c1e57eae257dca4225f", y:"0x178b850fa92de9125afcffb4b950019f46363f9e2491fe63684ec402e7617206"} + + +let ppAcc1 = ["0x000000000000000000000000000000bec848ba0584770858c436ad386a21e488","0x0000000000000000000000000000000000069f7212f1ee2a77f94ea7551c0489","0x00000000000000000000000000000073f80deade224336b03e82fecc1a366d7b","0x000000000000000000000000000000000028fcfa184dded7d9412b911b69a0d9","0x000000000000000000000000000000642417e7427648505964a0edee3c0c9c6f","0x000000000000000000000000000000000011d42f6e34480ba6912db51c2221c4","0x0000000000000000000000000000007eb790464c9f43f81d8460c10bc3c0e23b","0x00000000000000000000000000000000002dd147f96911bdde04cfc32f3246b1","0x000000000000000000000000000000fef0c970a83472760f2b94866bf4867037","0x000000000000000000000000000000000012fd07cc66d172379038019f230f32","0x000000000000000000000000000000f47b8865fbd14822b478b0379fe4beb7f3","0x00000000000000000000000000000000000eb02fe0aa7a22d583b445bcd04bf9","0x00000000000000000000000000000086d12b842dc3139d0fd543edd109a9e252","0x0000000000000000000000000000000000259e13c822b07facb69f47de01a599","0x00000000000000000000000000000060aba00424f1aaba71019b5711a7be656a","0x000000000000000000000000000000000010f4ac1f7d75f6e28dc423cdea3965","0x000000000000000000000000000000b40506de4a2533e3fbc737f02e971ba953","0x000000000000000000000000000000000014e1bb6ce5041fb7a4be28f3819ca2","0x00000000000000000000000000000089218cd33cd60b2c194aacf30c7c74b7cc","0x000000000000000000000000000000000024d0352b63835d8d133b4a2346e12e","0x000000000000000000000000000000d72578e0345a148518e9aaac44833d16e5","0x00000000000000000000000000000000002cb60c70a694abf327d6c6a2357f43","0x0000000000000000000000000000000aa30117f8d7c43cd32f2545b8e2503c68","0x00000000000000000000000000000000002055a669bae9c742047c4da0c2bda5","0x000000000000000000000000000000da5c65e9a191d0aa7c03f79595b33d158f","0x0000000000000000000000000000000000230a1eefdf776f021f4b8036889819","0x000000000000000000000000000000876e1aae01db46da713fcd691e6ed2f1a9","0x000000000000000000000000000000000001458e890f3645e0dd23f8051c1866","0x00000000000000000000000000000013444c20b069a61c905a99726171e9678f","0x0000000000000000000000000000000000174711713c34227aee946f257e7995","0x00000000000000000000000000000014100bb15cf0d6cccc64a342893b3eea2b","0x000000000000000000000000000000000028d9db6f7efa93466079e4d59ddce0","0x2223ede3b4d6499b8aefb3b928ac03e23334182c1095bb6729bc2073565a51c0","0x28ac9eb3e0cdec13bcbad68ad88adc0994810802d271ad50a1eaa6c4d196d758","0x18d4d700c353a7840260d83259c9e7123df6cc3fbd36257e4edb7a8026255420","0x2398a05ac0ce6e5680c7d5d80acb04dce242fe9f390bb183084b7a8d24dcbdf9","0x02e436842fdceb7005cd3008a8d616b3eb6c9ed58a70324c8091adc8e669140a","0x0e9b7e2b253f94ef95c94809049e4a20bf5bd11870e28d97c15757901b46b626","0x047b387a4ee41e374646a576a4b239ae1a64ad0afa1aa96881d7af75f0628ad9","0x1c5dd8ff5b131cbcd6c38d8143a5db4c6bd1593f436390b24880a4ce41ca5a47","0x23976573e74b5ed2daa1ae1870a90d3463d86cf751381e2486c36a83ae2ee5dd","0x213c1d8acf39ba783cbc7d5f678c768736c0c1a1aee852adb041c9d66294391a","0x2468b7c61830e845f883d6469479d7a5b4b33692f45ffaf24e22159c91413992","0x0cbe88d0c6a16c258431d5112881bb24fd2e3fc7f00b88a09dd2673c3756edc6","0x1fa10c321ccd822b0f1389541fd3b86f2ded61a21200509f5efedfc785c13f67","0x2784164c9c9091b30707853f7a22b593b20607993cd3d079ca9b0bac2a8c1dd8","0x0607d39d53891e8a62f3ccd0dc683a10e659cabc5416a3b8850149b20ddfeb1e","0x0b693d44636ce447d4ce0e77c2fdde4b3adf8ee3f2e57c1e57eae257dca4225f","0x178b850fa92de9125afcffb4b950019f46363f9e2491fe63684ec402e7617206"] +let ppAcc2 = ["0x0000000000000000000000000000005593dace49895d3bfba9e9d9b0b8b5430d","0x000000000000000000000000000000000007648758b999d0a050806ba3445596","0x00000000000000000000000000000078552e32531acf75de776688a2e332de02","0x00000000000000000000000000000000001677368f8f47f4efedb5747b27b0e0","0x000000000000000000000000000000a9fd2255e2e2836304b8ab2197c0a6eb34","0x000000000000000000000000000000000019866769ffae027e51197b8b810a93","0x0000000000000000000000000000001fd87c6c9645fcc04d032c5a1c1df527cd","0x000000000000000000000000000000000008c384a13af806b09d2476c3e1d52c","0x000000000000000000000000000000ea4fa422a1809a2e5c699ffaaec75512c0","0x000000000000000000000000000000000028288f576c8c9b05f7a506380fd8cc","0x00000000000000000000000000000055bd91d1f9237b7998606d0941fb3c5e88","0x0000000000000000000000000000000000023cd0bad506bef61f7a52c0878ee5","0x0000000000000000000000000000006144fe9d9c1c0159951aa8e03044560e4c","0x000000000000000000000000000000000004062f15f53f0f089de1ceb5d48c52","0x0000000000000000000000000000007807800070e01d11186414652689ac40bb","0x000000000000000000000000000000000028bf01a8eaec3eac536404ec8531a9","0x0000000000000000000000000000000cc8fcd2682a1235daea9d704bf97987c1","0x0000000000000000000000000000000000096cbe8fdfd1be7e318fd560006fa7","0x0000000000000000000000000000002378182b1b4e8d8258054fb2dc2c4eaf33","0x0000000000000000000000000000000000000b02b77c8e63e5b6eb80ff46d47c","0x00000000000000000000000000000078064d8f2da32775083714b19879ca0e2b","0x00000000000000000000000000000000000ecaa0f8a65bbcce8651395e08c682","0x0000000000000000000000000000004c3329bc106a3905fe908bb8b2a70c7768","0x00000000000000000000000000000000002df9c1900a613f997d731c4aee46c3","0x000000000000000000000000000000b68eb2894a7fb12ed957dc0964f7c0ff26","0x00000000000000000000000000000000002963fa4cea2610570d039f6c9275ae","0x0000000000000000000000000000003ab6f1d08df00ee30ba174d3dc3051a704","0x0000000000000000000000000000000000078f8508371b207db7d208471bcaa0","0x0000000000000000000000000000004a8a12039b5c1a013840974309e8cab5ea","0x000000000000000000000000000000000015656e1dd1804b118fce7c1d92d24f","0x00000000000000000000000000000086801e5fe728021163491b65cae2cafe1c","0x00000000000000000000000000000000001db08fe814c24ea5660999c16210a6","0x28bff878056df71a82a153ec4a907c19b6685cbc91bb9cfec31322dba9e2c2a7","0x12cd409104c5deb65756876980c6b1252ae590ef9b63b200c7d1aeb11e4a2282","0x0705da9bd7fc9b261de8089e56192c80905949826fb333d6545234bde2f56157","0x2e5fa5dfbfab42ade5925c4ef460b24789190e8428763f712b7cea1d32883c17","0x17e9429f5985073655d4dbbd49821daf0220d3ddf92a82bd86db0ea8dd49409b","0x01e717b393c0f1df84a842b1c04780625be2f741dd0458902795a7fa8421507d","0x23d85d468a45c74860ca944e0e8e20fd17fd3fda58c2e617b0000a3c2fe6f261","0x1c5dd8ff5b131cbcd6c38d8143a5db4c6bd1593f436390b24880a4ce41ca5a47","0x23976573e74b5ed2daa1ae1870a90d3463d86cf751381e2486c36a83ae2ee5dd","0x213c1d8acf39ba783cbc7d5f678c768736c0c1a1aee852adb041c9d66294391a","0x2468b7c61830e845f883d6469479d7a5b4b33692f45ffaf24e22159c91413992","0x0cbe88d0c6a16c258431d5112881bb24fd2e3fc7f00b88a09dd2673c3756edc6","0x1fa10c321ccd822b0f1389541fd3b86f2ded61a21200509f5efedfc785c13f67","0x2784164c9c9091b30707853f7a22b593b20607993cd3d079ca9b0bac2a8c1dd8","0x0607d39d53891e8a62f3ccd0dc683a10e659cabc5416a3b8850149b20ddfeb1e","0x0b693d44636ce447d4ce0e77c2fdde4b3adf8ee3f2e57c1e57eae257dca4225f","0x178b850fa92de9125afcffb4b950019f46363f9e2491fe63684ec402e7617206"] +let ppAcc3 = ["0x000000000000000000000000000000f7130638e4614f3a91dbcc357d91d67d2b","0x0000000000000000000000000000000000266ee7e7960fe3533b91838dbde40d","0x000000000000000000000000000000dbd35a23f7eb885084959a1fae1e584a12","0x000000000000000000000000000000000010d4434d37085bcf110f7fcc5641c3","0x0000000000000000000000000000004c584a26c0efc2360a71b2496ce442f33b","0x000000000000000000000000000000000019a6feabbce721b70ab4dae2d48802","0x00000000000000000000000000000069dcaec71c043745084da51b9ff86df28b","0x0000000000000000000000000000000000111b6ee775a3947da7fb33cb9b0efe","0x00000000000000000000000000000051f397b0ca54c427e6880070e607664600","0x000000000000000000000000000000000005e11f31c7fb0179b9eb41b61dd5e1","0x000000000000000000000000000000b75c68912c35168cc00a489423e7e5fd7c","0x000000000000000000000000000000000030476f11d6ddc69cf8ec14bae43c79","0x000000000000000000000000000000dcb84ff118d3a869e8191a49fc0b16bfc3","0x00000000000000000000000000000000001026ee4879ee5e290729101df47f88","0x000000000000000000000000000000d3f24de0fa4341ed6019770e43118b44c4","0x00000000000000000000000000000000001272bca832bb05d90c76107650bd9c","0x000000000000000000000000000000fa17570671ab58466c80e087a7f91c4d11","0x000000000000000000000000000000000023fbd7c3e74559d857090e3245ec00","0x0000000000000000000000000000001029d372c22ec0c93e0386fae82533c431","0x00000000000000000000000000000000001bec563de97dc55115af3705726e22","0x000000000000000000000000000000acf75b6adcb04b6d280edf8b9f6283d28b","0x00000000000000000000000000000000000f0d7acb2656f0b2b9c33dbf6aee52","0x000000000000000000000000000000e3d101a803dc5be58c902dd88ff82ad53c","0x00000000000000000000000000000000001d4eddc920a4e30d6bf40465c48586","0x000000000000000000000000000000b610d7fc9f069b146d7170c1c721a41be7","0x000000000000000000000000000000000014726f59bd295d82c6b72a965c621e","0x000000000000000000000000000000b521bbe1f0d03f8762f8d31dad1c06f0e0","0x00000000000000000000000000000000001381de4bc31fe4d5d2aace28f1295b","0x0000000000000000000000000000003680644415740070c9232bb419d27a3560","0x00000000000000000000000000000000001bfcd1cab072968fb5ac9487296ac1","0x0000000000000000000000000000008a2020ac05dafff1ff1591c2b347ee7276","0x000000000000000000000000000000000014570f0bfdffa7b091e7319605f5cd","0x099d8c5af7ccadd761ef0ac90b77693087c29ef1789a661b2d63b17fe93b5e6e","0x03f74745798100ae3cca0b7e6214db687dad8d32ff425bcd317931594550b189","0x1ad2d82480432434024757298a4170301a47315e2598a3f6a64449ba1502af23","0x2d780a19293bd309a956b803949a5c2982e54717686e705195f84fff8f36ec8f","0x11939320a63dbd36ade526f89b033106c5d5f7b849a1382749037d703c6c3ca8","0x23792c312753516c2b428686dbb2d810b85e56fec961e5e1e1b9dc767f67afba","0x2f56f7c8f45c909e0eaf41f40d726dc15b1b0fe83bf0a03c540de2c59305f4f9","0x1c5dd8ff5b131cbcd6c38d8143a5db4c6bd1593f436390b24880a4ce41ca5a47","0x23976573e74b5ed2daa1ae1870a90d3463d86cf751381e2486c36a83ae2ee5dd","0x213c1d8acf39ba783cbc7d5f678c768736c0c1a1aee852adb041c9d66294391a","0x2468b7c61830e845f883d6469479d7a5b4b33692f45ffaf24e22159c91413992","0x0cbe88d0c6a16c258431d5112881bb24fd2e3fc7f00b88a09dd2673c3756edc6","0x1fa10c321ccd822b0f1389541fd3b86f2ded61a21200509f5efedfc785c13f67","0x2784164c9c9091b30707853f7a22b593b20607993cd3d079ca9b0bac2a8c1dd8","0x0607d39d53891e8a62f3ccd0dc683a10e659cabc5416a3b8850149b20ddfeb1e","0x0b693d44636ce447d4ce0e77c2fdde4b3adf8ee3f2e57c1e57eae257dca4225f","0x178b850fa92de9125afcffb4b950019f46363f9e2491fe63684ec402e7617206"] +let ppAcc4 = ["0x000000000000000000000000000000f53552e94db2457ded0374efa9a9f7c068","0x000000000000000000000000000000000013f980d9522c08bbd07d23ee3bb24a","0x0000000000000000000000000000001bfa09d68dd2b7109ce5d25560cc0078d0","0x00000000000000000000000000000000001c690a101b791dbb5de0d1a9c9987d","0x000000000000000000000000000000e8674b1f3a5a55e6151caadf462331c157","0x000000000000000000000000000000000023dcbbd2d301609ba55e864e669858","0x0000000000000000000000000000007814030ecafd624043b4f4d389cf6cf254","0x0000000000000000000000000000000000215239cae7397e6a1951281219cba5","0x000000000000000000000000000000e53882478b6ecb7203fdacd879e386610f","0x000000000000000000000000000000000016cddf13e285f83da28ddba9cfe36d","0x0000000000000000000000000000006380b57c44e9362f7584ffc71b9fe5696e","0x00000000000000000000000000000000002879bdd60cf70cae1ad9a110b2d6e3","0x0000000000000000000000000000003ed0750999587b35c30b778aa4135ee975","0x00000000000000000000000000000000000cf7423b1a88020452b7a59f23f96b","0x000000000000000000000000000000da183963cb15f7f1074c951b310702bb12","0x000000000000000000000000000000000021f7e4201534a7531eac8b84bfe24b","0x00000000000000000000000000000064002a48eefd50e545039a2bf1bd47c42a","0x0000000000000000000000000000000000167fcf573d1b86af7e4bef58aa5484","0x0000000000000000000000000000009374b100eb51de6bd1690399aefdd3c23b","0x000000000000000000000000000000000013a1985e6584c020af8507a5df3e77","0x0000000000000000000000000000003631d0b0874335be6299cc1404991655fc","0x000000000000000000000000000000000021f838cc06b62f8a80205f1f29bcac","0x0000000000000000000000000000007d2450c2234ffc24dc142aebfc9d3d615d","0x0000000000000000000000000000000000124f23a3245ee842cfa6253f4b7ab2","0x000000000000000000000000000000919e22e65198b3c9a3f35bf7e24c37a2eb","0x00000000000000000000000000000000001d7caa6a02d64b6328f51413cd78ca","0x0000000000000000000000000000003b5c92f46cbaf385217e89b761758493ed","0x0000000000000000000000000000000000129cf7de7b48b5a2995cc275f4a08e","0x0000000000000000000000000000005270a31ef95f28e98cdabb1a55c539aed1","0x0000000000000000000000000000000000239619fd1a19308acca93893921c7e","0x0000000000000000000000000000009cd3e1ac01a11601647c91ce067160b347","0x00000000000000000000000000000000001f5d1180d71f42dcd2b32cfbadc20d","0x13e2d243a134c70d09910cc5f78c3478aa7b19d86552a4e58b7da3aa8f3f94c9","0x014887d277d9896eeb6ca31cd1be038215c9a2167f3bf542efc8bae2f72a7a92","0x034e14b6f534919fef894faaf006d8a3319666a299ed8790e2edc355a996535d","0x17e23cca4129d7f61f4b1e11c2d407eb1327e6920d7a068b1feea2cf2526dcb4","0x21d885f7d96b9ea1a1b1747d7c6041408d5c014bf8fbc54e364e3058b06f87f5","0x12fc78fa56022e86282b8c711b79809118845dbb8aa3f9fb7195dae0025e3b27","0x08adb10fe8503de1e328482e089481f2dfc21f329cc8352270db52667c2871b2","0x1c5dd8ff5b131cbcd6c38d8143a5db4c6bd1593f436390b24880a4ce41ca5a47","0x23976573e74b5ed2daa1ae1870a90d3463d86cf751381e2486c36a83ae2ee5dd","0x213c1d8acf39ba783cbc7d5f678c768736c0c1a1aee852adb041c9d66294391a","0x2468b7c61830e845f883d6469479d7a5b4b33692f45ffaf24e22159c91413992","0x0cbe88d0c6a16c258431d5112881bb24fd2e3fc7f00b88a09dd2673c3756edc6","0x1fa10c321ccd822b0f1389541fd3b86f2ded61a21200509f5efedfc785c13f67","0x2784164c9c9091b30707853f7a22b593b20607993cd3d079ca9b0bac2a8c1dd8","0x0607d39d53891e8a62f3ccd0dc683a10e659cabc5416a3b8850149b20ddfeb1e","0x0b693d44636ce447d4ce0e77c2fdde4b3adf8ee3f2e57c1e57eae257dca4225f","0x178b850fa92de9125afcffb4b950019f46363f9e2491fe63684ec402e7617206"] +let ppAcc5 = ["0x00000000000000000000000000000041508d336e54ddcdefa185f93a0436ae44","0x00000000000000000000000000000000000fc0010e61ddb315d4d43ec5f2b7df","0x0000000000000000000000000000004be120216aacd904bcdca82c91445d2819","0x000000000000000000000000000000000021d43ba6c56266247d7e4f88e9f08d","0x0000000000000000000000000000009b68ce840240996509004176a36390a8a3","0x00000000000000000000000000000000000ea0f220592ca759d963dbe381e398","0x000000000000000000000000000000b759acec329b4edf2a88ba18ea974bde79","0x0000000000000000000000000000000000019d86a8b7cd2d74893dfd89a7db2c","0x000000000000000000000000000000e6abad546e9538b054b4350deeb3380fea","0x00000000000000000000000000000000000c7095752a5c95592035e5e3275142","0x00000000000000000000000000000037745330c0b059c8e4960a131458872f37","0x00000000000000000000000000000000000e371a034fa6c796d0f2ea405d3f23","0x000000000000000000000000000000ef09a87b655d12fcd4f632d8944869bc64","0x00000000000000000000000000000000000a158e9c84e72a05cfda7331fbca4d","0x00000000000000000000000000000022237ecf83c187a3d137b4a921a41582f8","0x00000000000000000000000000000000001d55b9f38c6dc050d437ba8d325a5b","0x00000000000000000000000000000088721ca0c4a54728946f6093a5c1b3a7b0","0x00000000000000000000000000000000001d3a9dcfd52ac9df33d8754ad25ca5","0x000000000000000000000000000000bf381db327346a23cf121a2ca17458c137","0x0000000000000000000000000000000000220aa2a76a60eaa82c80c633b58cce","0x000000000000000000000000000000708dedd8f14282960a1463b39b8cb0cdb7","0x00000000000000000000000000000000000095c171ff49da2b919c7a76dd1eee","0x000000000000000000000000000000c10012f50a78016fd0d674ae7059180cea","0x000000000000000000000000000000000025a803842ab85da633d17fdbcadfdf","0x0000000000000000000000000000006382211864ee835934bf08b652ff422752","0x0000000000000000000000000000000000133b1ca47e76115f534545b81211d5","0x000000000000000000000000000000bf23c818b0822d562e5ff5afcd8bdfb466","0x00000000000000000000000000000000000de8c4931bc5605e7b81984ceba5ee","0x000000000000000000000000000000904229fd90abb1d41607e640df70175b30","0x0000000000000000000000000000000000232c97f61512562ce2f682c01c6a17","0x00000000000000000000000000000054643c1ef88496fc1711b36043a6af58ac","0x000000000000000000000000000000000000147e171c5e2809a737adf795991b","0x2efb642e2efd8c6ce0ae2ad3bb27ad9cb78570b320086af885f11c712dd957c7","0x0447426cba8ba869c0102821d36a8dc190e33507f2c6b8e8c6e7e706b7578322","0x169450135a581fea8739167fc629d9b929d49572db690c19dea6913d5d738f01","0x2391469c46e482bb93b2afbc315637ae2822078401c40d2fbeff596e2c039544","0x16edde52d8e5f9c57cbbed48b39a63c0562b0f1bd7f74fcc94fb165a44803de2","0x305ace9a03b84645e2024091e1b0946529d3133a1479f875d6b0bff33bc9dc34","0x088eabcb807a09a6d0fdb2d20728e7ca2dea3b3cc5d23b4d39a88d7f0f3a8866","0x1c5dd8ff5b131cbcd6c38d8143a5db4c6bd1593f436390b24880a4ce41ca5a47","0x23976573e74b5ed2daa1ae1870a90d3463d86cf751381e2486c36a83ae2ee5dd","0x213c1d8acf39ba783cbc7d5f678c768736c0c1a1aee852adb041c9d66294391a","0x2468b7c61830e845f883d6469479d7a5b4b33692f45ffaf24e22159c91413992","0x0cbe88d0c6a16c258431d5112881bb24fd2e3fc7f00b88a09dd2673c3756edc6","0x1fa10c321ccd822b0f1389541fd3b86f2ded61a21200509f5efedfc785c13f67","0x2784164c9c9091b30707853f7a22b593b20607993cd3d079ca9b0bac2a8c1dd8","0x0607d39d53891e8a62f3ccd0dc683a10e659cabc5416a3b8850149b20ddfeb1e","0x0b693d44636ce447d4ce0e77c2fdde4b3adf8ee3f2e57c1e57eae257dca4225f","0x178b850fa92de9125afcffb4b950019f46363f9e2491fe63684ec402e7617206"] + +let ppZkAcc1 = '0x1a195aa0f0baf4f3077432879cad5a400dfd368e00e6c715cac1001d6d5e22ef1d739a3c849eaf1738860a24906f900d3e2d0f6d9bf8dc779cf7fed1a343e27b1804a4021ac130b94502aca5d579159416ef30cff94d12864b8cf3eaed97facb0f93412a38cdf022fdaae6c6f73028fe52876636abf955128eba351d6d1d63f7105e02a97e7b74b0667f008f25bed1219ecb018f1516563fcab7977b3b16de4c19e99044e016775483945f291cf3cee8023283a6e3938c34c9585ae826ca2b2c24cbf47486a1228324e0884b83a3a1c523ecebc55c3089e3a17629e2324010db0d1d682b0211638c87b03449111890f49167c104e7a3ccad79f8a6439ee78647256fbe1da92054864e8b47eba11de8c12ff33c29e4238efa08ae487e49dc06782fe9d65762df64288e7ff3fd30004695bb20f44d495435602c20fd5d032fab3320cb1e9f4ef53042c2e74e64a27c85ccf1aee11314c8a3abbace47406404b85c13561b2860b23247b0566838eda7638c6df258bd68803948a6996774f9368ee807bffd41ed6c547104770c9a88d4531992bf40795244a4f613a4a996ed5df8ac001d379507afee4965f54443669748f2bacb68ad4bc344b606c6c8036d67ff8416af06c786698597dc9fd6b370bddc3bdb0f3d677875787fbe9d1529c913653c11fbf29bc70acc1000304c98bdb522896bc5ef1bd92ef1955261ea2b5452d94d2eff1de9803eed78e3ba3b7bfbb084801b92e09cba74d8cef999c51125e035810f0a45cdcef83b8c475966528b927289dd0c1a23d3183ed87d9322c2bee35b9307784124ba719742bcded15edf471969d0b569a541c15352bc942ff0b18efa4d0b82a505d92a42e783f5eba6e4fe863ebb476487bff275caaf7272e265b5039f2a164d6c20eea8b7a7c972b6a61feedfd6ac03dc7c4181dedc76477e9188de8e143a56819f178d83a2154a4fc5b04eae3c0b937887306dd22fcf21721cbc73ba09bf053a82a8dca54a324d245b07d7707fd9fe67f67adc1cd9efbe2254f0a70b1ee03338bbc284f1dba52d3d6aa9607a85d0ea7ca8af744194b3ad39dde710c708dd6406b5a5bad0fe7b39a9a77c196b2c5d991a60e88aa1e99917a081af55cb2a6265e7f95770866945becbac7b3d48207ebbb61bd4b2bd19ff5770446fe3a40df86e4e323218af12736fb8677fc999f1b1c2e79d361249142d1606bd26c6162a651c95489617d56de48569736ebe82559bbd8d0e22a648073df6fd71953d0007ca8934ba6b92fbf832fa6ecb5cf5426af6ad0c80fdc5ef2f575a9f6f0b43c81ba5c642eccbd79e083ea6e8dcf2faeb55b29436edaffdf50d4dd0286aefe6772dd78111f6420f5a0dbecb1d8a26387f05fda831bf346d3d5292bdca808558b9140ff93b90cfdabe37197f6facabe80378eaa2348744a6fee6854c361ef633742efdd5f2d83b93b5e5464891c39d6d3cfdbde2685d2a67b368a0af845922df52009d796b12c478c3740834a06837b7f7dd4954c34228bcaacff32acc1b07d07c1992145aca06a0a616574b06e8f19f5129a9e4647b600801fb58df9f01dedc071521950e9baada6a690b010b9e03aa9bc4f436baa06fba27deef3791af7b309817fb45b5d79dd283e8637c95747275a1f39883a97cc5b31f28bee93b696752590a4bf4519bffea3086b4c6341ccd83cbb5922a64e5e0e0b11bbe96b23839d13e0dbc76461dffe6618ff55901ca82eb1c7ec3fabfa729d5339c02bb3ca5f0d66a10adbdb38b1883bfaa86fdde90041509e75f22c1e761772d3d4a397a4e2887660fd7c54f0d7d616bd240ee65167bb88996cf8a6a513eabe55803240072f1ecbe1d13cddb2361f05d1d0ab611e6ea487ee2671ec9d85f36a7d590b6dfaf4ce1351b5f513c1b96084ef135362382351067eb095accdc3d94439aae0a121625f28c13288f58993cd58f629b5f59377ab1744e311f10854fdecfbfbd38b108d56e6c2bc137dde01cbfc1605cbefa206c567c5fb05f14e4f202c9b36c1e213e9042d3075d42b6c0e658bf0e4181cea5b1494eb1d81e9925adb6e311bf21598a80bd291186b321be213e8438766cc609bdd2fdc61cdcd6b0bc84abdc696e3cecc830d92954acdcfc27fd13cee0c6132ecd3b89cef25e6ea1336b04b4cb938480f816c32b58679fa0e6449feddb8ce055cf956e6d2061fbfb304a6a6a96fee4c5e1a6fe1e0e6be8e2f4cf1dbe6006201fc97563c43fea958c003a410764a4d2ad7f39a02ede4823d9d8702bed2503eafdeb8e17e1a79aa4d1d897d6d3121435070a36961f731d9fa81fa67730ac04ea2ea1a347be86e23eb6afdefb57fba36622c3ced611e768164902efe87005f55ff1d57da2ca511e367c6a79496aae9d45c862b2140e135d4888974fb0a3cd23de6cbfcb381bdf60ca62334332311d715f04e8cd3118c48f63aeb66eb9afafaa81556d5b0c0664c063eef4e71aca011fd1596e3d3c1903785ad18266d77286a9b911c51ff78cbd091e40cf11f2c6f34e95e9fd6d7320d1592a61b6efa3c8192e0c53ae5281abe00d972b8868eb94f2e9b8d892479418ca68699f661a1f14d196fab44f6eb25d3f108ed79f2c06396c7be00ffaa2e812b61caa7638be4cc52c1eea2026b542d8ccae51fe301b26869c20bbc40d1941123532099c499ba48a667805efd11635d3732745f9d983faee8e3cec51d03bb22db625d250148f4ed1088b6b713b1c580a41c5d4f864dc323d1bc0af155cd4d01ba574c68f9c2dfe683d99b1ca300c1b4001a81fe03fc20ef97bb9c9b426d35c2a800e79df779ea6ce3e8c91eef9ae970067befc101ad13452c79626a517c806155cbb387299bd018c0e9c9effda5f04aa23f00f5a09dedf0468ba6bb05c48ba0750a337c4a904a3f2cf7440260437309a635de47339cc67aa69338625830c9605a7a9c135b00078810179b4bfb2fcae7b7b704f137b86c4d98a538bca9fbeb5057e22bdba22608392eda1831c19c08e928b2fea12ba1d52b9624e5d92a5b1cf177195afe9c114b1985628a88b5c04d26e9012d66755b285bdbe1ed0a9b4c7972738d090912be34b49182f97a7ac98d10f65f35d0926a27764eb8403407f05e813107ff9fcb711abbcdb3346b485a07dfe4fba30ea2d37045f542c818e4edb0c100fd3ef92fc95b3d7705ea54349f00c46a8b3e73955441037add9adb39bd1730c27da5655c1f5d55398951fcfc48a3eefa4c2d2de373314ee992d6578eda575110db386b4671cecf18d80e13d4c40d1ff66ecb8c2aea37af3d367ba784720d01adb3a719e14d5af1582baaa2cad0c3daa2649482a7c17565c121edad98b11601ef1b4e7b9e669d0c758afd4df58b920f9ec67d5f1aa5a1a77ed65e65af6e4ce0e6ce8b30b5b01988670db71129ed20f697a404f02236c8a3bd13bedf3c9949e2d71ced64337b6e8c9dafa6ba58dd4b2844e867e5e1bf649d51d31e8650ab756148be1c32e8a2a255038e6ca66267a8ee34146d9feeb55268e3be3c47f3c2c231829d0e9174a1957067a2b2ceb4132a422a4dd18bc838a796f1f7d229d97aa521ffff6beaa9dbf87f7e3cd7da84c5bff2de801fe0e8333118127d2eb1f4f0c6b1d59e48c06a36eb362179eb8c4af1052c3514f55cb4e37f48774f53e36709ff50d4876a9e34c0db4395e0741546dcce9870aea4d4e20632ebe842015a892fef31fe05b27edc26d8354597e24d44948d2443926190d8dbba343ab43f8008d87b81163dc3b48ff7056d6ee92d26ca2a0dc9750a8675fe5cbad924e243d9dd4d08a05446fdfc156ff977e348f200472d3924e4d96e3bfd2d8fbe6b22c47b591a6860234fe4db9ea62f78a951f709b7fd17d97aa036dcca0cd661c384dcd5259019205ce783dd859610ba49521c5f505c6fcf2c9e05f5e2a63361dfe491732f261c528a154e28346cead684e46f314c26424fe0440e7b7749e9d23aa17533260731826f7ef409a2ac19448f488cea6da5aea9c55884928c13d46d626f98b87d79410004945c1e47d2fb0f4132694e5a85dcdd22c16785e62fda87a6e63d92f1f21ad18d056e855193684d83232dce38cc9cf0a93639148b3df165a7abf2f005306e603f577c2350a857d01839fd9066e96d4a172daa61ca0fa27339e6c7a8aa06f001377e45066e01c22ebfa56ecda9ce0ef13dd0c404b8130813926cfdb626a67c80897b7f50ce1e5416a63e0c0385d4c1503633a0c546fd69cf571af2e2fdf0694271578c2f5456d38327e74cbbd1a1fe1eed2082340347bc04d1532fbff309c25254dd159e2ff25cc0b654bca02e74c5008cdb056b958d9aa6d722f259f1b367c280b886be62b53c2be1e07e7380d9a0f22e82305ad728d394e8aa078e985db292d816103cdba2e0ec1e0be82e2820ea885ebc7a555faeac03abfc4511009836c0b0313446adcbe3835714226fd26cf70cf553d5f32a740aecb8fb76f8ee3503223c874431ae31dfa7e4b1c56126977ccaa1157e6399c3aff65f9e0c655b7f7851c84a774653452a5fea3d04b1c9de3f20011e53103b127c1bac1172e97f52d2e11f6b12f8705acaff50fb518d78878abb3b6060dde937ac77a26db571aa7d0a31d18f1a17c2bca095d1df2712d1ad1e4025e6a3c1dc225808e8a2987f05aea6c0e820f1440c87dcf3c23d5d6fb27ce207683c736e83e5b27181964d61783555a202aa77b27dd3a792339a544841f8fb3de4e332118fe57e34f71b1cf06c125b7076c6fb9a4f366c6b6278766a0d057029d7ca2b4930bdb338a12ea2148db88e0001ddd73281549ed85a0c550cdcee498201376e1e8ff07a9f5c98e9f82e467dd30063e7bcb0916e602389531020c26377843114fc08a8f0d564ee47de24387af109f857edb784497aef05231819f8d18aed8456fbe9a98975b0411f317ca30af2534a2e4e9507989524b5f0de53426c0f2d75348251874a6beeb79f74abfba8d2fb4aeb32be8cb40092f1b58077b101e9846af46a17e4878941929ea1ceec1af214dd3021582e36db7041f89f1ac477ea27fe40626fded5e2283e7f7e6d78b901a5f06e155eccf7f5f46a3d793996a0798f7637b69bec464a3c64ebb4793260321b003c785cfd33c452873b543bab369d7d64b9762ad4951a7aa4e770350f7542c2f7e30a3096fdf61f014d1af9204737eb669da041708d1b4f9ccb587c172e12c7ec5802d3e3359fc9358532ab8e972bb55d65373a2b233a7724e2d2981ea8b1f18062e5cc0da663259e11fbc26b7dbd2d4cba70d2720820a3391bb27d8405c110249c3b7e8de261cfe70db4c124bc75d36d3781f16aa172776c496229bee340d4035e83b92f3c3dfa7b3271ee9a08612427e578b1dc46d0da2c7ad52e017f0258f7876a7bdac4ede06510967517d89013ec989a197b373fde006aac47568aa28201f73e80507db95dea3832f4bf704bafa05093b1ca569d3f5264fecc72f5f1c540bef17e2865aa319bd092fd3866c22427ab4d5ddc7efe5cba2b9e196e81f2308951d6cf18418fdc3eb9bbb5ccc4793b710a7df11caaee21fbcdcfdcb19b326343e4a34cf9d4b429b33d96fead0365e1c8ff81672c8c2bcf222ee80d40b820bc7a4d5d01f363eb3536c2d538f367accc7a7b3ff8a81d4bdc58e9f1667358a2bf276a94fc2182f021ff171f954f67a95d68fc3b0f1a4f72630e8d46ee0d7fb08c51d9fb3ff42f039f62b8d204d860b2b540fc5711e81daeae4dc12c98313a22d14d92af847800c223e2af301c6dcbd44c2e68349569fa06497057d4686be7017081c016c9bce96aeb4c0c68d6b9162f4b7eebabad7fc3076a2759a1b67d12a0510640992ead9d859c297e9fed4e3dd5373f6483d0a03988b41dc4c2e0c8ad8058669ed38e6cc3ed77c9305c83d91dff5ecdbb79eda88749da948dbf5123f602ef4dfb6042860dfd4588c718caa8d62147847681c68cef28a9c254b118a791d05eae6d2fe74e6732b365423ad18db7a9f244a9eb589dc3b0145d1da892782462e0270b5ab8a230fd2493df4f540fbfa4f5dad8de672d95ad181355d2b3f41a5041bfa65ce7242d28a4e8eb79c522718faf5dc7d2d4199cdbe6c3a809ca314211aeb1d1867c02281803a41abcfd880907f4f532b4e3d1537d159a0e331452e12272029bc75fdb7df75fb648271bab51888fa8c9200ae3a67f5c3c94cb17eca2b2219a19bd26d101b1757da30a4db50bac6e41215677cccfafc636dbfb6441c931fc330718f1dee91f26377858ac7d27f8f4b69889b5d79fb14c85267d08009362365dc86273f68f2b11ad789fd49e0ba64d55dfbca056641d9b92d93ddfe07b8' +let ppZkAcc2 = '0x01db4829efe4ffebc98cca833d6460c974ceda3d80a621f64a387256ce0a48530f4b83896c03e2c11e52845ca040a352e546db64791b7d98e5ea9c61c706e3b125c04ecb1c8c8e52dbfd21806a1adc56489d695fdf4a912023bccbf12bcc61301179b2bd02398d2f04a936a64cc6f5eb545a8ce4b8eb776c86206947cb06a8e01527f987aeb5041de87fe2a80fb9b325b74e509dd23111c3957d0bf89a2509b42d36a05eac9675ee9665ff1f9a11f3c411c058aebb1cc4abf919eecee6095aa7256a6590b83ba8e7abe7a00090416906b4c60318985737a7d562f4e5104438b9057e08d1d304fcc344631bd14cd07d32e159db2133ecf76f70aa9ee8ef9390d511c97f4842316048681ea222b745def845e38b9aee7a51efff67535c13a4cf840c84ac7f4c0b0510e0f5ba39118e11db7015bca260697592397af4514e53e0e8253f087ec69fbe18c111125b1854a62d98e9d9cb867c378118bfb394a69b73751fbbbee1170228cabd24543f3cb4a81ad75f9e57e7d29525c021a9cb43dc454e01f279b18299a2a7996c11b86e34438332a64cf30fa28204ff50a1c231b03dcd2c0534878145adadc0057d089dd1eaa99bf1bbbe6bdffbf1c5b3e6459a12fa9d12e4c05bbf84c2031412252bbbf0dd7edad4a77f9fd1784276d78e4a8492f76e24da93678f38883a9c235b40a666149b3c306f4230109eaf58b904ca3daa54131d45dcd5f49995f49f7a2e438f00dfe063b3535d2ee41a33118b05d2f6b4594018b86c8ff78c651fcb825d54d3046b54b1b4967c2542ab36da9ea53e101f54872c7714ee2899d7d4c4533bd72bee480df8afe52933454331974ac32b9ae530b900a95623347a2b7c4fae5cbc167f14adaa2d0bdd044ce1cf575a23b4d1816d4f0fa8ed1dd5a8d179ab55b9732e3347704838828e385d578d25d91f48e28420ea0988a892215ef5b66b2acd009bf4f457edf8ea6930f735d6d91f9737d4eabb27027e97e5107008a954305e72ac4fd5039403031ed7710364cc8da3f45875fa7e003c5400cb41f0940a2d5ec578e30403248ab1b0e8f621290c821a5c875e2ea42e8d665e47f6feb8117bc94ad1fc4f0f26fd7023429fb676fd81dac2afb4c2d92bdbfc7868ef182c11b3f4e440e6c94fc8a5d1a10450515cf0527726ae14f5132b0312672a7f6cf6cdb4397c9bace141bce7728f295dca0117bccc47d9a726c217e3532b1608b6c5934c1419e5bb0c9a789c574c1485541087a67956224f99621d310d3c02403764fe397521f3ab4806f75a77faf6d0daba473b8cb1f7c48ff60d01867450826023fe8b624d2ab747f31ed1c55a99ce44efbd1eeaea77fbba010d4e6ab77deac13c60912950c0fe87286064b8c73bfc6b56b205afa2d0d89fac2dfa9fe53c0306fa8b8c0ddf22c88cb7358a121e1e220da7877f0b73d2611ea409ad4baade75972e236d0068f443aa9130a20c575e833cc8578f3160b54a12860cad49c99f59c53a6657c62bc449be8711325e35a3088ccbce286ebb5a658fe7284f8eaf9580918f5e981caf0916c0f150c8626cffa12236cb7abf3bbbebf8632ebd88adf648c2c20eee5d8dfa6442604620730d7422a1e40ab8e25c43eb9a030d66c9ca508a9f63efad530d8a1f5490fe87c0a0aa56565ffcb1a418e3eacf0b10737fde424856ad8bdedc5da6b7aa24b3c487f4e02f6448005f64852c946c7c0710b0783bff917bb1f3069a7846f26483cccbde48283a0868b88c10d28b42ae113167848a9162d5f9fbf44f984b1aec1b7caa673840ee1365aa08474b01c5f02c3eca2bc6c7e5c7881eacacf636a0b6b57649a328688c8aa066d27e353506f70e7fb07b081087ae304b1d29279f4b7fde8352ae8e9b7fe82acc327730816b680012bebf4e2c67c74e7a908b5918caa2e0dd926cc9126df7e003af12cd026d522675d2ca37a711f80accb7a48546ed7d451ffe5fd2f7fd62c696d38a8c06fd06126b6ff7a527602f3c0f03fbfa61ddfb3a4383bd44aee68accbed81784b951901e714cd121d16473b54c9611376b4e15cc42f288b79688d99f412881fc583d851d5b5c93ace8535dcd652b0af02871bf494a0f71e9d0b1f5f8a259fe5dd65c192ac9b5565b275363904ff1c069c9885fd794c9bcab157f0241348ba55a65bd2525dd46e20dbd8c68885959be21a826ef3341abc19166c365f682987f9bfde52c2ef5528daa165a942d9c4f23f0ba08ab267eb6633ea8819fbacf886fe45e848e1fd42f2a82f13912dc9b2720a09437f35fdf69ece319130bd3b45df221e982a6002ff48a0a88353037fd203c9ab2d870e56ca520f8887586c182e30fab7050791d4cc8bfc015ca8f923d203bd654381a88b61f13322fcf382752f522562538c827323e9ce783ffcd5180171e960d7d4917b15dc804e30443b9de7cd54fc4e2120d3e657d0931358362630509bcd4fb74bb4953228812c71e7ac9af2a1761eb2e1c32d3a24e65a1265d533d44f2c2df9f3be56936cb51290118a297edfcb4eb2700295eda130a3fab3fed6ac749f5b0b370a72b7c60e009619544d089085915e124546a2794c85a1e5e6792e909695ade14f807731e909aa89ea8d2b46eb581412e171458819cb535e37a8a886263021d2f25bbb928dbde95f1f84a2f2714946127d86fd818d6b1c6ae6c0fd8d5f9b1c3c64e0d06b30743b30682bff3ef665bcb002b1ff453d8ed609351589a526c2cebbe80ff36b96a4ea76cb4a4fe6c57257014dccd729ce2e8f3abbbe549e34200616a3b532b5b6b9e29c363121e761f50c700e80d2120b1f9616f29b5200a2b433ce890bb23465e4e5771decb7e177150670dff21cc66648a85b9ddb6c62abc58cad212f28be5e3efdc9d8010f1522f214e086fa5cb8041940bbeda9ee3a44734613202a6bb8bcf1724adfcaa18142b46590c4fafa0d2ad9041013cfd0bcc8b1a7854b0ae11708659637506ca3d6bd6bd840176b131ad7a0f46b3e7fe2b849c7ab9e9c1a12a16825a721e3dcacf8987f02c154da4b9b0e1a054ed062d1940dc912f057741e602c787c78b8e72a5ed3af8e9156f753ee7407f82296bc4b82800531a8eb988e5438ded9d8a69689e26539f382c5c05e66319d21aa5e86dddecc8798c3f9b2459f780937eaf146fdf710790481eff1876dfb086360c61301deac708cbe7a4e9f2d6879f58cd6a13ba58d4e39d0ba98ae7ea21bec27bee0fc8c4bd8b8ec80b94762e9662f1324c8b538b64237c2bcddb8e31ead68950abdadf301feea9478630069ad6006867ecaa5bf78bf72a0e6107423f6e0dc8e9b19f94faf97aeb744f8aa4938a1e91db4522e3c53b8f040be40c176202b120f893e54dcb14702c0268f1c5376d5adb831fa50fb14fd9831b9c841e8552663e591f96fa7cee8f2e948c51c8d40c4b1d537f4bede08804032d6b803c35d2cb3a3d381b68801a95755f6dd81092640f3666ae8e4427c9d973186d5ea2294d63da991413a34aae7dbcf1b7a900c276daa2a1dc99a530ac4f4928cf715b0beca3edf39f1cc8b3ff1e3137dfb9179a78501b0f41881eb97027280f96cc235e13f2d0229ff030864e6796d1648f25d8ffcfd4a44fd2505cf93eeb2d37c2542e8e689f526696196937500c43127f681bb2a59fa569da119611eb8d268f02b7df7b686b9b80b36de884bb868923b5af10aa16252f17ce9398e15bdb100b87b9d7d92769feaadf48d6d4dfc4b7ad1dbba174e1d9821e894ecb59f9692855802125f879ac04ae747a427c630c15ede0455838864fadc177d760d770e92e120aee0ac8a099cef99d9a0b9b5f678fa7d7e4c2ed4c8fa5e00ec01049827809fffbcb1cbd821e31d2eef16d04e31a2a64492ff8669591fe461e5c91bde7c508c8042f6060ef0124ac16b5ef0949c53767de4613f7c3b347173df1f0978cf61a6d535d68da4aa19fd20d7ccbe8790b351c93658b314f507d63aaf34c75d3be1818e5810d8bdf7a3801d7704a98d88fa3bffafa84fc11d28e130fff9714206323299dc298e5e39b7ba61c2992a57aafcf1b9e61a7b13fa0defb356ff5c153511ccd148efde93b1c5a3c9c76c6652a68cdaafad0721b86c0a4414fa61e91155f0d50cb20d90978cd8661985088c35ba284a8cf6867b54b319a703be798942f762079cdd61ef0ba3434db3c335c08486005b2799123c4dbda5ed5232e7947064f08daa5aafa73d6b2ad61434b9816116fab2c84462aecea7c9aadbfe3e2cf13b72479bd68fc9121aae3a7341385b93b4605b3081b782072275354da66187ad3291e1e0f0509fefe59dfffa1ebb20bcf3f6f8f9293b1d34be309bc9e8a5458884a2f62f3bfb12e8181f0b2338147c4d8fa95237b71a886369c3ff862e9845e84fd2925d4cad1a7b0d87f4be022b1efb70cf9d7506f0dbee955e07c60a64d900d78114e573f16c09db67fc06de89f3c984782381980a46c60b00350e7ce087983cb18faaee94763afac708119a2c2a3c9fce8f682e508ebc628ed72d38e3d485fdd0bbc668cb625500bcd177d6a1defcda3cb808115da81bb3a716e5cd647a664d82ded5e4e57a86fb3e56d25fb4907a811fa2ff920a0868b466c8a289ec87ad73311755f8cfcbbd2d150f38408e781e226af021f93fc81f70023663ba3cca1cff82c83293659a569422a8f424d81f528cbcbc1a021c7fd4e08c276d53af84849ef148fb67de432cf29d87920f81bc46c4fb5e5f5ac4a2b713a52de60215c4e70ad1bc501bb4d4d08875d16987e424525cf951cd4e75b3e129d2c3e8d83a63c211d26dbb9e09b7bee6a7b916e7d84829a8a0bf0844196a594728edd1acfa576974702bbac59ffbc22cb2208a70bcafe98153b539a431d4c0bdb5137980078eb2a6825b9da74bce46f19f13f9cf2906cf1ce764a47cd3f7d62a1e7bee40468e15e2229859bf218558d6a975e2685a0602f779615ea98461f586ba490189a1e777bcd1ada49667299d5462bdd987d795c4205399fdf75f621ba5b4c4d25995c30216d2cf838821e7ba04bfc6b7861298fa6c653e292076df8318893a1f7e9246a7a71120fccfe07db8f137795bd9ae27956dee9843ebf619acdf3b749d2aa411d22502d6c67dc22ae9bddf37f44c6ecb8c59f5a8690aed0e803857c75750bfe83e1471516fc74f950b9ed5e201b4a432c2788c9706aef40409bcb74a0d21b13015c2e0409225e19efda85e2e915af836ec0d96036c9f567a960db3b8fad6a2cd2573e22fd5933c27ba06c40e7fb411bb349631e9a6544fba506b8203aafecc2b05439041295a3c77afaff90c39c8e1b4ed5c9c15d1fbbaf9a35f5112ddbd103fddc8c0d64c0ebdaec5521f4eaa6ebec1cc4a881b6aa0837e1544589c4277f65dc541d218c61060ddd3525804cf95fec4cf6afc882332de58363e578e20c0e08b52e802772660169037dc28c561de8e7b94366a6ae3b0f6634f602eaaa1b64f311686422dc81b00fcec09310afc4e831ff6158d7b10f9ff09f04febb4f3024d3fbc1a321800b54db798b52c8c8f377a7e1d430578223ae4e0130dce44b30ff95c677c31d73d640d921ab93301f1cfa74bc3bf82b6127a0c4a4007409b271300d9acd7e1900e9aa186d3ae5bcba8a14e19b66b4344b8bfde4e1cbb9dbd9214e86b85091111d1baf651f1067eb4c52f32e1da297b467248679097e4864a39e3c955e9d831dcbd6987a1815ec2187eb8a939bc6fe92bf7b92ba86082e319086fef878b5c52e327694c55ccc98b861a5560fdea1f65abc3edc87ecb35b205451174b06f1641a1a840897d40d2f143e3bbf6579615357ea6942a0593591bd85aaa2fc57658814547abe9eb407276ffbf8473bc5abac5a7336c0c990f4d407f02ee34861e75110f1b08bef5b7eae3912925fbdf70a46191a728b6a737440abeeeed89cc75e5316a8e30311dbcf60c2391d1813b2d5f79c2b47d1dd871c922c620b5b5aa6de9d1d8b2aa7f7f5f3ec1d15ad141eab810822bfdc75954bdce0b8ef47d79f6b08e02bd17796d42513d74dcd0209361f5c9980d5310c3cde7e7cfabd12631709293b09e081fd5914809c88a4c6f71ea7dc32960591f808abe193536367da7cde962f2a749063737f8c1e47d398499a279349f22451ab0311dfe705011fd0bc053fbc1b67780bd2604cdad60ba95cbd4adcd42d291e0c6da48cd3fef9b650bbe8d8941662775ae2d5808d079587d5bb6e46dc3734ca632d0b5b2be3c88f40816971df2abc362ddd2b2462f7cc09827c05a326ab292c336ece62da0e4f99da891092eb13f1ea7d67afcedfca17b43e60faac38cce1de487a41d3ee19edef1c95963673' +let ppZkAcc3 = '0x279d80bbc97bbf3da646186b99c54e23aa1f625f13b7c289405076d10c3d1eda08682cc5cb24d51ceb3e68f48a18ff0dadd25eefb72174ce53515f60ad243cc70861730c93685ec81cd3c5c2a43639ee2930709b5e98338c2b7c4c438cd5dfa81b565eeabae1289ef20ad1a55292b525f1d1f59f8ef6ad75bb7c565ef1d2ab011415e8cd1c8676ae97305a83f4726239ac610ffe4200274cb137a809dcf9aba7293d766ad16c35ad5a56c8267e126b8f1d68ba168525ce0da0ed62fd6fd4c7071ddba6ab41ea19c415bbf2d6ae3161b6f701f1318857516c52281abe0bfd2d92139839cb43f6d7e3cec4b4934642a1e9439c74f5d0b78a1f81e8c4bdeaf153c22cd00303303000dcf213a1213a65304207969cf7f9bb28b5ebe4708fa924fb1215243982fbf3b381f2368cb402a0f77f08ad781b87f1b8560808af9f6043bd2512210ad35bd03ae74c2baa0637d67f1eea32d919049d5229a57aa1f33d3f638e1819292caf37f1fccbb14707e886a8b09c1dfbd4ecca597bb584083ee4187f351b3e0da7f66f251f6bafcf9950be6fc4fd86b1c225cc3d5594e4889d420a18411c0263c044d25741eda74e5bb52317b8c33fdf760030c31dbfb059ea7582af201d680886e445d7009220e83069891ab78921cdcd61aa21bac0a3e1f40adf8c9d11477aa14b6ddb0f0d5bf7c6beea9e1fa8ad35964432cfee9fe7f69bd03b478d24313909d3a56ec35e8d511c500342b55989fc5ce62a3a8d4603e716736e6ef000815cde83dc8b1c2c5d1521986ee95d8a65a4ec03d59da1a27e162c160d2781027ea2e3358c7c1b9c3476b8b5881f873e85c372035856ffc3fed244ff4c577a0099faaf4047aa0d36d9b23cf1c9805d196908cc84874d7d842b5152502d22b31d6f1122c3d94d788757728651f4f310391aa341aa71c6fa69c6f2067a72fa7d2c0cd8f64ad5c335602cf348fedf0a19dd05d42968cef4ab46dd1e441a57fba50a9c157d3e090a8a04051374267c57c805c62da0989d55bc639109df14e4892408ce7d4f8a64bc26d13ca1fd474b102227fbbd41018c062bf54c7dcaaa39ff172d6b0823a35c71c79b394f95e6662232edfafe83db19119898e894a07f1b47522eedd09612eb33ff04d558ad9eee120924f635b71d8a167447f9a865d783e3ad18ec2692d63135e12ac6d469314c8bc2841cf770505a684eb69289a5840e06d22a3649fff0cca952f4efb84f1e7acbad8fa8d30a58bc6bc9f32e8e732b5400321f67f138c4b3814a8acbdb30fa854b35060406dc150194b8be06e70d42efb5e20c5e23035d4d00f2b4398604135972054d529741fb253b079461357bf750c9eb28b89a4883b6e303625c43b3ccb716d3795dac8ca4a7d6079d41e44dd3ea734821ddcf3cdafe9905d65591d595183417ef09753f82fa88e347152267cc1134950aecc1c634bfb269815b767f51cb93531a1e5357d9286ec903779dab9333d30a2539b3d218935d784300d98a6c0ed4a96c9a4b852bc830e599c55e1cc53d39d00497c3a3bfa9ad08f6d575b3a44d6784089ebb4da5006ee42ce8d6c2b620060d08d62ccd41bf16f651ae8735b04f5d5d4992ec4c1943f9f20af5633789e020dd1de4bcc44363448b951493187633c11895e6c32469664e6562c3f0e8406837391ac8ae3ae3a3f07cb11484dc3c182957628d876ee4a08020c8ef8e13816d7d8e1700a3381d55d4d2d3bfa95901e81c98f6b682be97c1d001755d2654fd7243b8115fa70fbb679b5e6b23b17f14352ba9dd8c9860aeb95745f75a54bb9952c7d22dbe506b4cdcb066a2a5dbe69ad2aae6dc7e4e00f5b891d0d6e1996a580e97f21ef570a0a6b2907a0222d3efcc24fb313b9871c5a023d7ec45122c1bc5759e7114f8b95daec1012b7422f47042f75411c6e2b64359b9fba729daea8041c251c909da06c5d1577b9b43bdbbbc0fc6eb845e7e4b123afb08b78a50ca9279ad774028bedffa7e3e731a5c2e13d55158d789033bffd2acc42fecf9d63021862db81b23c770b2da5e88e47a7d47cd1c632a63b6b1de4073483f0e6294010c2b6e8c45142e99562b3dceb20f2410c6604b237da9b68af4fd8daaa389fbef987693efd0079a802b254cf84c618a2c8375ed6fbe85e6504d691c1d39197ac61e91368206273e4dd6a4a933058b66418eaed154cf9873d9986db31152e0064d2d1a8f8b4d1559dd7b5c3667c0b1d02a5053c96832bba4f980e13bacfda401c2f8cd60d83e253e3870a895fa2873a0ac901250a7f60f3668d1f23bdf8d5df4bffaa892346122750510d98208de50ff69dd29fdccbb6ebfd2d54af83a18f2a5c91c84cd0d7f2f82211c075c3d966109983bd1b911af43da870248b40a081c09e17ce914e0b11570bc537a117611f855168cbad2ed38017f62f590ca499d5bdcacb5b1d8f2822e3dfd77db3246946cd62114e6e8d9dfcc4ab00586ca61183b90a1897cb2183c0eb2d677e69d85abaffbd1d28a900874987deed1143dfee2a92274f11323dfba1e750ef69c2e315d0058d0b8b21d7a8da0d30ac95ded5bf5add3b60082479a180adcecc8eaec204c37d010b21ad661bd0272950b0f338fa697aefab395bbaad910fd7ed65b09f2206beeeaa99b2f39d01eb8b7a3e4f34bd87338f21e640aae542bbaab7850041e9ef879c0ec8b73c4329386ffbfaee5a8e52908e1a32b43c3e213e224ec10479bb76d9dba5f69114e92f22fc07653230589c24c010b00e6ef971449f71c87114ac0ac9abdedd0a4352b217f182692a4108a58c9560a1f9ab32909892318e8d5ea2c8a6dc34289b91c68c574be05f6ac570e9f4be3cafd3324e80d45729fb64689a44418a36c9d8ac28b2ae6a42be22e5cdbc4f44ccd0d9134b820f28dd32c72e4e2bdfbaa089d8966bd7fd6be50e732739ea5a2d116a09df37a0a3d60f10dab6cf4a1120724a6ff07e4d7de274c2d455b78270f3d4b99c3a5362210ee817527d2f460c48d1ccb4769c746df8c960011490650721c3edff15de92837f619dacc37aeab85f92517e11a64c1593103bc9509dbadf647e497fef79e10fa68786f0c49b423b94df88ede84f1c0af967c743462ada7b15241de9a24171d13037eb6648828471da2849d4fcda7bc48a911c98018e2079bffc63ad059020d668cd894ed95c3db53704fa5dd8cc50e486896699f45f7a839adcfedc9ced70c8e03e082696cb50f9789cdaa69a91cf5a4cb03870d4a4aec1af45ac4af02c1221ec99b09e04f9a717be27de289ff92c810e6b6eafc16d4a8e489dece4c53820a4842d32c9679a29ee08d70c3abc4222eb2afb66775876d8fc48eee2d8c7a911d489313f2de5d70740494ae116b4a06bdc65fcf7468c2d68509a1e534acfaa90c32d9a93cfc36b79b04836009e4bd6d5a7a6541a46abeeeeb25cd0db79eac8a1e0a73c06f48be90e8dee989c027d2dc96fc9f782ec874c6c89f770fc569ee0202b6d9323e9065264dc06326ef1ea0874494fa2003607dfed9f2142a383884ae0d93b823694a396590dfca93810782a24f0afffaaae78002c5a74b47a77943272e82a11c2e497bed4919838dce1195956b63be3e258aec920b8e95f8a8e8ee131aa7b1f613449cd657a02fe13ebb9efc65d968e87a569b66db71db00a4a8ae9e0ecc0929f9cb87522b86766667b85370e6c4f8035659e6d94956dfcd8443572d19e768a88e11746d9773775d2022128edc0efc3923b936b99ec812690b14bc83166fcb127fc958ac9f69be28120b326c8797ba458ed7f308105394a61d365197295cea44e8b569c66348de6f978fafe025240be8b6f61445b9758f0902a7888727d3a21ff230dddd67dbe04aca776ac65a177240e752c74f8f7067d21b85484b21e2255b0a848e18dc1ea6c4014936ed69b1fabb73668023ba5688d201fb83980d0ed7517c70c70df89efbbf8e194d3afc8167797c05ae910f08e444bd0faabb292353993318a219314fd93483afa39bb291e38af3c0ff326292d9597f7b6ec71af10621da1ff2af072c7c1577d73762cf0b8c6884c876487a4af6af6baa49972dfa41eef9bd5edf6d213c23a363701b784935d553bd950c8e86edb6392014e1299c35f7a7f1ea104238989784fd033489be4c691e60357a8f12db28f0571ce4086f3359d0dfa01a13e05464c3d28017492c1b2a61b0ca2aa43d695d69f311e62ab6a71d7b2f5eb08d7a3d27bed65297c7e220bbbd5c8013f9eb8bad68f9eac10f584989e26cef37934bbdab2047c235981068294e75079a55142523488b2d081834ec3e755718c7597a2ccc848deea3bd48ae32897cff1634ffeac2c19464e6037361a4c2800615617ae417f0988fe5ca30f0c4c5e6667e81ce44b8d36f171c03d70999dffad17b251d5dbaaf0b38d5b251779266f200f56e8f81fbf0861fc2092b6e78dc2f59390115bd47080dc22bc1dd8fca422cc59dc75e29a3757e477622e2b094062c8d1943fc81ef5f2bdd8072cb5b7ea832838d735394682bb3b120257633d51837449c61afa03c209ec360f2c2581aa207efbb534c9e77b93d56da01d870f80588898d49471b78cae60d4e1a74c006800dc15795328256f87fda8222f9d3661ce9b8021c950f8f4c926b34ce5c75a1fe2bb938de7d68eaa54b2a742e4a8975dc2b49f56feefbdb1dd7978b24003ff09e06b7faedb7c597c68842a81e2a519a6c5c88b52c253428c3609b3581831c2d7542f8ca4a71a847ea83b0591eb8dd2eda8a7b1d27ec95f4fbe9e5506af336985b7d14cf1cc7687acdb36f4726a6388bec50a541611ddb5feb67e9e1933e1d41e7c3e7817b06a5d4b6387b020cbdd1d38c989fc2651ef61957aa2fe1f72819c1b7f64ce0928c346e7bb883a02b445081f06e7a161a4ca0b322ded1453a5f324038a154493b73a4b77349939b0136fc9af53adfac90197c35e3e4615b6fde2e2dce8a52b7ecac130afd186dc110a59a99726bee65274bcd599fade27a09221465b59ac4799104619d0ce206f00fe8a0d6448d0dec7343f03419b9a91bf32b8f3584908c9e80b0bd19e7fd3fe6202de885ee5f670cbb8a3f57ce9e776824f5bae94df004f5a599efacec39692a055ac04a0f40b7490eebb721a7f97cb94195b8fa11ff6f4d0223a327a394cdf30058f818de0478ef3e814969f707096da59610bc5dfe79c521b9f00ff328c9be0d3e1000b24d30987e23673dd345ba71d948c8516e6e1f27403387bd11421c822ed1075bf8c5f8fe8b8797cba9af2865ccc03409b007d8b452c4b2d6887a562c2fc84ae53da4ceeb538c74c3ca83a4bf101b18b2aa8f5c6a83d7980c96ee32bb2efdea8e52f723bfb92bd316314a854961dd753826113213f7e342e10b94f43721e0a4c44532988a206f9498a166f27bd8530768be391568711554ef380e7cf91449ef1f39f3f3a87209e0db3d93a97c2d7738d67028b9092aacc8c5f836f07702afa458741fbf395fe331d84a1618a448d93e083709f31f49cdef07e25379bf01f4c077cdba373285a79b14bae2810e9e1a862264a1d23731b4db32fdc5125825c7f929de4ed0686990b22ebc8d2214577638ca365e64fa960b8093771c73131b3d4eb3e070d649f0fd439994c52eb7c0be11abc95bf04605085052cf7dae081d02769af2e4d88a64a89a94c108e8ffd98bb92a2f8ab18b2f4f0d501a9abefd03ae24f136c64e267846dcf3d4739909fc5564a84cedcd91faf79088392b07542c1a0971e17146a74467b57f5ae3e5de027f0087e2430d0d58c5711ceb54a4612b6d00fa0079a104b5060593757803741ddbbc331e19a53267ee2f445cc06a3917cfd863b2cd070387153ead416dc46ac166b57addcc580a65425fc31d11077d0c0c045b572d121dee9df864d3b83ee40f031d2a6ac1f5118db0c8e05df48ac518dab225056a4515eadc56dad2b5532bfd35b9ceb3e28ed22341cfee79003f970b355dc6de736a52449584f4ed000c554c261c078083772712ef31c786777c782024c40b9da9870008139845ea8071ce9c011f9ec724e2b076b67f71c569e9eb1858ad7b7c041672ddca776a13d1231a21aa455530fa4df30bf89a0f7963f7b1055f3c39618e52c381db970b435b7a25ebf35019da2e6961c7a13bb1d8f8b076153dfe7be151a826c0e438d3e9e5b53d9ce4753bfe8d2116db86313135ceb3d81a37f05f187f0f74d460e8d456d5d4d70b627f542dadc87560843c07a4ccbab9109b36185ff6a0f4e51cab0c01cb25b2191628dce7c725695cf7a84ec752cb8c12f5c5ebe71acca471fb61c0eab1d93b2c64a1a1588d1bc13f728b390d50c0cc' +let ppZkAcc4 = '0x151792fc96b169c4a23d557ebd5ea3be0a755097e7b85aad488f0e291aabf1fb25053c0dcd19a01ba7c97b9485c260ba2869d81f4d65495a659a1af50a4ea5fa08640abe66a42e896449c32e673dd621e5a7d5f5826869945272dd2e4e53bfc825a1675d12e8f6463338d1f91457e51ac8b091ca91ab0bee5142680ba205f26008e0bbed4e41ca8f4628cee41923f2fa439fd0c9c204ab1004f0b755fd6fa33b1683aa343f8990b8d20e9565b71091a8f24cc69e51b3bcb2bd9c6e991358f69711eee28a96ce0e8953dae8190b029f076a87c9d1081c6287f2ccb29d8d053e31277c9d26478e93fefdbd4a4a970de988810666785cc170c1de887a58ecc2bd1f203525d51cb016563f71e28764d543dc1a8dab8641736c6c36295126b64291651b4ba424acffacb4f8a4dd36b0f30a761321f67ea75ae360e02910fdba61ed7b0cef01649eaa410dd4c244534aa77463ea8896d979bc250119f89a2c5b9523e8184c87e59b9877999ec2218078132248a9b6d727cd99aa0a484354c001bf6bed29b0a2a4ca1175acb93cad4a9b28ca2869189606490a9df8cc008dca715525862d318afad5ed391a6178a5b13975b10e1b1d971e2aa1337808fe76c8bb1627621c28571ce9885df5fdc0576e06a49975f52a05db7462359b7a6556808f6749170f765485495c29f16c3eda4cad74335ef776578ae7426a9dda4f2ffdd6f0ad9227b6fce3e0659f655556ea2c42ad8daaeb5ec16dbec27d08d0bbe8639119474213cde04ddef74fb1bcf3df464cb7bee99037d04eb7e9d1e42cb59a76da89681513f0705752e6f4079d0c1a9d4bef8446bf03121af31e25a41c0a2bbe389b867a26bae3dbdfa1ddab5afcfafd37b342fa1af9167f896b741164a7c9140fa6573c2fcf0b0a87e72bf6b8094f96ff517a5be5fa275b56099d8a02682c277de0cf55007b5d91a6fb32ac8f4c7e479d2fc0ef5e06e1ee2cfe69f4f8ea365f54640bf62d87d48e23fc96b25973a5c61a4625c3c1406420436aa6177793980c506475b120a6fd97b1c3726ef1a0fe5794632af507df24e255fffcfa9f425707c3f7989800d9925aa2ee60a645297126ba838eae4928bf7e85761fa494f3510fa3928eaa248b5009792a792c15cad7341fc60e794909c7fa39575d3a812632701eec04f9105427e7c7b0b43f0a05096663ea7a86cbf139769675a3b225697a69ad965d3f2250ab9d4f45e852ed487824ce88d67059080e64b154d178592202113c20502c1e7b41733d9c4605a34a44111093d0a7c06b24b3b918ec3bbe15528431210b2a05d9e501b2f1f52aa0314f6dff5d11439286d9d1c763cf60d4e506799e2165b81298c5ea868966338d8afd400afdec152c49861d3c7ad6f1c55c0782472e0d9110d07cc1dd6622325e9b5be2cc04b072dfa553b092dad62a32c793ae644b96661ff7539907696960c1cff8e866e34f9c79bc65a0cb102225eff9154332b6673e1118522121a1562942a6c495941ccc3a5ce706613e6e0c3dadb4a4a22e38431911ea6755290dcb3a0804cf87c0e6fce85a64c6663ce54c1874925d160f9e7d2630644458dbd558bdfeae40e21f308e7dc6219d9b3a77b511a67974302275fcdd1fa95da53eae08724e831f1a4b43862e96dd58aeb14b50e3aeb4cfda28fa9294140d61343acfb2fce262bdb1bab0a2cae8d8974f669c0c86c946f4f9d51086ac0633ac388e39155b9429a1f56d374b4dd18f2b374b9f6bc1cc960cde3176c9400d6c9229e5c00647442368889383c7a1d6d6799f06ae479b2ec4ac7202a568651a7fee16dd229a11d7f18629d7464f1bbecfa1b08b77bb9394ae38f65fc5270115eb134fd4144da570a6d2e1829b249500213f067038379b7fbc5c8dbdbeadf92ee7aa4e0bb798e9a4c51057883172ea6c1cff1a82e060594dd26b04365c2d711857bdb7cbd069408a153afc062104bc2b4877f6e3de92b27771032a9628d2911c935e73b72f6739ef0e2b41b6de44e44909ae0e118dcd832c30c30b39aeff2d29c22f78349117217cc0713b2035d4250f018239fa82fec79b4d2fc6369c9b8106a84ac57ddd7b05512d27e89be75e967efe24c17628cfbcf2140493f034775e0fe7c9094d7cc5c3546b37b74e73c5c8fd2ac51ff4b333b59d4d028e811c21710f37418d7fac8bcd35eb10a490825f022808d8e243f1178aa008dcaa549b4ad522fceeefa403d95a8ae9902b70e8c6602ac5042b0edeb80a34d64676d5260c661f7e33d7aa162538693927ded33f592aa6fc0111ccac879b66d1903555b1c4af0cf6a8fe572efcd3fe46621a1ac7bc842e89c84d5abb88e17019b232a88e6e6e0e537024b50c67cca58aecdb5ac73a005f24ce26e7f017ca6acdd00d97ceafb127b02d79fabeebf7180b576b5b1fc4d6bb3cfa59e987a4f52820478926da6c400b67ed6d99a271cf5ad20a5dc159389f307c4ccf944a57389d0b562d3dcbf3db2b8371b3f34ec0e4ed97d3101b1016fcba933545c3993ba6ec85e73d60bd257c0d92aeef65bbf149f2af9208f277b1962953d3dcd78133660989c1ce51ea64150533a139d4adfd2d059934dfa60571c24e90423103d18783dbc4f3fad24a55521905e90b3bec14192a6f73a7268fa0ecf1c5b51ba0d424ac833adf8888d7aa6a2537842f98e12d01832664a5448301d1b9eb3099927fe814ee31f01bda6de22f2dcdf22c614c1412a8dde94faddbbcadec6b9239c28a7b6413df3fdb8de5249121ac5b907e8388fc8eeb5de7674a7d36d586ddc6646a17ebd3812ee5e67c2e6610f1203b4176959e8b9d4a3dd094aa5f3014a2a337b557e339073210c0efc36b1d49365c99998571cb1fca4177453e092b2ee4715f8bf5200b0ce1869923665a0d813706b049301d2578a5b9e6b56cb556c0a66ff2271a72b2872d9a060e47db2fbc5047e0eb929d48e9c217d0f695f44875a81a639893351edb1ca6da7679692c1af02a816e53dc877be0c191dcb619e0c61fff30796fbe33b023697d8ebf37245c95ab7e1b69c16fd4492c4d0941c4ec05e52e83b9da36676cabcfdcee03532fe9d7dd3fe25485709606aeaa96611b1f297e5d906fa1d16cccf83d1276eb440c539122901298222749642596a7bc9401727016f721f5f6b0b3205346c06a172793aec8da535ee34d6997f5ab6e0c1c83660109657d70765e6013b4345d968823b91c6d07229328b27a62da3b31bb31f4118e862fb4f4387f2c20e9718d0704087d61d2597db7737984b5f1700f80e0c5d201599bf16e01638d5177f023bf44074ace682bfff893cd543142c7e9ecce7bb6401bd81499ec9ad19cd838f4a3690f40eae3a523ed55f1af4f4c056848752d8a0fde181dbf5b873ad7b9d4659c752c5ee8cfa882675ca8407229820c0b7df6ee93ade9ff66f9bade6a2da6a72e6f1f9b323ee5e3fbc106bd79be9fdfc5d8532d3464b5ba420ac32be3bca7ea710e167f4ad380e406b5556bfd796e0c2c72765409a44f297a88a34042ec2974c34f0caed241e9bc9ed3f6b5b506b49f890fd76c59d7b7708515475021915248bdd72f031001e65e061c918652db8d23080a419685a8bd34eeb92487f85382984df01b0ebc642c3c63690acb0852fe9f0b18ed849e52f862b44842b1ed1c40ad33e12930b96d8b043e83930140363216995344d94e3d58d1ed00c16a1d35919ce7ef23842340d16b03fe41f2235cbcd3c2dcfd9e8ef0747e567bc9420759fb1893ea25fd96ea8efe627772abc6c1d45994178cf29af234f79dcbb16c025ea49231a025ffd6738b969264806f1926154a0aedb6fc8b77f2aa86de178a2d760d6046d719524bb403445d1dc91de60a7d96132d9710e42b79f27baa46280162b88bc6c61c1e9d3ea194717483960b64e357368a4b0f8f4aca95891e55fe5a86a750897006bcbe65dd917c3074beef4b17963a662c32d8b31f68ff07a07057c38796edad15a783cd1dd4263f8a15e9a4491c3e816a8b1dda7711f0474ef567d4e9d8eba8239fe190df0d99be7869d0df2d1cf1fa2761f82a5a2b5019bd1e647b5c611fa90a35de7250650603766bdd3fd0d137e3d864e083f933c62b85a66921ac862277275cbb45f085f2cf24f1e85504f724d4745868be16066bb2c331afba7254fe940b27ee075e784479a5ee637c32af3a4fd28766fda0f6dc52287fcb9f5ac7ec2305d220da02015d98af3ac3226fabff5c73828f352b45481d8c74d78ac1138cd823c9cfa949d49daea04235a9a1f4534abbbb94d32e8436a83880fb369a97151e0b9d4ebe9fb45cf28a7c8a3661a5865db3c569da9be80676ec1eebb14853635103fc01a054760d98383b4150ec5cb4d02a86ba1de02e6ef22ac04a2f494f713c2a68e32af373f02e686ad7b3bbece2cf1250732ce86b8dcc3e7c1a6ff75f500a13c3ff38762e1443ab905405df5cfb849c1545332f695759564386b4fb70f9bf0e9a6ac787595056639047a205d22a8311085c0c61834454473b7e46e4ed4ecf0aefd1e60b726be3389e0b9b8fe7e0f155524e27f417895d20768e16bfd601250b84160a37fb6ae9b2d05c10070e3f81e5531048b9d296bfd363c1da7b036c842817171e0a1e676e4247a304a5092188b9913cda1341b877259d7ae2916d762e1abc14017f9c570be765b45655c309a84eab1ee9de8773865599830669a12db725b20b577642aeede80e25e94af09e14fa3898b70443f542e936c590906ca6072b973c909ff5593bc36b227bab8293e1d4dd8c1e5318af0838b533d1b65eb31d0b836c4da24ba5f3083076ad8ecfd915acf0d647d313f1190f899c2f2ee8421222ba7a7ae243e0ed5726207e77e8bd71e9d924ca4c723cf336c75be1a10454ef0614f07b26666ba7ebe64d45b8d301cadf8ea639df9b71b97eb1ac2dedafd7ed115034026f04db577d71e9eabe81126532e51fc6e4319fc5ce903ec36a53ee1b21c27704b6355a61a458d8f2c056b829d5a7f7a6f3d212ab0f69df2ef3f7b272168b69ddb1afd12cfe8c7a04414811dbe7d8c23d2dfb6df6c5cc8b8f1052c41409fb8a02328f1887ba6b45264e1cf8e346522652258e9547d6cd4967018a34cc0cebc7bc8bd21f01ffb8b1fb9afbe2094f6d09cd6eaa4cb1a0d59a4acec6b7c51c48f71c0d550b8d4b2aaa5d283ff204abc02e1f57f0df6cb43363dbb635d6982e137a78e7c1d8dc6cd313c6d52073da3a804c3da3d56a45d9e5fcc040631e93285aa12e01c3ef0210f8713b108d7f98348a2dd189f9a6abaa75e631e7226e7512c66c80b9b7350683e3441e2d6de9477b1eaac60cf911ce2ebf6c27b221987328553c885add19788697806ead7b38c15fa7221e8af1fd9bdca11159eb4c021113b21f092f55a8e675710ae2f70e3b32121a7e373659c01403b836a2867a23e609269117548f6a141a06e7d0fbb2ffb940a7dfd41dc4a3a6f49f2f714f4be461073095c5741e429cb25756056f99b7222ed41580cc3b5d9e491411ac374733f70a222aac98dd4215568e8ee0564e266001ca5af8db522c2312e976379ddaa32f1b95d56954c588dcbbd645f6dc10617eed2fc2120427930f3998f678b1100c9f296e2ac1ccf0042fa4ba1f03b68ef0d866e76d7e51b8968e1518a1e2f0349a3129c26c2a8df014be3f5e590099f4df27b950c165aa85c37b700768b7057ef0ec1115a3d08afabf458047d4f2b6f37338c49f4a2b24815f0a95f5b591c6462667005ca9e10f932b857c011cc95bb616ffb31181fcd8bb720b720c611b7c265f3d0c14b38f536683516155a1bb115831ef6472404bb4c6e6f4fbf880afd478658b28421a042c976b0fd65fd9036cda84dc90a003715929794f66398869bd17cdbb01c33e7cbd44ecff8d7f2fc246d14714da26cac027f97a44ca0be9848510ed5a0ab46c8303a83b7969289a916a02cc588ed0517ea3c9b375a19bdac2599508dd09868ba65092102b610a3758e16aa6d5c43c920784478b9ca85a9ef8188753a82a83e06761cf43b85ec12dc86fb5348c349c36184e9e1f11f27f13eee7b85af80f8dc70be9cc3bdbbaeff5ef7368074b463cc51410f3b5652d02713e193b63dc099a9cb957aff94cdaffd3ebc2cf8e9f1e93cf22f77306fed7e01a806c64e6b6078c641704cd6ef47bf5fbaf11f0c3f99708d415b06291ec5c5f746fdd4f0f840b0b926cf4c761f4a7c952c7358ac24a82c40c5dcf0545b6d6d27846754aba712d1b51829d1ec0059c7d8931e4e010cd309486a4bffbcb7ef857b7aefc8242d1143d7dfb066a1633c1be6cd395d6b825a00a1558149c6308ac432149ab56ce41' +let ppZkAcc5 = '0x2dc87c995b5b2c865be9732ab2f39eb6b822b9eb217479228aaf6a7286ffafa028de764f99a69bf28723754b5f1dad020db1c3d1e2ac5d695ce0747966041d6b0e1b0c6e2116ff7a9686863e7ed0d27965643b22ad72fb1efa85e5f7112e3a520085d96c67af69b8133670c5776c450febb0db6e64069dcff14a6f57e11ff370090d8a1205160bdff1b88b18863fdd61de2d6372146fdd24ab61706355c0662105b2666d81833d56ca94462dbe40d07ba619c044c9bc21e02469b97aea6c6af417f93da3d45cdd30c4b7a3bee9c7f156a228331c0341f926884d0da480d06b340987694f4cd27fdf8b21f85d9683a7ded7794b1ccae1dac17aeac124f86de80325cc461bbcad2afa4392b743f6775e50f0d3e7b1ded590870b5b8fc8e983bd9f0aa2f1ab562adb26de79a4c849eec93ce37582d725bbbd8a28ec43c5b15d31b81be3a9621c3dfca9b4dc18a3ba426a4a38433aea6212b3ea67b8715eaac7ba730c0e6b73e6e45a32fc98dbc2c281768d7c87b5f151eab07b138ad9ed4943327e2853dc101e304b7eb087197cc0967f167c75c9b999350be1193c8743ec85323422f47033beaaf40ae6bb022490b2d5c9139d4430d01eb6b326f3f671b07883bb0001c7bbcd15e7badf98d5260aa7d60b6f4fbcdd469c80fc3dcc825aec4e4c8115683e87922c1ac8e70caf46d55f1e5b7491b8dd489ef59983d195b9510865970c4a30c7ca6d62f1132a667d01f2e7a66dc9bc61f72a285c882bcaf02c8f0d7f19fd7d4d0dc25fd6db9375281868a43d43ca4640a8c491984252fc409073bb160e7abf7daf47c7ce9201c0a227d8395290d14b8dcb54cb518ef6c54a3173fa9c2e72e95c5a52080a9b8f35c70ba32edfc4a5cda3677c9b1f2d8b39b70d039c2f2f8bc85de417181b005943c63a1ff38a2b819eb98dae45cf0c2e6ebedd067104014a204685c8b3b9fba148a1500da5ef41e5b252faa7878c33536a62688a153128a679dff150c42d856d896006642e543cf05bb46d73848ec0bb75bf02d7834a0ebe74a0a34d4511eb76aee4e8011fac466d353d0b6867097bd65b64995005d92c117f0943b788324c0e5dd2cc14ac79d7068894024f6b8775f3a833273160650d4f64ead2a40c885a4d3e4c0aa8fed6248e7081968e6fcd19b0bc58a652db242704e5e56731d4e7768c7b217c7e492b2dc934c50d4c5be4deec7243e548e24d24c4652f579f57d046bbde3ac3e4ed334fd8b8ed5eff4ee72ffb851ec89bf546090e5d39def72767cad881c40ceb7f4abbdea24088601fe277851fb229e5dbe50bc2b595b6ea534805b6568ace6fde2d2a8fe03383dee5b79445317e0b8c2e3f2746625e630ebc6e71fd16712cd14792f50f1ffe4361119a487b496a338ab4bc0eb57f430438f3ec352e0902106d7d7f64f9f2ff736276a63963951913b9f99c14201ba8f8e54b6cd99c16ba122a47b4a15e56429cb88715734056fc76e8c0820557ee87a58b4343f54b1923ed78cf73f958fd69157213f23333253669c3693d2ab65caffee399e32753bb8005fc5509e2dd084d4bb9decb7a68b733c929a1c30433d4b424b4d7b8492a37e1b35697bfda34bb40b9473284d9cd8f2ec598a2312930fdfdbe955af221b775177a318d34e135f66c6356345273ee8910af72426303c0d2fae755adfc36f3cb2e261e000b94fe4b620796a6c3f021aeb1a87c32991ae98e0b5d6a7854ce513301ecd3d4336e7b6bb2a82052df92df6df408e8d39222d8e63ee7f0dda6e53ba5f181930fdebb2f5625aedab52210c0ff8c5362a444016e1de6db904c383d07575b6ad5b7d0b6c3434951a1d4d809043cb43e3b03110315b0fc2ceaaef281f9ffa86e99b6257a578aaa8ea24af6d49cb221339eca9d2d376cd25c85f5f7cc03a3a96ba42b424d85e86b06db70dabb4b3985c6a5d09a2946dca524bc47b5b61a2bc8370f861878e4f2c24bf42818b355473cda673c762893d7d34680ecc02e900285c80efdf796819011805333f1aa07853803455fb30e5bf50f7c47ff0f9faa30ca89cf5a41236ab89a5f7d3c74fd3eee1fbb5b4f5e1fac70b5b9c83d0d9829b0a79cb0335c990f65ccaa6262d518329108a0d7423c0be12640febc565e23599b7a85f8c8cbc928d4aa7460acd77c48f78762bd52e916b8209b11b1f36bc171f40fd98bc75359e920a433dfb8dfcaada3b5c4ee51ad0171c24328ee5ff7c47fc2074b7978210d9573e08462004f93793f14c991d7a4210b707621b1b036b4a842500c5a5f9f90dc53b8052b80494f011fb384bf4922068ce6670def45da5038a954bf65793caeaf397c1b88181c8fc961356b7d017c0c5f3883b0fc711c4cb3c29bced53acd0d8de6fa92793ad48fc0e6b23724537513c430bf6124b10e8ef1aef8030da89d3d65ae3e9adc9f8c6249fca5320e1c541ed7cce8afe1dfcfe24d3f1953bb4073c18b83da4ee01a45f995c93191c0f121278906cc6136b47a7e49993c7efda76b3c5957db60939b48792d601d1e194bf827a2b6f0261d031f3787b4a5033496e191383d02fcbafbcbaced8266679dc22a062f5b4ee3e2b8ebef5e26dfca692140c2ee399a94efa7d8dfd9c126c247118d1f4d185da3ce8867198cc28d2ab851a09c51608b212b81e79e9e8189c117e41d0ecac2a6177b12b343648cd8ba15ccc4ba49c141b3cdb5b8d470ecd5f90dcd3519192f763445996cf808d6ff6ec971e99e32ac067c1b2433c7994ee568efbbac11b9370f14053c34dfce8356b71de3080d9d035270011d9171339e6a8f94ceba03eb42e9c483f99a25e2a643cd81ae8e76e2608e5fb9165385e3e380f9c76493009d116f3e8ad6cd6e1c60d2a2d48f4fb8d7e2dfe780d019176fcd469f666ce31a79157da7b624c8c737dca76a2186121f015554780260d3246f2e1307f1d42e238fc117b318f822f10a8217c4ad0ea5b3b56ef15b89aa418f129b8723468987034badab516e3819b84c57295f678a1cb154e90920cfebd1a970e67714f6eb94248092ce617e38a131cc12f99e8b08b623d4d9340d27b0f2d34140ce8b00250723973c107d08c3fc8c631b143c442d6aa107e48231dc75725bafb7fcf84046c714618e3bef602ac1a5ae9b8ffa262c9639d5e5cf7a859928e407bd172b8bce5b1a053fce2265d0b661a3fc93429d7ea47d78eac6f52dea0daec07e3d3586b3df2e16f01c2086ab64e623bb49819012979c652f1043bdcf30af8f0bc60c82602b2b642f63fb4eb517cb519d1f8b1cf18b236c9ad731cc1db0e1b75fcddc448aab15db9f0c5affb9e1704d508adeb13ebeadd1832c8c16a162ef80b0f6161a71f71746677d821e4ffc25230bbdeeb2feaf5b5c57c23379c27c0a021af225c265c203614babd288f8b3a891073c0630b9b014461b07a65a4508bc48f556bd1df5f82c2424606e5e7d29b1a39d48b6f586056d41120fcc0c4330d8330fc07b4060470a755d19af2a020fefbf688038239c59573dbabc3246ddc8ece106a41bccd07e2502d37413360eb59f60481e1223c2b1f774a12e728642dc47bba05d4dccebc807e99b0ba0ceef8f35133261588cb6eb5cf6203ed45a27f28a0677f0f9d5431122ded8a6f0f2cbe05dab919e545129f7fc1e320d6fed06c22e61f9aa00ae95a50bad727a7282a6f0e16992640bf8cce79a82fff0efd142bbd4499b44ec4cb1db0b9f7250ee4258f73dc66f83099ec9c6902bc8500e32ee6e2fd75a2ca66628e62b77195fed4a2a0d63bc78d7e206ed45c2e3c3de8630d2281a401034f1fc680804f26906e218f40aa53f4895cf28d3e62179161f906cb8d17240a000e81253520256a0fa6ea9d180463a452c11e1d91249189b5a23ddf5a3b7659d5240b0d04f08abc81c711d0757c2b9341ef1b4024349d65155ecbea863f1a24af306d0450e20af6d6c2c1f5f4f1c02a897992226f489f09ee077974ef8f3eb240acf191bc3292962eb9edbdb467a343ce1634879a2060a7773727cf5eb9fe7850ca526cb9c093e52a7cd9057df05c40c5a8e114e6121d27407b5605befae1b6d133ca5d0072576d3553696e3d370227df523d88bf9800d27748e0fe439a6255fc87eceff1d04a4f4f067544e9cbc09a63750b7f7999a31df00db25a8b9711d21020f6f3a190ae063d4a6aa51963a1c737a092ada16f9303b9c1a9aeac1f2bcf269a80543c60f5bb122059b01e628d8c696f6d0d0095350107759713d74f59ba8e64f6751eb23a9de192f8787d14cdc3b2fca53444b7cf4d3c39f7583aca9f140325f69a30c0fa78fca1939a7080a6bfaab732935a3b810c45ca6e34192f5c285fdc7feb05928ed61727872415db27075e2dab5acc4a730bb09daca797beebf6d8e226dcee22e325eb8ec511002c95bc1dfea10cc063913b54a81bcece86336ecb9b389635b1597963d24293abbe835a49902288a4e023c873451753c613a25fb26e658d0470152c952a92bd717db5c093b85af98d431c0e43e37a5f67845502a9c2fcec1431aeb34256900c8fc13eac0806be4a17ab2227073fa10772802a1c56737f9e57d236c20f4f49b38a937f499a78091bb43ba6e6d7f95e31acd6e7550c270dddabc0645119d4d28cab0e80b6179d42831ffb2688653e9dca3d951626bc9cf36a3a62a1cb77ec251064ef98339690b5750111d6b0e959a774bcb23abc4477d3a56d4012e4e6c7e60e1c9af3ed0f877bdd360c9e4a3f15d750062b22c168a0699ebca24d1133ecd4a5769d581be82f802b4c0b61d367275e1a47c24880add3045fd6b298055b0786880e7cae3eadd7013d705fb3692de33c0a165bdbe4158ffbd627c08a395f41ace8c5d06a6e025657f356653f347be35295b369a138cf9c6a48e8a15ff2aa7c5b05f4ba18cfe0cd5a245baed1b66ca3721326a523d7f9f2375acdb19e99482ad2e065d5816da36a1af8849e074e269ed35a4621e34a5b99c709bf1032ee6a23496bdcc277df8b7409e45beb0eee30d40a18b82c3c0085d31f4183d2c5c8917746c097cc28553ebf10ccb654de61dcc7f177af0f43aeabb80565d6211a6ef0d3e0b2d0db2e6d2416407d1044ef3bcab6472dcdd3331afe471f3ea791b9192a582a13b33b014a3621b1c669c59bdef7283cd6f31aba46f2abedc703d0e8cf4726d87bd8540453ead5a372f174c2e02bce4dd238011f82fd3c2d4466601ce62d2bb181f17921956423a047c188ef4ab0761aae757533fc94d4c555a7224059f3afebde13a268f592d3921c09fe023eab94c822f56e694dca6b6d0e5cf1d365e0e385a8bc6fcfb780c2ab655b9568b70cad914a5247aac464700969d4c2cf3d06a62eba79ca64a64611a0982b15ff386de5793d4f96fa42652114da03d1ddfdc57fbd2840ada1d5a58d5b031364c49720b563e424eceb68203da91439b167690da0306976d290feb0dd329d8d907692617b1e98db2cbea0e6bf9a6514207936f3ff344e97eae95fcf3aa2e62dc62a4333b606d61541c123bb81b8680fc2ad66a58819ffb26cc99c7dfe9d7f266b355fc9c11a47e77095c56216baa4f592aeeb3c03d4353813584bb94b099c69d5242d1e8c45c9fcf51b19e454cce98a21219c2b9c44ddf9ea36b76294b20795d959506f9fb71d8fb7cd805cbdefbadb31e98cde2641a410e01ea78fc8b6a8c1e28510868b6ecfd0aaba481e8186b7a402737343b692e335b2f625a516f534063030158395e0ac9a51a0538945a6dce34289cc9904af58e90b5f39673b75e93dc63c8963a39ddff571178eedf03b57de2181b237eb06b575b674f63e135822da407c66607bfcb85b308f2bb10437250b21a8b1421173984fd1e216cb81b3bff170e6a58813b20333224d98b73ed785ea100679fd2047f8ecf080855d32abae097cab6419ab623f4a6abaddf0785938a0d002bdc85b99da38c6f65677c90290531534efb64cb43c0e033785b6f5ccfebd0155c8bf020931c5dfbff18c804b6e13c1348792b4aec72c5be3ad2eee6d25dc01c7c3b7edfb4d42ddfbc7df89b12dd42245a99543fe74b982aff7b23708dad301b8df63b036ad8917b2099cb13ea3d5ce0e53b80d6eafc47afdf03dd6535ad2f2f01881e6de67732ac4629706d01a11cedb592bc1a868ff51906717dc29af3393040c719ee0e3b74c00dcc0e5cfd4d6c29134723c1820cf365cd697014f1918703bfaa49ba8ae6461074932feb0169fd1d449c2ec3328f4eeab74d990c4806dc2e119159d50400124c24dcfa146f3956dc805263a198d512d40b729b969fc31f2ac1ed939fb8840dfc5553158580c910cb5c79b4adb6f9a4d44ebd5f28b3897f' + +let gpk = {x:["0x2a69fc6c9e39bce2a7bf7c37d9766494243948f0119370a06f317005d70f9304","0x16cea21f93a20dc52769e8714618f9ddccbf97343a927ba2a559b4c1fe8fc8ed"],y:["0x21975b057269f1962d7e637ab7f110b9edbe79705824c5293d714ca2c651a7ad","0x2f90279a7c5a60a9e18257f3431ac08156c09d51439c17ce5eabcca999fecffb"]} + +// todo: update partial evaluations +// pEvals for input: "zkRand v1 2024: 1" +let valueAcc1 = {x: '0x1064d6e2dcee178c7d845d61131978592c29ee71e40273a72facee6689445f93', y: '0x067afacedacfb510b09278d216ea19aaee3cdb4a03d2c7157f11016a795e6900'} +let proofAcc1 = {z: '0x00cdb7bb98419e845fd36c099faa0ca347102bbe2fedb2b1ee049392cc1f37e9', c: '0x15ab41ab094379613d98f05db1bf206428e445b5ee34d2d2394ea936019c2f99'} let pEvalAcc1 = {indexPlus: 1, value: valueAcc1, proof: proofAcc1} -let valueAcc2 = {x: '0x24cc41179416462fa60951d33d37d92cbf537bdaed45f710c3cc920a9cc29a91', y: '0x1b2ee70238dd732c9203f6050a92dff7de975269396738be03e585eb923c5160'} -let proofAcc2 = {z: '0x1134eb0fde7885ecc3aeae80fc083d70280e9627ca1970cadf392cd389f49b7f', c: '0x155afb118357ed7ea6a6504529a0149f507ffc9e0b66d44c9fe90cce7fe28669'} +let valueAcc2 = {x: '0x01490918d3be4ef26e40b813aaaf29adb3c0ecea705253775c6638da80237556', y: '0x28f7129970704ec1470b1aa6207a0c758bfa717a13df3aeb061e20839c6a40f1'} +let proofAcc2 = {z: '0x2637d2bfa8abe4b0e80bebbac368182dc71c3e91ad9a574150e5c10ab6b3aa29', c: '0x1e3a37671aec5f7e1cde3b33b150602d4bbc9919787b442243cce11f41e7f96e'} let pEvalAcc2 = {indexPlus: 2, value: valueAcc2, proof: proofAcc2} -let valueAcc3 = {x: '0x23381a99bb649a8b4912c27c11362947ed457661ae4ce19c0e539c2244924b07', y: '0x027f8e63851920a00f55ad60a3bdc5a9f8db4521aa44cd03533fbbee94dc58a9'} -let proofAcc3 = {z: '0x213b1aad2d26a8ec0a2299bd0dfc91390c5649444174f0142dbfe9355c135c6b', c: '0x1308b9206b6531f8b3486b64903fbbb3e844d1774e9fe977de7f166c1bb97205'} +let valueAcc3 = {x: '0x2e950d771c7a4e48c8e1ee11d17ef503e518cf418b2b24fb6b53ab83d1113f88', y: '0x0933ba8f16ce93cadec566329e7c45008380d0b57ae79a5c63d379dea0e9ada0'} +let proofAcc3 = {z: '0x2b8b49962b1114e204b2f30f9fccdbb00ce2be9a1d28182e943ae380fe996322', c: '0x2b9658e94845b522a4be605f8da3e0827568acbef9dcb3529d2b6cfd07c83eba'} let pEvalAcc3 = {indexPlus: 3, value: valueAcc3, proof: proofAcc3} -let valueAcc4 = {x: '0x0204b5d48536ba70995480323ea102bb085c321ace441c46d7941a83575edb64', y: '0x027311080fe325c61bf97d1e1413515bc92967efef10e180ddea4737e0012483'} -let proofAcc4 = {z: '0x05b51059891996db457c1cd49a8c6c4ba7a03146fe56c17cfa50f1187e0a28a8', c: '0x20ab8d582e8ff821cabf9db6573c5ec1498fac4151814ed718379f3a60527f16'} +let valueAcc4 = {x: '0x2324ee59d3559c854493ce11320e5c57384b7e4c0413fac420f512d5493e4286', y: '0x0f9cef73e42d03b1f95ab8b552d38e3dc83e266fe4309c4ba0c0576be4e8f36f'} +let proofAcc4 = {z: '0x0e6e62124e9de8974311ef8eca8d6cb8f03f65e27a7b163e737f23d58e36fcde', c: '0x15f9269db1c178d9525555ba7f69cc965dc794bf4bbea7f14d6403620727aef3'} let pEvalAcc4 = {indexPlus: 4, value: valueAcc4, proof: proofAcc4} -let valueAcc5 = {x: '0x0764e44dc3fd4f311c677b8482639a409ea71be1f13bc7171e1312affcc47543', y: '0x22e8c46aebc87318220ecf5184f5f539e57f8ee65098f7f1b3b4fbef694e70ec'} -let proofAcc5 = {z: '0x1b27e3dc0b5202fa969a8a02a1a63617eb10d8f7d1357123e6212f08279ddfb4', c: '0x1fcf444fd698d2d7aebb139b70143151c697704a63d29020fa1f342fe21fc579'} +let valueAcc5 = {x: '0x1373fe065e22eae067ff30f9a10ba7b3457d898859aea2554e1569a146f6f1bd', y: '0x2cb1266fe29d61b8f30df7e2977c79ff52d41cb2aac92ca30136a036b74d1053'} +let proofAcc5 = {z: '0x0a72559aa0515257e7d22f85af70ff461941fce067dd52dc8c450e87eebd5ad9', c: '0x0a083759ebc48afa4dfe66e34fc0322d31ee0dc957706e23e9e7ac43b23c6246'} let pEvalAcc5 = {indexPlus: 5, value: valueAcc5, proof: proofAcc5} let pEvalInvalid = {indexPlus: 1, value: valueAcc1, proof: proofAcc2} -let combinedSigma = {x: '0x2acbaf7515bc51af1b7237fbe9678c0507eb51894b3aefc37bab2bdb30e2bed9', y: '0x04dfaa96489890f327bdd8d6900631e82fe4c7f83f4360c678838aaee3bb006f'} -let expectedValue = '0xc6e38ed65c903e42501071b33f39be8e70128cc4cb7d393f219211a135d4a1e4' +let combinedSigma = {x: '0x2e92176359d3d73e00199ce2a246628d191a75f89ee7ee25cd27ec1360f77832', y: '0x14995fdba6e64057d57a6a76cc7908066dc8fa5055c36af74c3fb1f50e6b168c'} +let expectedValue = '0x3a127cfb5addd6c17f4b46875eb34ed28dd83832aea73ff56d2a1d0db8a080d6' let pseudoRandom = {proof: combinedSigma, value: expectedValue} @@ -113,7 +114,7 @@ describe('ZKDVRF on-chain tests', async () => { }) }) - describe('NIDKG Phase 1 - Adding Nodes', async () => { + describe('Phase 0 - Adding Nodes', async () => { it('should be able to add nodes', async () => { await Zkdvrf.addPermissionedNodes(account1Address); expect((await Zkdvrf.addrToNode(account1Address)).nodeAddress).to.be.eq(account1Address) @@ -140,7 +141,7 @@ describe('ZKDVRF on-chain tests', async () => { }) }) - describe('NIDKG Phase 1 - Confirming Registration', async () => { + describe('Phase 0 - Confirming Registration', async () => { it('should not be able to register through a non-permissioned node', async () => { await expect(Zkdvrf.connect((await ethers.getSigners())[5]).registerNode(pubKeyAcc1, {value: minDeposit})).to.be.revertedWith('Unauthorized call') }) @@ -199,7 +200,7 @@ describe('ZKDVRF on-chain tests', async () => { }) }) - describe('NIDKG Phase 1 - Start NIDKG', async () => { + describe('Phase 1 - Start NIDKG', async () => { it('non-owner should not be able to start NIDKG', async () => { await expect(Zkdvrf.connect(account2).startNidkg()).to.be.revertedWith('OwnableUnauthorizedAccount("0x70997970C51812dc3A010C7d01b50e0d17dc79C8")') }) @@ -214,7 +215,7 @@ describe('ZKDVRF on-chain tests', async () => { }) }) - describe('NIDKG Phase 1 - Submit PP', async () => { + describe('Phase 1 - Submit PP', async () => { it('should not be able to submit public params with invalid proof', async () => { await expect(Zkdvrf.submitPublicParams(ppAcc1, ppZkAcc2)).to.be.reverted }) @@ -247,7 +248,7 @@ describe('ZKDVRF on-chain tests', async () => { }) }) - describe('NIDKG Phase 1 - Compute VK', async () => { + describe('Phase 1 - Compute VK', async () => { it('should not be able to compute vk with invalid gpk', async () => { const invalidGpk = {x: ['5723195899829869360355735301475034960183765743883956670260556700304561939780', '15030566888555072222300603577241433726177959843784551443730472582972215820810'], y: ['21136863447758371055855435029370840801392490189244715848977694295806880691066', '19918577776357251387334608329875665792259141288711508547524739451628191582134']} await expect(Zkdvrf.computeVk(invalidGpk)).to.be.reverted @@ -255,24 +256,24 @@ describe('ZKDVRF on-chain tests', async () => { it('should be able to compute vk', async () => { await Zkdvrf.computeVk(gpk) - expect((await Zkdvrf.vkList(0))[0]).to.be.eq('0x0e8c6d3982ac66664d79212c70673d7b0e9f886455354819447eb5fb19cb9e5d') - expect((await Zkdvrf.vkList(0))[1]).to.be.eq('0x0dd3373f1236fdf59701b990db34bd798cc59cab8f02dd477c1700dfa2205da1') + expect((await Zkdvrf.vkList(0))[0]).to.be.eq('0x1ebd0ff79221958f20f0b558e9938733f89a158b68086bba25a8b30f1212a944') + expect((await Zkdvrf.vkList(0))[1]).to.be.eq('0x063ab75c90f51025caec756f3d18690c6d01dbd3d1e375ec0f4961a733cf8bff') expect(await Zkdvrf.contractPhase()).to.be.eq(3) }) }) - describe('NIDKG Phase 2 - Initiate Random generation', async () => { + describe('Phase 2 - Initiate Random generation', async () => { it('non-owner should not be able to initiate random', async () => { await expect(Zkdvrf.connect(account2).initiateRandom()).to.be.revertedWith('OwnableUnauthorizedAccount("0x70997970C51812dc3A010C7d01b50e0d17dc79C8")') }) it('should be able to initiate random', async () => { // timestamp set forward 30 yrs, rand Input - const newTimestamp = 2655988642 - await hre.network.provider.send("evm_setNextBlockTimestamp", [newTimestamp]) + // const newTimestamp = 2655988642 + // await hre.network.provider.send("evm_setNextBlockTimestamp", [newTimestamp]) await Zkdvrf.initiateRandom() - await hre.network.provider.send("evm_mine", []) - expect(await Zkdvrf.roundInput(1)).to.be.equal(newTimestamp.toString()) +// await hre.network.provider.send("evm_mine", []) + expect(await Zkdvrf.roundInput(1)).to.be.equal(`zkRand v1 2024: 1`) }) it('should not be able to initiate random without completing previous round', async () => { @@ -280,7 +281,7 @@ describe('ZKDVRF on-chain tests', async () => { }) }) - describe('NIDKG Phase 2 - Submit Partial Evaluation', async () => { + describe('Phase 2 - Submit Partial Evaluation', async () => { it('should not be able to submit partial eval with invalid proof', async () => { await expect(Zkdvrf.submitPartialEval(pEvalInvalid)).to.be.revertedWith('Verification of partial eval failed') }) @@ -312,7 +313,7 @@ describe('ZKDVRF on-chain tests', async () => { }) }) - describe('NIDKG Phase 2 - Submit Random', async () => { + describe('Phase 2 - Submit Random', async () => { it('should not be able to submit random with invalid sigma', async () => { const invalidSigma = {x: '19530533679215397651485398553050948879466713746327407509791012205473365859090', y: '222745608289019522547805804936443557730246285411524202516818394002813364755'} const invalidPseudo = {proof: invalidSigma, value: expectedValue} From c9d613fca7fc73727dee322cd45df2ffd01eb7b8 Mon Sep 17 00:00:00 2001 From: Jia Liu Date: Mon, 6 May 2024 10:09:04 +0100 Subject: [PATCH 2/3] cleaning --- test/zkdvrf.spec.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/zkdvrf.spec.ts b/test/zkdvrf.spec.ts index c541783..1fa5e08 100644 --- a/test/zkdvrf.spec.ts +++ b/test/zkdvrf.spec.ts @@ -47,7 +47,6 @@ let ppZkAcc5 = '0x2dc87c995b5b2c865be9732ab2f39eb6b822b9eb217479228aaf6a7286ffaf let gpk = {x:["0x2a69fc6c9e39bce2a7bf7c37d9766494243948f0119370a06f317005d70f9304","0x16cea21f93a20dc52769e8714618f9ddccbf97343a927ba2a559b4c1fe8fc8ed"],y:["0x21975b057269f1962d7e637ab7f110b9edbe79705824c5293d714ca2c651a7ad","0x2f90279a7c5a60a9e18257f3431ac08156c09d51439c17ce5eabcca999fecffb"]} -// todo: update partial evaluations // pEvals for input: "zkRand v1 2024: 1" let valueAcc1 = {x: '0x1064d6e2dcee178c7d845d61131978592c29ee71e40273a72facee6689445f93', y: '0x067afacedacfb510b09278d216ea19aaee3cdb4a03d2c7157f11016a795e6900'} let proofAcc1 = {z: '0x00cdb7bb98419e845fd36c099faa0ca347102bbe2fedb2b1ee049392cc1f37e9', c: '0x15ab41ab094379613d98f05db1bf206428e445b5ee34d2d2394ea936019c2f99'} @@ -268,11 +267,7 @@ describe('ZKDVRF on-chain tests', async () => { }) it('should be able to initiate random', async () => { - // timestamp set forward 30 yrs, rand Input - // const newTimestamp = 2655988642 - // await hre.network.provider.send("evm_setNextBlockTimestamp", [newTimestamp]) await Zkdvrf.initiateRandom() -// await hre.network.provider.send("evm_mine", []) expect(await Zkdvrf.roundInput(1)).to.be.equal(`zkRand v1 2024: 1`) }) From 9902acb2d65a51347839d771e97875daeb312a32 Mon Sep 17 00:00:00 2001 From: Jia Liu Date: Mon, 6 May 2024 16:31:03 +0100 Subject: [PATCH 3/3] fix scripts --- contracts/zkdvrf.sol | 2 +- scripts/admin.ts | 6 ++--- scripts/random.ts | 4 ++-- test/zkdvrf.spec.ts | 55 +++++++++++++++++--------------------------- 4 files changed, 27 insertions(+), 40 deletions(-) diff --git a/contracts/zkdvrf.sol b/contracts/zkdvrf.sol index f89cdfd..8bdb841 100644 --- a/contracts/zkdvrf.sol +++ b/contracts/zkdvrf.sol @@ -37,7 +37,7 @@ contract zkdvrf is Ownable { Ready } - string public constant INPUT_PREFIX = "zkRand v1 2024: "; + string public constant INPUT_PREFIX = "zkRand-v1-2024:"; uint32 public memberCount; uint32 public threshold; diff --git a/scripts/admin.ts b/scripts/admin.ts index ac2db8d..e6500c8 100644 --- a/scripts/admin.ts +++ b/scripts/admin.ts @@ -159,7 +159,7 @@ async function main() { async function listenRandThreshold() { const eventRandThreshold = `RandomThresholdReached` contract.on(eventRandThreshold, async (roundNum, input, event) => { - console.log("\nevent", eventRandThreshold, `round ${roundNum} input ${input}`) + console.log("\nevent", eventRandThreshold, `round ${roundNum} input "${input}"`) console.log("begin sleep...") await sleep(2000) @@ -196,12 +196,12 @@ async function main() { await sleep(2000) console.log("end sleep") - const cmdCombine = `RUST_LOG=info ./target/release/client rand combine ${input}` + const cmdCombine = `RUST_LOG=info ./target/release/client rand combine "${input}"` console.log("running command <", cmdCombine, ">...") let result = await execPromise(cmdCombine) console.log(result[`stderr`]) - const cmdVerify = `RUST_LOG=info ./target/release/client rand verify-final ${input}` + const cmdVerify = `RUST_LOG=info ./target/release/client rand verify-final "${input}"` console.log("running command <", cmdVerify, ">...") result = await execPromise(cmdVerify) console.log(result[`stderr`]) diff --git a/scripts/random.ts b/scripts/random.ts index 812b2f0..59a67c9 100644 --- a/scripts/random.ts +++ b/scripts/random.ts @@ -27,8 +27,8 @@ async function main() { const memberContract = contract.connect(memberWallet) const index = await memberContract.getIndexPlus(memberAddress) - const cmdEval = `RUST_LOG=info ./target/release/client rand eval ${index} ${input}` - const cmdVerify = `RUST_LOG=info ./target/release/client rand verify ${index} ${input}` + const cmdEval = `RUST_LOG=info ./target/release/client rand eval ${index} "${input}"` + const cmdVerify = `RUST_LOG=info ./target/release/client rand verify ${index} "${input}"` console.log("running command <", cmdEval, ">...") let result = await execPromise(cmdEval) diff --git a/test/zkdvrf.spec.ts b/test/zkdvrf.spec.ts index 1fa5e08..2badead 100644 --- a/test/zkdvrf.spec.ts +++ b/test/zkdvrf.spec.ts @@ -47,34 +47,21 @@ let ppZkAcc5 = '0x2dc87c995b5b2c865be9732ab2f39eb6b822b9eb217479228aaf6a7286ffaf let gpk = {x:["0x2a69fc6c9e39bce2a7bf7c37d9766494243948f0119370a06f317005d70f9304","0x16cea21f93a20dc52769e8714618f9ddccbf97343a927ba2a559b4c1fe8fc8ed"],y:["0x21975b057269f1962d7e637ab7f110b9edbe79705824c5293d714ca2c651a7ad","0x2f90279a7c5a60a9e18257f3431ac08156c09d51439c17ce5eabcca999fecffb"]} -// pEvals for input: "zkRand v1 2024: 1" -let valueAcc1 = {x: '0x1064d6e2dcee178c7d845d61131978592c29ee71e40273a72facee6689445f93', y: '0x067afacedacfb510b09278d216ea19aaee3cdb4a03d2c7157f11016a795e6900'} -let proofAcc1 = {z: '0x00cdb7bb98419e845fd36c099faa0ca347102bbe2fedb2b1ee049392cc1f37e9', c: '0x15ab41ab094379613d98f05db1bf206428e445b5ee34d2d2394ea936019c2f99'} -let pEvalAcc1 = {indexPlus: 1, value: valueAcc1, proof: proofAcc1} - -let valueAcc2 = {x: '0x01490918d3be4ef26e40b813aaaf29adb3c0ecea705253775c6638da80237556', y: '0x28f7129970704ec1470b1aa6207a0c758bfa717a13df3aeb061e20839c6a40f1'} -let proofAcc2 = {z: '0x2637d2bfa8abe4b0e80bebbac368182dc71c3e91ad9a574150e5c10ab6b3aa29', c: '0x1e3a37671aec5f7e1cde3b33b150602d4bbc9919787b442243cce11f41e7f96e'} -let pEvalAcc2 = {indexPlus: 2, value: valueAcc2, proof: proofAcc2} - -let valueAcc3 = {x: '0x2e950d771c7a4e48c8e1ee11d17ef503e518cf418b2b24fb6b53ab83d1113f88', y: '0x0933ba8f16ce93cadec566329e7c45008380d0b57ae79a5c63d379dea0e9ada0'} -let proofAcc3 = {z: '0x2b8b49962b1114e204b2f30f9fccdbb00ce2be9a1d28182e943ae380fe996322', c: '0x2b9658e94845b522a4be605f8da3e0827568acbef9dcb3529d2b6cfd07c83eba'} -let pEvalAcc3 = {indexPlus: 3, value: valueAcc3, proof: proofAcc3} - -let valueAcc4 = {x: '0x2324ee59d3559c854493ce11320e5c57384b7e4c0413fac420f512d5493e4286', y: '0x0f9cef73e42d03b1f95ab8b552d38e3dc83e266fe4309c4ba0c0576be4e8f36f'} -let proofAcc4 = {z: '0x0e6e62124e9de8974311ef8eca8d6cb8f03f65e27a7b163e737f23d58e36fcde', c: '0x15f9269db1c178d9525555ba7f69cc965dc794bf4bbea7f14d6403620727aef3'} -let pEvalAcc4 = {indexPlus: 4, value: valueAcc4, proof: proofAcc4} - -let valueAcc5 = {x: '0x1373fe065e22eae067ff30f9a10ba7b3457d898859aea2554e1569a146f6f1bd', y: '0x2cb1266fe29d61b8f30df7e2977c79ff52d41cb2aac92ca30136a036b74d1053'} -let proofAcc5 = {z: '0x0a72559aa0515257e7d22f85af70ff461941fce067dd52dc8c450e87eebd5ad9', c: '0x0a083759ebc48afa4dfe66e34fc0322d31ee0dc957706e23e9e7ac43b23c6246'} -let pEvalAcc5 = {indexPlus: 5, value: valueAcc5, proof: proofAcc5} - -let pEvalInvalid = {indexPlus: 1, value: valueAcc1, proof: proofAcc2} - -let combinedSigma = {x: '0x2e92176359d3d73e00199ce2a246628d191a75f89ee7ee25cd27ec1360f77832', y: '0x14995fdba6e64057d57a6a76cc7908066dc8fa5055c36af74c3fb1f50e6b168c'} -let expectedValue = '0x3a127cfb5addd6c17f4b46875eb34ed28dd83832aea73ff56d2a1d0db8a080d6' +// pEvals for input: "zkRand-v1-2024:1" +let pEvals = [ + {indexPlus: 1, value: {"x": "0x2e71e34ef44d8fc2e84d96337ca05234085d8b200668d225f15704a2fe9cae48", "y": "0x21733d9b459e1fd3fd2ac73470e8d147874d7c347694b82316e4d723c81c3a71"}, proof: {"z": "0x2b67e64aa7e8243292ed0dfed1590b31188f805480161de96b1efbc358334e38", "c": "0x0a5dd30c30b6dd6f0110b42d40b890b3749015ddab846700e1d5717ab6690032"}}, + {indexPlus: 2, value: {"x": "0x00634933fa612e1813283b4316146c14ec4a497b95191ac9ab530a978a079ca5", "y": "0x07edff02b0b6ea9e9c4dd32cef005110ca2b3f77892ad8d95e23ebd2856c11e6"}, proof: {"z": "0x0ecc798a159496903719d68e011039ad0eec1c6ba069366dc6610dbcbf6bf094", "c": "0x014b6614e1be8489b1ce07cf4cb4c5e8846b417f99bccc852ce57140d43b2389"}}, + {indexPlus: 3, value: {"x": "0x0cd9e6985ef4c2e08875832d595737e19c57a2fe6a0b678d995f4eea9aeaca33", "y": "0x1c22ed464da535f3f6cd9af94e6e1d40adfe68905340f23f6ddd23ec3ff4c9ed"}, proof: {"z": "0x0f2d2a3214bc7cb08ae5916fdc621358b1fb584647dd7a9684540e02103ba37b", "c": "0x22ca5d1d69e77f306dbd929ec05de88642ada0a918fcb483922c9893f400f74a"}}, + {indexPlus: 4, value: {"x": "0x03a8c7bc077575bcda83aceb165dd6c84a7bf825cbba1c6e8c1c7fe8821a9a45", "y": "0x24335c3a2746992fb50efa146b11b2d8f6124f0dfde2c0b574556ea2c989dc09"}, proof: {"z": "0x11674197fa615eea4961feb5d58fb913342dfc27787f733b52de39123b0a7ebd", "c": "0x11591c9b8834e2555043e62d1ede43c08971d62297ff9785a5416e8d2cf65d6a"}}, + {indexPlus: 5, value: {"x": "0x2e5002bd840108a25b59ae32ac914e3420e40a5de687a436bdb71c90d83c3707", "y": "0x136514a72a62c60ee8476847a197803d21acc64477855aab2e184b43301199d5"}, proof: {"z": "0x2d7b09f5a4e45222971297c223a351b2896f0b727864ea4c48c3eb727b14efed", "c": "0x0fbe5c46c1d6377d53f04d55c9846cacf000ba44e6085761761b2c84b5477b12"}} +] + +let pEvalInvalid = {indexPlus: 1, value: pEvals[0].value, proof: pEvals[1].proof} + +let combinedSigma = {x: '0x20f4174fbb447a6800e1aa7d98645cc35d4f935963577c09a697a3c07c3536e3', y: '0x2d2e6293260e3092d024adce73ae7ef3f219c55950a3b174832a48c88c33d375'} +let expectedValue = '0xc2345a834612b9be480f1007e098485a91b2573b9bd6147f549047b84194ecd3' let pseudoRandom = {proof: combinedSigma, value: expectedValue} - const cfg = hre.network.config const local_provider = new providers.JsonRpcProvider(cfg['url']) @@ -268,7 +255,7 @@ describe('ZKDVRF on-chain tests', async () => { it('should be able to initiate random', async () => { await Zkdvrf.initiateRandom() - expect(await Zkdvrf.roundInput(1)).to.be.equal(`zkRand v1 2024: 1`) + expect(await Zkdvrf.roundInput(1)).to.be.equal(`zkRand-v1-2024:1`) }) it('should not be able to initiate random without completing previous round', async () => { @@ -282,17 +269,17 @@ describe('ZKDVRF on-chain tests', async () => { }) it('non-registered nodes should not be able to submit partial eval', async () => { - await expect(Zkdvrf.connect((await ethers.getSigners())[5]).submitPartialEval(pEvalAcc1)).to.be.revertedWith('Unauthorized call') + await expect(Zkdvrf.connect((await ethers.getSigners())[5]).submitPartialEval(pEvals[0])).to.be.revertedWith('Unauthorized call') }) it('should be able to submit partial eval', async () => { - await Zkdvrf.submitPartialEval(pEvalAcc1) + await Zkdvrf.submitPartialEval(pEvals[0]) expect(await Zkdvrf.lastSubmittedRound(account1Address)).to.be.eq(1) expect(await Zkdvrf.roundSubmissionCount(1)).to.be.eq(1) }) it('should not be able to submit partial eval again', async () => { - await expect(Zkdvrf.submitPartialEval(pEvalAcc1)).to.be.revertedWith('Already submitted for round') + await expect(Zkdvrf.submitPartialEval(pEvals[0])).to.be.revertedWith('Already submitted for round') }) it('should not be able to generate random below threshold', async () => { @@ -300,10 +287,10 @@ describe('ZKDVRF on-chain tests', async () => { }) it('all nodes should be able to submit partial eval', async () => { - await Zkdvrf.connect(account2).submitPartialEval(pEvalAcc2) - await Zkdvrf.connect(account3).submitPartialEval(pEvalAcc3) - await Zkdvrf.connect(account4).submitPartialEval(pEvalAcc4) - await Zkdvrf.connect(account5).submitPartialEval(pEvalAcc5) + await Zkdvrf.connect(account2).submitPartialEval(pEvals[1]) + await Zkdvrf.connect(account3).submitPartialEval(pEvals[2]) + await Zkdvrf.connect(account4).submitPartialEval(pEvals[3]) + await Zkdvrf.connect(account5).submitPartialEval(pEvals[4]) expect(await Zkdvrf.roundSubmissionCount(1)).to.be.eq(5) }) })