├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── circuits ├── dizkus.circom └── merkle.circom ├── package-lock.json ├── package.json ├── scripts ├── 1_compile.sh ├── 2_gen_wtns.sh ├── 3_gen_chunk_zkey.sh ├── 4_gen_vkey.sh ├── 5_gen_proof.sh ├── 6_gen_proof_rapidsnark.sh ├── dizkus_64_4_30.circom └── sample_input.json ├── semaphore_scripts ├── 1_compile.sh ├── 2_gen_wtns.sh ├── 3_gen_chunk_zkey.sh ├── 4_gen_vkey.sh ├── 5_gen_proof.sh ├── 6_gen_proof_rapidsnark.sh ├── sample_input.json └── semaphore.circom ├── test ├── circuits │ ├── pubkey_to_address.circom │ ├── sig_verify_64_4.circom │ └── verify_merkle_proof_30.circom └── test_dizkus.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | node_modules/ 3 | pot*.ptau -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "circom-ecdsa"] 2 | path = circom-ecdsa 3 | url = https://github.com/0xPARC/circom-ecdsa 4 | [submodule "rapidsnark"] 5 | path = rapidsnark 6 | url = https://github.com/iden3/rapidsnark 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Personae Labs Circuits 2 | 3 | Circuits for heyanon and other projects! 4 | 5 | ## Setup 6 | 7 | (from https://github.com/0xPARC/cabal/blob/main/circuits/README.md) 8 | 9 | After you clone the repo, from the root of the repo run: 10 | ``` 11 | git submodule update --init 12 | ``` 13 | 14 | Follow the intructions here to get circom2 (the ZKSnark compiler) installed in your system 15 | https://docs.circom.io/getting-started/installation/ 16 | 17 | You should probably also install VSCode extension to work with circom. 18 | 19 | To install dependencies. 20 | ``` 21 | yarn 22 | cd circom-ecdsa 23 | yarn 24 | ``` 25 | 26 | Download a Powers of Tau file with `2^21` constraints and copy it into the 27 | `circuits` subdirectory of the project, with the name `pot21_final.ptau`. We do not provide such a file in this repo due to its large size. You can download and copy Powers of Tau files from the Hermez trusted setup from [this repository](https://github.com/iden3/snarkjs#7-prepare-phase-2). 28 | 29 | ## Compiling circuits into prover/verifier keys 30 | 31 | Follow the scripts in `/scripts` in order to generate chunked zkeys for this circuit. You will need a machine with large RAM and SWAP to perform these operations, we used a `r5.4xlarge` AWS machine to generate everything. 32 | -------------------------------------------------------------------------------- /circuits/dizkus.circom: -------------------------------------------------------------------------------- 1 | pragma circom 2.0.2; 2 | 3 | include "../circom-ecdsa/circuits/ecdsa.circom"; 4 | include "../circom-ecdsa/circuits/zk-identity/eth.circom"; 5 | include "./merkle.circom"; 6 | 7 | /* 8 | This circuit allows a user to prove membership in a group and 9 | anonymously post a message. They input their public key, a signature 10 | of the message they post, and a merkle tree membership proof in the 11 | group they're looking to post to. 12 | 13 | Steps 14 | 0) before circuit, verify pubkey is valid 15 | 1) verify signature of message with public key 16 | 2) get address associated with public key 17 | 3) verify address is in group with merkle tree proof 18 | 19 | Inputs 20 | - merkle proof (depth d) 21 | - root 22 | - branch 23 | - branch side 24 | - signature verification (encoded with k registers of n bits each) 25 | - signature (r, s) 26 | - msghash 27 | - pubkey 28 | */ 29 | template Dizkus(n, k, d) { 30 | assert(k >= 2); 31 | assert(k <= 100); 32 | 33 | signal input root; 34 | signal input pathElements[d]; 35 | signal input pathIndices[d]; 36 | 37 | signal input r[k]; 38 | signal input s[k]; 39 | signal input msghash[k]; 40 | signal input pubkey[2][k]; 41 | 42 | // Step 1: signature verification 43 | component verifySignature = ECDSAVerifyNoPubkeyCheck(n, k); 44 | for (var i = 0; i < k; i++) { 45 | verifySignature.r[i] <== r[i]; 46 | verifySignature.s[i] <== s[i]; 47 | verifySignature.msghash[i] <== msghash[i]; 48 | for (var j = 0; j < 2; j++) { 49 | verifySignature.pubkey[j][i] <== pubkey[j][i]; 50 | } 51 | } 52 | verifySignature.result === 1; 53 | 54 | // Step 2: get address associated with public key 55 | // adapted from https://github.com/jefflau/zk-identity 56 | signal pubkeyBits[512]; 57 | signal address; 58 | component flattenPubkey = FlattenPubkey(n, k); 59 | for (var i = 0; i < k; i++) { 60 | flattenPubkey.chunkedPubkey[0][i] <== pubkey[0][i]; 61 | flattenPubkey.chunkedPubkey[1][i] <== pubkey[1][i]; 62 | } 63 | for (var i = 0; i < 512; i++) { 64 | pubkeyBits[i] <== flattenPubkey.pubkeyBits[i]; 65 | } 66 | component pubkeyToAddress = PubkeyToAddress(); 67 | for (var i = 0; i < 512; i++) { 68 | pubkeyToAddress.pubkeyBits[i] <== pubkeyBits[i]; 69 | } 70 | address <== pubkeyToAddress.address; 71 | 72 | // Step 3: verify address is in group with merkle tree proof 73 | component verifyMerkleProof = MerkleTreeChecker(d); 74 | verifyMerkleProof.leaf <== address; 75 | verifyMerkleProof.root <== root; 76 | for (var i = 0; i < d; i++) { 77 | verifyMerkleProof.pathElements[i] <== pathElements[i]; 78 | verifyMerkleProof.pathIndices[i] <== pathIndices[i]; 79 | } 80 | } -------------------------------------------------------------------------------- /circuits/merkle.circom: -------------------------------------------------------------------------------- 1 | // from https://github.com/0xPARC/cabal 2 | 3 | pragma circom 2.0.1; 4 | 5 | include "../circom-ecdsa/node_modules/circomlib/circuits/poseidon.circom"; 6 | 7 | // if s == 0 returns [in[0], in[1]] 8 | // if s == 1 returns [in[1], in[0]] 9 | template DualMux() { 10 | signal input in[2]; 11 | signal input s; 12 | signal output out[2]; 13 | 14 | s * (1 - s) === 0; 15 | out[0] <== (in[1] - in[0])*s + in[0]; 16 | out[1] <== (in[0] - in[1])*s + in[1]; 17 | } 18 | 19 | // Verifies that merkle proof is correct for given merkle root and a leaf 20 | // pathIndices input is an array of 0/1 selectors telling whether given pathElement is on the left or right side of merkle path 21 | template MerkleTreeChecker(levels) { 22 | signal input leaf; 23 | signal input root; 24 | signal input pathElements[levels]; 25 | signal input pathIndices[levels]; 26 | 27 | component selectors[levels]; 28 | component hashers[levels]; 29 | 30 | signal zeroCheckers[levels+1]; 31 | zeroCheckers[0] <== leaf - root; 32 | 33 | for (var i = 0; i < levels; i++) { 34 | selectors[i] = DualMux(); 35 | selectors[i].in[0] <== i == 0 ? leaf : hashers[i - 1].out; 36 | selectors[i].in[1] <== pathElements[i]; 37 | selectors[i].s <== pathIndices[i]; 38 | 39 | hashers[i] = Poseidon(2); 40 | hashers[i].inputs[0] <== selectors[i].out[0]; 41 | hashers[i].inputs[1] <== selectors[i].out[1]; 42 | zeroCheckers[i+1] <== zeroCheckers[i] * (hashers[i].out - root); 43 | } 44 | 45 | zeroCheckers[levels] === 0; 46 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "chai": "^4.3.6", 4 | "circom_tester": "^0.0.14", 5 | "mocha": "^10.0.0", 6 | "path": "^0.12.7", 7 | "snarkjs": "git+https://github.com/vb7401/snarkjs.git#24981febe8826b6ab76ae4d76cf7f9142919d2b8" 8 | }, 9 | "scripts": { 10 | "test": "mocha" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /scripts/1_compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=dizkus_64_4_30 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | if [ ! -d "$BUILD_DIR" ]; then 7 | echo "No build directory found. Creating build directory..." 8 | mkdir -p "$BUILD_DIR" 9 | fi 10 | 11 | echo '****COMPILING CIRCUIT****' 12 | start=`date +%s` 13 | set -x 14 | circom "$CIRCUIT_NAME".circom --r1cs --wasm --sym --c --wat --output "$BUILD_DIR" 15 | { set +x; } 2>/dev/null 16 | end=`date +%s` 17 | echo "DONE ($((end-start))s)" 18 | echo 19 | -------------------------------------------------------------------------------- /scripts/2_gen_wtns.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=dizkus_64_4_30 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | echo "****GENERATING WITNESS FOR SAMPLE INPUT****" 7 | start=`date +%s` 8 | set -x 9 | node "$BUILD_DIR"/"$CIRCUIT_NAME"_js/generate_witness.js "$BUILD_DIR"/"$CIRCUIT_NAME"_js/"$CIRCUIT_NAME".wasm sample_input.json "$BUILD_DIR"/witness.wtns 10 | { set +x; } 2>/dev/null 11 | end=`date +%s` 12 | echo "DONE ($((end-start))s)" 13 | echo -------------------------------------------------------------------------------- /scripts/3_gen_chunk_zkey.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=dizkus_64_4_30 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | R1CS_FILE="$BUILD_DIR/$CIRCUIT_NAME.r1cs" 6 | PARTIAL_ZKEYS="$BUILD_DIR"/partial_zkeys 7 | PHASE1=../circuits/pot21_final.ptau 8 | 9 | if [ ! -d "$BUILD_DIR"/partial_zkeys ]; then 10 | echo "No partial_zkeys directory found. Creating partial_zkeys directory..." 11 | mkdir -p "$BUILD_DIR"/partial_zkeys 12 | fi 13 | 14 | echo "****GENERATING ZKEY 0****" 15 | start=`date +%s` 16 | set -x 17 | ../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey 18 | { set +x; } 2>/dev/null 19 | end=`date +%s` 20 | echo "DONE ($((end-start))s)" 21 | echo 22 | 23 | echo "****GENERATING ZKEY 1****" 24 | start=`date +%s` 25 | set -x 26 | ../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -v 27 | { set +x; } 2>/dev/null 28 | end=`date +%s` 29 | echo "DONE ($((end-start))s)" 30 | echo 31 | 32 | echo "****GENERATING ZKEY 2****" 33 | start=`date +%s` 34 | set -x 35 | ../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_2.zkey --name="2nd Contributor Name" -v 36 | { set +x; } 2>/dev/null 37 | end=`date +%s` 38 | echo "DONE ($((end-start))s)" 39 | echo 40 | 41 | # Use merkle root of Vivek + Lakshman MIMC merkle tree 42 | echo "****GENERATING FINAL ZKEY****" 43 | start=`date +%s` 44 | set -x 45 | ../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_2.zkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey 12FE2EC467BD428DD0E966A6287DE2AF8DE09C2C5C0AD902B2C666B0895ABB75 10 -n="Final Beacon phase2" 46 | { set +x; } 2>/dev/null 47 | end=`date +%s` 48 | echo "DONE ($((end-start))s)" 49 | echo -------------------------------------------------------------------------------- /scripts/4_gen_vkey.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=dizkus_64_4_30 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | R1CS_FILE="$BUILD_DIR/$CIRCUIT_NAME.r1cs" 6 | PHASE1=../circuits/pot21_final.ptau 7 | 8 | echo "****EXPORTING VKEY****" 9 | start=`date +%s` 10 | set -x 11 | ../node_modules/.bin/snarkjs zkey export verificationkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/vkey.json 12 | end=`date +%s` 13 | { set +x; } 2>/dev/null 14 | echo "DONE ($((end-start))s)" 15 | echo -------------------------------------------------------------------------------- /scripts/5_gen_proof.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=dizkus_64_4_30 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | echo "****GENERATING PROOF FOR SAMPLE INPUT****" 7 | start=`date +%s` 8 | set -x 9 | ../node_modules/.bin/snarkjs groth16 prove "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/witness.wtns "$BUILD_DIR"/proof.json "$BUILD_DIR"/public.json 10 | { set +x; } 2>/dev/null 11 | end=`date +%s` 12 | echo "DONE ($((end-start))s)" 13 | echo 14 | 15 | echo "****VERIFYING PROOF FOR SAMPLE INPUT****" 16 | start=`date +%s` 17 | set -x 18 | ../node_modules/.bin/snarkjs groth16 verify "$BUILD_DIR"/vkey.json "$BUILD_DIR"/public.json "$BUILD_DIR"/proof.json 19 | end=`date +%s` 20 | { set +x; } 2>/dev/null 21 | echo "DONE ($((end-start))s)" 22 | echo -------------------------------------------------------------------------------- /scripts/6_gen_proof_rapidsnark.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=dizkus_64_4_30 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | echo "****MAKE CPP FILE FOR WITNESS GENERATION****" 7 | start=`date +%s` 8 | set -x 9 | make -C "$BUILD_DIR"/"$CIRCUIT_NAME"_cpp/ 10 | { set +x; } 2>/dev/null 11 | end=`date +%s` 12 | echo "DONE ($((end-start))s)" 13 | echo 14 | 15 | # echo "****GENERATING WITNESS FOR SAMPLE INPUT****" 16 | # start=`date +%s` 17 | # set -x 18 | # ./"$BUILD_DIR"/"$CIRCUIT_NAME"_cpp/"$CIRCUIT_NAME" input_"$CIRCUIT_NAME".json "$BUILD_DIR"/witness.wtns 19 | # { set +x; } 2>/dev/null 20 | # end=`date +%s` 21 | # echo "DONE ($((end-start))s)" 22 | # echo 23 | 24 | echo "****GENERATING PROOF FOR SAMPLE INPUT****" 25 | start=`date +%s` 26 | set -x 27 | ./../rapidsnark/build/prover "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/witness.wtns "$BUILD_DIR"/rapidsnark_proof.json "$BUILD_DIR"/rapidsnark_public.json 28 | { set +x; } 2>/dev/null 29 | end=`date +%s` 30 | echo "DONE ($((end-start))s)" 31 | echo -------------------------------------------------------------------------------- /scripts/dizkus_64_4_30.circom: -------------------------------------------------------------------------------- 1 | pragma circom 2.0.2; 2 | 3 | include "../circuits/dizkus.circom"; 4 | 5 | component main {public [root, msghash]} = Dizkus(64, 4, 30); -------------------------------------------------------------------------------- /scripts/sample_input.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": "12890874683796057475982638126021753466203617277177808903147539631297044918772", 3 | "pathElements": [ 4 | "1", 5 | "217234377348884654691879377518794323857294947151490278790710809376325639809", 6 | "18624361856574916496058203820366795950790078780687078257641649903530959943449", 7 | "19831903348221211061287449275113949495274937755341117892716020320428427983768", 8 | "5101361658164783800162950277964947086522384365207151283079909745362546177817", 9 | "11552819453851113656956689238827707323483753486799384854128595967739676085386", 10 | "10483540708739576660440356112223782712680507694971046950485797346645134034053", 11 | "7389929564247907165221817742923803467566552273918071630442219344496852141897", 12 | "6373467404037422198696850591961270197948259393735756505350173302460761391561", 13 | "14340012938942512497418634250250812329499499250184704496617019030530171289909", 14 | "10566235887680695760439252521824446945750533956882759130656396012316506290852", 15 | "14058207238811178801861080665931986752520779251556785412233046706263822020051", 16 | "1841804857146338876502603211473795482567574429038948082406470282797710112230", 17 | "6068974671277751946941356330314625335924522973707504316217201913831393258319", 18 | "10344803844228993379415834281058662700959138333457605334309913075063427817480", 19 | "1", 20 | "1", 21 | "1", 22 | "1", 23 | "1", 24 | "1", 25 | "1", 26 | "1", 27 | "1", 28 | "1", 29 | "1", 30 | "1", 31 | "1", 32 | "1", 33 | "1" 34 | ], 35 | "pathIndices": [ 36 | "1", 37 | "1", 38 | "1", 39 | "1", 40 | "1", 41 | "1", 42 | "1", 43 | "1", 44 | "1", 45 | "1", 46 | "1", 47 | "1", 48 | "1", 49 | "1", 50 | "1", 51 | "1", 52 | "1", 53 | "1", 54 | "1", 55 | "1", 56 | "1", 57 | "1", 58 | "1", 59 | "1", 60 | "1", 61 | "1", 62 | "1", 63 | "1", 64 | "1", 65 | "1" 66 | ], 67 | "r": [ 68 | "4343621220230669059", 69 | "18327250808238484200", 70 | "3755886376029024836", 71 | "15385541165691570987" 72 | ], 73 | "s": [ 74 | "15310264094530460262", 75 | "1621297553241732651", 76 | "14659779539793693678", 77 | "6674094315802436376" 78 | ], 79 | "msghash": [ 80 | "8013684013107543400", 81 | "3149366482839937187", 82 | "3130562494311484551", 83 | "15702822023081012803" 84 | ], 85 | "pubkey": [ 86 | [ 87 | "18367636299713276357", 88 | "3160037443724067799", 89 | "17055831292340408725", 90 | "11407900522529698842" 91 | ], 92 | [ 93 | "6013285874336619060", 94 | "5158666445349947378", 95 | "11042035041177518474", 96 | "16013362528823638363" 97 | ] 98 | ] 99 | } -------------------------------------------------------------------------------- /semaphore_scripts/1_compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=semaphore 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | if [ ! -d "$BUILD_DIR" ]; then 7 | echo "No build directory found. Creating build directory..." 8 | mkdir -p "$BUILD_DIR" 9 | fi 10 | 11 | echo '****COMPILING CIRCUIT****' 12 | start=`date +%s` 13 | set -x 14 | circom "$CIRCUIT_NAME".circom --r1cs --wasm --sym --c --wat --output "$BUILD_DIR" 15 | { set +x; } 2>/dev/null 16 | end=`date +%s` 17 | echo "DONE ($((end-start))s)" 18 | echo 19 | -------------------------------------------------------------------------------- /semaphore_scripts/2_gen_wtns.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=semaphore 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | echo "****GENERATING WITNESS FOR SAMPLE INPUT****" 7 | start=`date +%s` 8 | set -x 9 | node "$BUILD_DIR"/"$CIRCUIT_NAME"_js/generate_witness.js "$BUILD_DIR"/"$CIRCUIT_NAME"_js/"$CIRCUIT_NAME".wasm sample_input.json "$BUILD_DIR"/witness.wtns 10 | { set +x; } 2>/dev/null 11 | end=`date +%s` 12 | echo "DONE ($((end-start))s)" 13 | echo -------------------------------------------------------------------------------- /semaphore_scripts/3_gen_chunk_zkey.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=semaphore 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | R1CS_FILE="$BUILD_DIR/$CIRCUIT_NAME.r1cs" 6 | PARTIAL_ZKEYS="$BUILD_DIR"/partial_zkeys 7 | PHASE1=../circuits/pot21_final.ptau 8 | 9 | if [ ! -d "$BUILD_DIR"/partial_zkeys ]; then 10 | echo "No partial_zkeys directory found. Creating partial_zkeys directory..." 11 | mkdir -p "$BUILD_DIR"/partial_zkeys 12 | fi 13 | 14 | echo "****GENERATING ZKEY 0****" 15 | start=`date +%s` 16 | set -x 17 | ../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey 18 | { set +x; } 2>/dev/null 19 | end=`date +%s` 20 | echo "DONE ($((end-start))s)" 21 | echo 22 | 23 | echo "****GENERATING ZKEY 1****" 24 | start=`date +%s` 25 | set -x 26 | ../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -v 27 | { set +x; } 2>/dev/null 28 | end=`date +%s` 29 | echo "DONE ($((end-start))s)" 30 | echo 31 | 32 | echo "****GENERATING ZKEY 2****" 33 | start=`date +%s` 34 | set -x 35 | ../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_2.zkey --name="2nd Contributor Name" -v 36 | { set +x; } 2>/dev/null 37 | end=`date +%s` 38 | echo "DONE ($((end-start))s)" 39 | echo 40 | 41 | # Use merkle root of Vivek + Lakshman MIMC merkle tree 42 | echo "****GENERATING FINAL ZKEY****" 43 | start=`date +%s` 44 | set -x 45 | ../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_2.zkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey 12FE2EC467BD428DD0E966A6287DE2AF8DE09C2C5C0AD902B2C666B0895ABB75 10 -n="Final Beacon phase2" 46 | { set +x; } 2>/dev/null 47 | end=`date +%s` 48 | echo "DONE ($((end-start))s)" 49 | echo -------------------------------------------------------------------------------- /semaphore_scripts/4_gen_vkey.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=semaphore 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | R1CS_FILE="$BUILD_DIR/$CIRCUIT_NAME.r1cs" 6 | PHASE1=../circuits/pot21_final.ptau 7 | 8 | echo "****EXPORTING VKEY****" 9 | start=`date +%s` 10 | set -x 11 | ../node_modules/.bin/snarkjs zkey export verificationkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/vkey.json 12 | end=`date +%s` 13 | { set +x; } 2>/dev/null 14 | echo "DONE ($((end-start))s)" 15 | echo -------------------------------------------------------------------------------- /semaphore_scripts/5_gen_proof.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=semaphore 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | echo "****GENERATING PROOF FOR SAMPLE INPUT****" 7 | start=`date +%s` 8 | set -x 9 | ../node_modules/.bin/snarkjs groth16 prove "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/witness.wtns "$BUILD_DIR"/proof.json "$BUILD_DIR"/public.json 10 | { set +x; } 2>/dev/null 11 | end=`date +%s` 12 | echo "DONE ($((end-start))s)" 13 | echo 14 | 15 | echo "****VERIFYING PROOF FOR SAMPLE INPUT****" 16 | start=`date +%s` 17 | set -x 18 | ../node_modules/.bin/snarkjs groth16 verify "$BUILD_DIR"/vkey.json "$BUILD_DIR"/public.json "$BUILD_DIR"/proof.json 19 | end=`date +%s` 20 | { set +x; } 2>/dev/null 21 | echo "DONE ($((end-start))s)" 22 | echo -------------------------------------------------------------------------------- /semaphore_scripts/6_gen_proof_rapidsnark.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CIRCUIT_NAME=semaphore 4 | BUILD_DIR="../build/$CIRCUIT_NAME" 5 | 6 | echo "****MAKE CPP FILE FOR WITNESS GENERATION****" 7 | start=`date +%s` 8 | set -x 9 | make -C "$BUILD_DIR"/"$CIRCUIT_NAME"_cpp/ 10 | { set +x; } 2>/dev/null 11 | end=`date +%s` 12 | echo "DONE ($((end-start))s)" 13 | echo 14 | 15 | # echo "****GENERATING WITNESS FOR SAMPLE INPUT****" 16 | # start=`date +%s` 17 | # set -x 18 | # ./"$BUILD_DIR"/"$CIRCUIT_NAME"_cpp/"$CIRCUIT_NAME" input_"$CIRCUIT_NAME".json "$BUILD_DIR"/witness.wtns 19 | # { set +x; } 2>/dev/null 20 | # end=`date +%s` 21 | # echo "DONE ($((end-start))s)" 22 | # echo 23 | 24 | echo "****GENERATING PROOF FOR SAMPLE INPUT****" 25 | start=`date +%s` 26 | set -x 27 | ./../rapidsnark/build/prover "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/witness.wtns "$BUILD_DIR"/rapidsnark_proof.json "$BUILD_DIR"/rapidsnark_public.json 28 | { set +x; } 2>/dev/null 29 | end=`date +%s` 30 | echo "DONE ($((end-start))s)" 31 | echo -------------------------------------------------------------------------------- /semaphore_scripts/sample_input.json: -------------------------------------------------------------------------------- 1 | { 2 | "identityTrapdoor": "82210452188161928598733550128625220534270549590309517414894288204044874952104", 3 | "identityNullifier": "34446120299491790288744020307510475236236188468021654103658443703745559098738", 4 | "treePathIndices": [ 5 | "0", 6 | "1", 7 | "0", 8 | "0", 9 | "1", 10 | "1", 11 | "0", 12 | "0", 13 | "0", 14 | "0", 15 | "0", 16 | "0", 17 | "0", 18 | "0", 19 | "0", 20 | "0", 21 | "0", 22 | "0", 23 | "0", 24 | "0" 25 | ], 26 | "treeSiblings": [ 27 | "21859231388776549968909650767822735199915982922882062141526844531343157274941", 28 | "14829471396349223418257052718072297725193656766323729753108046043941694614133", 29 | "21565033459481620757728978230971813577483843043063926737824021645126402264433", 30 | "13766135533406964322328512470216179800123849709262691771686679999898328382435", 31 | "15906119989045105387724746447675479121755810923330612184214594638701177825202", 32 | "21800921921756254131913838460836323600506339982825051047143207130243409008074", 33 | "16213393278042399151325230261731727739833111769028509859621460793858318292741", 34 | "3396914609616007258851405644437304192397291162432396347162513310381425243293", 35 | "21551820661461729022865262380882070649935529853313286572328683688269863701601", 36 | "6573136701248752079028194407151022595060682063033565181951145966236778420039", 37 | "12413880268183407374852357075976609371175688755676981206018884971008854919922", 38 | "14271763308400718165336499097156975241954733520325982997864342600795471836726", 39 | "20066985985293572387227381049700832219069292839614107140851619262827735677018", 40 | "9394776414966240069580838672673694685292165040808226440647796406499139370960", 41 | "11331146992410411304059858900317123658895005918277453009197229807340014528524", 42 | "15819538789928229930262697811477882737253464456578333862691129291651619515538", 43 | "19217088683336594659449020493828377907203207941212636669271704950158751593251", 44 | "21035245323335827719745544373081896983162834604456827698288649288827293579666", 45 | "6939770416153240137322503476966641397417391950902474480970945462551409848591", 46 | "10941962436777715901943463195175331263348098796018438960955633645115732864202" 47 | ], 48 | "externalNullifier": "1", 49 | "signalHash": "90212440971967858186782821117966844623767893510927315567635373206777892737" 50 | } -------------------------------------------------------------------------------- /semaphore_scripts/semaphore.circom: -------------------------------------------------------------------------------- 1 | pragma circom 2.0.2; 2 | 3 | include "../../semaphore/circuits/semaphore.circom"; 4 | -------------------------------------------------------------------------------- /test/circuits/pubkey_to_address.circom: -------------------------------------------------------------------------------- 1 | pragma circom 2.0.2; 2 | 3 | include "../../circom-ecdsa/circuits/zk-identity/eth.circom"; 4 | 5 | // NOTE: one day this will be its own circuit for unit testing 6 | template ChunkedPubkeyToAddress() { 7 | signal input pubkey[2][4]; 8 | signal output address; 9 | 10 | signal pubkeyBits[512]; 11 | 12 | component flattenPubkey = FlattenPubkey(64, 4); 13 | for (var i = 0; i < 4; i++) { 14 | flattenPubkey.chunkedPubkey[0][i] <== pubkey[0][i]; 15 | flattenPubkey.chunkedPubkey[1][i] <== pubkey[1][i]; 16 | } 17 | for (var i = 0; i < 512; i++) { 18 | pubkeyBits[i] <== flattenPubkey.pubkeyBits[i]; 19 | } 20 | component pubkeyToAddress = PubkeyToAddress(); 21 | for (var i = 0; i < 512; i++) { 22 | pubkeyToAddress.pubkeyBits[i] <== pubkeyBits[i]; 23 | } 24 | address <== pubkeyToAddress.address; 25 | } 26 | 27 | component main = ChunkedPubkeyToAddress(); -------------------------------------------------------------------------------- /test/circuits/sig_verify_64_4.circom: -------------------------------------------------------------------------------- 1 | pragma circom 2.0.2; 2 | 3 | include "../../circom-ecdsa/circuits/ecdsa.circom"; 4 | 5 | // sanity testing sig verification in circom 6 | template SigVerify(n, k) { 7 | assert(k >= 2); 8 | assert(k <= 100); 9 | 10 | signal input r[k]; 11 | signal input s[k]; 12 | signal input msghash[k]; 13 | signal input pubkey[2][k]; 14 | 15 | // Step 1: signature verification 16 | component verifySignature = ECDSAVerifyNoPubkeyCheck(n, k); 17 | for (var i = 0; i < k; i++) { 18 | verifySignature.r[i] <== r[i]; 19 | verifySignature.s[i] <== s[i]; 20 | verifySignature.msghash[i] <== msghash[i]; 21 | for (var j = 0; j < 2; j++) { 22 | verifySignature.pubkey[j][i] <== pubkey[j][i]; 23 | } 24 | } 25 | verifySignature.result === 1; 26 | } 27 | 28 | component main = SigVerify(64, 4); -------------------------------------------------------------------------------- /test/circuits/verify_merkle_proof_30.circom: -------------------------------------------------------------------------------- 1 | pragma circom 2.0.2; 2 | 3 | include "../../circuits/merkle.circom"; 4 | 5 | component main {public [root]} = 6 | MerkleTreeChecker(30); -------------------------------------------------------------------------------- /test/test_dizkus.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const chai = require("chai"); 3 | const circom_tester = require("circom_tester"); 4 | 5 | const assert = chai.assert; 6 | const wasm_tester = circom_tester.wasm; 7 | 8 | // TODO: generate a few from the frontend and put em all here 9 | const sampleInput = { 10 | "root": "12890874683796057475982638126021753466203617277177808903147539631297044918772", 11 | "pathElements": [ 12 | "1", 13 | "217234377348884654691879377518794323857294947151490278790710809376325639809", 14 | "18624361856574916496058203820366795950790078780687078257641649903530959943449", 15 | "19831903348221211061287449275113949495274937755341117892716020320428427983768", 16 | "5101361658164783800162950277964947086522384365207151283079909745362546177817", 17 | "11552819453851113656956689238827707323483753486799384854128595967739676085386", 18 | "10483540708739576660440356112223782712680507694971046950485797346645134034053", 19 | "7389929564247907165221817742923803467566552273918071630442219344496852141897", 20 | "6373467404037422198696850591961270197948259393735756505350173302460761391561", 21 | "14340012938942512497418634250250812329499499250184704496617019030530171289909", 22 | "10566235887680695760439252521824446945750533956882759130656396012316506290852", 23 | "14058207238811178801861080665931986752520779251556785412233046706263822020051", 24 | "1841804857146338876502603211473795482567574429038948082406470282797710112230", 25 | "6068974671277751946941356330314625335924522973707504316217201913831393258319", 26 | "10344803844228993379415834281058662700959138333457605334309913075063427817480", 27 | "1", 28 | "1", 29 | "1", 30 | "1", 31 | "1", 32 | "1", 33 | "1", 34 | "1", 35 | "1", 36 | "1", 37 | "1", 38 | "1", 39 | "1", 40 | "1", 41 | "1" 42 | ], 43 | "pathIndices": [ 44 | "1", 45 | "1", 46 | "1", 47 | "1", 48 | "1", 49 | "1", 50 | "1", 51 | "1", 52 | "1", 53 | "1", 54 | "1", 55 | "1", 56 | "1", 57 | "1", 58 | "1", 59 | "1", 60 | "1", 61 | "1", 62 | "1", 63 | "1", 64 | "1", 65 | "1", 66 | "1", 67 | "1", 68 | "1", 69 | "1", 70 | "1", 71 | "1", 72 | "1", 73 | "1" 74 | ], 75 | "r": [ 76 | "4343621220230669059", 77 | "18327250808238484200", 78 | "3755886376029024836", 79 | "15385541165691570987" 80 | ], 81 | "s": [ 82 | "15310264094530460262", 83 | "1621297553241732651", 84 | "14659779539793693678", 85 | "6674094315802436376" 86 | ], 87 | "msghash": [ 88 | "8013684013107543400", 89 | "3149366482839937187", 90 | "3130562494311484551", 91 | "15702822023081012803" 92 | ], 93 | "pubkey": [ 94 | [ 95 | "18367636299713276357", 96 | "3160037443724067799", 97 | "17055831292340408725", 98 | "11407900522529698842" 99 | ], 100 | [ 101 | "6013285874336619060", 102 | "5158666445349947378", 103 | "11042035041177518474", 104 | "16013362528823638363" 105 | ] 106 | ] 107 | }; 108 | 109 | // NOTE: not ideal to hardcode this in the future... 110 | const sampleAddress = "1355224352695827483975080807178260403365748530407"; 111 | 112 | describe("dizkus-data generated inputs", function () { 113 | this.timeout(1200000); 114 | 115 | it("pubkey to address", async () => { 116 | let circuit = await wasm_tester( 117 | path.join(__dirname, "circuits", "pubkey_to_address.circom") 118 | ); 119 | await circuit.loadConstraints(); 120 | 121 | const witness = await circuit.calculateWitness( 122 | { pubkey: sampleInput.pubkey }, 123 | true 124 | ); 125 | await circuit.checkConstraints(witness); 126 | await circuit.assertOut(witness, { address: sampleAddress }); 127 | }); 128 | 129 | it("merkle tree inclusion", async () => { 130 | let circuit = await wasm_tester( 131 | path.join(__dirname, "circuits", "verify_merkle_proof_30.circom") 132 | ); 133 | await circuit.loadConstraints(); 134 | 135 | const input = { 136 | root: sampleInput.root, 137 | pathElements: sampleInput.pathElements, 138 | pathIndices: sampleInput.pathIndices, 139 | leaf: sampleAddress, 140 | }; 141 | const witness = await circuit.calculateWitness(input, true); 142 | await circuit.checkConstraints(witness); 143 | }); 144 | 145 | it("sig verification", async () => { 146 | let circuit = await wasm_tester( 147 | path.join(__dirname, "circuits", "sig_verify_64_4.circom") 148 | ); 149 | await circuit.loadConstraints(); 150 | 151 | const input = { 152 | r: sampleInput.r, 153 | s: sampleInput.s, 154 | msghash: sampleInput.msghash, 155 | pubkey: sampleInput.pubkey, 156 | }; 157 | const witness = await circuit.calculateWitness(input, true); 158 | await circuit.checkConstraints(witness); 159 | }); 160 | 161 | it("full circuit", async () => { 162 | let circuit = await wasm_tester( 163 | path.join( 164 | __dirname, 165 | "../scripts", 166 | "dizkus_64_4_30.circom" 167 | ) 168 | ); 169 | await circuit.loadConstraints(); 170 | 171 | const witness = await circuit.calculateWitness(sampleInput, true); 172 | await circuit.checkConstraints(witness); 173 | }); 174 | }); 175 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@iden3/bigarray@0.0.2": 6 | "integrity" "sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==" 7 | "resolved" "https://registry.npmjs.org/@iden3/bigarray/-/bigarray-0.0.2.tgz" 8 | "version" "0.0.2" 9 | 10 | "@iden3/binfileutils@0.0.10": 11 | "integrity" "sha512-mDtBiKYcHs9K8vnznd8md0In6e5hL6i7ITzlHQ6Xxx6kvGAgB8UZeHJ0KswS6IJK4x9v2mwHsh5kIDl245cQZg==" 12 | "resolved" "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.10.tgz" 13 | "version" "0.0.10" 14 | dependencies: 15 | "fastfile" "0.0.19" 16 | "ffjavascript" "^0.2.48" 17 | 18 | "@iden3/binfileutils@0.0.11": 19 | "integrity" "sha512-LylnJoZ0CTdgErnKY8OxohvW4K+p6UHD3sxt+3P9AmMyBQjYR4IpoqoYZZ+9aMj89cmCQ21UvdhndAx04er3NA==" 20 | "resolved" "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.11.tgz" 21 | "version" "0.0.11" 22 | dependencies: 23 | "fastfile" "0.0.20" 24 | "ffjavascript" "^0.2.48" 25 | 26 | "@iden3/binfileutils@0.0.8": 27 | "integrity" "sha512-/GqTsujUssGuQY+sd/XaLrA+OiCwzm+6yH28C57QQDWCHET2Logry9fGxU10n6XKdhCQBjZ7T/YMQkLwwkpRTQ==" 28 | "resolved" "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.8.tgz" 29 | "version" "0.0.8" 30 | dependencies: 31 | "fastfile" "0.0.19" 32 | "ffjavascript" "^0.2.30" 33 | 34 | "@ungap/promise-all-settled@1.1.2": 35 | "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" 36 | "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" 37 | "version" "1.1.2" 38 | 39 | "ansi-colors@4.1.1": 40 | "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" 41 | "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" 42 | "version" "4.1.1" 43 | 44 | "ansi-regex@^5.0.1": 45 | "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 46 | "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 47 | "version" "5.0.1" 48 | 49 | "ansi-styles@^4.0.0", "ansi-styles@^4.1.0": 50 | "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" 51 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 52 | "version" "4.3.0" 53 | dependencies: 54 | "color-convert" "^2.0.1" 55 | 56 | "anymatch@~3.1.2": 57 | "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" 58 | "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" 59 | "version" "3.1.2" 60 | dependencies: 61 | "normalize-path" "^3.0.0" 62 | "picomatch" "^2.0.4" 63 | 64 | "argparse@^2.0.1": 65 | "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 66 | "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 67 | "version" "2.0.1" 68 | 69 | "assertion-error@^1.1.0": 70 | "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" 71 | "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" 72 | "version" "1.1.0" 73 | 74 | "async@^3.2.3": 75 | "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 76 | "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" 77 | "version" "3.2.4" 78 | 79 | "available-typed-arrays@^1.0.5": 80 | "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" 81 | "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" 82 | "version" "1.0.5" 83 | 84 | "b4a@^1.0.1": 85 | "integrity" "sha512-1aCQIzQJK7G0z1Una75tWMlwVAR8o+QHoAlnWc5XAxRVBESY9WsitfBgM5nPyDBP5HrhPU1Np4Pq2Y7CJQ+tVw==" 86 | "resolved" "https://registry.npmjs.org/b4a/-/b4a-1.5.3.tgz" 87 | "version" "1.5.3" 88 | 89 | "balanced-match@^1.0.0": 90 | "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 91 | "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 92 | "version" "1.0.2" 93 | 94 | "big-integer@^1.6.42", "big-integer@^1.6.48": 95 | "integrity" "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" 96 | "resolved" "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" 97 | "version" "1.6.51" 98 | 99 | "binary-extensions@^2.0.0": 100 | "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 101 | "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" 102 | "version" "2.2.0" 103 | 104 | "blake2b-wasm@^2.3.0", "blake2b-wasm@^2.4.0": 105 | "integrity" "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==" 106 | "resolved" "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz" 107 | "version" "2.4.0" 108 | dependencies: 109 | "b4a" "^1.0.1" 110 | "nanoassert" "^2.0.0" 111 | 112 | "blakejs@^1.1.0": 113 | "integrity" "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" 114 | "resolved" "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" 115 | "version" "1.2.1" 116 | 117 | "brace-expansion@^1.1.7": 118 | "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" 119 | "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 120 | "version" "1.1.11" 121 | dependencies: 122 | "balanced-match" "^1.0.0" 123 | "concat-map" "0.0.1" 124 | 125 | "brace-expansion@^2.0.1": 126 | "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" 127 | "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" 128 | "version" "2.0.1" 129 | dependencies: 130 | "balanced-match" "^1.0.0" 131 | 132 | "braces@~3.0.2": 133 | "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" 134 | "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 135 | "version" "3.0.2" 136 | dependencies: 137 | "fill-range" "^7.0.1" 138 | 139 | "browser-stdout@1.3.1": 140 | "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" 141 | "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" 142 | "version" "1.3.1" 143 | 144 | "call-bind@^1.0.0", "call-bind@^1.0.2": 145 | "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" 146 | "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 147 | "version" "1.0.2" 148 | dependencies: 149 | "function-bind" "^1.1.1" 150 | "get-intrinsic" "^1.0.2" 151 | 152 | "camelcase@^6.0.0": 153 | "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" 154 | "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" 155 | "version" "6.3.0" 156 | 157 | "chai@^4.3.4", "chai@^4.3.6": 158 | "integrity" "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==" 159 | "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" 160 | "version" "4.3.6" 161 | dependencies: 162 | "assertion-error" "^1.1.0" 163 | "check-error" "^1.0.2" 164 | "deep-eql" "^3.0.1" 165 | "get-func-name" "^2.0.0" 166 | "loupe" "^2.3.1" 167 | "pathval" "^1.1.1" 168 | "type-detect" "^4.0.5" 169 | 170 | "chalk@^4.0.2", "chalk@^4.1.0": 171 | "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" 172 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 173 | "version" "4.1.2" 174 | dependencies: 175 | "ansi-styles" "^4.1.0" 176 | "supports-color" "^7.1.0" 177 | 178 | "check-error@^1.0.2": 179 | "integrity" "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" 180 | "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" 181 | "version" "1.0.2" 182 | 183 | "child_process@^1.0.2": 184 | "integrity" "sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==" 185 | "resolved" "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz" 186 | "version" "1.0.2" 187 | 188 | "chokidar@3.5.3": 189 | "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" 190 | "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 191 | "version" "3.5.3" 192 | dependencies: 193 | "anymatch" "~3.1.2" 194 | "braces" "~3.0.2" 195 | "glob-parent" "~5.1.2" 196 | "is-binary-path" "~2.1.0" 197 | "is-glob" "~4.0.1" 198 | "normalize-path" "~3.0.0" 199 | "readdirp" "~3.6.0" 200 | optionalDependencies: 201 | "fsevents" "~2.3.2" 202 | 203 | "circom_runtime@0.1.14": 204 | "integrity" "sha512-MLbHHZVkYuWyZiYErLmT5y0qbTRXDD1NhaDyLhQNF0JCb6brx8r/VJDevwne7sT1re7qHpHCQAL5rhqByQ7obQ==" 205 | "resolved" "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.14.tgz" 206 | "version" "0.1.14" 207 | dependencies: 208 | "ffjavascript" "0.2.39" 209 | "fnv-plus" "^1.3.1" 210 | 211 | "circom_runtime@0.1.17": 212 | "integrity" "sha512-FCOCPz7ZbqL4TpzBlISRZ7/fcYHkdZz0DMfju1DYHiRU/+ZzJQfDS8JYENlnb9PO+HsLTr6/QtzphqvnEBp9AQ==" 213 | "resolved" "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.17.tgz" 214 | "version" "0.1.17" 215 | dependencies: 216 | "ffjavascript" "0.2.48" 217 | 218 | "circom_tester@^0.0.14": 219 | "integrity" "sha512-LX67XrOsmsAmiuwCf7zjq8mB/MObgfGxa78X7G3gU8u55L2xzoKw4NYDMkHbrSFKuU8DMheuSMw8WN/KrjwBQg==" 220 | "resolved" "https://registry.npmjs.org/circom_tester/-/circom_tester-0.0.14.tgz" 221 | "version" "0.0.14" 222 | dependencies: 223 | "chai" "^4.3.4" 224 | "child_process" "^1.0.2" 225 | "ffjavascript" "^0.2.38" 226 | "fnv-plus" "^1.3.1" 227 | "r1csfile" "0.0.37" 228 | "snarkjs" "0.4.10" 229 | "tmp-promise" "^3.0.2" 230 | "util" "^0.12.4" 231 | 232 | "cliui@^7.0.2": 233 | "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" 234 | "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" 235 | "version" "7.0.4" 236 | dependencies: 237 | "string-width" "^4.2.0" 238 | "strip-ansi" "^6.0.0" 239 | "wrap-ansi" "^7.0.0" 240 | 241 | "color-convert@^2.0.1": 242 | "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" 243 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 244 | "version" "2.0.1" 245 | dependencies: 246 | "color-name" "~1.1.4" 247 | 248 | "color-name@~1.1.4": 249 | "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 250 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 251 | "version" "1.1.4" 252 | 253 | "concat-map@0.0.1": 254 | "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 255 | "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 256 | "version" "0.0.1" 257 | 258 | "debug@4.3.4": 259 | "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" 260 | "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 261 | "version" "4.3.4" 262 | dependencies: 263 | "ms" "2.1.2" 264 | 265 | "decamelize@^4.0.0": 266 | "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" 267 | "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" 268 | "version" "4.0.0" 269 | 270 | "deep-eql@^3.0.1": 271 | "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" 272 | "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" 273 | "version" "3.0.1" 274 | dependencies: 275 | "type-detect" "^4.0.0" 276 | 277 | "define-properties@^1.1.3", "define-properties@^1.1.4": 278 | "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" 279 | "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" 280 | "version" "1.1.4" 281 | dependencies: 282 | "has-property-descriptors" "^1.0.0" 283 | "object-keys" "^1.1.1" 284 | 285 | "diff@5.0.0": 286 | "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" 287 | "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" 288 | "version" "5.0.0" 289 | 290 | "ejs@^3.1.6": 291 | "integrity" "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==" 292 | "resolved" "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" 293 | "version" "3.1.8" 294 | dependencies: 295 | "jake" "^10.8.5" 296 | 297 | "emoji-regex@^8.0.0": 298 | "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 299 | "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 300 | "version" "8.0.0" 301 | 302 | "es-abstract@^1.19.0", "es-abstract@^1.19.5", "es-abstract@^1.20.0": 303 | "integrity" "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==" 304 | "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" 305 | "version" "1.20.1" 306 | dependencies: 307 | "call-bind" "^1.0.2" 308 | "es-to-primitive" "^1.2.1" 309 | "function-bind" "^1.1.1" 310 | "function.prototype.name" "^1.1.5" 311 | "get-intrinsic" "^1.1.1" 312 | "get-symbol-description" "^1.0.0" 313 | "has" "^1.0.3" 314 | "has-property-descriptors" "^1.0.0" 315 | "has-symbols" "^1.0.3" 316 | "internal-slot" "^1.0.3" 317 | "is-callable" "^1.2.4" 318 | "is-negative-zero" "^2.0.2" 319 | "is-regex" "^1.1.4" 320 | "is-shared-array-buffer" "^1.0.2" 321 | "is-string" "^1.0.7" 322 | "is-weakref" "^1.0.2" 323 | "object-inspect" "^1.12.0" 324 | "object-keys" "^1.1.1" 325 | "object.assign" "^4.1.2" 326 | "regexp.prototype.flags" "^1.4.3" 327 | "string.prototype.trimend" "^1.0.5" 328 | "string.prototype.trimstart" "^1.0.5" 329 | "unbox-primitive" "^1.0.2" 330 | 331 | "es-to-primitive@^1.2.1": 332 | "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" 333 | "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 334 | "version" "1.2.1" 335 | dependencies: 336 | "is-callable" "^1.1.4" 337 | "is-date-object" "^1.0.1" 338 | "is-symbol" "^1.0.2" 339 | 340 | "escalade@^3.1.1": 341 | "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 342 | "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 343 | "version" "3.1.1" 344 | 345 | "escape-string-regexp@4.0.0": 346 | "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 347 | "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 348 | "version" "4.0.0" 349 | 350 | "fastfile@^0.0.19", "fastfile@0.0.19": 351 | "integrity" "sha512-tz9nWR5KYb6eR2odFQ7oxqEkx8F3YQZ6NBJoJR92YEG3DqYOqyxMck8PKvTVNKx3uwvOqGnLXNScnqpdHRdHGQ==" 352 | "resolved" "https://registry.npmjs.org/fastfile/-/fastfile-0.0.19.tgz" 353 | "version" "0.0.19" 354 | 355 | "fastfile@0.0.20": 356 | "integrity" "sha512-r5ZDbgImvVWCP0lA/cGNgQcZqR+aYdFx3u+CtJqUE510pBUVGMn4ulL/iRTI4tACTYsNJ736uzFxEBXesPAktA==" 357 | "resolved" "https://registry.npmjs.org/fastfile/-/fastfile-0.0.20.tgz" 358 | "version" "0.0.20" 359 | 360 | "ffjavascript@^0.2.30": 361 | "integrity" "sha512-8X0FCIPOWiK6DTWh3pnE3O6D6nIQsirStAXpWMzRDnoDX7SEnDX4I28aVhwjL7L35XS1vy2AU7zc0UCGYxdLjw==" 362 | "resolved" "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.55.tgz" 363 | "version" "0.2.55" 364 | dependencies: 365 | "big-integer" "^1.6.48" 366 | "wasmbuilder" "^0.0.12" 367 | "wasmcurves" "0.1.0" 368 | "web-worker" "^1.2.0" 369 | 370 | "ffjavascript@^0.2.38", "ffjavascript@^0.2.48", "ffjavascript@0.2.55": 371 | "integrity" "sha512-8X0FCIPOWiK6DTWh3pnE3O6D6nIQsirStAXpWMzRDnoDX7SEnDX4I28aVhwjL7L35XS1vy2AU7zc0UCGYxdLjw==" 372 | "resolved" "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.55.tgz" 373 | "version" "0.2.55" 374 | dependencies: 375 | "big-integer" "^1.6.48" 376 | "wasmbuilder" "^0.0.12" 377 | "wasmcurves" "0.1.0" 378 | "web-worker" "^1.2.0" 379 | 380 | "ffjavascript@0.2.39": 381 | "integrity" "sha512-9ewb5keKHL1owKTxCK7sDuA34SPJxnznWqdJgwBW51moCvg+wf9L0W5mcxm8qMUxt2OE/KjBQUKmYLaKyNNrPw==" 382 | "resolved" "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.39.tgz" 383 | "version" "0.2.39" 384 | dependencies: 385 | "big-integer" "^1.6.48" 386 | "wasmcurves" "0.0.14" 387 | "web-worker" "^1.0.0" 388 | 389 | "ffjavascript@0.2.48": 390 | "integrity" "sha512-uNrWP+odLofNmmO+iCCPi/Xt/sJh1ku3pVKmKWVWCLFfdCP69hvRrogKUIGnsdiINcWn0lGxcEh5oEjStMFXQQ==" 391 | "resolved" "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.48.tgz" 392 | "version" "0.2.48" 393 | dependencies: 394 | "big-integer" "^1.6.48" 395 | "wasmbuilder" "^0.0.12" 396 | "wasmcurves" "0.1.0" 397 | "web-worker" "^1.2.0" 398 | 399 | "filelist@^1.0.1": 400 | "integrity" "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==" 401 | "resolved" "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" 402 | "version" "1.0.4" 403 | dependencies: 404 | "minimatch" "^5.0.1" 405 | 406 | "fill-range@^7.0.1": 407 | "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" 408 | "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 409 | "version" "7.0.1" 410 | dependencies: 411 | "to-regex-range" "^5.0.1" 412 | 413 | "find-up@5.0.0": 414 | "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" 415 | "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 416 | "version" "5.0.0" 417 | dependencies: 418 | "locate-path" "^6.0.0" 419 | "path-exists" "^4.0.0" 420 | 421 | "flat@^5.0.2": 422 | "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" 423 | "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" 424 | "version" "5.0.2" 425 | 426 | "fnv-plus@^1.3.1": 427 | "integrity" "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" 428 | "resolved" "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz" 429 | "version" "1.3.1" 430 | 431 | "for-each@^0.3.3": 432 | "integrity" "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==" 433 | "resolved" "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" 434 | "version" "0.3.3" 435 | dependencies: 436 | "is-callable" "^1.1.3" 437 | 438 | "fs.realpath@^1.0.0": 439 | "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 440 | "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 441 | "version" "1.0.0" 442 | 443 | "function-bind@^1.1.1": 444 | "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 445 | "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 446 | "version" "1.1.1" 447 | 448 | "function.prototype.name@^1.1.5": 449 | "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" 450 | "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" 451 | "version" "1.1.5" 452 | dependencies: 453 | "call-bind" "^1.0.2" 454 | "define-properties" "^1.1.3" 455 | "es-abstract" "^1.19.0" 456 | "functions-have-names" "^1.2.2" 457 | 458 | "functions-have-names@^1.2.2": 459 | "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" 460 | "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" 461 | "version" "1.2.3" 462 | 463 | "get-caller-file@^2.0.5": 464 | "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 465 | "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 466 | "version" "2.0.5" 467 | 468 | "get-func-name@^2.0.0": 469 | "integrity" "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" 470 | "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" 471 | "version" "2.0.0" 472 | 473 | "get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": 474 | "integrity" "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==" 475 | "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" 476 | "version" "1.1.2" 477 | dependencies: 478 | "function-bind" "^1.1.1" 479 | "has" "^1.0.3" 480 | "has-symbols" "^1.0.3" 481 | 482 | "get-symbol-description@^1.0.0": 483 | "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" 484 | "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 485 | "version" "1.0.0" 486 | dependencies: 487 | "call-bind" "^1.0.2" 488 | "get-intrinsic" "^1.1.1" 489 | 490 | "glob-parent@~5.1.2": 491 | "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" 492 | "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 493 | "version" "5.1.2" 494 | dependencies: 495 | "is-glob" "^4.0.1" 496 | 497 | "glob@^7.1.3": 498 | "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" 499 | "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 500 | "version" "7.2.3" 501 | dependencies: 502 | "fs.realpath" "^1.0.0" 503 | "inflight" "^1.0.4" 504 | "inherits" "2" 505 | "minimatch" "^3.1.1" 506 | "once" "^1.3.0" 507 | "path-is-absolute" "^1.0.0" 508 | 509 | "glob@7.2.0": 510 | "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" 511 | "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" 512 | "version" "7.2.0" 513 | dependencies: 514 | "fs.realpath" "^1.0.0" 515 | "inflight" "^1.0.4" 516 | "inherits" "2" 517 | "minimatch" "^3.0.4" 518 | "once" "^1.3.0" 519 | "path-is-absolute" "^1.0.0" 520 | 521 | "has-bigints@^1.0.1", "has-bigints@^1.0.2": 522 | "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" 523 | "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" 524 | "version" "1.0.2" 525 | 526 | "has-flag@^4.0.0": 527 | "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 528 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 529 | "version" "4.0.0" 530 | 531 | "has-property-descriptors@^1.0.0": 532 | "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" 533 | "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" 534 | "version" "1.0.0" 535 | dependencies: 536 | "get-intrinsic" "^1.1.1" 537 | 538 | "has-symbols@^1.0.1", "has-symbols@^1.0.2", "has-symbols@^1.0.3": 539 | "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 540 | "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 541 | "version" "1.0.3" 542 | 543 | "has-tostringtag@^1.0.0": 544 | "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" 545 | "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 546 | "version" "1.0.0" 547 | dependencies: 548 | "has-symbols" "^1.0.2" 549 | 550 | "has@^1.0.3": 551 | "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" 552 | "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 553 | "version" "1.0.3" 554 | dependencies: 555 | "function-bind" "^1.1.1" 556 | 557 | "he@1.2.0": 558 | "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 559 | "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" 560 | "version" "1.2.0" 561 | 562 | "inflight@^1.0.4": 563 | "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" 564 | "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 565 | "version" "1.0.6" 566 | dependencies: 567 | "once" "^1.3.0" 568 | "wrappy" "1" 569 | 570 | "inherits@^2.0.3", "inherits@2": 571 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 572 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 573 | "version" "2.0.4" 574 | 575 | "inherits@2.0.3": 576 | "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" 577 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" 578 | "version" "2.0.3" 579 | 580 | "internal-slot@^1.0.3": 581 | "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" 582 | "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" 583 | "version" "1.0.3" 584 | dependencies: 585 | "get-intrinsic" "^1.1.0" 586 | "has" "^1.0.3" 587 | "side-channel" "^1.0.4" 588 | 589 | "is-arguments@^1.0.4": 590 | "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" 591 | "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" 592 | "version" "1.1.1" 593 | dependencies: 594 | "call-bind" "^1.0.2" 595 | "has-tostringtag" "^1.0.0" 596 | 597 | "is-bigint@^1.0.1": 598 | "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" 599 | "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 600 | "version" "1.0.4" 601 | dependencies: 602 | "has-bigints" "^1.0.1" 603 | 604 | "is-binary-path@~2.1.0": 605 | "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" 606 | "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 607 | "version" "2.1.0" 608 | dependencies: 609 | "binary-extensions" "^2.0.0" 610 | 611 | "is-boolean-object@^1.1.0": 612 | "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" 613 | "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" 614 | "version" "1.1.2" 615 | dependencies: 616 | "call-bind" "^1.0.2" 617 | "has-tostringtag" "^1.0.0" 618 | 619 | "is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.4": 620 | "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" 621 | "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" 622 | "version" "1.2.4" 623 | 624 | "is-date-object@^1.0.1": 625 | "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" 626 | "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" 627 | "version" "1.0.5" 628 | dependencies: 629 | "has-tostringtag" "^1.0.0" 630 | 631 | "is-extglob@^2.1.1": 632 | "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 633 | "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 634 | "version" "2.1.1" 635 | 636 | "is-fullwidth-code-point@^3.0.0": 637 | "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 638 | "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 639 | "version" "3.0.0" 640 | 641 | "is-generator-function@^1.0.7": 642 | "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" 643 | "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" 644 | "version" "1.0.10" 645 | dependencies: 646 | "has-tostringtag" "^1.0.0" 647 | 648 | "is-glob@^4.0.1", "is-glob@~4.0.1": 649 | "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" 650 | "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 651 | "version" "4.0.3" 652 | dependencies: 653 | "is-extglob" "^2.1.1" 654 | 655 | "is-negative-zero@^2.0.2": 656 | "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" 657 | "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 658 | "version" "2.0.2" 659 | 660 | "is-number-object@^1.0.4": 661 | "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" 662 | "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" 663 | "version" "1.0.7" 664 | dependencies: 665 | "has-tostringtag" "^1.0.0" 666 | 667 | "is-number@^7.0.0": 668 | "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 669 | "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 670 | "version" "7.0.0" 671 | 672 | "is-plain-obj@^2.1.0": 673 | "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" 674 | "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" 675 | "version" "2.1.0" 676 | 677 | "is-regex@^1.1.4": 678 | "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" 679 | "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 680 | "version" "1.1.4" 681 | dependencies: 682 | "call-bind" "^1.0.2" 683 | "has-tostringtag" "^1.0.0" 684 | 685 | "is-shared-array-buffer@^1.0.2": 686 | "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" 687 | "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" 688 | "version" "1.0.2" 689 | dependencies: 690 | "call-bind" "^1.0.2" 691 | 692 | "is-string@^1.0.5", "is-string@^1.0.7": 693 | "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" 694 | "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 695 | "version" "1.0.7" 696 | dependencies: 697 | "has-tostringtag" "^1.0.0" 698 | 699 | "is-symbol@^1.0.2", "is-symbol@^1.0.3": 700 | "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" 701 | "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 702 | "version" "1.0.4" 703 | dependencies: 704 | "has-symbols" "^1.0.2" 705 | 706 | "is-typed-array@^1.1.3", "is-typed-array@^1.1.9": 707 | "integrity" "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==" 708 | "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" 709 | "version" "1.1.9" 710 | dependencies: 711 | "available-typed-arrays" "^1.0.5" 712 | "call-bind" "^1.0.2" 713 | "es-abstract" "^1.20.0" 714 | "for-each" "^0.3.3" 715 | "has-tostringtag" "^1.0.0" 716 | 717 | "is-unicode-supported@^0.1.0": 718 | "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" 719 | "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" 720 | "version" "0.1.0" 721 | 722 | "is-weakref@^1.0.2": 723 | "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" 724 | "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 725 | "version" "1.0.2" 726 | dependencies: 727 | "call-bind" "^1.0.2" 728 | 729 | "jake@^10.8.5": 730 | "integrity" "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==" 731 | "resolved" "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" 732 | "version" "10.8.5" 733 | dependencies: 734 | "async" "^3.2.3" 735 | "chalk" "^4.0.2" 736 | "filelist" "^1.0.1" 737 | "minimatch" "^3.0.4" 738 | 739 | "js-sha3@^0.8.0": 740 | "integrity" "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 741 | "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" 742 | "version" "0.8.0" 743 | 744 | "js-yaml@4.1.0": 745 | "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" 746 | "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 747 | "version" "4.1.0" 748 | dependencies: 749 | "argparse" "^2.0.1" 750 | 751 | "locate-path@^6.0.0": 752 | "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" 753 | "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 754 | "version" "6.0.0" 755 | dependencies: 756 | "p-locate" "^5.0.0" 757 | 758 | "log-symbols@4.1.0": 759 | "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" 760 | "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" 761 | "version" "4.1.0" 762 | dependencies: 763 | "chalk" "^4.1.0" 764 | "is-unicode-supported" "^0.1.0" 765 | 766 | "logplease@^1.2.15": 767 | "integrity" "sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA==" 768 | "resolved" "https://registry.npmjs.org/logplease/-/logplease-1.2.15.tgz" 769 | "version" "1.2.15" 770 | 771 | "loupe@^2.3.1": 772 | "integrity" "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==" 773 | "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" 774 | "version" "2.3.4" 775 | dependencies: 776 | "get-func-name" "^2.0.0" 777 | 778 | "minimatch@^3.0.4", "minimatch@^3.1.1": 779 | "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" 780 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 781 | "version" "3.1.2" 782 | dependencies: 783 | "brace-expansion" "^1.1.7" 784 | 785 | "minimatch@^5.0.1": 786 | "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" 787 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" 788 | "version" "5.1.0" 789 | dependencies: 790 | "brace-expansion" "^2.0.1" 791 | 792 | "minimatch@5.0.1": 793 | "integrity" "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==" 794 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" 795 | "version" "5.0.1" 796 | dependencies: 797 | "brace-expansion" "^2.0.1" 798 | 799 | "mocha@^10.0.0": 800 | "integrity" "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==" 801 | "resolved" "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" 802 | "version" "10.0.0" 803 | dependencies: 804 | "@ungap/promise-all-settled" "1.1.2" 805 | "ansi-colors" "4.1.1" 806 | "browser-stdout" "1.3.1" 807 | "chokidar" "3.5.3" 808 | "debug" "4.3.4" 809 | "diff" "5.0.0" 810 | "escape-string-regexp" "4.0.0" 811 | "find-up" "5.0.0" 812 | "glob" "7.2.0" 813 | "he" "1.2.0" 814 | "js-yaml" "4.1.0" 815 | "log-symbols" "4.1.0" 816 | "minimatch" "5.0.1" 817 | "ms" "2.1.3" 818 | "nanoid" "3.3.3" 819 | "serialize-javascript" "6.0.0" 820 | "strip-json-comments" "3.1.1" 821 | "supports-color" "8.1.1" 822 | "workerpool" "6.2.1" 823 | "yargs" "16.2.0" 824 | "yargs-parser" "20.2.4" 825 | "yargs-unparser" "2.0.0" 826 | 827 | "ms@2.1.2": 828 | "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 829 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 830 | "version" "2.1.2" 831 | 832 | "ms@2.1.3": 833 | "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 834 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 835 | "version" "2.1.3" 836 | 837 | "nanoassert@^2.0.0": 838 | "integrity" "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" 839 | "resolved" "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz" 840 | "version" "2.0.0" 841 | 842 | "nanoid@3.3.3": 843 | "integrity" "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" 844 | "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" 845 | "version" "3.3.3" 846 | 847 | "normalize-path@^3.0.0", "normalize-path@~3.0.0": 848 | "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 849 | "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 850 | "version" "3.0.0" 851 | 852 | "object-inspect@^1.12.0", "object-inspect@^1.9.0": 853 | "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 854 | "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" 855 | "version" "1.12.2" 856 | 857 | "object-keys@^1.1.1": 858 | "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 859 | "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 860 | "version" "1.1.1" 861 | 862 | "object.assign@^4.1.2": 863 | "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" 864 | "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" 865 | "version" "4.1.2" 866 | dependencies: 867 | "call-bind" "^1.0.0" 868 | "define-properties" "^1.1.3" 869 | "has-symbols" "^1.0.1" 870 | "object-keys" "^1.1.1" 871 | 872 | "once@^1.3.0": 873 | "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" 874 | "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 875 | "version" "1.4.0" 876 | dependencies: 877 | "wrappy" "1" 878 | 879 | "p-limit@^3.0.2": 880 | "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" 881 | "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 882 | "version" "3.1.0" 883 | dependencies: 884 | "yocto-queue" "^0.1.0" 885 | 886 | "p-locate@^5.0.0": 887 | "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" 888 | "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 889 | "version" "5.0.0" 890 | dependencies: 891 | "p-limit" "^3.0.2" 892 | 893 | "path-exists@^4.0.0": 894 | "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 895 | "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 896 | "version" "4.0.0" 897 | 898 | "path-is-absolute@^1.0.0": 899 | "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" 900 | "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 901 | "version" "1.0.1" 902 | 903 | "path@^0.12.7": 904 | "integrity" "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==" 905 | "resolved" "https://registry.npmjs.org/path/-/path-0.12.7.tgz" 906 | "version" "0.12.7" 907 | dependencies: 908 | "process" "^0.11.1" 909 | "util" "^0.10.3" 910 | 911 | "pathval@^1.1.1": 912 | "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" 913 | "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" 914 | "version" "1.1.1" 915 | 916 | "picomatch@^2.0.4", "picomatch@^2.2.1": 917 | "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 918 | "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 919 | "version" "2.3.1" 920 | 921 | "process@^0.11.1": 922 | "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" 923 | "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" 924 | "version" "0.11.10" 925 | 926 | "r1csfile@0.0.33": 927 | "integrity" "sha512-aSZa/Vy6avJ146MOewUNRYdDLJCDINZ7aqSt0Zhw4uVrd4TijOz6gBfmckr7tPILaT3RNp7THVpUzeW0++OlJw==" 928 | "resolved" "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.33.tgz" 929 | "version" "0.0.33" 930 | dependencies: 931 | "@iden3/bigarray" "0.0.2" 932 | "@iden3/binfileutils" "0.0.8" 933 | "fastfile" "0.0.19" 934 | "ffjavascript" "0.2.39" 935 | 936 | "r1csfile@0.0.35": 937 | "integrity" "sha512-n6RTn7KxtfHxw5gjljYBaEuhVkXEQ2sZW1XVan7fwdwvQt9Kd65/A0cy+nNHL4GRGAHEaBMdYj0JOl/3kXln4Q==" 938 | "resolved" "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.35.tgz" 939 | "version" "0.0.35" 940 | dependencies: 941 | "@iden3/bigarray" "0.0.2" 942 | "@iden3/binfileutils" "0.0.10" 943 | "fastfile" "0.0.19" 944 | "ffjavascript" "0.2.48" 945 | 946 | "r1csfile@0.0.37": 947 | "integrity" "sha512-6Yb2SqWU59t7wWUX0/4BvVtWAN7RwkIobFJ90+RD3MB2Y5gb5aBGkFWJxDLqqWQbmQnv3y0ekpfDxbtNNAgrGw==" 948 | "resolved" "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.37.tgz" 949 | "version" "0.0.37" 950 | dependencies: 951 | "@iden3/bigarray" "0.0.2" 952 | "@iden3/binfileutils" "0.0.11" 953 | "fastfile" "0.0.20" 954 | "ffjavascript" "0.2.55" 955 | 956 | "randombytes@^2.1.0": 957 | "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" 958 | "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" 959 | "version" "2.1.0" 960 | dependencies: 961 | "safe-buffer" "^5.1.0" 962 | 963 | "readdirp@~3.6.0": 964 | "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" 965 | "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 966 | "version" "3.6.0" 967 | dependencies: 968 | "picomatch" "^2.2.1" 969 | 970 | "readline@^1.3.0": 971 | "integrity" "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" 972 | "resolved" "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz" 973 | "version" "1.3.0" 974 | 975 | "regexp.prototype.flags@^1.4.3": 976 | "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" 977 | "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" 978 | "version" "1.4.3" 979 | dependencies: 980 | "call-bind" "^1.0.2" 981 | "define-properties" "^1.1.3" 982 | "functions-have-names" "^1.2.2" 983 | 984 | "require-directory@^2.1.1": 985 | "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 986 | "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 987 | "version" "2.1.1" 988 | 989 | "rimraf@^3.0.0": 990 | "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" 991 | "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 992 | "version" "3.0.2" 993 | dependencies: 994 | "glob" "^7.1.3" 995 | 996 | "safe-buffer@^5.1.0", "safe-buffer@^5.1.2": 997 | "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 998 | "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 999 | "version" "5.2.1" 1000 | 1001 | "serialize-javascript@6.0.0": 1002 | "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" 1003 | "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" 1004 | "version" "6.0.0" 1005 | dependencies: 1006 | "randombytes" "^2.1.0" 1007 | 1008 | "side-channel@^1.0.4": 1009 | "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" 1010 | "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1011 | "version" "1.0.4" 1012 | dependencies: 1013 | "call-bind" "^1.0.0" 1014 | "get-intrinsic" "^1.0.2" 1015 | "object-inspect" "^1.9.0" 1016 | 1017 | "snarkjs@0.4.10": 1018 | "integrity" "sha512-YWgxso7CGcSfkyDGraVjPuBJtq6GEsZ16YBJj2eD0TFum2D5BxnawvyTo4p/7UpctAT0r05DoHo80zgaWnbIKA==" 1019 | "resolved" "https://registry.npmjs.org/snarkjs/-/snarkjs-0.4.10.tgz" 1020 | "version" "0.4.10" 1021 | dependencies: 1022 | "@iden3/binfileutils" "0.0.8" 1023 | "blake2b-wasm" "^2.3.0" 1024 | "circom_runtime" "0.1.14" 1025 | "ejs" "^3.1.6" 1026 | "fastfile" "0.0.19" 1027 | "ffjavascript" "0.2.39" 1028 | "js-sha3" "^0.8.0" 1029 | "logplease" "^1.2.15" 1030 | "r1csfile" "0.0.33" 1031 | "readline" "^1.3.0" 1032 | 1033 | "snarkjs@git+https://github.com/vb7401/snarkjs.git#24981febe8826b6ab76ae4d76cf7f9142919d2b8": 1034 | "integrity" "sha512-ZZ0SZ4GROJbEj08UN9uLmMHKiqtsmY5y8VoAGUPrvUDjonEzDocgdB7mfeuCizio9iiFApSVTJeJKpd1T73Xaw==" 1035 | "resolved" "git+ssh://git@github.com/vb7401/snarkjs.git#24981febe8826b6ab76ae4d76cf7f9142919d2b8" 1036 | "version" "0.4.12" 1037 | dependencies: 1038 | "@iden3/binfileutils" "0.0.10" 1039 | "blake2b-wasm" "^2.4.0" 1040 | "circom_runtime" "0.1.17" 1041 | "ejs" "^3.1.6" 1042 | "fastfile" "^0.0.19" 1043 | "ffjavascript" "0.2.48" 1044 | "js-sha3" "^0.8.0" 1045 | "logplease" "^1.2.15" 1046 | "r1csfile" "0.0.35" 1047 | "readline" "^1.3.0" 1048 | 1049 | "string-width@^4.1.0", "string-width@^4.2.0": 1050 | "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" 1051 | "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1052 | "version" "4.2.3" 1053 | dependencies: 1054 | "emoji-regex" "^8.0.0" 1055 | "is-fullwidth-code-point" "^3.0.0" 1056 | "strip-ansi" "^6.0.1" 1057 | 1058 | "string.prototype.trimend@^1.0.5": 1059 | "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" 1060 | "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" 1061 | "version" "1.0.5" 1062 | dependencies: 1063 | "call-bind" "^1.0.2" 1064 | "define-properties" "^1.1.4" 1065 | "es-abstract" "^1.19.5" 1066 | 1067 | "string.prototype.trimstart@^1.0.5": 1068 | "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" 1069 | "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" 1070 | "version" "1.0.5" 1071 | dependencies: 1072 | "call-bind" "^1.0.2" 1073 | "define-properties" "^1.1.4" 1074 | "es-abstract" "^1.19.5" 1075 | 1076 | "strip-ansi@^6.0.0", "strip-ansi@^6.0.1": 1077 | "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" 1078 | "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1079 | "version" "6.0.1" 1080 | dependencies: 1081 | "ansi-regex" "^5.0.1" 1082 | 1083 | "strip-json-comments@3.1.1": 1084 | "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 1085 | "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1086 | "version" "3.1.1" 1087 | 1088 | "supports-color@^7.1.0": 1089 | "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" 1090 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1091 | "version" "7.2.0" 1092 | dependencies: 1093 | "has-flag" "^4.0.0" 1094 | 1095 | "supports-color@8.1.1": 1096 | "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" 1097 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" 1098 | "version" "8.1.1" 1099 | dependencies: 1100 | "has-flag" "^4.0.0" 1101 | 1102 | "tmp-promise@^3.0.2": 1103 | "integrity" "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==" 1104 | "resolved" "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" 1105 | "version" "3.0.3" 1106 | dependencies: 1107 | "tmp" "^0.2.0" 1108 | 1109 | "tmp@^0.2.0": 1110 | "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" 1111 | "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" 1112 | "version" "0.2.1" 1113 | dependencies: 1114 | "rimraf" "^3.0.0" 1115 | 1116 | "to-regex-range@^5.0.1": 1117 | "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" 1118 | "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1119 | "version" "5.0.1" 1120 | dependencies: 1121 | "is-number" "^7.0.0" 1122 | 1123 | "type-detect@^4.0.0", "type-detect@^4.0.5": 1124 | "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" 1125 | "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" 1126 | "version" "4.0.8" 1127 | 1128 | "unbox-primitive@^1.0.2": 1129 | "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" 1130 | "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" 1131 | "version" "1.0.2" 1132 | dependencies: 1133 | "call-bind" "^1.0.2" 1134 | "has-bigints" "^1.0.2" 1135 | "has-symbols" "^1.0.3" 1136 | "which-boxed-primitive" "^1.0.2" 1137 | 1138 | "util@^0.10.3": 1139 | "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" 1140 | "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" 1141 | "version" "0.10.4" 1142 | dependencies: 1143 | "inherits" "2.0.3" 1144 | 1145 | "util@^0.12.4": 1146 | "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" 1147 | "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" 1148 | "version" "0.12.4" 1149 | dependencies: 1150 | "inherits" "^2.0.3" 1151 | "is-arguments" "^1.0.4" 1152 | "is-generator-function" "^1.0.7" 1153 | "is-typed-array" "^1.1.3" 1154 | "safe-buffer" "^5.1.2" 1155 | "which-typed-array" "^1.1.2" 1156 | 1157 | "wasmbuilder@^0.0.12": 1158 | "integrity" "sha512-dTMpBgrnLOXrN58i2zakn2ScynsBhq9LfyQIsPz4CyxRF9k1GAORniuqn3xmE9NnI1l7g3iiVCkoB2Cl0/oG8w==" 1159 | "resolved" "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.12.tgz" 1160 | "version" "0.0.12" 1161 | dependencies: 1162 | "big-integer" "^1.6.48" 1163 | 1164 | "wasmcurves@0.0.14": 1165 | "integrity" "sha512-G1iMkxlRaQSdqQ1JrwHcU+awLmwyH6kFKfT8g9obd8MWe+u5oSdFXrODB0zmSI5aGGvJPG+4cAmqCGYv9R+7qg==" 1166 | "resolved" "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.14.tgz" 1167 | "version" "0.0.14" 1168 | dependencies: 1169 | "big-integer" "^1.6.42" 1170 | "blakejs" "^1.1.0" 1171 | 1172 | "wasmcurves@0.1.0": 1173 | "integrity" "sha512-kIlcgbVUAv2uQ6lGsepGz/m5V40+Z6rvTBkqCYn3Y2+OcXst+UaP4filJYLh/xDxjJl62FFjZZeAnpeli1Y5/Q==" 1174 | "resolved" "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.1.0.tgz" 1175 | "version" "0.1.0" 1176 | dependencies: 1177 | "big-integer" "^1.6.42" 1178 | "blakejs" "^1.1.0" 1179 | 1180 | "web-worker@^1.0.0", "web-worker@^1.2.0": 1181 | "integrity" "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" 1182 | "resolved" "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz" 1183 | "version" "1.2.0" 1184 | 1185 | "which-boxed-primitive@^1.0.2": 1186 | "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" 1187 | "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 1188 | "version" "1.0.2" 1189 | dependencies: 1190 | "is-bigint" "^1.0.1" 1191 | "is-boolean-object" "^1.1.0" 1192 | "is-number-object" "^1.0.4" 1193 | "is-string" "^1.0.5" 1194 | "is-symbol" "^1.0.3" 1195 | 1196 | "which-typed-array@^1.1.2": 1197 | "integrity" "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==" 1198 | "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" 1199 | "version" "1.1.8" 1200 | dependencies: 1201 | "available-typed-arrays" "^1.0.5" 1202 | "call-bind" "^1.0.2" 1203 | "es-abstract" "^1.20.0" 1204 | "for-each" "^0.3.3" 1205 | "has-tostringtag" "^1.0.0" 1206 | "is-typed-array" "^1.1.9" 1207 | 1208 | "workerpool@6.2.1": 1209 | "integrity" "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" 1210 | "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" 1211 | "version" "6.2.1" 1212 | 1213 | "wrap-ansi@^7.0.0": 1214 | "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" 1215 | "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1216 | "version" "7.0.0" 1217 | dependencies: 1218 | "ansi-styles" "^4.0.0" 1219 | "string-width" "^4.1.0" 1220 | "strip-ansi" "^6.0.0" 1221 | 1222 | "wrappy@1": 1223 | "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1224 | "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1225 | "version" "1.0.2" 1226 | 1227 | "y18n@^5.0.5": 1228 | "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 1229 | "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1230 | "version" "5.0.8" 1231 | 1232 | "yargs-parser@^20.2.2": 1233 | "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 1234 | "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" 1235 | "version" "20.2.9" 1236 | 1237 | "yargs-parser@20.2.4": 1238 | "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" 1239 | "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" 1240 | "version" "20.2.4" 1241 | 1242 | "yargs-unparser@2.0.0": 1243 | "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" 1244 | "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" 1245 | "version" "2.0.0" 1246 | dependencies: 1247 | "camelcase" "^6.0.0" 1248 | "decamelize" "^4.0.0" 1249 | "flat" "^5.0.2" 1250 | "is-plain-obj" "^2.1.0" 1251 | 1252 | "yargs@16.2.0": 1253 | "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" 1254 | "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" 1255 | "version" "16.2.0" 1256 | dependencies: 1257 | "cliui" "^7.0.2" 1258 | "escalade" "^3.1.1" 1259 | "get-caller-file" "^2.0.5" 1260 | "require-directory" "^2.1.1" 1261 | "string-width" "^4.2.0" 1262 | "y18n" "^5.0.5" 1263 | "yargs-parser" "^20.2.2" 1264 | 1265 | "yocto-queue@^0.1.0": 1266 | "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" 1267 | "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1268 | "version" "0.1.0" 1269 | --------------------------------------------------------------------------------