SemaphoreVerifier

Description:

Smart contract deployed on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

// SPDX-License-Identifier: MIT
// Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs).

pragma solidity >=0.8.23 <0.9.0;


library SemaphoreVerifierKeyPts {
    error Semaphore__VKPtBytesMaxDepthInvariantViolated(uint256 actual, uint256 expected);

    // Verification Key points.
    // These values are taken from the verification key json file generated with snarkjs.
    // It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore.
    uint256 private constant SET_SIZE = 14;
    bytes private constant VK_POINT_BYTES =
        hex"15fd0f19bff5521edae5f6d895f4730c241ccc3d415eef6c9485d21914188c1d"
        hex"2446d537b3dbf1feba740b7657dc394b17e890cc1db8c77a1df7ddbf00c956cc"
        hex"0e8e971b94bc8945665a5a61d013e62406abdad7c304284ab3981bb120ddf221"
        hex"2bc9b3a8075e8affb419233bae1329c8b5a36dd5849d426b61896d79e5ace369"
        hex"2fad2a9783fc2ba49001eacd3a33e34c302753636d3c46357636dae6c8b2024b"
        hex"19c6002888dcd3e33699c10634a806d2aae224c3d7e59cec5a9b8719b066d264"
        hex"0c3bc3c927533404b7618b19082e24eb2ca334e7bf9dceb958bd3551e9fe7f57"
        hex"270e9bcc58594f6192a2b99d2846f622de39b5937b2a7323cc45e25fcb2093d0"
        hex"1e7d1a66aaffd026340c02261fd998650c044a8b0c7fd711e04213a1cd2cd351"
        hex"2424444f3b3621df8c36b258f3554a9c5e2a21a5331717c8aba346c7ac63c976"
        hex"16e036c1a88f983c82227849b01847266a1175919ac332c27799549ce18d36ee"
        hex"0b0ca3b0483c8e42c91944242fc36b40ca910518f9d85a25be8e4a7ef43663ad"
        hex"110cf5e0d819a05a811f7a0c166628530ba6f6d353e8e6a433c064d6fadf060c"
        hex"19bce756e115841dd94ff44541d5ad78130187d67f3c560c2a590bd093765709"
        hex"09257a78bf2bdbaec4a20392ebaef666111a0013e0d145e3b8538bf21c631b78"
        hex"054754fba6cbe53da1b0e9c8e6694c94e5c5784962cd792416d2e2a69c666d20"
        hex"1afd103f745dc8bd51a5433a7ac8419f1dedaafbcadd19048e9009d4c6241613"
        hex"245cd94a309bfb79ae8f5255803fc1fbdb80bb78ac6d5f68dd031a464a87ebf4"
        hex"14faebe5560369ec0b8807a88ecfa006f7f9795caf1bfcfe261555534cf4e78d"
        hex"0c962615261ca9c1f65cd755e00bc013abf1533a12e81b80b32fc41b0d1fa86d"
        hex"2792793df783c78305175c60e000c53fd96ee07ceb78e470a6c64a1b477c5534"
        hex"2096d8bc28b6870f36fc685e6509823ed594339011cb6dde0e8f8d7cc1cc582e"
        hex"109542c42e7879d5f2509059905ece1bd8860e7c820343aa1b30461df91eae95"
        hex"1eea6862ae37a2a4392c5801737849adb507f0a3137699241517a3f1ebbb3a48"
        hex"093d3e06748b6704617f4cffeeab1a9c5b788923f7fe09a498749dd9ac9f3253"
        hex"2e5f917fa4593965b59fbd36e7644390ba01391b8379a4a204c1c29fd1d17cde"
        hex"2a0dccfc2e6d40de5187062a63a944a907d0d7bb6eb30533a3454057778ed3af"
        hex"1b8f89159c77020c893f3cb7a2a4cc3085dafdab413391192963d2d6f8a71b7d"
        hex"241b04a42762b5922f9e96652279d739459c63ba99921d36047868be961392e4"
        hex"1f9a885deeb4ea645ceddc1b496d41a8b765b09c9fa5dd267644335f50b78827"
        hex"0903ca28b792a69f59d7499ed7e261840c1e20951bf0036cd34057859ea07c98"
        hex"0cf286f5af05fa35173dcabd94e3c7fb591b74607d58c397469cf09759e89b56"
        hex"1a465001f19b05dc38a491b248c97ec7920c03da29e69d805df6dae9ad29c6b8"
        hex"0ed2c6a0818f6e04bd3aa8e1a17b0d67c6815feeb8bfe9b3a575bde437ab7114"
        hex"1cb929c4998d91a32baae52fc164831ff6bd12474cd8c91189b69f1e8cdb7164"
        hex"0c5be902277c48337d1db6b1fb81c89e8689cb10b7ee6af8b9fc5975a730f6eb"
        hex"2dd837a46f2ba2ee8ea9442a9eebd87ed57f594f044c7860b39595eae6ce4d0e"
        hex"119bc8b722e52ff60236302b2e6f4a139f15e63aa0641ae765f3e71c32fb759d"
        hex"25214f618153620b583fbd2abc2eef9a26789f3b5296e90551877a37d362dc95"
        hex"013c611347b3d133ed9045be2c36f8689a0120c4078d12d8cd28c006bc61dda2"
        hex"2f0a9559eca7cc75db51c369b05e74c952d5a8ae39b06ed01c8698f4d74d58dc"
        hex"0fee282026bc113cc251580beab7bfbddf2209056fce08c4e356b1a06f1bc944"
        hex"14393956732c8d80c3f60ae0a275b3968c22c40e9054b3ad662671f4326f208e"
        hex"1ce66ceaedec3b13ac33cf1dacc63e7e68e3e7fdee08e91a54075cc0758a805a"
        hex"1abc1b6362a1a276f723f806d4a51d3b7ab592ac8f39e198cb5efcceaf0e48c1"
        hex"23f70ead154fd51f42a3de0ac2b61621f01a8b0899f46d2d9da1a8d620b88e98"
        hex"28358bc8e9b03c31481e07909d86cc8386494aa0c6b1fddb6e83911200d2d5bf"
        hex"21309d93ca7e97b55d43c9396f92716ff1ad99b73dc929c566de6c6c721bd048"
        hex"08666e4182c159d4cfd305e1f6f5cfe4ce9243ab5388c2a5a0ab74b600e4bd5e"
        hex"28cfb007611bda022f417d399841a00e543b14076672113b21e9bdf4942eb3fc"
        hex"1281dff49430dbc9d0748814312f5356a1024539516ae19e8b6eb6379421cc83"
        hex"243dc2b640abc1728422276ba4ad24cab39fc7d1ef6cf3d82fe82c9f89efaa7b"
        hex"005cff4d9542e3250c36bf32561e274f8fa928dd3a8d11f4f76c36a4cdeb5e64"
        hex"20b886f89543b54f0403091d51cd88895fbd55aea86d19db8b89cfd55255f803"
        hex"0c0aa8002fb14fb9b4feda737c210d4289d62a014e4bdbf708ad21b53ef62d96"
        hex"25e79b70d1ee02eb3f6c25bfaa7b9a4e1566b0fa70c6c0ca072191897838a360"
        hex"27218c7dc6af590ab65620d6f31dd4cbdf1eb86058151118bbdb80b8d96d0d80"
        hex"053653ac15a867afa2931d75116318a810d5512d871b71f4654c86acabde8c91"
        hex"1c48420d5581f37e60b15a6dfe652b9ce46e2de3414d252b18df5b1b8df2a818"
        hex"21fbada5ab40ee0640b13756b26a7fcfeb5f81de884fbb889f3ccba3fd64cce7"
        hex"0d6670f5a24582a747e1d1ae1e0e8da63d7d202210d96dd5078fa58eccd43e36"
        hex"1fe26476a17c1dda8d2d1b630ccd263ecd5644529afc3e2973f6961ff3f87126"
        hex"27464f05a8ebb85e8e465599614ced7bec41fcda74ec9f51ae39c392672bc724"
        hex"2ab9a6d1c669a478ceb584e3bc6e1635e3202ec53cbb6f3cc42bbfd7659607c0"
        hex"0dd63e17922e2e955c38d47347fd269336d27cb9b9c7a3218c3808507bbc994d"
        hex"19593a3350d5604598530c93362e2836f90f7daa675f73b40bc04d67b0625e3d"
        hex"1682034112be41166846a800dec3f04dc45f7878bd2c5493e443f44efc5c08af"
        hex"0828e223ee37c2d4dfa133c8df747c3ddd415da67e911f2f5cb609a58df64bd0"
        hex"127bfd549e5e8dcf4b22291715f2ad5668cd6c711c2a39c3ffebe93243df40b0"
        hex"0dc2c61595d602f4f7b03af6a919263956b5943cb3f5f890bde70de733623387"
        hex"1eecc3f4d0cf71749bb70475ee20a3d479719fcb7c7bea429059f6c1d18dd57e"
        hex"2d94c63811c0f21889beeecc4d7797f0fa87f0cd40fb84ac72f5537942b5bd7a"
        hex"07573806d926b6e92313c06ba464ac035746e0dc96b3d40db4020f72dbbf7153"
        hex"06fdd2c03d7f271f2969d465c7e86763751e29fa622a2715694c534b5e171b25"
        hex"19546a1616aca8f207e875ebf37977f96c1dfa32ddf16d7eaded9047ab15142f"
        hex"1953bcaad2e145cb2a759cdd65eb7cf493b281b71b0faa6010e30a38b5127519"
        hex"2fdb1ef3113503a9db688b32a0b79f3a8125d7967b3962373fb886332a135f77"
        hex"06d774b685f236c190a046ec7fc6147a84260794c543230c4d3f90cc091d0e60"
        hex"2cb5b76f44713c49cc24cb3e1715ba081787296b94dbe25ab57742ebf6553df4"
        hex"05159d91bd6a0a9c639b0cc27cc39dae457f45225c4bb554264af8e229a52524"
        hex"115001b9e8d8b1463cd86a016c3610f87fc2a10f63bdfcc00cfa99353a4c1a52"
        hex"125537cf6072615205c38045b8ad31d155bdd8acf80c7dc627a7506e642a177c"
        hex"2e83916c6303325ed9513361098830271102ac5dbf285e2645915eeda77a5693"
        hex"1ce67dd1edcaac1b03358eb6b2ad3780bd1cd201b91d4bb2e603e01279351fd1"
        hex"26e90bd7b6f903b9e517a0f77a7e4048033cb873b1da8cf190080e75cd1dfd6b"
        hex"1cf426585573250eb3432a5e80fc194c307c58c814ac37bde84125a5aef222a7"
        hex"10fe5c50f8fe71b1fb44251e5dcc90bd0d64844451329dcb49e241585406ef8b"
        hex"0c273841cf7228666b689b24a7022bc402815f77f71b43c1862f64853b6a47ca"
        hex"1255c43af69be48744c759de67f363030b809ea5be5de707545d1f29dbfcd272"
        hex"110b2f7ac7d7b3f94893762fca13700b74cec691bc57d216ba04e992bd0dc947"
        hex"0652c5b2ba7b972dd68bf8c271556b57ad4521c067a072d75ee09268562cea9d"
        hex"1e6db4b3e0185f2add0d49d60e16168c2f3ea91e2cb05678f2c9d9abe232b340"
        hex"0a96b6eed42e7041c98baa152253971225378ac4cd9589c80cea28c06b570678"
        hex"2650ef83382c54ccfabafaec8096c519ab5670c7d4dea2535c64db2b7dfcb553"
        hex"1664dbfaf0f45d6ce2782683f87e6c9e9b7176f08511ac1663869adf9337eef0"
        hex"212ae8907761700bdea4b480f20f788dd08ca4126dcf4ea462e890f302634476"
        hex"0e50a74cf13a9f5c3eac33a38c6f9e8d3c2638bee309a4180afd6097c52766e4"
        hex"1377037809e690222f9afca6e1ee39ba95846bbe912379a938f6ffcb493f5cbc"
        hex"094a2af179f583a4155dc7f2b191c036df4330c0eb75e1e70d2487431bb4b51f"
        hex"2b1bc223925afd7f4f7cdd038d39183e1364d1665dcb17cfc2e30da2edbda339"
        hex"019a6052e1c5cf66ec396956467e791a97506bb3291d1a149d863d9cc25d660d"
        hex"1f709b744826f4ce03d2ae0eb2a86613bc33b2bbed5e9ac6198f7e8df1afa8b2"
        hex"10cee567471a2b01cfa286f3095713ffe5855c06f17158e33e9ebfdc1c792a88"
        hex"239ea34b3e8a5d1d26599fcf453537fb16a91f9520317a01c7de1bb5a768d725"
        hex"09b3a1bb0c0be55876c4b91957b7e86412654bf272b7b9c52f2217e9713c7dcc"
        hex"2cea70065cb1bf0b68c86a3592a5134384be8b10de004c31233b783577694dc6"
        hex"13aa1864f9d5017a46cb107be441f821a85315b79f39968d6407f343a2c61998"
        hex"0005f278bae49a9a15a54132c50388e69f4211ceddee99195f07736b502fadee"
        hex"0302a786d79c25a2be297edd39eaee413dc553146ff7d83bbbb8bc71447b6605"
        hex"2eaf36a4dae40401cfa571b55ad8b5fbced37e67860085bc6afc5412d809ce8a"
        hex"166d04b67debdf8e674bd6074bf67031d3b4c558647dc4a3c5443eba23086683"
        hex"232f97fa7f391323e066175feb3572aed60c343c3e3c11ed309c00ffa29cdd37"
        hex"08f1791a609f8714b38f03cfeeb1a149adf524a946a397191b0986869458bb8a"
        hex"20e9ad3d16db1563e84154a169db5e81d0117d4914800772d4bf624317e32b36"
        hex"17a525ede8962fdfd05af9ba5ef109bd2f5de02524454aa25c696b7c6fb0757d"
        hex"0d71a275a14cfaa4f987cf2d2552add13d13fc7141c544a0ab457103e4b2d502"
        hex"1ff842cd59778fb6c75d197511f3158ecac8fafd21db5fa652725be434580ff9"
        hex"21095e6eefdda8f7648172826e435e08a93109b1f040d88ec1b01ce3e2dfa592"
        hex"02746d05612699c335d4031f388561fa2c6b3a4c224df74140c58c5dd7391459"
        hex"182427fdf7ec0b8c5a7003e3ae6c19d8da47804a75d62ba4a1f8ce1835d7eb66"
        hex"0dcfad648630a6037241a73af244b1612eb375d852712a10182e1339d176471f"
        hex"24611b2e7aad1a1fba1f1eb3193a87a0261e98dbe77fb30944edc6ef5726acda"
        hex"2df51df9c66f51695783648873bc167bc8199afdcf98a6a39dfc14933634cc25"
        hex"00ba85a4d757b2bb24f2686c8fc2b20d23f68ecc5bbd889d70db8222f9c94eeb"
        hex"2a615fc377bd707e1d297df70f60076d184ea30144439d2a02827ccc4b74d6d5"
        hex"083ff5f9b4474040e1db95e7dd4ac08bc49f0df5e04b1601e531087a66e1a9a0"
        hex"300192ff2b9358b371328362eab85f10b3b256562986b0222f90fde6285b2031"
        hex"2b9b6d2f72c215474b76c58be1bc8113aed21efc4bfeb76d432fadd1a143ae55"
        hex"1afc92793b1e3c7bc0fff4d51b34c751d6fd4f0b684fd36a5eb31f2e7d59bd08"
        hex"27a4788df73ad8b0a3db6dd0366131faff0cf443fdbe689b1811275524fe4f5b"
        hex"26e306f7f4400a8b466a46f73b1bb30628e8f53ae183179a89ea09bcab1abe8c"
        hex"1903a292e81db108e9af23cd1c7249087803195ef86af9d7aef43f671bbe28d5"
        hex"05c92b5167e06202018a4b1c482dde448604793a2b6d734c3a59f599b457794f"
        hex"109890a7f2fcb50131c7e510faf117da23344b6e50403670b103e8b1b0fea27f"
        hex"1fb6977c76473f7a1d148b69a5526768ac7032ce91f0e138973b3e4d30745fdf"
        hex"22846c8fc4704252020b4a141726ef713f5eda605ded818ee69d101490d5a8b6"
        hex"079b1bc515838f1ad835d87623adef3b1673ca9735ab72d8fc938e206a524e58"
        hex"20d47a675b313cd4b857527f3e6ddd2b5646e5fd9f206aad5bcfaae6cb0958e6"
        hex"064e79c61f6d53a00688e7f217a0c8579ba3daf9d4df5dec16f013a124413f15"
        hex"2383c6f75c1a392e6e1375277f1130c2274d8668773addb783207cf58cf4c0b6"
        hex"0f693e2f20b43eac0691b48a00fadf42143af8e21b080d41d1e71c8a02142da7"
        hex"264fba8810c9e1c00b512aab1d355bd7ccab52089768376d8a925cf1c3f927a1"
        hex"01c6986291edd61bf9888d6bbc0d0f802bbc4186a811b8107fcf306a557f0af6"
        hex"26cdd05df967801d477b1c344754c15f7a30b0bd75bb98985a0c2fff9ec80c06"
        hex"0c5e61cdfabe2eb8188f70cac4d7b7cdeed9b964792d7dfb6fc0b228a7270e54"
        hex"2a586a34c5b50461b05614cbf3ce228c130522513793ec263f9afa96e23f4e5a"
        hex"25ccf30168e9ef4fd1cb902c95ca8d67a13580dd07994094b221708f8c7d6797"
        hex"107dfa97fd9047fae9cf80f48b206884949b324e4ab03212f3298c4818987696"
        hex"1cff7a1fcb4f40c410ceb353cb8ab907a0f6b2821dbf82766ec762967ba23944"
        hex"20b8533e0ab744d5db86e30a3e73a80bf621a2b5d8555b0fc416389d5cf53265"
        hex"0c9d9b203b72e7887fbc30ac7978146860ea4aa1ff0d96dca2c65666304cacbb"
        hex"1b84d4afa11231f3a4a3c62a0029a39f5ea31d907a92070494990427e7ca6f88"
        hex"14107581ede64e20dce54fffbc6443cec3ca1cb0054c5142187cd21bcb166b79"
        hex"16737e84151e0282876e43177c3830524e3b6ac2eab243a067de3319f8d0b8b4"
        hex"2037cd61979b667fb80288588d2b095f0c4c34312d7c75a074beda537909cfa1"
        hex"04afc04e3f13c2d80fcfa1aa6e946499406ce541ca84527b75dd29881c09e6a1"
        hex"20a42ab93cae3bb2a7ac65c4952fcafa2b58f3d3c3b292246e292dc1d10ead44"
        hex"2294e0ac633d4e59ac74082946c67653dfd3b17220d05953f214328d778d6256"
        hex"019e150e3d992f5175dd609d7b7468a978428a5bbf291b77f900d1c682cba1bf"
        hex"2c04f3db93c0870db5a439e9ff0f2ac65d19edda31f6bf64e9f827516b3f68e7"
        hex"2e6c4ce5c33d2f1d00d4c7c691e5d39dfea1c0eb590de777e5fe64365545646f"
        hex"01879179e76aed29e2392a6df0ac85ea6a285e0d3a1112e8593c23c3e33df5a2"
        hex"086975bbb71f10a74a76f43bcb0035481860c6478f23fe914df449b50e56c492"
        hex"2c6feb5c47ad32b1054c98e31df1659881f884939536961bedeff8cfbb6e1282"
        hex"0549855c647dcdf03d05c6a490d5541098d6d83bae7da0112a822e0abcece250"
        hex"20f9c4e3fcfa0d305a923e4fb0d9ef583cb141debfeb931c909ef1d4fdf6eac9"
        hex"05a3b3663e889c49eb5920e769bbfe9f9dfc905554300bb2b4285c6a5889b274"
        hex"1f9e528d112bd8a059eaa510cbd9a7458598d27775bcf6d851a0d359ebb81dec"
        hex"15608ad6b67162915e05d6af1ba4b32eb4693f775ffc0a66485c3e5617dd37e0"
        hex"1bd2e26efa4fb0a842e03142af573fa9c16623542451b3e4e0af1970cd7e2b0a"
        hex"2b417cad2430c3018499a10488fedf9e5399ce6cf93819469c802bed6386d7b9"
        hex"230d363d8bacdd978d08dfbc44f1c3bbd3b2bc1e2aabc5c3759db87f8f895eab"
        hex"2f83002ed31eaca2531766a09552eb1667a9419192ca335b08d93693e5584abc"
        hex"0feccdb53345bdae7349c42b119570c762f1f5497eaf898e4ba2d378d9d8d20d"
        hex"18d01d38cb6ac78d93961c1ecbfaadd4b0cf999b972ce4900cee9faacdf8298a"
        hex"1f31cefa55f5f930d149b63b7a33e385a688aa8a4ff3ff8d88e501dd7466b475"
        hex"1a02607dc91fd27ebb066b51f8dca8d64dec062d3f8ea6a3e2859d139c17e9f2"
        hex"25bce5f60cf5c72fe58b511983c067ecab88071786feb4f6cf83e1b5ac35878e"
        hex"199ea7d2467ea66b53853f7ba20a91bb44a4a5f621404375051cbac31997a366"
        hex"1641e4ce35beb44e3d00fd9b7a3bd47e118fcb21c62281b148dfe4097c147e11"
        hex"227cf6075dbc7987ebce58711ed50e2b6a94c1478db414a834345cb2b5c21cb5"
        hex"252bdf93e4bc24d639e1ebd80550001fa9aa1e7d6abcba326c2b2feade8fd8d9"
        hex"073103523d7b0ce327314d3474aa6b77824a75862d0cbaa5af6e1d2cead16b9f"
        hex"050f7090cc1ece4b5217a0419fe3066d81ea2e19dc6c5410c770740c16875066"
        hex"2a4801a2483187073a17cd04890165ff19b24180cc8ed16870cfe0f2ccd82183"
        hex"24e27258b0e61cf13892a8b7abb13e0cc19faff40bbdd680a389f4918f63d9e2"
        hex"0f03cbd30fb82d7807479517b4e29b3da4950b96a023a331e52c721c66f5e229"
        hex"2bb6d910684eb13c86f172f66f59a093f8a002333c8767bd594ceb63e9c6a2c4"
        hex"1f32b4847858f72bc734df639c032604ae71ff65afbbdcf42acc7ec195f3a39c"
        hex"2a0f1adf6230de3995bce023cdfc6af1e85d9121f84de4a34b9c7fc4ff920c76"
        hex"17fa977e81dac861e637d8d9e4636487afa55618f35f7455af8321f8d6d50d6e"
        hex"09f9221e154ad381a5b58d1c8771be1f47f3aae8a9769151cd84c1434fabcb9b"
        hex"0ea204dbfbd3e404128c8252d607169ef5305bb12a59e44ac4be9147055a6f20"
        hex"0d2547a25e17e027bda4423048f3c6c595d6f83124767da34e0e4b96c26f5c94"
        hex"0cbd5f2d0cea7678b80aeed4b0de78259c86a2c207dc0f28fcbe22a1252e5d3c"
        hex"1a9b6c59c30e6d1e3c5efae27acc27e9b7bd23af3dd7963a0aa8361b4df2f243"
        hex"0cc761b549af62069ba3e0fa7ce6c75c9f6defed91e8f3314c4b1ed7a5e0c83c"
        hex"30264e78dcb1adb0d7503f80507ed4bf90271624d70dfca454d1990a2f755988"
        hex"28d55e9071501cbb4ae790279f996622466c1c9f131d667e8baf7bdbd5d9a455"
        hex"11ff42ce9d42c89d7687d469625b18c59b883833298af76480817907af2294a7"
        hex"04645153c868372f37d106c5c4bfba4e2f73309d53390894a6b2338810da3f0d"
        hex"103e33717f00caddc108323574de85c6887720561ad0c9946bc510bd3954ad4d"
        hex"264461fb0d2dea03b815969e1b2bbeb995d30f774fa49411323d20ea4f4f1652"
        hex"161a104ad60c9b35ef38783a9f951bd969e107846affc11754708b694168ab99"
        hex"22ae691abdea5ac8f12f90a1a147b5ac63088f4c3de32e81d38e79a93612d9f9"
        hex"1286d17dc13dcabf49975e2a37743d997ebc56d11b71c2e430890eb9fb7c7d3b"
        hex"1411153db07129358c9ebfd849d1a12de7ff39ec458b616a3e6885bee7114f7a"
        hex"0a98b996681afa7f3a7ea25fc6d9f2b48af7c5d8c8db0d55892bb64461752f93"
        hex"2838a60cc9aa8717f4308e6074996b7b71f077a1fd9d8353af5c086aebed16b7"
        hex"0ca941047448572c947a8308b479f74524a74c384d926e4be36e8068bc635df6"
        hex"10b06f989dfd1d445b6c4bbc386c1915d9c6775df42fd040826a8a95deb11561"
        hex"234bc8dba2ee31ad5b1dddb6946dbf1f2d9a2f7d71bbb45d94d7f9ff47afe936"
        hex"03b28511d097183cceb1250dd00dd4501789b25bb547cfe66eed09bec1871c59"
        hex"2d06d2e4acc30f60e54c1bec9442b8aa70137c37b798d2dd8dbeeea514f7907b"
        hex"08037905d11e86a5a9d3b03cbe3094e9468d3fb3c1a20738c08877269a69147e"
        hex"1f79d21604dcfb2ca75a44e38aa87cf8f3f56f639c8501d336f2e72a87486695"
        hex"20898e9f4eab7b0f918e10b9fc35a024f4d0578c0e46463cbf360606fa47ade4"
        hex"09b99372d699342f4c7e3c807a133ee3be1c92422cf2f0e5492136e815061041"
        hex"142ad77d8e80c9a778bc04e8a62e550908c55974693603d8670bf9205553bf7f"
        hex"22f3a31aa3f9f3c040048df27710a8e485049abfabb71b51cbbd87126e83cf24"
        hex"03459743b0ca82a0801415ea160bad9d326888db19ea8b86bbcfacb48ac3c412"
        hex"0491b8939d07f0074c444ee02f79917f5ded067d7e0529b0437b71fe6355170e"
        hex"2bcf73774c5976acfbc99b1116384b11930bca6187dac5e662bb9250487f0845"
        hex"244615cb6c1b8f74aad86d9f900ceff74ee731a9dffebc26096a1e6a772680f7"
        hex"23a077e52b600cefbef77eb273ea0d5d2d7b18099b4832772b56c6e822df0794"
        hex"227f9d7399bc220483caa969a8892901b894de900a1a20da29328343ce7cea1a"
        hex"1679302001981320168e8d8e921756f2ec22d21fd130d719eceaae1b19354bae"
        hex"118d5af95d648cf620249c405d77c7743089d9d262e29860cab3c292def4ffe4"
        hex"2284c84a005818061688fe45ff37d6fa24b4f99587fc5e9a1208b3edf4d060d0"
        hex"0cfc0f918b739604150598b74b981255a70d772a67f23f51c34212958b45a035"
        hex"2537c964c421601b62787e6eb7307b99a9d6eefd0286f927fb25f22e7e9eaf95"
        hex"1e30310e4606c228e2f5c3df3eea02457bb4777af8546fb61bb1434221d99884"
        hex"0f5caab9c8ada0b5a094dd9129eea5421c1320ae7a666b56c960be0dd4c1eddc"
        hex"1dd1def16e2a0ffc68a449be9d160b00ca35599e7ad7cd1afdae000cbc76dea8"
        hex"2ae0eb79a34fa9a3c73bd9f1eca8731aea913ca7d138958a32c09c1c521df6a2"
        hex"28ff689e68fdc639c190119604c98a1845806a317af901568ec8dc47593915f1"
        hex"1bd5a5860f93500e39351520da5f095ec6557f54e0d5628fe9cf1a20d52c426c"
        hex"021f0968bcefd07ac634d7e6e02d45eb6afa85d28b307f5d2e3f2cd6d744fb44"
        hex"1c0c5c153df6045c88bdc5d09dfc813cf8546d7344c70d194fcfd29f92f4b696"
        hex"1ca6c68abb475da1475efc1300855db5fd7374a5b92b4f90f49952a05aaf92ca"
        hex"2bda409f3445270ea3a6d128b46a5cd5cb245b5339a66fdf814f2b83f4c123d3"
        hex"05a71c398107a0314772fcd210e0c1d3ea35d99444a378e1213a9e10e6768daf"
        hex"11fdba29cb4c24bb0e770eb1d4e5c23d9a51a3cc86c7d41b35312fc5c943f965"
        hex"05f0e7da79e615a61755ed4526892b42ce1e80b5b027537bf53f0b536d4bbc0b"
        hex"1eb2f81535a276e50897a2baf3bbfd981468b91fccfbec6cec8bdc988f002350"
        hex"15d6ce1db45302f8e286e96e26e4f64ef5534ab8a55a9ffe215f896d7ae7bffd"
        hex"1315122998316a3bb389bfa1146d940d7e2718edb570f12cdcc57377f8ca2378"
        hex"023f10e9f89b3f0a2c44497c8a7b705786220397dce0083335027a9ce9839f60"
        hex"234a05bd730e143866824a0e9b7672adaa64b679dfdd86c8e54fb2df83438c20"
        hex"2d23c1a987db7a304a2d504e5c4573592c119fcda1ccfe5a07d5643c4a9c0633"
        hex"029b04e14de53677bf90dc7badde802e588fdca2b9081ba20f4712e662c12adb"
        hex"263f5e4fd893704c5f229914cd8f37bdc3f9409e617507850604f2f59d390fe6"
        hex"21c9780ceccc597c37b49b8742654a6d34f71cb32d1555e72c06004d06f6f5b2"
        hex"011c1683c09a02f63b38549eb958115f326fdc2bf0aa81247acfb1cc8554493f"
        hex"26430030fb83d387a990d785f38ef4669b2fc53ff8ebc2537009c8648232996f"
        hex"1247fe42d335f9252cf1f570316ae986b553044b0c81e635f764ab9915e11294"
        hex"1386af604cbb138efe8dda480060758e274bdf502d2bcf9b5210e31798b08adc"
        hex"06adec496d6a730820969cfbf60ab07a2a8f7cfcfcf2020d4cac60d127fefafe"
        hex"06c39f25af1748848c37d1eabbd6a84a9a735afce06a5922e8a80af1bfc7eb5f"
        hex"213dbb816f4ac87aa15aef8541b1abe3fb4d11d8b0b082989a0fff41ad9bdb2c"
        hex"1e41cbe348a7f3d5e2408d19b26817183d1f6d3b51f27a915274efd9598ff18a"
        hex"1568510b7bb366f4387eea8fd2b20fdd95fb6a612958b5c25262c32ab3eed75c"
        hex"08521336bddf41556b79cee9b90b0c1cb4d36245c25a7f8b248567fb4248313d"
        hex"2d0893b893b14eaf3aed6820ae987b88da0cba5dad3c5b267c9012405514767b"
        hex"01540a25e982ae7e1c98d06b14cc56241ab9b09543440957bfbeb9c384a74b65"
        hex"1744fc2b7ca4e19a45031fc838edb3805964d6533a4a5583ac57d9a9f6e6da65"
        hex"1230a42b5aa82168743e9817923ea3ebd1d3a55ef1bd91a89eacc55663a02640"
        hex"1673e455967762f96f57b413424631198e09e7bb1bb06844068fe44f307a8d59"
        hex"061d9c5b1f377adc54722ccaf3601332ebc07660fec4d89b5c8213031f0aa8b7"
        hex"2e92f89b6bd8472ef679fa5d617805180e6e0605423cac37fc15f281939770a7"
        hex"2d3c9778d5cb3ab0bfe4b296e2ed90ed19619b8b353c1043b40e03b568a049a4"
        hex"17276cb455cc5d461db37b0b4f6b34f1bb429a76968726205617095e1d39b92d"
        hex"09dae1c6d2e4114c5439c81baa28594cc0ab76e7f32c25c4f780c9e9d6e46a5a"
        hex"0a23d3bedfe1b14bff3eec36492bb9329f56ddbf7f5e1f122838e96dcfe98c46"
        hex"13a1149cf273a308c777146d7f4be2160aac12980d97661fad18cf682b7c5e24"
        hex"2b74aaa132494d280ca444d5d2a99cd2bd426ff82d443e2b44b8441733bd450d"
        hex"29b8403a3843d4a77b6c70539d8965e57af369d6f32feab13450f3fa985aed18"
        hex"142569f4ef08c2a1947dcb6e99b5ac52cdd5876c50f02bd6afd62fc810a75511"
        hex"0f47bd52a43c690f658374e9f7c2bc4285c641c7116a4ccd2c94f684cbeb7f2a"
        hex"17a29f16b646ebe94c4b2e2c4bc375cd7b002111dd55c4d212e9360cec88c188"
        hex"10416d05ee2eed34165a50f6648eb3e10f77247f711398a14fc77bd5711fc0fa"
        hex"046641ee77bf1c3c58b848252da5a88038a20ab22b0723c37de4753f40a110b4"
        hex"04c68b3d094b4cc491c55531f7ba1bbae0b554816f0c8bc3099061c83099f6fe"
        hex"0e3661a824f5e440eaf439395c1047754ec3e22f44a0f81d73a4dae283cbdf1a"
        hex"0f7226bcc9aed34857296ce6dd82b82f1d086ac24d3b9e51ec3c767a89e0e0d1"
        hex"0fdee6a4513d6ec8f9e2d416c8b87b0c1deaf66702ef14b11f42f9754ae688c2"
        hex"20151e7e27c0331111bf9346db0f4a36d000ac49d03c561a45e23383a0b61d27"
        hex"17cf331edb43a227be4cc3ae2dd0999e07593a95e62cb170d4e11787ca9032a4"
        hex"11b76e488a5eb5703a63e3c43341cd111141c3353d6c634422e63a8ee3a948e6"
        hex"2aaa17be5319a2c4b81597c87a78dd744742127d8f4c942e30a6884a7c40c05a"
        hex"1ceb38f341d5107f31308f3985d72707ee4cc450aeb79b3122d18ab3a811ca32"
        hex"26dbf8986be11183f7bd4bcfc17db4b68fe9a92cc4921fe17aa0352f57787186"
        hex"01a871c9a11ac0eac37adf26c0e380d9e4d4d4c1441bcd52438332f3ec1bce2c"
        hex"1dbda7ce884258ecbf26f6e40029d770ebbe895ac8ce51007d38939c48cf3ed3"
        hex"07109ce5258042b89a7e1969e498b5039080ea3912e326b5ed2cb2c484f1c873"
        hex"2aad746945530cbb6595e6f4038d89e1e0c0f978532ec02e5e12bc9115174a69"
        hex"01576cfa7df9b87f6b6685eaebb7ab84d90e036f352b9a3f32edc2d8fad897f6"
        hex"0a7ed0f5907aa3135577a8bd38c02250ce339b3e500000a8c0bc4dbcb58fae3e"
        hex"14b8a5528c397ee0565c1d305c4679583c7a2273a4263fd7c0e4c0c3cd1593d7"
        hex"0f1645829fddd22d3b28fe608eba622b2dd67dc8282192da3762413ba678ab7f"
        hex"0908dffa0610ac0133c5f7bdfe3469934c78bcb4177d2c1fc618bbac6c2ede6a"
        hex"05c83ee4f9ca0f735c449b31ebaf60e184880a7ce6053dbe5c6abf673b02bc22"
        hex"13ecf7b788d4fab17371a424493bb49447855cfb413af131de52bd75a50b706d"
        hex"0602afc4587fbcbe9da6daf807c3efc632bb8fbc8a3ccadaf73b827542745fa8"
        hex"28bd99e6ae097936294db584bb7eefa8dd7b63144064f7114041a88e69d6e9c6"
        hex"053751ef135a8f6549527e22bfc0580a02a7dd72e9eb6b6a6e73b3f6ec269025"
        hex"1c32a5e4b55b022f9cc73fd585424afedcd1ffbf7e46d2a8e3a86b52a937a629"
        hex"1abff8ffde1de3add8b76c0a6f372e2b921d601c5f3128e5851706eb60ae7b28"
        hex"152769798bc48f6622fdc54ec7efbe576bc6b263ade79359db0db98ee57d465d"
        hex"202fc4613d2f1988d409fce47fb6bf1adba6a9e18b97aae41f82dad5632fdb9f"
        hex"1c9d65765d702a6d24efe251836e629ffc2881d0c218e89cc6467cacec7b1cf7"
        hex"0b0cb3219a1c4f34ef384b4b972c7b045c4b931fd84b41ad619836b6d30b00cd"
        hex"2d79b8879e27e7000430adcd96d6f7c67fcf386a473752668e64c09b2f8010a3"
        hex"0475cfbf8a76a0346f7df43a3eba83f47f139060103130b1a484e7814623d854"
        hex"13be6b6d4ca7746460f0466a5068d54dc9378ec2e46cda7d08deb8a254260e27"
        hex"01edcd7cedeaae1c11de85b2fd1e5dab42fa36e547682937ff684364921b513f"
        hex"1f570a240fd09cbc6fdd1ffb9183668427b376483f723438dee5cc5a6eb961a1"
        hex"2eadf23a07b9fefd2e17ee0d74db1ef80caa7745b9c9f7685fec9b02e5ebb13b"
        hex"2f668953cf91fefe0b441ff07a2f2938f468bc7efd380bef43a030e5fdc41a71"
        hex"118eac608ef4b794efe03a23dd034f13156c02f2762e6e8772b11c7dcf8ddff3"
        hex"2b942a6404366c746c10e3065f1f7932e240446c85c3f8ee5aab85b7727506fb"
        hex"03f113eb05dac7306c758fb6565545232934cfe1a99a5fc63945a4b6d1a652d0"
        hex"2a6d353d3bafac324754fe1a00d57e7f020dbea17231f87d83307bf940e6d676"
        hex"1e7913c116465bfcf367aa331571c24cced6a4992e39ea9c482fc56383625971"
        hex"19111380fafd9f08783dd2497d64685aabb25f5acb60204fd378e0fb0e6da0da"
        hex"22b45e152cd7c40740eefe2d3fec07ea31872401ecbdb762cace9e92e7cbe34e"
        hex"1192d39b9a603bba160da80fda0469b41c2255ac4d0a46402a2844225ffd2539"
        hex"2f46658280ce7b17e40eefb529673a2b3d8f6e25757e9a445e44c7a7149bece4"
        hex"01de74823933559559239322e9363220d322cea2ddba2f6d5610fe883885986d"
        hex"15c53cfddb0f8bccedaee3a4492f2ac1be55d6f0b2f1e7af5f4caff10177904f"
        hex"2ba1a14949b45d15d45e07b4b3c206ed751f86b5f37d70a24a4d8a7dc389aaf7"
        hex"1839769f1f11e18063e3bc10c490bc546d8b35242a93ec4d6b61cacee4f1d4b0"
        hex"1800f7c3137ebc9ac731f7b4d6375c01a874f29000c1b3f4727b65c77a2d5105"
        hex"1bfcdece5c62826292caa2da6ec16b9974d2eb7fd3c2c20d1863db12ef1440be"
        hex"09c696e6067fa41ad890ee8388c0290186e494cbc202e7667d19b56353cece99"
        hex"092b1d93eed7d26456f285906aa196059ebbbc157fbde72b8acab6be8efce28d"
        hex"2fafe0589f5c826f419b1ec3ac176a42c52360e7b3edf90cd4c77c915e47ef06"
        hex"282d48bd742d9e20a5b8dc88aba0744a9124930cc1cc7d692decc7f0ee8a86d5"
        hex"06f42f74816d65e974086055ade94ff76a6fe5d14bd64a069b89b867989d12c8"
        hex"15b575413874cb060adc4fbde9da6215b08bd3c72b9f817bd4e227b818f70235"
        hex"225265caca14dccb262c43230defa44d79efbf96195b8852817b9c2a1a0cee7b"
        hex"065a720651f4d30a03b23445d588a657ec81881b38a6ca7c96ae7d30a228eda7"
        hex"2f8f278929640191de8b4c95a163f7b35d9fc5f38dd11499e2f3f0484fee4d4e"
        hex"2e67e80ed738c79c531bb034d0e3f7703ae1cd93d0334f8cce0e6fd7bbeeb9cd"
        hex"1a4ba16824f4df329914baf49fe4ae2e518d85cd88bc2a4d7511486305611aa9"
        hex"01d1333f199a38fc9c772c5b6dde72d9d9ef90dbe2a7ff20cb9685c2b30ef80c"
        hex"066995da220811544bd79b867d6a45c5f9d5f81246ee7bd867bae77ce1f1a5fd"
        hex"1347a12ac6258ea35211b6ba1a86831915843d88896e58f458f0d5765917c35e"
        hex"035fed90d06219d345c5ec7d3a0ae95883cede928acb380f8ef8b4b6859ef965"
        hex"2abcbb767e6e79b2dd22e5978eed3edd65fc15f583b875d14e2dc2f2a0d8543c"
        hex"2991e9e9d1214bf2bc8020c1c18d861b8fb8829af660a7dfd350321256775ca6"
        hex"13561a0b30e623640fa05d8a5f9540530ec9270d46c5f6607690c93e6e82655d"
        hex"295a4d3659bd1a055dd3f4bb626752a2d06759cdbbcd1bc79b83086649d106e5"
        hex"0ff647b8fb279b8ec301487a755b63b15410d9583977381e2060e794dde87459"
        hex"217e540739dd851a21e60d671a6dba94845f42487c32ec098a9c4c0c19819843"
        hex"1b389bd1a4d6c9f88d6fbb6beb8c25a7f86151da3048fb29ce506076f3b73397"
        hex"01f60ddbcde529f2adcdebd2bf02940c1a9a378e0488c29a0ac38a17a9118bc5"
        hex"165cea4c3361c2b7edc485fb90f788d1b4ecf249b38701ce1ef0472003d9dba7"
        hex"0bcbbc1e5599b61380fae8aa7c48f7dc2c543713ffc9a72a801e1a77f9f37c81"
        hex"0cf8a31e0bb5eb4cdb46f2fc5fca97133ad03ab9cf53883b270a01260c7c534a"
        hex"0e20cd40e05e747fb3bdc07b3cfc50b3ceac18f059ef4f65565f447208335fb8"
        hex"28df7cb07583a984136302cd3baf3b3d9f9177ef97f584b0daab7f0493d25773"
        hex"26d35e5c2e4f1092a1339918cbdbfcb5b1dda82c318103401d4a9e8fc3218159"
        hex"09daf60bcb32e37020e105d8b9bc3aa31900cd3459046ab97eb228675846b691"
        hex"268db848b42be0e8d96f73d79c16df5175b29d4c3e0351a24ee103d2cfe7c283"
        hex"1e4edc4d7bb561c29aafc6662191bcae8aebd4d5113e331b9b537f4fa8598905"
        hex"2d3c39a939554f2b9e6230e96a78c24be4d942154f765e6d4af53a8c4db9407a"
        hex"188b721b564daf9ebf33a146bccea52cbbcdcbfb50740e921f91f7e5672e5e7c"
        hex"2e59d3453f983dff90e45f917cd74501a646319fd22c952f3152b077d5655840"
        hex"1f0bf595db464070ab32553b095f4421524c20568df7ac803a3d299b3dab568d"
        hex"0b68d795eb7b68b11c333b381a2838bd9398fe371f08d48f2ded24e60e02654f"
        hex"18b33a4cd6eeb86b9fafe856f33753ca1cc6756dc4f843e03039dfde879a76b7"
        hex"15e0ee169afa10d37a8062aece61391764ffc6d4dc6ddcb56f35880bb13c7056"
        hex"25c616a97b05678348ce1d52718bb1d8521cff5a3d2ce5b37f7c190dc4786228"
        hex"26a0882f49d8c0fd3be124ef75a7a107778ff66b5be2b66c0b64c2084809ede3"
        hex"070dbc7e5de51ff90466ae52b47a293b4cff6f0cb064b6dde4e00650a68b1541"
        hex"29426faa9a237e4bf88eb59b094786cf49a96fdc54cf6c819e1b67e2b0d68707"
        hex"0f1bd148d0b2faf46659e6db194bfdd5d037aea060737952bc30026f8547737d"
        hex"1d861f4c7a0c0e5c99cd91e2869215dbde6c4fffe1ad1d8744f257aba5b503cb"
        hex"004ace6be69932572926930019040107ca38207eca80735d5de083cd596395ee"
        hex"154d83576e1821b8ecb4f1931ad7721cce29bc17fc237974322e248ada7c23f9"
        hex"2fe852eba0f03f71cdfc34e6193561d3423087aaac643a9edfe25fa2d7f3263c"
        hex"0ada5d6553e357275b59357fc2213e1faf714a22eee3d5d3d502838fcde32e54"
        hex"2e73f204baf6916a3af968db423019f558a87c104c514bd8f164d03d3deba7e8"
        hex"1d29d896aae409cad919a995cc8717b7a078c623bd3af80c056dc1716d043539"
        hex"03644e9c312415bd756683697eb1ba4fea32c710d0f0129ae756984b52611993"
        hex"255a0912167ac123d1a2c9b10380a309d7f3b067b628e9da5085d98b90b0cd85"
        hex"2d54cf1e2971b4c37d511fbd55ca08e2b56ee7fb91386192555f1757dde45860"
        hex"1ce287c5e5b611ff5fb58751b3eb8335a8b5cde2fd2873522cea0e9bf6f5c556"
        hex"0ca0091a58ee20042ac02237bf01843886e4439d859a785362913c0cead1e469"
        hex"1f47e5ac7ec132d0c7136a9487fb0c6cf292b07e5515eb2ae942d4aaef2dfc7f"
        hex"29b08f57557514cdeac066d9eea594a5c5388e8f1064dcf19fe4be16d57b0d41"
        hex"0f27f0132545e917cc90595e93c252a720b8d24b70bcfa0de03a6d3f5d50ef84"
        hex"0404810250839299f6b794c6e9f00432b60d7ca2dc6d754029cfac5b964f09aa"
        hex"0aca49db30da75f002bfb2ee498ac70a5b0f98245a1c2ee6da8c0dd3c59c0207"
        hex"30231cd053a7783a3ab43400f056f622b99507f09e1e16377e2d02c0c39faae9"
        hex"164f1b6eb4908f591b45bc4d4385a161cf46bc1b287369a5eecdfcfd140b62e0"
        hex"188576c886eecbe7191a7406798f0fb4bfa0c7182c135ef595ef570294f7aec7"
        hex"1396e7b28ab67accf1c37de37ebc942bed502f53651a61fc62a1dcfc29d1ce5e"
        hex"11aa2dd7e1659029917e203cc816abc533dca943664bfe41e3d298abf64dc30d"
        hex"0bd1ec3ca032b7d27b8bf71a2e76ccd0c4a313642b6aad073167b8b133ce7679"
        hex"0a7414fcd29c4f31df7e37573a174b7c889dd737f94b684a8b25d89723558978"
        hex"02e3d9093c471054ebfe17ab81c9b7c3ba9691693fe99c34802330498b1ed8fd"
        hex"2602a9d7085929301c5121009e4b9187a06c767ef9aceab2202d20926e03c1ef"
        hex"01e3862f91f2e868c1e148e0f7dc7297989c352cd6e56879888e7e21c0948f52"
        hex"29075542292ff5d8f4d6bf02b27e289f82bc3934ec7bcf5d4ce5d7aa9dbf2f5f"
        hex"11ea16238aa5d188eba8553b6ea4af29ca37201f1b9c9bf7ba44f78264aadabd"
        hex"0504068c9c7063a776872824e1ab4b34178621279772ca089c5ba6d7d4c0d4f5"
        hex"097cd8eccb72c01dc41c17197a0f4216ca4a0d3a476df762e4b3d4f87c8ff926"
        hex"2ce6d1e2f8c9185bd860b2b021b44db3713b420599d990195f8fe82dfaca2fc9"
        hex"305bc541a04645fb6f733b27d7950a233599ced31ad97e8d3297094dba4abd6f"
        hex"295be8a9589ac33d6f04a426390f6e6cd70aec289a6d1ef3264c887280ad42a8"
        hex"103c52bb2708e2a6917efb3fd9145bd1729c2c9fa67f01aba05ab47c56441cdf"
        hex"0816a0b76cabc81cc9f6bae4de63668f12ae669284b5aeca54be6780354b726e"
        hex"0a7bff238cb5cb4c216fcf0f507f40d3679c0acbaef83dd4b5b0db2a9e52c3a6"
        hex"048f17c79c4a7abafdff1d3f955b5da5e0816d44f817b705f484c771f1bac294"
        hex"28973b30874c1236177adc709f0a6b2d32745835162f5ed9ce69f36f156031e4"
        hex"0b2e26c32addc2ceb297648d3fc271a548b9bf788bff4b2023cab820c4a4ee8f"
        hex"201bbb92dcd070b78863668016c24160c2c053dadb24001af4042a1e51246033"
        hex"07507505dd11a39d879137103f9972ad0f6d79ea24cc16610e1c9dd1984cda87"
        hex"1f891703a5676db0633371eca0abacf30d3f4313fc807fbd98d613bef1b3854b"
        hex"16cbd386e41f6c4a173a1312f68148cbb308289a209c213fa51dbc31874fe1ee"
        hex"1e5c8047a5c0c014f7000ea5d3ca333306adef5755efff735059bc055bed75d7"
        hex"1fbb39800b056717d62e76315c4d3e05185e7ee2ece00adefba77bd5b1f4d7bb"
        hex"23fde2d94ad2036e9a94304bc121f6c1845a1327d89a6f55bb9ca81eb91e07cd"
        hex"0f43871c3ac1f1e37bd2755613ed7b3a3ec11a3eb8fff749ab22f92446f62f85"
        hex"152339e3e373c4e4ad9b657f5e665676790ca0bf8e005767aedd4269d107d4f1"
        hex"1e6b4bc7a2e4217c1c3cc2e298e450d010fd622c47e2cd7880e64b2e6b2e6fdf"
        hex"28958ca1ae65967871544bd1afd71c06b4b39318d5a076091a1266627ad1b40f"
        hex"0ceb66234377758d63f8c56e66c0af644ead06b4e987bde957467e75938f1404"
        hex"0e31fe264d2cc1f55a3fce3ce86a68196d2a06336102c14d0cc892fc871d6f42"
        hex"19b29228092e58a02047d8debf48ba1442ea38aceb82605e8bfa7460c49af496"
        hex"0e0528ae6d904bb6c6379fef10cb1d1bc6e867054acf978041ce99becefb2193"
        hex"22efa15c26a14170452119318cb1073b15b978fd05c40a5001560edf21df4aac"
        hex"2aeea52c33986c164976c52dfb73b8524b9e12650cc2e6614eb1efd1d3134f58"
        hex"25ca08820ba2a38dcd2561640ae9935ef47b5da8a801641a7066f7dbc52ff365"
        hex"1d8489971cf0f77a525cae847acd5056502177b00ca5b72b3f0fb32e0bb85bb8"
        hex"16d389fa12477aa6c862499500c516228cd9ae7c652c3f61f641b6590b800671"
        hex"16569eaf77c8ec57e85b52ee30cd6212133a17ca3a4e87bcfd7507598616214d"
        hex"0e2b188f173ee86cce1a411c0d2ff80e1ead326474358dbf412f8e540c01aa91"
        hex"173f752e069ecc268a7427e0935db3acd27fb7bc097e2b2c58d5a6acdd1fb4c1"
        hex"0ef703b9687c4c6f9deddc9c9d3ef5ba1d9a87529d0a7387bc569c6c642913c4"
        hex"25fa7538cb83e2a689d5caeac55b325d3597547ef6c8dc122a2a6d000c344eec"
        hex"023e56786b482a73477d0fd36701f0eddd08298e43913144c3f7b879d0988761"
        hex"2efec260abd0d45688e61558f0288cbddd8b5774e48466f164d5e522b5441314"
        hex"14d6f2fe1a75dc3f898674bca43b786b3eebb0e2ac53ea6336d2d0496f23399c"
        hex"133eef87007a5128b3f86d3ff94bdd1a0143b28d4b72e7b02b2022147764b03a"
        hex"20a11d5fb29aa2ab37f2917d0b42ef10170b5f8614bc6e4decda4186dfafba37";

    function getPts(uint256 merkleTreeDepth) internal pure returns (uint256[SET_SIZE] memory pts) {
        bytes memory ptBytes = VK_POINT_BYTES;
        uint256 byteOffset = 32 + (merkleTreeDepth - 1) * SET_SIZE * 32;

        for (uint256 idx = 0; idx < SET_SIZE; ++idx) {
            // solhint-disable-next-line no-inline-assembly
            assembly {
                let val := mload(add(ptBytes, add(byteOffset, mul(idx, 32))))
                let storedAt := add(pts, mul(idx, 32))
                mstore(storedAt, val)
            }
        }
    }

    function checkInvariant(uint8 maxDepth) internal pure {
        uint256 expected = maxDepth * SET_SIZE * 32;
        if (VK_POINT_BYTES.length != expected) {
            revert Semaphore__VKPtBytesMaxDepthInvariantViolated(VK_POINT_BYTES.length, expected);
        }
    }
}

contract SemaphoreVerifier {
    /// @dev Minimum supported tree depth.
    uint8 constant MIN_DEPTH = 1;

    /// @dev Maximum supported tree depth.
    uint8 constant MAX_DEPTH = 32;
    // Scalar field size
    uint256 constant r = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
    // Base field size
    uint256 constant q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;

    // Verification Key data
    uint256 constant alphax = 16428432848801857252194528405604668803277877773566238944394625302971855135431;
    uint256 constant alphay = 16846502678714586896801519656441059708016666274385668027902869494772365009666;
    uint256 constant betax1 = 3182164110458002340215786955198810119980427837186618912744689678939861918171;
    uint256 constant betax2 = 16348171800823588416173124589066524623406261996681292662100840445103873053252;
    uint256 constant betay1 = 4920802715848186258981584729175884379674325733638798907835771393452862684714;
    uint256 constant betay2 = 19687132236965066906216944365591810874384658708175106803089633851114028275753;
    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;
    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;
    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;
    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;

    // Memory data
    uint16 constant pVk = 0;
    uint16 constant pPairing = 128;

    uint16 constant pLastMem = 896;

    constructor() {
        SemaphoreVerifierKeyPts.checkInvariant(MAX_DEPTH);
    }

    function verifyProof(
        uint[2] calldata _pA,
        uint[2][2] calldata _pB,
        uint[2] calldata _pC,
        uint[4] calldata _pubSignals,
        uint merkleTreeDepth
    ) external view returns (bool) {
        uint[14] memory _vkPoints = SemaphoreVerifierKeyPts.getPts(merkleTreeDepth);

        assembly {
            function checkField(v) {
                if iszero(lt(v, r)) {
                    mstore(0, 0)
                    return(0, 0x20)
                }
            }

            // G1 function to multiply a G1 value(x,y) to value in an address
            function g1_mulAccC(pR, x, y, s) {
                let success
                let mIn := mload(0x40)
                mstore(mIn, x)
                mstore(add(mIn, 32), y)
                mstore(add(mIn, 64), s)

                // ecMul gas cost is fixed at 6000. Add 33.3% gas for safety buffer.
                // Last checked in 2024 Oct, evm codename Cancun
                // ref: https://www.evm.codes/precompiled?fork=cancun#0x07
                success := staticcall(8000, 7, mIn, 96, mIn, 64)

                if iszero(success) {
                    mstore(0, 0)
                    return(0, 0x20)
                }

                mstore(add(mIn, 64), mload(pR))
                mstore(add(mIn, 96), mload(add(pR, 32)))

                // ecAdd gas cost is fixed at 150. Add 33.3% gas for safety buffer.
                // Last checked in 2024 Oct, evm codename Cancun
                // ref: https://www.evm.codes/precompiled?fork=cancun#0x06
                success := staticcall(200, 6, mIn, 128, pR, 64)

                if iszero(success) {
                    mstore(0, 0)
                    return(0, 0x20)
                }
            }

            function checkPairing(pA, pB, pC, pubSignals, pMem, vkPoints) -> isOk {
                let _pPairing := add(pMem, pPairing)
                let _pVk := add(pMem, pVk)

                mstore(_pVk, mload(add(vkPoints, 128)))
                mstore(add(_pVk, 32), mload(add(vkPoints, 160)))

                // Compute the linear combination vk_x

                g1_mulAccC(_pVk, mload(add(vkPoints, 192)), mload(add(vkPoints, 224)), calldataload(add(pubSignals, 0)))

                g1_mulAccC(
                    _pVk,
                    mload(add(vkPoints, 256)),
                    mload(add(vkPoints, 288)),
                    calldataload(add(pubSignals, 32))
                )

                g1_mulAccC(
                    _pVk,
                    mload(add(vkPoints, 320)),
                    mload(add(vkPoints, 352)),
                    calldataload(add(pubSignals, 64))
                )

                g1_mulAccC(
                    _pVk,
                    mload(add(vkPoints, 384)),
                    mload(add(vkPoints, 416)),
                    calldataload(add(pubSignals, 96))
                )

                // -A
                mstore(_pPairing, calldataload(pA))
                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))

                // B
                mstore(add(_pPairing, 64), calldataload(pB))
                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))
                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))
                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))

                // alpha1
                mstore(add(_pPairing, 192), alphax)
                mstore(add(_pPairing, 224), alphay)

                // beta2
                mstore(add(_pPairing, 256), betax1)
                mstore(add(_pPairing, 288), betax2)
                mstore(add(_pPairing, 320), betay1)
                mstore(add(_pPairing, 352), betay2)

                // vk_x
                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))
                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))

                // gamma2
                mstore(add(_pPairing, 448), gammax1)
                mstore(add(_pPairing, 480), gammax2)
                mstore(add(_pPairing, 512), gammay1)
                mstore(add(_pPairing, 544), gammay2)

                // C
                mstore(add(_pPairing, 576), calldataload(pC))
                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))

                // delta2
                mstore(add(_pPairing, 640), mload(vkPoints))
                mstore(add(_pPairing, 672), mload(add(vkPoints, 32)))
                mstore(add(_pPairing, 704), mload(add(vkPoints, 64)))
                mstore(add(_pPairing, 736), mload(add(vkPoints, 96)))

                // ecPairing gas cost at 181000 given 768 bytes input. Add 33.3% gas for safety buffer.
                // Last checked in 2024 Oct, evm codename Cancun
                // ref: https://www.evm.codes/precompiled?fork=cancun#0x08
                let success := staticcall(241333, 8, _pPairing, 768, _pPairing, 0x20)

                isOk := and(success, mload(_pPairing))
            }

            let pMem := mload(0x40)
            mstore(0x40, add(pMem, pLastMem))

            // Validate that all evaluations ∈ F

            checkField(calldataload(add(_pubSignals, 0)))

            checkField(calldataload(add(_pubSignals, 32)))

            checkField(calldataload(add(_pubSignals, 64)))

            checkField(calldataload(add(_pubSignals, 96)))

            checkField(calldataload(add(_pubSignals, 128)))

            // Validate all evaluations
            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem, _vkPoints)

            mstore(0, isValid)
            return(0, 0x20)
        }
    }
}

Tags:
addr:0xb26c419dc3d478bb6139c72b93cb3bd0249c71ff|verified:true|block:23700498|tx:0x2ffcc0eeca4814ca395de850bdc6b3620a83bef761fb7cccd21ce555021d031f|first_check:1761990753

Submitted on: 2025-11-01 10:52:34

Comments

Log in to comment.

No comments yet.