diff --git a/rustdoc/latest/.lock b/rustdoc/latest/.lock
new file mode 100755
index 00000000..e69de29b
diff --git a/rustdoc/latest/COPYRIGHT.txt b/rustdoc/latest/COPYRIGHT.txt
new file mode 100644
index 00000000..c2629a83
--- /dev/null
+++ b/rustdoc/latest/COPYRIGHT.txt
@@ -0,0 +1,50 @@
+These documentation pages include resources by third parties. This copyright
+file applies only to those resources. The following third party resources are
+included, and carry their own copyright notices and license terms:
+
+* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2,
+ FiraSans-Regular.woff, FiraSans-Medium.woff):
+
+ Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
+ with Reserved Font Name Fira Sans.
+
+ Copyright (c) 2014, Telefonica S.A.
+
+ Licensed under the SIL Open Font License, Version 1.1.
+ See FiraSans-LICENSE.txt.
+
+* rustdoc.css, main.js, and playpen.js:
+
+ Copyright 2015 The Rust Developers.
+ Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or
+ the MIT license (LICENSE-MIT.txt) at your option.
+
+* normalize.css:
+
+ Copyright (c) Nicolas Gallagher and Jonathan Neal.
+ Licensed under the MIT license (see LICENSE-MIT.txt).
+
+* Source Code Pro (SourceCodePro-Regular.ttf.woff2,
+ SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2,
+ SourceCodePro-Regular.ttf.woff, SourceCodePro-Semibold.ttf.woff,
+ SourceCodePro-It.ttf.woff):
+
+ Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/),
+ with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark
+ of Adobe Systems Incorporated in the United States and/or other countries.
+
+ Licensed under the SIL Open Font License, Version 1.1.
+ See SourceCodePro-LICENSE.txt.
+
+* Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2,
+ SourceSerif4-It.ttf.woff2, SourceSerif4-Regular.ttf.woff,
+ SourceSerif4-Bold.ttf.woff, SourceSerif4-It.ttf.woff):
+
+ Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name
+ 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United
+ States and/or other countries.
+
+ Licensed under the SIL Open Font License, Version 1.1.
+ See SourceSerif4-LICENSE.md.
+
+This copyright file is intended to be distributed with rustdoc output.
diff --git a/rustdoc/latest/FiraSans-LICENSE.txt b/rustdoc/latest/FiraSans-LICENSE.txt
new file mode 100644
index 00000000..ff9afab0
--- /dev/null
+++ b/rustdoc/latest/FiraSans-LICENSE.txt
@@ -0,0 +1,94 @@
+Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.
+with Reserved Font Name < Fira >,
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/rustdoc/latest/FiraSans-Medium.woff b/rustdoc/latest/FiraSans-Medium.woff
new file mode 100644
index 00000000..7d742c5f
Binary files /dev/null and b/rustdoc/latest/FiraSans-Medium.woff differ
diff --git a/rustdoc/latest/FiraSans-Medium.woff2 b/rustdoc/latest/FiraSans-Medium.woff2
new file mode 100644
index 00000000..7a1e5fc5
Binary files /dev/null and b/rustdoc/latest/FiraSans-Medium.woff2 differ
diff --git a/rustdoc/latest/FiraSans-Regular.woff b/rustdoc/latest/FiraSans-Regular.woff
new file mode 100644
index 00000000..d8e0363f
Binary files /dev/null and b/rustdoc/latest/FiraSans-Regular.woff differ
diff --git a/rustdoc/latest/FiraSans-Regular.woff2 b/rustdoc/latest/FiraSans-Regular.woff2
new file mode 100644
index 00000000..e766e06c
Binary files /dev/null and b/rustdoc/latest/FiraSans-Regular.woff2 differ
diff --git a/rustdoc/latest/LICENSE-APACHE.txt b/rustdoc/latest/LICENSE-APACHE.txt
new file mode 100644
index 00000000..16fe87b0
--- /dev/null
+++ b/rustdoc/latest/LICENSE-APACHE.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/rustdoc/latest/LICENSE-MIT.txt b/rustdoc/latest/LICENSE-MIT.txt
new file mode 100644
index 00000000..31aa7938
--- /dev/null
+++ b/rustdoc/latest/LICENSE-MIT.txt
@@ -0,0 +1,23 @@
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/rustdoc/latest/SourceCodePro-It.ttf.woff b/rustdoc/latest/SourceCodePro-It.ttf.woff
new file mode 100644
index 00000000..8d68f2fe
Binary files /dev/null and b/rustdoc/latest/SourceCodePro-It.ttf.woff differ
diff --git a/rustdoc/latest/SourceCodePro-It.ttf.woff2 b/rustdoc/latest/SourceCodePro-It.ttf.woff2
new file mode 100644
index 00000000..462c34ef
Binary files /dev/null and b/rustdoc/latest/SourceCodePro-It.ttf.woff2 differ
diff --git a/rustdoc/latest/SourceCodePro-LICENSE.txt b/rustdoc/latest/SourceCodePro-LICENSE.txt
new file mode 100644
index 00000000..07542572
--- /dev/null
+++ b/rustdoc/latest/SourceCodePro-LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/rustdoc/latest/SourceCodePro-Regular.ttf.woff b/rustdoc/latest/SourceCodePro-Regular.ttf.woff
new file mode 100644
index 00000000..7be076e1
Binary files /dev/null and b/rustdoc/latest/SourceCodePro-Regular.ttf.woff differ
diff --git a/rustdoc/latest/SourceCodePro-Regular.ttf.woff2 b/rustdoc/latest/SourceCodePro-Regular.ttf.woff2
new file mode 100644
index 00000000..10b558e0
Binary files /dev/null and b/rustdoc/latest/SourceCodePro-Regular.ttf.woff2 differ
diff --git a/rustdoc/latest/SourceCodePro-Semibold.ttf.woff b/rustdoc/latest/SourceCodePro-Semibold.ttf.woff
new file mode 100644
index 00000000..61bc67b8
Binary files /dev/null and b/rustdoc/latest/SourceCodePro-Semibold.ttf.woff differ
diff --git a/rustdoc/latest/SourceCodePro-Semibold.ttf.woff2 b/rustdoc/latest/SourceCodePro-Semibold.ttf.woff2
new file mode 100644
index 00000000..5ec64eef
Binary files /dev/null and b/rustdoc/latest/SourceCodePro-Semibold.ttf.woff2 differ
diff --git a/rustdoc/latest/SourceSerif4-Bold.ttf.woff b/rustdoc/latest/SourceSerif4-Bold.ttf.woff
new file mode 100644
index 00000000..8ad41888
Binary files /dev/null and b/rustdoc/latest/SourceSerif4-Bold.ttf.woff differ
diff --git a/rustdoc/latest/SourceSerif4-Bold.ttf.woff2 b/rustdoc/latest/SourceSerif4-Bold.ttf.woff2
new file mode 100644
index 00000000..db57d214
Binary files /dev/null and b/rustdoc/latest/SourceSerif4-Bold.ttf.woff2 differ
diff --git a/rustdoc/latest/SourceSerif4-It.ttf.woff b/rustdoc/latest/SourceSerif4-It.ttf.woff
new file mode 100644
index 00000000..2a34b5c4
Binary files /dev/null and b/rustdoc/latest/SourceSerif4-It.ttf.woff differ
diff --git a/rustdoc/latest/SourceSerif4-It.ttf.woff2 b/rustdoc/latest/SourceSerif4-It.ttf.woff2
new file mode 100644
index 00000000..1cbc021a
Binary files /dev/null and b/rustdoc/latest/SourceSerif4-It.ttf.woff2 differ
diff --git a/rustdoc/latest/SourceSerif4-LICENSE.md b/rustdoc/latest/SourceSerif4-LICENSE.md
new file mode 100644
index 00000000..68ea1892
--- /dev/null
+++ b/rustdoc/latest/SourceSerif4-LICENSE.md
@@ -0,0 +1,93 @@
+Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/rustdoc/latest/SourceSerif4-Regular.ttf.woff b/rustdoc/latest/SourceSerif4-Regular.ttf.woff
new file mode 100644
index 00000000..45a5521a
Binary files /dev/null and b/rustdoc/latest/SourceSerif4-Regular.ttf.woff differ
diff --git a/rustdoc/latest/SourceSerif4-Regular.ttf.woff2 b/rustdoc/latest/SourceSerif4-Regular.ttf.woff2
new file mode 100644
index 00000000..2db73fe2
Binary files /dev/null and b/rustdoc/latest/SourceSerif4-Regular.ttf.woff2 differ
diff --git a/rustdoc/latest/ayu.css b/rustdoc/latest/ayu.css
new file mode 100644
index 00000000..25ae9525
--- /dev/null
+++ b/rustdoc/latest/ayu.css
@@ -0,0 +1 @@
+ body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}code{color:#ffb454;}h3>code,h4>code,h5>code{color:#e6e1cf;}pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar{background-color:#14191f;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 transparent;}.sidebar{scrollbar-color:#5c6773 transparent;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#0f1419;}.sidebar .location{border-color:#000;background-color:#0f1419;color:#fff;}.sidebar-elems .location{color:#ff7733;}.sidebar-elems .location a{color:#fff;}.sidebar .version{border-bottom-color:#424c57;}.sidebar-title{border-top-color:#5c6773;border-bottom-color:#5c6773;}.block a:hover{background:transparent;color:#ffb44c;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#5c6773;}.docblock table,.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a span.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ef57ff;}.content span.union,.content a.union{color:#98a01c;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#6380a0;}.content span.primitive,.content a.primitive{color:#32889b;}.content span.traitalias,.content a.traitalias{color:#57d399;}.content span.keyword,.content a.keyword{color:#de5249;}.content span.externcrate,.content span.mod,.content a.mod{color:#acccf9;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#99e0c9;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#cfbcf5;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav:not(.sidebar){border-bottom-color:#424c57;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#c5c5c5;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.item-info a,#help a{color:#39AFD7;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search{color:#c5c5c5;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;border-color:#424c57;}.search-input{color:#ffffff;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;transition:box-shadow 150ms ease-in-out;}#crate-search+.search-input:focus{box-shadow:0 0 0 1px #148099,0 0 0 2px transparent;}.search-input:disabled{background-color:#3e3e3e;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help>div>span{border-bottom-color:#5c6773;}.since{color:grey;}tr.result span.primitive::after,tr.result span.keyword::after{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target,:target*{background:rgba(255,236,164,0.06);}:target{border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.type,.content a.type,.block a.current.type{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}#all-types{background-color:#14191f;}#all-types:hover{background-color:rgba(70,70,70,0.33);}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;}
\ No newline at end of file
diff --git a/rustdoc/latest/brush.svg b/rustdoc/latest/brush.svg
new file mode 100644
index 00000000..ea266e85
--- /dev/null
+++ b/rustdoc/latest/brush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/rustdoc/latest/clipboard.svg b/rustdoc/latest/clipboard.svg
new file mode 100644
index 00000000..8adbd996
--- /dev/null
+++ b/rustdoc/latest/clipboard.svg
@@ -0,0 +1 @@
+
diff --git a/rustdoc/latest/crates.js b/rustdoc/latest/crates.js
new file mode 100644
index 00000000..98e653eb
--- /dev/null
+++ b/rustdoc/latest/crates.js
@@ -0,0 +1 @@
+window.ALL_CRATES = ["halo2"];
\ No newline at end of file
diff --git a/rustdoc/latest/dark.css b/rustdoc/latest/dark.css
new file mode 100644
index 00000000..474fd9c6
--- /dev/null
+++ b/rustdoc/latest/dark.css
@@ -0,0 +1 @@
+body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) transparent;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table,.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-mod:focus{background-color:#803a1b;}a.result-externcrate:focus{background-color:#396bac;}a.result-enum:focus{background-color:#5b4e68;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#38902c;}a.result-foreigntype:focus{background-color:#b200d6;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#0063cc;}a.result-primitive:focus{background-color:#00708a;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b397da;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav:not(.sidebar){border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#ddd;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.item-info a,#help a{color:#D2991D;}a.test-arrow{color:#dedede;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}.search-input:disabled{background-color:#c5c4c4;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help>div>span{border-bottom-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.since{color:grey;}tr.result span.primitive::after,tr.result span.keyword::after{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target*{background-color:#494a3d;}:target{border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;}
\ No newline at end of file
diff --git a/rustdoc/latest/down-arrow.svg b/rustdoc/latest/down-arrow.svg
new file mode 100644
index 00000000..35437e77
--- /dev/null
+++ b/rustdoc/latest/down-arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/rustdoc/latest/favicon-16x16.png b/rustdoc/latest/favicon-16x16.png
new file mode 100644
index 00000000..7cfe6c13
Binary files /dev/null and b/rustdoc/latest/favicon-16x16.png differ
diff --git a/rustdoc/latest/favicon-32x32.png b/rustdoc/latest/favicon-32x32.png
new file mode 100644
index 00000000..5109c1de
Binary files /dev/null and b/rustdoc/latest/favicon-32x32.png differ
diff --git a/rustdoc/latest/favicon.svg b/rustdoc/latest/favicon.svg
new file mode 100644
index 00000000..8b34b511
--- /dev/null
+++ b/rustdoc/latest/favicon.svg
@@ -0,0 +1,24 @@
+
diff --git a/rustdoc/latest/halo2/all.html b/rustdoc/latest/halo2/all.html
new file mode 100644
index 00000000..53825dc3
--- /dev/null
+++ b/rustdoc/latest/halo2/all.html
@@ -0,0 +1,20 @@
+
Performs a radix-$2$ Fast-Fourier Transformation (FFT) on a vector of size
+$n = 2^k$, when provided log_n = $k$ and an element of multiplicative
+order $n$ called omega ($\omega$). The result is that the vector a, when
+interpreted as the coefficients of a polynomial of degree $n - 1$, is
+transformed into the evaluations of this polynomial at each of the $n$
+distinct powers of $\omega$. This transformation is invertible by providing
+$\omega^{-1}$ in place of $\omega$ and dividing each resulting field element
+by $n$.
+
This will use multithreading if beneficial.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/arithmetic/fn.best_multiexp.html b/rustdoc/latest/halo2/arithmetic/fn.best_multiexp.html
new file mode 100644
index 00000000..9df10682
--- /dev/null
+++ b/rustdoc/latest/halo2/arithmetic/fn.best_multiexp.html
@@ -0,0 +1,21 @@
+best_multiexp in halo2::arithmetic - Rust
+
+
+
+
Returns coefficients of an n - 1 degree polynomial given a set of n points
+and their evaluations. This function will panic if two values in points
+are the same.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/arithmetic/fn.parallelize.html b/rustdoc/latest/halo2/arithmetic/fn.parallelize.html
new file mode 100644
index 00000000..0e6ef4fd
--- /dev/null
+++ b/rustdoc/latest/halo2/arithmetic/fn.parallelize.html
@@ -0,0 +1,20 @@
+parallelize in halo2::arithmetic - Rust
+
+
+
+
This trait is a common interface for dealing with elements of an elliptic
+curve group in a “projective” form, where that arithmetic is usually more
+efficient.
This represents an element of a group with basic operations that can be
+performed. This allows an FFT implementation (for example) to operate
+generically over either a field or elliptic curve group.
Performs a radix-$2$ Fast-Fourier Transformation (FFT) on a vector of size
+$n = 2^k$, when provided log_n = $k$ and an element of multiplicative
+order $n$ called omega ($\omega$). The result is that the vector a, when
+interpreted as the coefficients of a polynomial of degree $n - 1$, is
+transformed into the evaluations of this polynomial at each of the $n$
+distinct powers of $\omega$. This transformation is invertible by providing
+$\omega^{-1}$ in place of $\omega$ and dividing each resulting field element
+by $n$.
Returns coefficients of an n - 1 degree polynomial given a set of n points
+and their evaluations. This function will panic if two values in points
+are the same.
Performs a small multi-exponentiation operation.
+Uses the double-and-add algorithm with doublings shared across points.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/arithmetic/sidebar-items.js b/rustdoc/latest/halo2/arithmetic/sidebar-items.js
new file mode 100644
index 00000000..229fbe92
--- /dev/null
+++ b/rustdoc/latest/halo2/arithmetic/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["best_fft","Performs a radix-$2$ Fast-Fourier Transformation (FFT) on a vector of size $n = 2^k$, when provided `log_n` = $k$ and an element of multiplicative order $n$ called `omega` ($\\omega$). The result is that the vector `a`, when interpreted as the coefficients of a polynomial of degree $n - 1$, is transformed into the evaluations of this polynomial at each of the $n$ distinct powers of $\\omega$. This transformation is invertible by providing $\\omega^{-1}$ in place of $\\omega$ and dividing each resulting field element by $n$."],["best_multiexp","Performs a multi-exponentiation operation."],["compute_inner_product","This computes the inner product of two vectors `a` and `b`."],["eval_polynomial","This evaluates a provided polynomial (in coefficient form) at `point`."],["kate_division","Divides polynomial `a` in `X` by `X - b` with no remainder."],["lagrange_interpolate","Returns coefficients of an n - 1 degree polynomial given a set of n points and their evaluations. This function will panic if two values in `points` are the same."],["parallelize","This simple utility function will parallelize an operation that is to be performed over a mutable slice."],["small_multiexp","Performs a small multi-exponentiation operation. Uses the double-and-add algorithm with doublings shared across points."]],"struct":[["Coordinates","The affine coordinates of a point on an elliptic curve."],["SqrtTables","Tables used for square root computation."]],"trait":[["BatchInvert","Extension trait for iterators over mutable field elements which allows those field elements to be inverted in a batch."],["CurveAffine","This trait is the affine counterpart to `Curve` and is used for serialization, storage in memory, and inspection of $x$ and $y$ coordinates."],["CurveExt","This trait is a common interface for dealing with elements of an elliptic curve group in a “projective” form, where that arithmetic is usually more efficient."],["Field","This trait represents an element of a field."],["Field","This trait represents an element of a field."],["FieldExt","This trait is a common interface for dealing with elements of a finite field."],["Group","This represents an element of a group with basic operations that can be performed. This allows an FFT implementation (for example) to operate generically over either a field or elliptic curve group."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/arithmetic/struct.Coordinates.html b/rustdoc/latest/halo2/arithmetic/struct.Coordinates.html
new file mode 100644
index 00000000..1d897cc6
--- /dev/null
+++ b/rustdoc/latest/halo2/arithmetic/struct.Coordinates.html
@@ -0,0 +1,105 @@
+Coordinates in halo2::arithmetic - Rust
+
+
+
+
Consume this iterator and invert each field element (when nonzero),
+returning the inverse of all nonzero field elements. Zero elements
+are left as zero.
This trait is a common interface for dealing with elements of an elliptic
+curve group in a “projective” form, where that arithmetic is usually more
+efficient.
This represents an element of a group with basic operations that can be
+performed. This allows an FFT implementation (for example) to operate
+generically over either a field or elliptic curve group.
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/circuit/floor_planner/sidebar-items.js b/rustdoc/latest/halo2/circuit/floor_planner/sidebar-items.js
new file mode 100644
index 00000000..9dccb789
--- /dev/null
+++ b/rustdoc/latest/halo2/circuit/floor_planner/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"struct":[["V1","The version 1 [`FloorPlanner`] provided by `halo2`."],["V1Pass","A single pass of the [`V1`] layouter."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/circuit/floor_planner/single_pass/struct.SimpleFloorPlanner.html b/rustdoc/latest/halo2/circuit/floor_planner/single_pass/struct.SimpleFloorPlanner.html
new file mode 100644
index 00000000..1be0dd17
--- /dev/null
+++ b/rustdoc/latest/halo2/circuit/floor_planner/single_pass/struct.SimpleFloorPlanner.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Redirection
+
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/circuit/layouter/sidebar-items.js b/rustdoc/latest/halo2/circuit/layouter/sidebar-items.js
new file mode 100644
index 00000000..ce30755b
--- /dev/null
+++ b/rustdoc/latest/halo2/circuit/layouter/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"struct":[["RegionShape","The shape of a region. For a region at a certain index, we track the set of columns it uses as well as the number of rows it uses."]],"trait":[["RegionLayouter","Helper trait for implementing a custom `Layouter`."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/circuit/layouter/struct.RegionShape.html b/rustdoc/latest/halo2/circuit/layouter/struct.RegionShape.html
new file mode 100644
index 00000000..267c5cbe
--- /dev/null
+++ b/rustdoc/latest/halo2/circuit/layouter/struct.RegionShape.html
@@ -0,0 +1,101 @@
+RegionShape in halo2::circuit::layouter - Rust
+
+
+
+
TODO: It would be great if we could constrain the columns in these types to be
+“logical” columns that are guaranteed to correspond to the chip (and have come from
+Chip::Config).
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/circuit/sidebar-items.js b/rustdoc/latest/halo2/circuit/sidebar-items.js
new file mode 100644
index 00000000..25600aaa
--- /dev/null
+++ b/rustdoc/latest/halo2/circuit/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"mod":[["floor_planner","Implementations of common circuit floor planners."],["layouter","Implementations of common circuit layouters."]],"struct":[["Cell","A pointer to a cell within a circuit."],["NamespacedLayouter","This is a “namespaced” layouter which borrows a `Layouter` (pushing a namespace context) and, when dropped, pops out of the namespace context."],["Region","A region of the circuit in which a [`Chip`] can assign cells."],["RegionIndex","Index of a region in a layouter"],["RegionStart","Starting row of a region in a layouter"],["SimpleFloorPlanner","A simple [`FloorPlanner`] that performs minimal optimizations."]],"trait":[["Chip","A chip implements a set of instructions that can be used by gadgets."],["Layouter","A layout strategy within a circuit. The layouter is chip-agnostic and applies its strategy to the context and config it is given."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/circuit/struct.Cell.html b/rustdoc/latest/halo2/circuit/struct.Cell.html
new file mode 100644
index 00000000..b3c543a5
--- /dev/null
+++ b/rustdoc/latest/halo2/circuit/struct.Cell.html
@@ -0,0 +1,92 @@
+Cell in halo2::circuit - Rust
+
+
+
+
A region of the circuit in which a Chip can assign cells.
+
Inside a region, the chip may freely use relative offsets; the Layouter will
+treat these assignments as a single “region” within the circuit.
+
The Layouter is allowed to optimise between regions as it sees fit. Chips must use
+Region::constrain_equal to copy in variables assigned in other regions.
+
TODO: It would be great if we could constrain the columns in these types to be
+“logical” columns that are guaranteed to correspond to the chip (and have come from
+Chip::Config).
A simple FloorPlanner that performs minimal optimizations.
+
This floor planner is suitable for debugging circuits. It aims to reflect the circuit
+“business logic” in the circuit layout as closely as possible. It uses a single-pass
+layouter that does not reorder regions for optimal packing.
A chip implements a set of instructions that can be used by gadgets.
+
The chip stores state that is required at circuit synthesis time in
+Chip::Config, which can be fetched via Chip::config.
+
The chip also loads any fixed configuration needed at synthesis time
+using its own implementation of load, and stores it in Chip::Loaded.
+This can be accessed via Chip::loaded.
A type that holds the configuration for this chip, and any other state it may need
+during circuit synthesis, that can be derived during Circuit::configure.
Assign a region of gates to an absolute row number.
+
Inside the closure, the chip may freely use relative offsets; the Layouter will
+treat these assignments as a single “region” within the circuit. Outside this
+closure, the Layouter is allowed to optimise as it sees fit.
The offset (relative to the start of the region) at which this cell should be
+assigned. This may be negative (for example, if a selector enables a gate at
+offset 0, but the gate uses Rotation::prev()).
+
Constraint
A constraint was not satisfied for a particular row.
The index of the lookup that is not satisfied. These indices are assigned in
+the order in which ConstraintSystem::lookup is called during
+Circuit::configure.
The index of the permutation that is not satisfied. These indices are assigned
+in the order in which ConstraintSystem::lookup is called during
+Circuit::configure.
Metadata about an assigned region within a circuit.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/dev/metadata/sidebar-items.js b/rustdoc/latest/halo2/dev/metadata/sidebar-items.js
new file mode 100644
index 00000000..01188025
--- /dev/null
+++ b/rustdoc/latest/halo2/dev/metadata/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"struct":[["Constraint","Metadata about a configured constraint within a circuit."],["Gate","Metadata about a configured gate within a circuit."],["Region","Metadata about an assigned region within a circuit."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/dev/metadata/struct.Constraint.html b/rustdoc/latest/halo2/dev/metadata/struct.Constraint.html
new file mode 100644
index 00000000..d5e9b961
--- /dev/null
+++ b/rustdoc/latest/halo2/dev/metadata/struct.Constraint.html
@@ -0,0 +1,92 @@
+Constraint in halo2::dev::metadata - Rust
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/dev/sidebar-items.js b/rustdoc/latest/halo2/dev/sidebar-items.js
new file mode 100644
index 00000000..096174e6
--- /dev/null
+++ b/rustdoc/latest/halo2/dev/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"enum":[["VerifyFailure","The reasons why a particular circuit is not satisfied."]],"mod":[["metadata","Metadata about circuits."]],"struct":[["MockProver","A test prover for debugging circuits."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/dev/struct.MockProver.html b/rustdoc/latest/halo2/dev/struct.MockProver.html
new file mode 100644
index 00000000..095b1b9d
--- /dev/null
+++ b/rustdoc/latest/halo2/dev/struct.MockProver.html
@@ -0,0 +1,188 @@
+MockProver in halo2::dev - Rust
+
+
+
+
The normal proving process, when applied to a buggy circuit implementation, might
+return proofs that do not validate when they should, but it can’t indicate anything
+other than “something is invalid”. MockProver can be used to figure out why these
+are invalid: it stores all the private inputs along with the circuit internals, and
+then checks every constraint manually.
This module provides an implementation of a variant of (Turbo)PLONK
+that is designed specifically for the polynomial commitment scheme described
+in the Halo paper.
Contains utilities for performing arithmetic over univariate polynomials in
+various forms, including computing commitments to them and provably opening
+the committed polynomials at arbitrary points.
This creates a proof for the provided circuit when given the public
+parameters params and the proving key ProvingKey that was
+generated previously for the same circuit.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/plonk/fn.keygen_pk.html b/rustdoc/latest/halo2/plonk/fn.keygen_pk.html
new file mode 100644
index 00000000..91a5cbed
--- /dev/null
+++ b/rustdoc/latest/halo2/plonk/fn.keygen_pk.html
@@ -0,0 +1,19 @@
+keygen_pk in halo2::plonk - Rust
+
+
+
+
This module provides an implementation of a variant of (Turbo)PLONK
+that is designed specifically for the polynomial commitment scheme described
+in the Halo paper.
This is a trait that circuits provide implementations for so that the
+backend prover can ask the circuit to synthesize using some given
+ConstraintSystem implementation.
This creates a proof for the provided circuit when given the public
+parameters params and the proving key ProvingKey that was
+generated previously for the same circuit.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/plonk/sidebar-items.js b/rustdoc/latest/halo2/plonk/sidebar-items.js
new file mode 100644
index 00000000..81d67f73
--- /dev/null
+++ b/rustdoc/latest/halo2/plonk/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"enum":[["Any","An enum over the Advice, Fixed, Instance structs"],["Assigned","A value assigned to a cell within a circuit."],["Error","This is an error that could occur during proving or circuit synthesis."],["Expression","Low-degree expression representing an identity that must hold over the committed columns."]],"fn":[["create_proof","This creates a proof for the provided `circuit` when given the public parameters `params` and the proving key [`ProvingKey`] that was generated previously for the same circuit."],["keygen_pk","Generate a `ProvingKey` from a `VerifyingKey` and an instance of `Circuit`."],["keygen_vk","Generate a `VerifyingKey` from an instance of `Circuit`."],["verify_proof","Returns a boolean indicating whether or not the proof is valid"]],"struct":[["Advice","An advice column"],["Column","A column with an index and type"],["Constraint","An individual polynomial constraint."],["ConstraintSystem","This is a description of the circuit environment, such as the gate, column and permutation arrangements."],["Fixed","A fixed column"],["Instance","An instance column"],["Permutation","A permutation."],["PinnedConstraintSystem","Represents the minimal parameters that determine a `ConstraintSystem`."],["PinnedVerificationKey","Minimal representation of a verification key that can be used to identify its active contents."],["ProvingKey","This is a proving key which allows for the creation of proofs for a particular circuit."],["Selector","A selector, representing a fixed boolean value per row of the circuit."],["VerifyingKey","This is a verifying key which allows for the verification of proofs for a particular circuit."],["VirtualCells","Exposes the “virtual cells” that can be queried while creating a custom gate or lookup table."]],"trait":[["Assignment","This trait allows a [`Circuit`] to direct some backend to assign a witness for a constraint system."],["Circuit","This is a trait that circuits provide implementations for so that the backend prover can ask the circuit to synthesize using some given [`ConstraintSystem`] implementation."],["ColumnType","A column type"],["FloorPlanner","A floor planning strategy for a circuit."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/plonk/struct.Advice.html b/rustdoc/latest/halo2/plonk/struct.Advice.html
new file mode 100644
index 00000000..4a6c2112
--- /dev/null
+++ b/rustdoc/latest/halo2/plonk/struct.Advice.html
@@ -0,0 +1,98 @@
+Advice in halo2::plonk - Rust
+
+
+
+
A selector, representing a fixed boolean value per row of the circuit.
+
Selectors can be used to conditionally enable (portions of) gates:
+
+
+usehalo2::poly::Rotation;
+
+leta=meta.advice_column();
+letb=meta.advice_column();
+lets=meta.selector();
+
+meta.create_gate("foo", |meta| {
+ leta=meta.query_advice(a, Rotation::prev());
+ letb=meta.query_advice(b, Rotation::cur());
+ lets=meta.query_selector(s);
+
+ // On rows where the selector is enabled, a is constrained to equal b.
+ // On rows where the selector is disabled, a and b can take any value.
+ vec![s* (a-b)]
+});
+
Selectors are disabled on all rows by default, and must be explicitly enabled on each
+row when required:
This is a trait that circuits provide implementations for so that the
+backend prover can ask the circuit to synthesize using some given
+ConstraintSystem implementation.
Given the provided cs, synthesize the circuit. The concrete type of
+the caller will be different depending on the context, and they may or
+may not expect to have a witness present.
+
Implementors
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/plonk/trait.ColumnType.html b/rustdoc/latest/halo2/plonk/trait.ColumnType.html
new file mode 100644
index 00000000..44b99da8
--- /dev/null
+++ b/rustdoc/latest/halo2/plonk/trait.ColumnType.html
@@ -0,0 +1,19 @@
+ColumnType in halo2::plonk - Rust
+
+
+
+
Create a polynomial commitment opening proof for the polynomial defined
+by the coefficients px, the blinding factor blind used for the
+polynomial commitment, and the point x that the polynomial is
+evaluated at.
+
This function will panic if the provided polynomial is too large with
+respect to the polynomial commitment parameters.
+
Important: This function assumes that the provided transcript has
+already seen the common inputs: the polynomial commitment P, the claimed
+opening v, and the point x. It’s probably also nice for the transcript
+to have seen the elliptic curve description and the URS, if you want to
+be rigorous.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/commitment/fn.verify_proof.html b/rustdoc/latest/halo2/poly/commitment/fn.verify_proof.html
new file mode 100644
index 00000000..1fd08d42
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/commitment/fn.verify_proof.html
@@ -0,0 +1,21 @@
+verify_proof in halo2::poly::commitment - Rust
+
+
+
+
Checks to see if the proof represented within transcript is valid, and a
+point x that the polynomial commitment P opens purportedly to the value
+v. The provided msm should evaluate to the commitment P being opened.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/commitment/index.html b/rustdoc/latest/halo2/poly/commitment/index.html
new file mode 100644
index 00000000..3a560e0a
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/commitment/index.html
@@ -0,0 +1,34 @@
+halo2::poly::commitment - Rust
+
+
+
+
Create a polynomial commitment opening proof for the polynomial defined
+by the coefficients px, the blinding factor blind used for the
+polynomial commitment, and the point x that the polynomial is
+evaluated at.
Checks to see if the proof represented within transcript is valid, and a
+point x that the polynomial commitment P opens purportedly to the value
+v. The provided msm should evaluate to the commitment P being opened.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/commitment/msm/struct.MSM.html b/rustdoc/latest/halo2/poly/commitment/msm/struct.MSM.html
new file mode 100644
index 00000000..c8d7c557
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/commitment/msm/struct.MSM.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Redirection
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/commitment/sidebar-items.js b/rustdoc/latest/halo2/poly/commitment/sidebar-items.js
new file mode 100644
index 00000000..73268145
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/commitment/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["create_proof","Create a polynomial commitment opening proof for the polynomial defined by the coefficients `px`, the blinding factor `blind` used for the polynomial commitment, and the point `x` that the polynomial is evaluated at."],["verify_proof","Checks to see if the proof represented within `transcript` is valid, and a point `x` that the polynomial commitment `P` opens purportedly to the value `v`. The provided `msm` should evaluate to the commitment `P` being opened."]],"struct":[["Accumulator","An accumulator instance consisting of an evaluation claim and a proof."],["Blind","Wrapper type around a blinding factor."],["Guard","A guard returned by the verifier"],["MSM","A multiscalar multiplication in the polynomial commitment scheme"],["Params","These are the public parameters for the polynomial commitment scheme."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/commitment/struct.Accumulator.html b/rustdoc/latest/halo2/poly/commitment/struct.Accumulator.html
new file mode 100644
index 00000000..6bfdc68c
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/commitment/struct.Accumulator.html
@@ -0,0 +1,98 @@
+Accumulator in halo2::poly::commitment - Rust
+
+
+
+
Contains utilities for performing arithmetic over univariate polynomials in
+various forms, including computing commitments to them and provably opening
+the committed polynomials at arbitrary points.
This structure contains precomputed constants and other details needed for
+performing operations on an evaluation domain of size $2^k$ and an extended
+domain of size $2^{k} * j$ with $j \neq 0$.
Describes the relative rotation of a vector. Negative numbers represent
+reverse (leftmost) rotations and positive numbers represent forward (rightmost)
+rotations. Zero represents no rotation.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/multiopen/sidebar-items.js b/rustdoc/latest/halo2/poly/multiopen/sidebar-items.js
new file mode 100644
index 00000000..cdb02cc7
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/multiopen/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["create_proof","Create a multi-opening proof"],["verify_proof","Verify a multi-opening proof"]],"struct":[["ProverQuery","A polynomial query at a point"],["VerifierQuery","A polynomial query at a point"]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/multiopen/struct.ProverQuery.html b/rustdoc/latest/halo2/poly/multiopen/struct.ProverQuery.html
new file mode 100644
index 00000000..f4506183
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/multiopen/struct.ProverQuery.html
@@ -0,0 +1,99 @@
+ProverQuery in halo2::poly::multiopen - Rust
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/sidebar-items.js b/rustdoc/latest/halo2/poly/sidebar-items.js
new file mode 100644
index 00000000..19edd6a1
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"enum":[["Error","This is an error that could occur during proving or circuit synthesis."]],"mod":[["commitment","This module contains an implementation of the polynomial commitment scheme described in the Halo paper."],["multiopen","This module contains an optimisation of the polynomial commitment opening scheme described in the Halo paper."]],"struct":[["Coeff","The polynomial is defined as coefficients"],["EvaluationDomain","This structure contains precomputed constants and other details needed for performing operations on an evaluation domain of size $2^k$ and an extended domain of size $2^{k} * j$ with $j \\neq 0$."],["ExtendedLagrangeCoeff","The polynomial is defined as coefficients of Lagrange basis polynomials in an extended size domain which supports multiplication"],["LagrangeCoeff","The polynomial is defined as coefficients of Lagrange basis polynomials"],["PinnedEvaluationDomain","Represents the minimal parameters that determine an `EvaluationDomain`."],["Polynomial","Represents a univariate polynomial defined over a field and a particular basis."],["Rotation","Describes the relative rotation of a vector. Negative numbers represent reverse (leftmost) rotations and positive numbers represent forward (rightmost) rotations. Zero represents no rotation."]],"trait":[["Basis","The basis over which a polynomial is described."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/poly/struct.Coeff.html b/rustdoc/latest/halo2/poly/struct.Coeff.html
new file mode 100644
index 00000000..2fc32233
--- /dev/null
+++ b/rustdoc/latest/halo2/poly/struct.Coeff.html
@@ -0,0 +1,92 @@
+Coeff in halo2::poly - Rust
+
+
+
+
This structure contains precomputed constants and other details needed for
+performing operations on an evaluation domain of size $2^k$ and an extended
+domain of size $2^{k} * j$ with $j \neq 0$.
Describes the relative rotation of a vector. Negative numbers represent
+reverse (leftmost) rotations and positive numbers represent forward (rightmost)
+rotations. Zero represents no rotation.
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/sidebar-items.js b/rustdoc/latest/halo2/sidebar-items.js
new file mode 100644
index 00000000..ce89e3d4
--- /dev/null
+++ b/rustdoc/latest/halo2/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"mod":[["arithmetic","This module provides common utilities, traits and structures for group, field and polynomial arithmetic."],["circuit","Traits and structs for implementing circuit components."],["dev","Tools for developing circuits."],["plonk","This module provides an implementation of a variant of (Turbo)PLONK that is designed specifically for the polynomial commitment scheme described in the Halo paper."],["poly","Contains utilities for performing arithmetic over univariate polynomials in various forms, including computing commitments to them and provably opening the committed polynomials at arbitrary points."],["transcript","This module contains utilities and traits for dealing with Fiat-Shamir transcripts."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/transcript/index.html b/rustdoc/latest/halo2/transcript/index.html
new file mode 100644
index 00000000..4b3592a5
--- /dev/null
+++ b/rustdoc/latest/halo2/transcript/index.html
@@ -0,0 +1,34 @@
+halo2::transcript - Rust
+
+
+
+
EncodedChallenge<C> defines a challenge encoding with a Self::Input
+that is used to derive the challenge encoding and get_challenge obtains
+the realC::Scalar that the challenge encoding represents.
Transcript view from the perspective of a prover that has access to an
+output stream of messages from the prover to the verifier.
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/transcript/sidebar-items.js b/rustdoc/latest/halo2/transcript/sidebar-items.js
new file mode 100644
index 00000000..8d31a035
--- /dev/null
+++ b/rustdoc/latest/halo2/transcript/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"struct":[["Blake2bRead","We will replace BLAKE2b with an algebraic hash function in a later version."],["Blake2bWrite","We will replace BLAKE2b with an algebraic hash function in a later version."],["Challenge255","A 255-bit challenge."],["ChallengeScalar","The scalar representation of a verifier challenge."]],"trait":[["EncodedChallenge","`EncodedChallenge` defines a challenge encoding with a [`Self::Input`] that is used to derive the challenge encoding and `get_challenge` obtains the real `C::Scalar` that the challenge encoding represents."],["Transcript","Generic transcript view (from either the prover or verifier’s perspective)"],["TranscriptRead","Transcript view from the perspective of a verifier that has access to an input stream of data from the prover to the verifier."],["TranscriptWrite","Transcript view from the perspective of a prover that has access to an output stream of messages from the prover to the verifier."]]});
\ No newline at end of file
diff --git a/rustdoc/latest/halo2/transcript/struct.Blake2bRead.html b/rustdoc/latest/halo2/transcript/struct.Blake2bRead.html
new file mode 100644
index 00000000..3b0e154a
--- /dev/null
+++ b/rustdoc/latest/halo2/transcript/struct.Blake2bRead.html
@@ -0,0 +1,101 @@
+Blake2bRead in halo2::transcript - Rust
+
+
+
+
The Input type used to derive the challenge encoding. For example,
+an input from the Poseidon hash would be a base field element;
+an input from the Blake2b hash would be a [u8; 64]. Read more
EncodedChallenge<C> defines a challenge encoding with a Self::Input
+that is used to derive the challenge encoding and get_challenge obtains
+the realC::Scalar that the challenge encoding represents.
The Input type used to derive the challenge encoding. For example,
+an input from the Poseidon hash would be a base field element;
+an input from the Blake2b hash would be a [u8; 64].
";list.appendChild(display)}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function labelForToggleButton(sectionIsCollapsed){if(sectionIsCollapsed){return"+"}return"\u2212"}function toggleAllDocs(){var innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}var sectionIsCollapsed=false;if(hasClass(innerToggle,"will-expand")){removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("rustdoc-toggle"),function(e){if(!hasClass(e,"type-contents-toggle")){e.open=true}});innerToggle.title="collapse all docs"}else{addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("rustdoc-toggle"),function(e){if(e.parentNode.id!=="main"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});sectionIsCollapsed=true;innerToggle.title="expand all docs"}innerToggle.children[0].innerText=labelForToggleButton(sectionIsCollapsed)}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}(function(){var toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}var hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";var hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";var hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){var list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),function(e){e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("rustdoc-toggle"),function(e){if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}});var pageId=getPageId();if(pageId!==null){expandSection(pageId)}}());(function(){var lineNumbersFunc=function(){};if(getSettingValue("line-numbers")==="true"){lineNumbersFunc=function(x){var count=x.textContent.split("\n").length;var elems=[];for(var i=0;ithe rustdoc book.";var container=document.createElement("div");var shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["T","Focus the theme picker menu"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(function(x){return"
";var infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \
+ restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \
+ enum, trait, type, macro, \
+ and const.","Search functions by type signature (e.g., vec -> usize or \
+ * -> vec)","Search multiple things at once by splitting your query with comma (e.g., \
+ str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \
+ your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"
"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);popup.appendChild(container);insertAfter(popup,searchState.outputElement());buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value='use '+path.join('::')+';';el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}())
\ No newline at end of file
diff --git a/rustdoc/latest/normalize.css b/rustdoc/latest/normalize.css
new file mode 100644
index 00000000..469959f1
--- /dev/null
+++ b/rustdoc/latest/normalize.css
@@ -0,0 +1,2 @@
+ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}
\ No newline at end of file
diff --git a/rustdoc/latest/noscript.css b/rustdoc/latest/noscript.css
new file mode 100644
index 00000000..aea68efb
--- /dev/null
+++ b/rustdoc/latest/noscript.css
@@ -0,0 +1 @@
+ #main .attributes{margin-left:0 !important;}#copy-path{display:none;}
\ No newline at end of file
diff --git a/rustdoc/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt b/rustdoc/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt
new file mode 100644
index 00000000..922d5fdc
--- /dev/null
+++ b/rustdoc/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright 2014, 2015 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/rustdoc/latest/noto-sans-kr-v13-korean-regular.woff b/rustdoc/latest/noto-sans-kr-v13-korean-regular.woff
new file mode 100644
index 00000000..01d6b6b5
Binary files /dev/null and b/rustdoc/latest/noto-sans-kr-v13-korean-regular.woff differ
diff --git a/rustdoc/latest/rust-logo.png b/rustdoc/latest/rust-logo.png
new file mode 100644
index 00000000..74b4bd69
Binary files /dev/null and b/rustdoc/latest/rust-logo.png differ
diff --git a/rustdoc/latest/rustdoc.css b/rustdoc/latest/rustdoc.css
new file mode 100644
index 00000000..143f3226
--- /dev/null
+++ b/rustdoc/latest/rustdoc.css
@@ -0,0 +1 @@
+ @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Noto Sans KR';src:url("noto-sans-kr-v13-korean-regular.woff") format("woff");font-display:swap;unicode-range:U+A960-A97F,U+AC00-D7AF,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:16px/1.4 "Source Serif 4","Noto Sans KR",serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3,h4{font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{display:flex;border-bottom:1px dashed;margin-top:0;padding-left:1px;}h1.fqn>.in-band>a:hover{text-decoration:underline;}h2,h3,h4{border-bottom:1px solid;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}.impl,.method.trait-impl,.type.trait-impl,.associatedconstant.trait-impl,.associatedtype.trait-impl{padding-left:15px;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,details.undocumented>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main>ul.docblock>li>a{font-family:"Fira Sans",Arial,sans-serif;}.content ul.crate a.crate{font-size:16px/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;padding-right:1ex;}pre{padding:14px;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;bottom:0;overflow:auto;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.hidden{display:none !important;}.logo-container{height:100px;width:100px;position:relative;margin:20px auto;display:block;margin-top:10px;}.logo-container>img{max-width:100px;max-height:100px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.rustdoc:not(.source) .example-wrap>pre.rust{width:100%;overflow-x:auto;}.rustdoc .example-wrap>pre{margin:0;}#search{margin-left:230px;position:relative;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom:1px solid;}.top-doc .docblock h1{font-size:1.3em;}.top-doc .docblock h2{font-size:1.15em;}.top-doc .docblock h3,.top-doc .docblock h4,.top-doc .docblock h5{font-size:1em;}.docblock h1{font-size:1em;}.docblock h2{font-size:0.95em;}.docblock h3,.docblock h4,.docblock h5{font-size:0.9em;}.docblock{margin-left:24px;position:relative;}.content .out-of-band{flex-grow:0;text-align:right;font-size:23px;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>code,.trait-impl>code,.invisible>code{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;}.in-band>code{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);border:1px dashed;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:90%;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:25px;position:absolute;top:-6px;left:-19px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant,.impl-items>.associatedtype,.content .impl-items details>summary>.type,.impl-items details>summary>.associatedconstant,.impl-items details>summary>.associatedtype{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main>.item-info{margin-top:0;}nav:not(.sidebar){border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-7px;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-28px;padding-right:10px;}.anchor:before{content:'\2002\00a7\2002';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>code+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:grid;column-gap:1.2rem;row-gap:0.0rem;grid-template-columns:auto 1fr;justify-items:start;}.item-left,.item-right{display:block;}.item-left{grid-column:1;}.item-right{grid-column:2;}.search-container{position:relative;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help>div>span{text-align:center;display:block;margin:10px 0;font-size:18px;border-bottom:1px solid #ccc;padding-bottom:4px;margin-bottom:6px;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.stab{border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.5em;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-size:17px;font-weight:normal;}.rightside{float:right;}.has-srclink{font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;z-index:1;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}.sub-variant,.sub-variant>h3{margin-top:0px !important;padding-top:1px;}#main>details>.sub-variant>h3{font-size:15px;margin-left:25px;margin-bottom:5px;}.sub-variant>div{margin-left:20px;margin-bottom:10px;}.sub-variant>div>span{display:block;position:relative;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}:target>code{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:16px;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:20px;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:16px;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:19px;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:20px;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:16px;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:fixed;top:30px;left:300px;z-index:10;padding:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;transition:left .5s;font-size:1.2em;border:1px solid;border-left:0;}#source-sidebar{position:fixed;top:0;bottom:0;left:0;width:300px;z-index:1;overflow:auto;transition:left .5s;border-right:1px solid;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:17px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary,details.undocumented>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker,details.undocumented>summary::-webkit-details-marker,details.undocumented>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"[+]";font-weight:300;font-size:0.8em;letter-spacing:1px;cursor:pointer;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:16px;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-23px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,.undocumented>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-2px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle,details.undocumented{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.rustdoc-toggle[open] >summary::before{content:"[−]";display:inline;}details.undocumented>summary::before{content:"[+] Show hidden undocumented items";cursor:pointer;font-size:16px;font-weight:300;}details.undocumented[open] >summary::before{content:"[−] Hide undocumented items";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}}@media (max-width:700px){body{padding-top:0px;}.rustdoc>.sidebar{height:45px;min-height:40px;margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:11;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;left:0;top:45px;bottom:0;overflow-y:auto;border-right:1px solid;display:none;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main,#search{margin-top:45px;padding:0;}#search{margin-left:0;}.anchor{display:none !important;}.theme-picker{left:10px;top:54px;z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.sidebar.mobile>div.version{overflow:hidden;max-height:33px;}.sidebar{width:calc(100% + 30px);}.show-it{display:block;width:246px;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main>details.rustdoc-toggle>summary::before,#main>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}#sidebar-toggle{top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;}#source-sidebar{z-index:11;}#main>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main,#search{margin-top:100px;}#main>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}}
\ No newline at end of file
diff --git a/rustdoc/latest/search-index.js b/rustdoc/latest/search-index.js
new file mode 100644
index 00000000..a3a2cd07
--- /dev/null
+++ b/rustdoc/latest/search-index.js
@@ -0,0 +1,4 @@
+var searchIndex = JSON.parse('{\
+"halo2":{"doc":"halo2","t":[0,0,0,0,0,0,16,16,16,8,18,3,8,8,16,18,8,8,8,8,18,18,18,18,18,16,16,16,3,18,18,18,10,10,10,10,10,11,5,5,11,11,11,11,11,11,5,11,10,10,11,11,11,11,11,11,11,10,10,11,11,10,5,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,10,10,10,10,10,10,10,5,5,11,10,10,10,5,11,11,11,11,11,10,10,11,11,5,10,10,11,11,10,11,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,3,8,16,8,16,3,3,3,3,16,3,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,0,10,11,11,10,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,8,3,10,11,10,11,11,11,11,11,11,10,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,3,13,4,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,13,13,4,4,8,13,8,3,8,16,13,3,3,13,4,4,3,13,13,8,16,13,3,13,13,13,3,3,3,13,3,13,13,3,13,13,13,13,3,3,13,11,11,11,11,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,11,11,11,11,11,11,11,11,11,11,11,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,12,8,3,4,3,3,3,13,3,3,3,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,3,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,3,3,12,11,11,11,11,11,11,11,11,12,5,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,5,11,11,3,3,3,3,8,16,8,8,8,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,10,11,10,11,10,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,10,11],"n":["arithmetic","circuit","dev","plonk","poly","transcript","AffineExt","Base","Base","BatchInvert","CURVE_ID","Coordinates","CurveAffine","CurveExt","CurveExt","DELTA","Field","Field","FieldExt","Group","MODULUS","RESCUE_ALPHA","RESCUE_INVALPHA","ROOT_OF_UNITY","ROOT_OF_UNITY_INV","Scalar","ScalarExt","ScalarExt","SqrtTables","TWO_INV","T_MINUS1_OVER2","ZETA","a","a","b","b","batch_invert","batch_invert","best_fft","best_multiexp","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","compute_inner_product","conditional_select","coordinates","ct_is_zero","cube","cube","default","deref","deref","deref_mut","deref_mut","double","double","drop","drop","endo","eval_polynomial","fmt","fmt","from","from","from_bytes","from_bytes_wide","from_u128","from_u64","from_xy","get_lower_128","get_lower_32","group_add","group_scale","group_sub","group_zero","hash_to_curve","init","init","into","into","invert","invert","is_on_curve","is_on_curve","is_zero","is_zero","jacobian_coordinates","kate_division","lagrange_interpolate","new","new_jacobian","one","one","parallelize","pow","pow_by_t_minus1_over2","pow_vartime","pow_vartime","rand","random","random","read","read","small_multiexp","sqrt","sqrt","sqrt_alt","sqrt_alt","sqrt_ratio","sqrt_ratio","square","square","to_bytes","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","u","v","vzip","vzip","write","write","x","y","zero","zero","Cell","Chip","Config","Layouter","Loaded","NamespacedLayouter","Region","RegionIndex","RegionStart","Root","SimpleFloorPlanner","assign_advice","assign_fixed","assign_region","assign_region","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","config","constrain_equal","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","eq","floor_planner","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_root","get_root","init","init","init","init","init","init","into","into","into","into","into","into","layouter","loaded","namespace","ne","pop_namespace","pop_namespace","push_namespace","push_namespace","synthesize","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","V1","V1Pass","assign_region","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","fmt","fmt","from","from","get_root","init","init","into","into","pop_namespace","push_namespace","synthesize","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","RegionLayouter","RegionShape","assign_advice","assign_advice","assign_fixed","assign_fixed","borrow","borrow_mut","clone","clone_into","columns","constrain_equal","constrain_equal","deref","deref_mut","drop","enable_selector","enable_selector","fmt","from","init","into","new","region_index","row_count","to_owned","try_from","try_into","type_id","vzip","Cell","Constraint","Lookup","MockProver","Permutation","VerifyFailure","assign_advice","assign_fixed","borrow","borrow","borrow_mut","borrow_mut","copy","deref","deref","deref_mut","deref_mut","drop","drop","enable_selector","enter_region","eq","exit_region","fmt","fmt","fmt","from","from","init","init","into","into","metadata","ne","pop_namespace","push_namespace","run","to_string","try_from","try_from","try_into","try_into","type_id","type_id","verify","vzip","vzip","column","column","constraint","gate","lookup_index","offset","perm_index","region","row","row","row","Constraint","Gate","Region","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","init","init","init","into","into","into","ne","ne","ne","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","Advice","Advice","Advice","Any","Assigned","Assignment","BoundsFailure","Circuit","Column","ColumnType","Config","Constant","Constraint","ConstraintSystem","ConstraintSystemFailure","Error","Expression","Fixed","Fixed","Fixed","FloorPlanner","FloorPlanner","IncompatibleParams","Instance","Instance","Instance","OpeningError","Permutation","PinnedConstraintSystem","PinnedVerificationKey","Product","ProvingKey","Rational","Scaled","Selector","Sum","SynthesisError","TranscriptError","Trivial","VerifyingKey","VirtualCells","Zero","add","add","add","advice_column","assign_advice","assign_fixed","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","configure","copy","create_gate","create_proof","default","degree","degree","denominator","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","enable","enable_selector","enter_region","eq","eq","eq","eq","eq","eq","eq","evaluate","evaluate","exit_region","fixed_column","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_domain","get_vk","hash","hash","hash","hash","hash","hash","hash_into","index","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","instance_column","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","invert","keygen_pk","keygen_vk","lookup","mapping","mul","mul","mul","mul","ne","ne","ne","neg","neg","new","numerator","partial_cmp","permutation","pinned","pinned","pop_namespace","push_namespace","query_advice","query_any","query_fixed","query_instance","query_selector","read","selector","square","sub","sub","sub","synthesize","synthesize","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","verify_proof","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","without_witnesses","write","0","Basis","Coeff","Error","EvaluationDomain","ExtendedLagrangeCoeff","LagrangeCoeff","OpeningError","PinnedEvaluationDomain","Polynomial","Rotation","SamplingError","add","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","coeff_from_vec","coeff_to_extended","commitment","constant_extended","constant_lagrange","cur","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","divide_by_vanishing_poly","drop","drop","drop","drop","drop","drop","drop","drop","empty_coeff","empty_extended","empty_lagrange","eq","extended_len","extended_to_coeff","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_barycentric_weight","get_extended_omega","get_omega","get_omega_inv","get_quotient_poly_degree","index","index","index","index_mut","index_mut","index_mut","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","iter","iter_mut","lagrange_from_vec","lagrange_to_coeff","mul","mul","multiopen","ne","new","next","num_coeffs","one_minus","pinned","prev","rotate","rotate_omega","sub","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","Accumulator","Blind","Guard","MSM","Params","add","add_assign","add_assign","add_constant_term","add_msm","add_to_g_scalars","add_to_h_scalar","add_to_u_scalar","append_term","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","challenges_packed","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","commit","commit_lagrange","compute_g","create_proof","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","empty_msm","eq","eval","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","g","get_g","init","init","init","init","init","into","into","into","into","into","mul","mul_assign","mul_assign","ne","new","new","read","scale","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","use_challenges","use_g","verify_proof","vzip","vzip","vzip","vzip","vzip","write","ProverQuery","VerifierQuery","blind","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","commitment","create_proof","deref","deref","deref_mut","deref_mut","drop","drop","eval","fmt","fmt","from","from","init","init","into","into","point","point","poly","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","verify_proof","vzip","vzip","Blake2bRead","Blake2bWrite","Challenge255","ChallengeScalar","EncodedChallenge","Input","Transcript","TranscriptRead","TranscriptWrite","as_challenge_scalar","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","common_point","common_point","common_point","common_scalar","common_scalar","common_scalar","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","finalize","fmt","fmt","fmt","fmt","from","from","from","from","get_scalar","get_scalar","init","init","init","init","init","init","into","into","into","into","new","new","read_point","read_point","read_scalar","read_scalar","squeeze_challenge","squeeze_challenge","squeeze_challenge","squeeze_challenge_scalar","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","write_point","write_point","write_scalar","write_scalar"],"q":["halo2","","","","","","halo2::arithmetic","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::circuit","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::circuit::floor_planner","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::circuit::layouter","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::dev","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::dev::VerifyFailure","","","","","","","","","","","halo2::dev::metadata","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::plonk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::poly","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::poly::commitment","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::poly::multiopen","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","halo2::transcript","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["This module provides common utilities, traits and …","Traits and structs for implementing circuit components.","Tools for developing circuits.","This module provides an implementation of a variant of …","Contains utilities for performing arithmetic over …","This module contains utilities and traits for dealing …","The affine version of the curve","The base field over which this elliptic curve is …","The base field over which this elliptic curve is …","Extension trait for iterators over mutable field elements …","CURVE_ID used for hash-to-curve.","The affine coordinates of a point on an elliptic curve.","This trait is the affine counterpart to Curve and is used …","This trait is a common interface for dealing with …","The projective form of the curve","Generator of the $t-order$ multiplicative subgroup","This trait represents an element of a field.","This trait represents an element of a field.","This trait is a common interface for dealing with …","This represents an element of a group with basic …","Modulus of the field written as a string for display …","Ideally the smallest prime $\\\\alpha$ such that gcd($p - …","$RESCUE_INVALPHA \\\\cdot RESCUE_ALPHA = 1 \\\\mod p - 1$ such …","Generator of the $2^S$ multiplicative subgroup","Inverse of ROOT_OF_UNITY","The group is assumed to be of prime order $p$. Scalar is …","The scalar field of this elliptic curve.","The scalar field of this elliptic curve.","Tables used for square root computation.","Inverse of $2$ in the field.","The value $(T-1)/2$ such that $2^S \\\\cdot T = p - 1$ with …","Element of multiplicative order $3$.","Returns the curve constant a.","Returns the curve constant $a$.","Returns the curve constant b.","Returns the curve constant $b$.","Consume this iterator and invert each field element (when …","Performs a batch inversion using Montgomery’s trick, …","Performs a radix-$2$ Fast-Fourier Transformation (FFT) on …","Performs a multi-exponentiation operation.","","","","","","","This computes the inner product of two vectors a and b.","","Gets the coordinates of this point.","Returns whether or not this element is zero.","Cubes this element.","Cubes this element.","","","","","","Doubles this element.","Doubles this element.","","","Apply the curve endomorphism by multiplying the …","This evaluates a provided polynomial (in coefficient …","","","","","Attempts to obtain a field element from its normalized, …","Obtains a field element that is congruent to the provided …","Obtains a field element congruent to the integer v.","Obtains a field element congruent to the integer v.","Obtains a point given $(x, y)$, failing if it is not on …","Gets the lower 128 bits of this field element when …","Gets the lower 32 bits of this field element when …","Adds rhs to this group element.","Scales this group element by a scalar.","Subtracts rhs from this group element.","Returns the additive identity of the group.","Requests a hasher that accepts messages and returns …","","","","","Computes the multiplicative inverse of this element, …","Computes the multiplicative inverse of this element, …","Returns whether or not this element is on the curve; …","Returns whether or not this element is on the curve; …","Returns true iff this element is zero.","Returns true iff this element is zero.","Return the Jacobian coordinates of this point.","Divides polynomial a in X by X - b with no remainder.","Returns coefficients of an n - 1 degree polynomial given …","Build tables given parameters for the perfect hash.","Obtains a point given Jacobian coordinates $X : Y : Z$, …","Returns the one element of the field, the multiplicative …","Returns the one element of the field, the multiplicative …","This simple utility function will parallelize an …","Exponentiates self by by, where by is a little-endian …","Raise this field element to the power T_MINUS1_OVER2. …","Exponentiates self by exp, where exp is a little-endian …","Exponentiates self by exp, where exp is a little-endian …","This computes a random element of the field using system …","Returns an element chosen uniformly at random using a …","Returns an element chosen uniformly at random using a …","Reads a compressed element from the buffer and attempts …","Reads a normalized, little endian represented field …","Performs a small multi-exponentiation operation. Uses the …","Returns the square root of the field element, if it is …","Returns the square root of the field element, if it is …","Equivalent to sqrt_ratio(self, one()).","Same as sqrt_ratio(u, one()) but more efficient.","Computes:","Computes:","Squares this element.","Squares this element.","Converts this field element to its normalized, little …","","","","","","","","Returns the u-coordinate.","Returns the v-coordinate.","","","Writes an element in compressed form to the buffer.","Writes this element in its normalized, little endian form …","Returns the x-coordinate.","Returns the y-coordinate.","Returns the zero element of the field, the additive …","Returns the zero element of the field, the additive …","A pointer to a cell within a circuit.","A chip implements a set of instructions that can be used …","A type that holds the configuration for this chip, and …","A layout strategy within a circuit. The layouter is …","A type that holds any general chip state that needs to be …","This is a “namespaced” layouter which borrows a …","A region of the circuit in which a Chip can assign cells.","Index of a region in a layouter","Starting row of a region in a layouter","Represents the type of the “root” of this layouter, …","A simple FloorPlanner that performs minimal optimizations.","Assign an advice column value (witness).","Assign a fixed value.","Assign a region of gates to an absolute row number.","","","","","","","","","","","","","","","","","","","","The chip holds its own configuration.","Constraint two cells to have the same value.","","","","","","","","","","","","","","","","","","","","","","","Implementations of common circuit floor planners.","","","","","","","","","","","","","","","","Gets the “root” of this assignment, bypassing the …","","","","","","","","","","","","","","Implementations of common circuit layouters.","Provides access to general chip state loaded at the …","Enters into a namespace.","","Exits out of the existing namespace.","","Creates a new (sub)namespace and enters into it.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The version 1 FloorPlanner provided by halo2.","A single pass of the V1 layouter.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Helper trait for implementing a custom Layouter.","The shape of a region. For a region at a certain index, …","Assign an advice column value (witness)","","Assign a fixed value","","","","","","Get a reference to the set of columns used in a …","Constraint two cells to have the same value.","","","","","Enables a selector at the given offset.","","","","","","Create a new RegionShape for a region at region_index.","Get the region_index of a RegionShape.","Get the row_count of a RegionShape.","","","","","","A cell used in an active gate was not assigned to.","A constraint was not satisfied for a particular row.","A lookup input did not exist in its corresponding table.","A test prover for debugging circuits.","A permutation did not preserve the original value of a …","The reasons why a particular circuit is not satisfied.","","","","","","","","","","","","","","","","","","","","","","","","","","","Metadata about circuits.","","","","Runs a synthetic keygen-and-prove operation on the given …","","","","","","","","Returns Ok(()) if this MockProver is satisfied, or a list …","","","The column in which this cell should be assigned.","The column in which this permutation is not satisfied.","The polynomial constraint that is not satisfied.","The index of the active gate.","The index of the lookup that is not satisfied. These …","The offset (relative to the start of the region) at which …","The index of the permutation that is not satisfied. These …","The region in which this cell should be assigned.","The row on which this constraint is not satisfied.","The row on which this lookup is not satisfied.","The row on which this permutation is not satisfied.","Metadata about a configured constraint within a circuit.","Metadata about a configured gate within a circuit.","Metadata about an assigned region within a circuit.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","An advice column","An Advice variant","This is an advice (witness) column queried at a certain …","An enum over the Advice, Fixed, Instance structs","A value assigned to a cell within a circuit.","This trait allows a Circuit to direct some backend to …","Out of bounds index passed to a backend","This is a trait that circuits provide implementations for …","A column with an index and type","A column type","This is a configuration object that stores things like …","This is a constant polynomial","An individual polynomial constraint.","This is a description of the circuit environment, such as …","The constraint system is not satisfied.","This is an error that could occur during proving or …","Low-degree expression representing an identity that must …","A fixed column","A Fixed variant","This is a fixed column queried at a certain relative …","A floor planning strategy for a circuit.","The floor planner used for this circuit. This is an …","The structured reference string or the parameters are not …","An instance column","An Instance variant","This is an instance (external) column queried at a …","Opening error","A permutation.","Represents the minimal parameters that determine a …","Minimal representation of a verification key that can be …","This is the product of two polynomials","This is a proving key which allows for the creation of …","A value stored as a fraction to enable batch inversion.","This is a scaled polynomial","A selector, representing a fixed boolean value per row of …","This is the sum of two polynomials","This is an error that can occur during synthesis of the …","Transcript error","A value that does not require inversion to evaluate.","This is a verifying key which allows for the verification …","Exposes the “virtual cells” that can be queried while …","The field element zero.","","","","Allocate a new advice column","Assign an advice column value (witness)","Assign a fixed value","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The circuit is given an opportunity to describe the exact …","Assign two cells to have the same value","Creates a new gate.","This creates a proof for the provided circuit when given …","","Compute the degree of this polynomial","Compute the degree of the constraint system (the maximum …","Returns the denominator, if non-trivial.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enable this selector at the given offset within the given …","Enables a selector at the given row.","Creates a new region and enters into it.","","","","","","","","Evaluates this assigned value directly, performing an …","Evaluate the polynomial using the provided closures to …","Exits the current region.","Allocate a new fixed column","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get the underlying EvaluationDomain.","Get the underlying VerifyingKey.","","","","","","","Hashes a verification key into a transcript.","Returns index of permutation","","","","","","","","","","","","","","","","","","Allocate a new instance column","","","","","","","","","","","","","","","","","","Inverts this assigned value.","Generate a ProvingKey from a VerifyingKey and an instance …","Generate a VerifyingKey from an instance of Circuit.","Add a lookup argument for some input expressions and …","Returns mapping of permutation","","","","","","","","","","Configures a new permutation for the given columns.","Returns the numerator.","","Add a permutation argument for some columns","Obtain a pinned version of this constraint system; a …","Obtains a pinned representation of this verification key …","Exits out of the existing namespace.","Creates a new (sub)namespace and enters into it.","Query an advice column at a relative position","Query an Any column at a relative position","Query a fixed column at a relative position","Query an instance column at a relative position","Query a selector at the current position.","Reads a verification key from a buffer.","Allocate a new selector.","Square this expression.","","","","Given the provided cs, synthesize the given circuit.","Given the provided cs, synthesize the circuit. The …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns a boolean indicating whether or not the proof is …","","","","","","","","","","","","","","","","","","Returns a copy of this circuit with no witness values …","Writes a verifying key to a buffer.","","The basis over which a polynomial is described.","The polynomial is defined as coefficients","This is an error that could occur during proving or …","This structure contains precomputed constants and other …","The polynomial is defined as coefficients of Lagrange …","The polynomial is defined as coefficients of Lagrange …","OpeningProof is not well-formed","Represents the minimal parameters that determine an …","Represents a univariate polynomial defined over a field …","Describes the relative rotation of a vector. Negative …","Caller needs to re-sample a point","","","","","","","","","","","","","","","","","","","","","","","","","","","","Obtains a polynomial in coefficient form when given a …","This takes us from an n-length coefficient vector into a …","This module contains an implementation of the polynomial …","Returns a constant polynomial in the extended Lagrange …","Returns a constant polynomial in the Lagrange coefficient …","The current location in the evaluation domain","","","","","","","","","","","","","","","","","","","","This divides the polynomial (in the extended domain) by …","","","","","","","","","Returns an empty (zero) polynomial in the coefficient …","Returns an empty (zero) polynomial in the extended …","Returns an empty (zero) polynomial in the Lagrange …","","Get the size of the extended domain","This takes us from the extended evaluation domain and …","","","","","","","","","","","","","","","","","Gets the barycentric weight of $1$ over the $2^k$ size …","Get the generator of the extended domain’s …","Get $\\\\omega$, the generator of the $2^k$ order …","Get $\\\\omega^{-1}$, the inverse of the generator of the …","Gets the quotient polynomial’s degree (as a multiple of …","","","","","","","","","","","","","","","","","","","","","","","Iterate over the values, which are either in coefficient …","Iterate over the values mutably, which are either in …","Obtains a polynomial in Lagrange form when given a vector …","This takes us from an n-length vector into the …","","","This module contains an optimisation of the polynomial …","","This constructs a new evaluation domain object based on …","The next location in the evaluation domain","Gets the size of this polynomial in terms of the number of…","Maps every coefficient c in p to 1 - c.","Obtain a pinned version of this evaluation domain; a …","The previous location in the evaluation domain","Rotates the values in a Lagrange basis polynomial by …","Multiplies a value by some power of $\\\\omega$, essentially …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","An accumulator instance consisting of an evaluation claim …","Wrapper type around a blinding factor.","A guard returned by the verifier","A multiscalar multiplication in the polynomial commitment …","These are the public parameters for the polynomial …","","","","Add a value to the first entry of g_scalars.","Add another multiexp into this one","Add a vector of scalars to g_scalars. This function will …","Add to h_scalar","Add to u_scalar","Add arbitrary term (the scalar and the point)","","","","","","","","","","","A vector of 128-bit challenges sampled by the verifier, …","","","","","","","","","This computes a commitment to a polynomial described by …","This commits to a polynomial using its evaluations over …","Computes G + H, where G = ⟨s, params.g⟩ and H is used …","Create a polynomial commitment opening proof for the …","","","","","","","","","","","","","","","","","Generates an empty multiscalar multiplication struct …","","Perform multiexp and check that it results in zero","","","","","","","","","","","The claimed output of the linear-time polycommit opening …","Getter for g generators","","","","","","","","","","","","","","","Create a new, empty MSM using the provided parameters.","Initializes parameters for the curve, given a random …","Reads params from a buffer.","Scale all scalars in the MSM by some scaling factor","","","","","","","","","","","","","","","","","","","","Lets caller supply the challenges and obtain an MSM with …","Lets caller supply the purported G point and simply …","Checks to see if the proof represented within transcript …","","","","","","Writes params to a buffer.","A polynomial query at a point","A polynomial query at a point","blinding factor of polynomial","","","","","","","","","commitment to polynomial","Create a multi-opening proof","","","","","","","evaluation of polynomial at query point","","","","","","","","","point at which polynomial is queried","point at which polynomial is queried","coefficients of polynomial","","","","","","","","","Verify a multi-opening proof","","","We will replace BLAKE2b with an algebraic hash function …","We will replace BLAKE2b with an algebraic hash function …","A 255-bit challenge.","The scalar representation of a verifier challenge.","EncodedChallenge defines a challenge encoding with a …","The Input type used to derive the challenge encoding. For …","Generic transcript view (from either the prover or …","Transcript view from the perspective of a verifier that …","Transcript view from the perspective of a prover that has …","Cast an encoded challenge as a typed ChallengeScalar.","","","","","","","","","","","","","","","","","Writing the point to the transcript without writing it to …","","","Writing the scalar to the transcript without writing it …","","","","","","","","","","","","","","","","","Conclude the interaction and return the output buffer …","","","","","","","","","Get a scalar field element from an encoded challenge.","","","Initialize a transcript given an input buffer.","","Initialize a transcript given an output buffer.","","","","","","","Get an encoded challenge from a given input challenge.","","Read a curve point from the prover.","","Read a curve scalar from the prover.","","Squeeze an encoded verifier challenge from the transcript.","","","Squeeze a typed challenge (in the scalar field) from the …","","","","","","","","","","","","","","","","","","","","","Write a curve point to the proof and the transcript.","","Write a scalar to the proof and the transcript.",""],"i":[0,0,0,0,0,0,1,1,2,0,1,0,0,0,2,3,0,0,0,0,3,3,3,3,3,4,1,2,0,3,3,3,1,2,1,2,5,3,0,0,6,7,6,7,6,6,0,6,2,3,8,8,6,6,7,6,7,8,8,6,7,1,0,6,7,6,7,3,3,3,3,2,3,3,4,4,4,4,1,6,7,6,7,8,8,1,2,8,8,1,0,0,7,1,8,8,0,3,3,8,8,3,8,8,2,3,0,8,8,3,7,3,7,8,8,3,6,6,7,6,7,6,7,6,6,6,7,2,3,6,6,8,8,0,0,9,0,9,0,0,0,0,10,0,11,11,10,12,13,14,15,16,11,12,13,14,15,16,11,12,14,15,16,14,15,16,9,11,13,14,14,15,15,16,11,12,13,14,15,16,11,12,13,14,15,16,11,12,12,15,0,13,14,15,16,11,12,13,14,14,15,15,16,11,11,12,10,12,13,14,15,16,11,12,13,14,15,16,11,12,0,9,10,15,10,12,10,12,13,14,15,16,13,14,15,16,11,12,13,14,15,16,11,12,13,14,15,16,11,12,13,14,15,16,11,12,0,0,17,18,17,18,17,18,17,18,17,18,17,18,17,18,17,17,18,17,18,17,17,17,18,18,17,18,17,18,17,18,17,0,0,19,20,19,20,20,20,20,20,20,19,20,20,20,20,19,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,0,21,0,22,22,21,22,21,22,22,21,22,21,22,21,22,22,22,21,22,21,21,22,21,22,21,22,21,22,0,21,22,22,22,21,21,22,21,22,21,22,22,21,22,23,24,25,23,26,23,24,23,25,26,24,0,0,0,27,28,29,27,28,29,27,28,29,27,28,29,27,28,29,27,28,29,27,27,28,28,29,29,27,27,28,28,29,29,27,28,29,27,28,29,27,28,29,27,28,29,27,28,29,27,28,29,27,28,29,27,28,29,0,30,31,0,0,0,32,0,0,0,33,31,0,0,32,0,0,0,30,31,0,33,32,0,30,31,32,0,0,0,31,0,34,31,0,31,32,32,34,0,0,34,34,34,31,35,36,36,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,37,38,39,40,30,41,42,34,31,35,37,38,39,40,30,41,42,34,31,35,37,33,36,35,0,35,31,35,34,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,41,36,36,37,38,39,40,30,41,42,34,31,36,35,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,37,37,37,37,38,39,40,30,30,30,30,41,42,34,34,34,31,43,43,43,35,44,45,46,47,48,32,46,48,37,38,39,40,30,41,46,42,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,35,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,34,0,0,35,42,34,34,31,31,37,41,42,34,31,42,34,37,35,35,46,36,36,45,45,45,45,45,46,35,31,34,34,31,49,33,37,38,39,40,30,41,42,34,31,35,37,37,37,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,0,37,38,39,40,30,41,42,34,31,43,35,44,45,46,47,48,32,33,46,50,0,0,0,0,0,0,51,0,0,0,51,52,53,54,51,55,56,57,52,50,53,54,51,55,56,57,52,50,55,56,57,52,50,55,56,57,52,50,53,53,0,53,53,50,50,53,54,51,55,56,57,52,52,50,53,54,51,55,56,57,52,52,50,53,53,54,51,55,56,57,52,50,53,53,53,50,53,53,53,54,51,55,56,57,52,50,53,54,51,55,56,57,52,50,53,53,53,53,53,52,52,52,52,52,52,53,54,51,55,56,57,52,50,53,54,51,55,56,57,52,50,52,52,53,53,52,52,0,50,53,50,52,52,53,50,52,53,52,55,56,57,52,50,53,54,51,55,56,57,52,50,53,54,51,55,56,57,52,50,53,54,51,55,56,57,52,50,53,54,51,55,56,57,52,50,58,0,0,0,0,0,58,58,58,59,59,59,59,59,59,59,60,61,62,58,59,60,61,62,58,61,59,60,61,58,59,60,61,58,62,62,60,0,58,59,60,61,62,58,59,60,61,62,58,59,60,61,62,58,62,58,59,59,60,61,62,58,59,60,61,62,58,61,62,59,60,61,62,58,59,60,61,62,58,58,58,58,58,59,62,62,59,59,60,61,58,59,60,61,62,58,59,60,61,62,58,59,60,61,62,58,60,60,0,59,60,61,62,58,62,0,0,63,63,64,63,64,63,64,63,64,64,0,63,64,63,64,63,64,64,63,64,63,64,63,64,63,64,63,64,63,63,64,63,64,63,64,63,64,0,63,64,0,0,0,0,0,65,0,0,0,65,66,67,68,69,66,67,68,69,66,67,68,69,66,67,68,69,70,66,67,70,66,67,66,67,68,68,69,69,66,67,68,69,66,67,68,69,67,66,67,68,69,66,67,68,69,65,69,66,66,67,67,68,69,66,67,68,69,65,69,71,66,71,66,70,66,67,70,66,67,68,69,66,67,68,69,66,67,68,69,66,67,68,69,66,67,68,69,72,67,72,67],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]]],[[]],[[]],[[]],[[]],[[]],[[],["coordinates",3]],[[]],[[],["field",8]],[[["coordinates",3],["choice",3]],["coordinates",3]],[[],[["ctoption",3,["coordinates"]],["coordinates",3]]],[[],["choice",3]],[[]],[[]],[[],["coordinates",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[]],[[["field",8]],["field",8]],[[["formatter",3]],[["result",4,["error"]],["error",3]]],[[["formatter",3]],[["result",4,["error"]],["error",3]]],[[]],[[]],[[],["ctoption",3]],[[]],[[["u128",15]]],[[["u64",15]]],[[],["ctoption",3]],[[],["u128",15]],[[],["u32",15]],[[]],[[]],[[]],[[]],[[["str",15]],[["box",3,["fn","global"]],["fn",8],["global",3]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[],["ctoption",3]],[[],["ctoption",3]],[[],["choice",3]],[[],["choice",3]],[[],["bool",15]],[[],["bool",15]],[[]],[[["intoiterator",8],["field",8]],[["field",8],["vec",3]]],[[],[["vec",3],["fieldext",8]]],[[["usize",15],["u32",15]],["sqrttables",3]],[[],["ctoption",3]],[[]],[[]],[[["sync",8],["send",8],["fn",8],["clone",8]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["error",3],["result",4,["error"]]]],[[],[["error",3],["result",4,["error"]]]],[[]],[[],["ctoption",3]],[[],["ctoption",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[],[["error",3],["result",4,["error"]]]],[[],[["error",3],["result",4,["error"]]]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,[[["column",3,["advice"]],["usize",15],["advice",3]],[["result",4,["cell","error"]],["cell",3],["error",4]]],[[["usize",15],["column",3,["fixed"]],["fixed",3]],[["result",4,["cell","error"]],["cell",3],["error",4]]],[[],[["error",4],["result",4,["error"]]]],[[],[["error",4],["result",4,["error"]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["regionindex",3]],[[],["regionstart",3]],[[],["cell",3]],[[]],[[]],[[]],[[]],[[["permutation",3],["cell",3]],[["error",4],["result",4,["error"]]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["regionstart",3]],["bool",15]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["usize",15]],["regionindex",3]],[[]],[[]],[[["usize",15]],["regionstart",3]],[[]],[[]],[[["regionlayouter",8]]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[],["namespacedlayouter",3]],[[["regionstart",3]],["bool",15]],[[["string",3],["option",4,["string"]]]],[[["string",3],["option",4,["string"]]]],[[]],[[]],[[],[["error",4],["result",4,["error"]]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[],[["error",4],["result",4,["error"]]]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["string",3],["option",4,["string"]]]],[[]],[[],[["error",4],["result",4,["error"]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],null,null,[[["usize",15],["column",3,["advice"]],["fn",8],["fnmut",8],["advice",3]],[["result",4,["cell","error"]],["cell",3],["error",4]]],[[["usize",15],["column",3,["advice"]],["fn",8],["fnmut",8],["advice",3]],[["result",4,["cell","error"]],["cell",3],["error",4]]],[[["usize",15],["column",3,["fixed"]],["fn",8],["fixed",3],["fnmut",8]],[["result",4,["cell","error"]],["cell",3],["error",4]]],[[["usize",15],["column",3,["fixed"]],["fn",8],["fixed",3],["fnmut",8]],[["result",4,["cell","error"]],["cell",3],["error",4]]],[[]],[[]],[[],["regionshape",3]],[[]],[[],["hashset",3]],[[["permutation",3],["cell",3]],[["error",4],["result",4,["error"]]]],[[["permutation",3],["cell",3]],[["error",4],["result",4,["error"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["selector",3],["usize",15],["fn",8]],[["error",4],["result",4,["error"]]]],[[["selector",3],["usize",15],["fn",8]],[["error",4],["result",4,["error"]]]],[[["formatter",3]],["result",6]],[[]],[[],["usize",15]],[[]],[[["regionindex",3]]],[[],["regionindex",3]],[[],["usize",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,[[["column",3,["advice"]],["usize",15],["advice",3]],[["error",4],["result",4,["error"]]]],[[["usize",15],["column",3,["fixed"]],["fixed",3]],[["error",4],["result",4,["error"]]]],[[]],[[]],[[]],[[]],[[["any",4],["column",3,["any"]],["usize",15],["permutation",3]],[["error",4],["result",4,["error"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["selector",3],["usize",15]],[["error",4],["result",4,["error"]]]],[[]],[[["verifyfailure",4]],["bool",15]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],null,[[["verifyfailure",4]],["bool",15]],[[["string",3],["option",4,["string"]]]],[[]],[[["vec",3],["u32",15],["vec",3,["vec"]]],[["result",4,["error"]],["error",4]]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["result",4,["vec"]],["vec",3,["verifyfailure"]]]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["gate",3]],["bool",15]],[[["constraint",3]],["bool",15]],[[["region",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[["gate",3]],["bool",15]],[[["constraint",3]],["bool",15]],[[["region",3]],["bool",15]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["assigned",4]],["assigned",4]],[[],["assigned",4]],[[["expression",4]],["expression",4]],[[],[["advice",3],["column",3,["advice"]]]],[[["column",3,["advice"]],["usize",15],["advice",3]],[["error",4],["result",4,["error"]]]],[[["usize",15],["column",3,["fixed"]],["fixed",3]],[["error",4],["result",4,["error"]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["column",3]],[[],["advice",3]],[[],["fixed",3]],[[],["instance",3]],[[],["any",4]],[[],["selector",3]],[[],["permutation",3]],[[],["assigned",4]],[[],["expression",4]],[[],["constraintsystem",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["ordering",4]],[[["constraintsystem",3]]],[[["any",4],["column",3,["any"]],["usize",15],["permutation",3]],[["error",4],["result",4,["error"]]]],[[["str",15]]],[[["params",3],["provingkey",3]],[["error",4],["result",4,["error"]]]],[[],["constraintsystem",3]],[[],["usize",15]],[[],["usize",15]],[[],["option",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15],["region",3]],[["error",4],["result",4,["error"]]]],[[["selector",3],["usize",15]],[["error",4],["result",4,["error"]]]],[[]],[[["column",3]],["bool",15]],[[["advice",3]],["bool",15]],[[["fixed",3]],["bool",15]],[[["instance",3]],["bool",15]],[[["any",4]],["bool",15]],[[["selector",3]],["bool",15]],[[["permutation",3]],["bool",15]],[[]],[[]],[[]],[[],[["column",3,["fixed"]],["fixed",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["instance",3],["column",3,["instance"]]],[["any",4],["column",3,["any"]]]],[[]],[[["column",3,["fixed"]],["fixed",3]],[["any",4],["column",3,["any"]]]],[[["column",3,["advice"]],["advice",3]],[["any",4],["column",3,["any"]]]],[[]],[[]],[[]],[[["instance",3]],["any",4]],[[]],[[["fixed",3]],["any",4]],[[["advice",3]],["any",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["expression",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["evaluationdomain",3]],[[],["verifyingkey",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",6]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],[["instance",3],["column",3,["instance"]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["params",3],["verifyingkey",3]],[["error",4],["result",4,["provingkey","error"]],["provingkey",3]]],[[["params",3]],[["verifyingkey",3],["result",4,["verifyingkey","error"]],["error",4]]],[[],["usize",15]],[[]],[[],["assigned",4]],[[["assigned",4]],["assigned",4]],[[["expression",4]],["expression",4]],[[],["expression",4]],[[["column",3]],["bool",15]],[[["selector",3]],["bool",15]],[[["permutation",3]],["bool",15]],[[]],[[]],[[["constraintsystem",3]]],[[]],[[],[["option",4,["ordering"]],["ordering",4]]],[[],["permutation",3]],[[],["pinnedconstraintsystem",3]],[[],["pinnedverificationkey",3]],[[["string",3],["option",4,["string"]]]],[[]],[[["column",3,["advice"]],["rotation",3],["advice",3]],["expression",4]],[[["any",4],["column",3,["any"]],["rotation",3]],["expression",4]],[[["rotation",3],["column",3,["fixed"]],["fixed",3]],["expression",4]],[[["instance",3],["column",3,["instance"]],["rotation",3]],["expression",4]],[[["selector",3]],["expression",4]],[[["params",3]],["result",6]],[[],["selector",3]],[[]],[[["assigned",4]],["assigned",4]],[[],["assigned",4]],[[["expression",4]],["expression",4]],[[],[["error",4],["result",4,["error"]]]],[[],[["error",4],["result",4,["error"]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["any",4],["column",3,["any"]]],["result",4]],[[],["result",4]],[[["any",4],["column",3,["any"]]],["result",4]],[[["any",4],["column",3,["any"]]],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["msm",3],["verifyingkey",3],["curveaffine",8],["params",3]],[["guard",3],["result",4,["guard","error"]],["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",6]],null,null,null,null,null,null,null,null,null,null,null,null,[[["polynomial",3]],["polynomial",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["coeff",3]],[[],["lagrangecoeff",3]],[[],["extendedlagrangecoeff",3]],[[],["polynomial",3]],[[],["rotation",3]],[[]],[[]],[[]],[[]],[[]],[[["vec",3]],[["polynomial",3,["coeff"]],["coeff",3]]],[[["polynomial",3,["coeff"]],["coeff",3],["rotation",3]],[["extendedlagrangecoeff",3],["polynomial",3,["extendedlagrangecoeff"]]]],null,[[],[["extendedlagrangecoeff",3],["polynomial",3,["extendedlagrangecoeff"]]]],[[],[["polynomial",3,["lagrangecoeff"]],["lagrangecoeff",3]]],[[],["rotation",3]],[[],["rotation",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["extendedlagrangecoeff",3],["polynomial",3,["extendedlagrangecoeff"]]],[["extendedlagrangecoeff",3],["polynomial",3,["extendedlagrangecoeff"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["polynomial",3,["coeff"]],["coeff",3]]],[[],[["extendedlagrangecoeff",3],["polynomial",3,["extendedlagrangecoeff"]]]],[[],[["polynomial",3,["lagrangecoeff"]],["lagrangecoeff",3]]],[[["rotation",3]],["bool",15]],[[],["usize",15]],[[["extendedlagrangecoeff",3],["polynomial",3,["extendedlagrangecoeff"]]],["vec",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[["usize",15]]],[[["rangefull",3]]],[[["usize",15],["rangefrom",3,["usize"]]]],[[["usize",15],["rangefrom",3,["usize"]]]],[[["rangefull",3]]],[[["usize",15]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["vec",3]],[["polynomial",3,["lagrangecoeff"]],["lagrangecoeff",3]]],[[["polynomial",3,["lagrangecoeff"]],["lagrangecoeff",3]],[["polynomial",3,["coeff"]],["coeff",3]]],[[["polynomial",3]],[["extendedlagrangecoeff",3],["polynomial",3,["extendedlagrangecoeff"]]]],[[],["polynomial",3]],null,[[["rotation",3]],["bool",15]],[[["u32",15]]],[[],["rotation",3]],[[],["usize",15]],[[]],[[],["pinnedevaluationdomain",3]],[[],["rotation",3]],[[["rotation",3]],[["polynomial",3,["lagrangecoeff"]],["lagrangecoeff",3]]],[[["rotation",3]]],[[["polynomial",3]],["polynomial",3]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,[[["blind",3]]],[[]],[[["blind",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["msm",3]],[[],["guard",3]],[[],["accumulator",3]],[[],["blind",3]],[[]],[[]],[[]],[[]],[[["polynomial",3],["blind",3]]],[[["polynomial",3],["blind",3]]],[[]],[[["params",3],["polynomial",3],["blind",3]],["result",6]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["msm",3]],[[["blind",3]],["bool",15]],[[],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],null,[[],["vec",3]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[["blind",3]]],[[["blind",3]]],[[]],[[["blind",3]],["bool",15]],[[["params",3]]],[[["u32",15]]],[[],["result",6]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["msm",3]],[[]],[[["msm",3],["curveaffine",8],["params",3]],[["guard",3],["error",4],["result",4,["guard","error"]]]],[[]],[[]],[[]],[[]],[[]],[[],["result",6]],null,null,null,[[]],[[]],[[]],[[]],[[],["proverquery",3]],[[],["verifierquery",3]],[[]],[[]],null,[[["params",3]],["result",6]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],null,null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["msm",3],["curveaffine",8],["params",3]],[["guard",3],["error",4],["result",4,["guard","error"]]]],[[]],[[]],null,null,null,null,null,null,null,null,null,[[],["challengescalar",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["blake2bread",3]],[[],["blake2bwrite",3]],[[],["challengescalar",3]],[[],["challenge255",3]],[[]],[[]],[[]],[[]],[[],["result",6]],[[],["result",6]],[[],["result",6]],[[],["result",6]],[[],["result",6]],[[],["result",6]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[]],[[],["usize",15]],[[]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",6]],[[],["result",6]],[[],["result",6]],[[],["result",6]],[[]],[[],["challenge255",3]],[[],["challenge255",3]],[[],["challengescalar",3]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[],["result",6]],[[],["result",6]],[[],["result",6]],[[],["result",6]]],"p":[[8,"CurveExt"],[8,"CurveAffine"],[8,"FieldExt"],[8,"Group"],[8,"BatchInvert"],[3,"Coordinates"],[3,"SqrtTables"],[8,"Field"],[8,"Chip"],[8,"Layouter"],[3,"Region"],[3,"NamespacedLayouter"],[3,"SimpleFloorPlanner"],[3,"RegionIndex"],[3,"RegionStart"],[3,"Cell"],[3,"V1Pass"],[3,"V1"],[8,"RegionLayouter"],[3,"RegionShape"],[4,"VerifyFailure"],[3,"MockProver"],[13,"Cell"],[13,"Permutation"],[13,"Constraint"],[13,"Lookup"],[3,"Gate"],[3,"Constraint"],[3,"Region"],[4,"Any"],[4,"Expression"],[4,"Error"],[8,"Circuit"],[4,"Assigned"],[3,"ConstraintSystem"],[8,"Assignment"],[3,"Column"],[3,"Advice"],[3,"Fixed"],[3,"Instance"],[3,"Selector"],[3,"Permutation"],[3,"Constraint"],[3,"PinnedConstraintSystem"],[3,"VirtualCells"],[3,"VerifyingKey"],[3,"PinnedVerificationKey"],[3,"ProvingKey"],[8,"FloorPlanner"],[3,"Rotation"],[4,"Error"],[3,"Polynomial"],[3,"EvaluationDomain"],[3,"PinnedEvaluationDomain"],[3,"Coeff"],[3,"LagrangeCoeff"],[3,"ExtendedLagrangeCoeff"],[3,"Blind"],[3,"MSM"],[3,"Guard"],[3,"Accumulator"],[3,"Params"],[3,"ProverQuery"],[3,"VerifierQuery"],[8,"EncodedChallenge"],[3,"Blake2bRead"],[3,"Blake2bWrite"],[3,"ChallengeScalar"],[3,"Challenge255"],[8,"Transcript"],[8,"TranscriptRead"],[8,"TranscriptWrite"]]}\
+}');
+if (window.initSearch) {window.initSearch(searchIndex)};
\ No newline at end of file
diff --git a/rustdoc/latest/search.js b/rustdoc/latest/search.js
new file mode 100644
index 00000000..798e252d
--- /dev/null
+++ b/rustdoc/latest/search.js
@@ -0,0 +1 @@
+(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias"];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[results[i].id];obj.lev=results[i].lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){ar.push(results[entry])}}results=ar;var i,len,result;for(i=0,len=results.length;ib?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function getObjectNameFromId(id){if(typeof id==="number"){return searchIndex[id].name}return id}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){var tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){return obj[GENERICS_DATA].some(function(name){return name===val.name})}return false}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}else if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}if(in_args<=MAX_LEV_DISTANCE){if(results_in_args[fullId]===undefined){results_in_args[fullId]={id:j,index:index,lev:in_args,}}results_in_args[fullId].lev=Math.min(results_in_args[fullId].lev,in_args)}if(returned<=MAX_LEV_DISTANCE){if(results_returned[fullId]===undefined){results_returned[fullId]={id:j,index:index,lev:returned,}}results_returned[fullId].lev=Math.min(results_returned[fullId].lev,returned)}if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}if(results[fullId]===undefined){results[fullId]={id:j,index:index,lev:lev,}}results[fullId].lev=Math.min(results[fullId].lev,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type,query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var duplicates={};var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){if(item.is_alias!==true){if(duplicates[item.fullPath]){return}duplicates[item.fullPath]=true}var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :( "+"Try on DuckDuckGo?
"+"Or try looking in one of these:
The Rust Reference "+" for technical details about the language.
+//! Traits and structs for implementing circuit components.
+
+usestd::{fmt, marker::PhantomData};
+
+useff::Field;
+
+usecrate::{
+ arithmetic::FieldExt,
+ plonk::{Advice, Any, Assigned, Column, Error, Fixed, Permutation, Selector},
+};
+
+pubmodfloor_planner;
+pubusefloor_planner::single_pass::SimpleFloorPlanner;
+
+pubmodlayouter;
+
+/// A chip implements a set of instructions that can be used by gadgets.
+///
+/// The chip stores state that is required at circuit synthesis time in
+/// [`Chip::Config`], which can be fetched via [`Chip::config`].
+///
+/// The chip also loads any fixed configuration needed at synthesis time
+/// using its own implementation of `load`, and stores it in [`Chip::Loaded`].
+/// This can be accessed via [`Chip::loaded`].
+pubtraitChip<F: FieldExt>: Sized {
+ /// A type that holds the configuration for this chip, and any other state it may need
+ /// during circuit synthesis, that can be derived during [`Circuit::configure`].
+ ///
+ /// [`Circuit::configure`]: crate::plonk::Circuit::configure
+ typeConfig: fmt::Debug+Clone;
+
+ /// A type that holds any general chip state that needs to be loaded at the start of
+ /// [`Circuit::synthesize`]. This might simply be `()` for some chips.
+ ///
+ /// [`Circuit::synthesize`]: crate::plonk::Circuit::synthesize
+ typeLoaded: fmt::Debug+Clone;
+
+ /// The chip holds its own configuration.
+ fnconfig(&self) ->&Self::Config;
+
+ /// Provides access to general chip state loaded at the beginning of circuit
+ /// synthesis.
+ ///
+ /// Panics if called before `Chip::load`.
+ fnloaded(&self) ->&Self::Loaded;
+}
+
+/// Index of a region in a layouter
+#[derive(Clone, Copy, Debug)]
+pubstructRegionIndex(usize);
+
+implFrom<usize>forRegionIndex {
+ fnfrom(idx: usize) ->RegionIndex {
+ RegionIndex(idx)
+ }
+}
+
+implstd::ops::DerefforRegionIndex {
+ typeTarget=usize;
+
+ fnderef(&self) ->&Self::Target {
+ &self.0
+ }
+}
+
+/// Starting row of a region in a layouter
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pubstructRegionStart(usize);
+
+implFrom<usize>forRegionStart {
+ fnfrom(idx: usize) ->RegionStart {
+ RegionStart(idx)
+ }
+}
+
+implstd::ops::DerefforRegionStart {
+ typeTarget=usize;
+
+ fnderef(&self) ->&Self::Target {
+ &self.0
+ }
+}
+
+/// A pointer to a cell within a circuit.
+#[derive(Clone, Copy, Debug)]
+pubstructCell {
+ /// Identifies the region in which this cell resides.
+ region_index: RegionIndex,
+ /// The relative offset of this cell within its region.
+ row_offset: usize,
+ /// The column of this cell.
+ column: Column<Any>,
+}
+
+/// A region of the circuit in which a [`Chip`] can assign cells.
+///
+/// Inside a region, the chip may freely use relative offsets; the [`Layouter`] will
+/// treat these assignments as a single "region" within the circuit.
+///
+/// The [`Layouter`] is allowed to optimise between regions as it sees fit. Chips must use
+/// [`Region::constrain_equal`] to copy in variables assigned in other regions.
+///
+/// TODO: It would be great if we could constrain the columns in these types to be
+/// "logical" columns that are guaranteed to correspond to the chip (and have come from
+/// `Chip::Config`).
+#[derive(Debug)]
+pubstructRegion<'r, F: Field> {
+ region: &'rmutdynlayouter::RegionLayouter<F>,
+}
+
+impl<'r, F: Field>From<&'rmutdynlayouter::RegionLayouter<F>>forRegion<'r, F> {
+ fnfrom(region: &'rmutdynlayouter::RegionLayouter<F>) ->Self {
+ Region { region }
+ }
+}
+
+impl<'r, F: Field>Region<'r, F> {
+ /// Enables a selector at the given offset.
+ pub(crate) fnenable_selector<A, AR>(
+ &mutself,
+ annotation: A,
+ selector: &Selector,
+ offset: usize,
+ ) ->Result<(), Error>
+ where
+ A: Fn() ->AR,
+ AR: Into<String>,
+ {
+ self.region
+ .enable_selector(&||annotation().into(), selector, offset)
+ }
+
+ /// Assign an advice column value (witness).
+ ///
+ /// Even though `to` has `FnMut` bounds, it is guaranteed to be called at most once.
+ pubfnassign_advice<'v, V, VR, A, AR>(
+ &'vmutself,
+ annotation: A,
+ column: Column<Advice>,
+ offset: usize,
+ mutto: V,
+ ) ->Result<Cell, Error>
+ where
+ V: FnMut() ->Result<VR, Error>+'v,
+ VR: Into<Assigned<F>>,
+ A: Fn() ->AR,
+ AR: Into<String>,
+ {
+ self.region
+ .assign_advice(&||annotation().into(), column, offset, &mut|| {
+ to().map(|v|v.into())
+ })
+ }
+
+ /// Assign a fixed value.
+ ///
+ /// Even though `to` has `FnMut` bounds, it is guaranteed to be called at most once.
+ pubfnassign_fixed<'v, V, VR, A, AR>(
+ &'vmutself,
+ annotation: A,
+ column: Column<Fixed>,
+ offset: usize,
+ mutto: V,
+ ) ->Result<Cell, Error>
+ where
+ V: FnMut() ->Result<VR, Error>+'v,
+ VR: Into<Assigned<F>>,
+ A: Fn() ->AR,
+ AR: Into<String>,
+ {
+ self.region
+ .assign_fixed(&||annotation().into(), column, offset, &mut|| {
+ to().map(|v|v.into())
+ })
+ }
+
+ /// Constraint two cells to have the same value.
+ ///
+ /// Returns an error if either of the cells is not within the given permutation.
+ pubfnconstrain_equal(
+ &mutself,
+ permutation: &Permutation,
+ left: Cell,
+ right: Cell,
+ ) ->Result<(), Error> {
+ self.region.constrain_equal(permutation, left, right)
+ }
+}
+
+/// A layout strategy within a circuit. The layouter is chip-agnostic and applies its
+/// strategy to the context and config it is given.
+///
+/// This abstracts over the circuit assignments, handling row indices etc.
+///
+pubtraitLayouter<F: Field> {
+ /// Represents the type of the "root" of this layouter, so that nested namespaces
+ /// can minimize indirection.
+ typeRoot: Layouter<F>;
+
+ /// Assign a region of gates to an absolute row number.
+ ///
+ /// Inside the closure, the chip may freely use relative offsets; the `Layouter` will
+ /// treat these assignments as a single "region" within the circuit. Outside this
+ /// closure, the `Layouter` is allowed to optimise as it sees fit.
+ ///
+ /// ```ignore
+ /// fn assign_region(&mut self, || "region name", |region| {
+ /// let config = chip.config();
+ /// region.assign_advice(config.a, offset, || { Some(value)});
+ /// });
+ /// ```
+ fnassign_region<A, AR, N, NR>(&mutself, name: N, assignment: A) ->Result<AR, Error>
+ where
+ A: FnMut(Region<'_, F>) ->Result<AR, Error>,
+ N: Fn() ->NR,
+ NR: Into<String>;
+
+ /// Gets the "root" of this assignment, bypassing the namespacing.
+ ///
+ /// Not intended for downstream consumption; use [`Layouter::namespace`] instead.
+ fnget_root(&mutself) ->&mutSelf::Root;
+
+ /// Creates a new (sub)namespace and enters into it.
+ ///
+ /// Not intended for downstream consumption; use [`Layouter::namespace`] instead.
+ fnpush_namespace<NR, N>(&mutself, name_fn: N)
+ where
+ NR: Into<String>,
+ N: FnOnce() ->NR;
+
+ /// Exits out of the existing namespace.
+ ///
+ /// Not intended for downstream consumption; use [`Layouter::namespace`] instead.
+ fnpop_namespace(&mutself, gadget_name: Option<String>);
+
+ /// Enters into a namespace.
+ fnnamespace<NR, N>(&mutself, name_fn: N) ->NamespacedLayouter<'_, F, Self::Root>
+ where
+ NR: Into<String>,
+ N: FnOnce() ->NR,
+ {
+ self.get_root().push_namespace(name_fn);
+
+ NamespacedLayouter(self.get_root(), PhantomData)
+ }
+}
+
+/// This is a "namespaced" layouter which borrows a `Layouter` (pushing a namespace
+/// context) and, when dropped, pops out of the namespace context.
+#[derive(Debug)]
+pubstructNamespacedLayouter<'a, F: Field, L: Layouter<F>+'a>(&'amutL, PhantomData<F>);
+
+impl<'a, F: Field, L: Layouter<F>+'a>Layouter<F>forNamespacedLayouter<'a, F, L> {
+ typeRoot=L::Root;
+
+ fnassign_region<A, AR, N, NR>(&mutself, name: N, assignment: A) ->Result<AR, Error>
+ where
+ A: FnMut(Region<'_, F>) ->Result<AR, Error>,
+ N: Fn() ->NR,
+ NR: Into<String>,
+ {
+ self.0.assign_region(name, assignment)
+ }
+
+ fnget_root(&mutself) ->&mutSelf::Root {
+ self.0.get_root()
+ }
+
+ fnpush_namespace<NR, N>(&mutself, _name_fn: N)
+ where
+ NR: Into<String>,
+ N: FnOnce() ->NR,
+ {
+ panic!("Only the root's push_namespace should be called");
+ }
+
+ fnpop_namespace(&mutself, _gadget_name: Option<String>) {
+ panic!("Only the root's pop_namespace should be called");
+ }
+}
+
+impl<'a, F: Field, L: Layouter<F>+'a>DropforNamespacedLayouter<'a, F, L> {
+ fndrop(&mutself) {
+ letgadget_name= {
+ #[cfg(feature="gadget-traces")]
+ {
+ letmutgadget_name=None;
+ letmutis_second_frame=false;
+ backtrace::trace(|frame| {
+ ifis_second_frame {
+ // Resolve this instruction pointer to a symbol name.
+ backtrace::resolve_frame(frame, |symbol| {
+ gadget_name=symbol.name().map(|name|format!("{:#}", name));
+ });
+
+ // We are done!
+ false
+ } else {
+ // We want the next frame.
+ is_second_frame=true;
+ true
+ }
+ });
+ gadget_name
+ }
+
+ #[cfg(not(feature="gadget-traces"))]
+ None
+ };
+
+ self.get_root().pop_namespace(gadget_name);
+ }
+}
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/src/halo2/circuit/floor_planner.rs.html b/rustdoc/latest/src/halo2/circuit/floor_planner.rs.html
new file mode 100644
index 00000000..7aaa339c
--- /dev/null
+++ b/rustdoc/latest/src/halo2/circuit/floor_planner.rs.html
@@ -0,0 +1,32 @@
+floor_planner.rs - source
+
+
+
+
1
+2
+3
+4
+5
+6
+
+//! Implementations of common circuit floor planners.
+
+pub(super) modsingle_pass;
+
+modv1;
+pubusev1::{V1Pass, V1};
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/src/halo2/circuit/floor_planner/single_pass.rs.html b/rustdoc/latest/src/halo2/circuit/floor_planner/single_pass.rs.html
new file mode 100644
index 00000000..a08d709a
--- /dev/null
+++ b/rustdoc/latest/src/halo2/circuit/floor_planner/single_pass.rs.html
@@ -0,0 +1,476 @@
+single_pass.rs - source
+
+
+
+
+//! Metadata about circuits.
+
+usestd::fmt;
+
+/// Metadata about a configured gate within a circuit.
+#[derive(Debug, PartialEq)]
+pubstructGate {
+ /// The index of the active gate. These indices are assigned in the order in which
+ /// `ConstraintSystem::create_gate` is called during `Circuit::configure`.
+ index: usize,
+ /// The name of the active gate. These are specified by the gate creator (such as
+ /// a chip implementation), and is not enforced to be unique.
+ name: &'staticstr,
+}
+
+implfmt::DisplayforGate {
+ fnfmt(&self, f: &mutfmt::Formatter<'_>) ->fmt::Result {
+ write!(f, "Gate {} ('{}')", self.index, self.name)
+ }
+}
+
+implFrom<(usize, &'staticstr)>forGate {
+ fnfrom((index, name): (usize, &'staticstr)) ->Self {
+ Gate { index, name }
+ }
+}
+
+/// Metadata about a configured constraint within a circuit.
+#[derive(Debug, PartialEq)]
+pubstructConstraint {
+ /// The gate containing the constraint.
+ gate: Gate,
+ /// The index of the polynomial constraint within the gate. These indices correspond
+ /// to the order in which the constraints are returned from the closure passed to
+ /// `ConstraintSystem::create_gate` during `Circuit::configure`.
+ index: usize,
+ /// The name of the constraint. This is specified by the gate creator (such as a chip
+ /// implementation), and is not enforced to be unique.
+ name: &'staticstr,
+}
+
+implfmt::DisplayforConstraint {
+ fnfmt(&self, f: &mutfmt::Formatter<'_>) ->fmt::Result {
+ write!(
+ f,
+ "Constraint {}{} in gate {} ('{}')",
+ self.index,
+ ifself.name.is_empty() {
+ String::new()
+ } else {
+ format!(" ('{}')", self.name)
+ },
+ self.gate.index,
+ self.gate.name,
+ )
+ }
+}
+
+implFrom<(Gate, usize, &'staticstr)>forConstraint {
+ fnfrom((gate, index, name): (Gate, usize, &'staticstr)) ->Self {
+ Constraint { gate, index, name }
+ }
+}
+
+/// Metadata about an assigned region within a circuit.
+#[derive(Debug, PartialEq)]
+pubstructRegion {
+ /// The index of the region. These indices are assigned in the order in which
+ /// `Layouter::assign_region` is called during `Circuit::synthesize`.
+ index: usize,
+ /// The name of the region. This is specified by the region creator (such as a chip
+ /// implementation), and is not enforced to be unique.
+ name: String,
+}
+
+implfmt::DisplayforRegion {
+ fnfmt(&self, f: &mutfmt::Formatter<'_>) ->fmt::Result {
+ write!(f, "Region {} ('{}')", self.index, self.name)
+ }
+}
+
+implFrom<(usize, String)>forRegion {
+ fnfrom((index, name): (usize, String)) ->Self {
+ Region { index, name }
+ }
+}
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/src/halo2/lib.rs.html b/rustdoc/latest/src/halo2/lib.rs.html
new file mode 100644
index 00000000..895949af
--- /dev/null
+++ b/rustdoc/latest/src/halo2/lib.rs.html
@@ -0,0 +1,86 @@
+lib.rs - source
+
+
+
+
+//! # halo2
+
+#![cfg_attr(docsrs, feature(doc_cfg))]
+// Build without warnings on stable 1.51 and later.
+#![allow(unknown_lints)]
+// Disable old lint warnings until our MSRV is at least 1.51.
+#![allow(renamed_and_removed_lints)]
+// Use the old lint name to build without warnings until our MSRV is at least 1.51.
+#![allow(clippy::unknown_clippy_lints)]
+// The actual lints we want to disable.
+#![allow(
+ clippy::op_ref,
+ clippy::assign_op_pattern,
+ clippy::too_many_arguments,
+ clippy::suspicious_arithmetic_impl,
+ clippy::many_single_char_names,
+ clippy::same_item_push,
+ clippy::upper_case_acronyms
+)]
+#![deny(broken_intra_doc_links)]
+#![deny(missing_debug_implementations)]
+#![deny(missing_docs)]
+#![deny(unsafe_code)]
+
+pubmodarithmetic;
+pubmodcircuit;
+pubusepasta_curvesaspasta;
+modmulticore;
+pubmodplonk;
+pubmodpoly;
+pubmodtranscript;
+
+pubmoddev;
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/src/halo2/multicore.rs.html b/rustdoc/latest/src/halo2/multicore.rs.html
new file mode 100644
index 00000000..4f1d0242
--- /dev/null
+++ b/rustdoc/latest/src/halo2/multicore.rs.html
@@ -0,0 +1,30 @@
+multicore.rs - source
+
+
+
+
1
+2
+3
+4
+5
+
+//! An interface for dealing with the kinds of parallel computations involved in
+//! `halo2`. It's currently just a (very!) thin wrapper around [`rayon`] but may
+//! be extended in the future to allow for various parallelism strategies.
+
+pubuserayon::{current_num_threads, scope, Scope};
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/src/halo2/plonk.rs.html b/rustdoc/latest/src/halo2/plonk.rs.html
new file mode 100644
index 00000000..c34a257c
--- /dev/null
+++ b/rustdoc/latest/src/halo2/plonk.rs.html
@@ -0,0 +1,404 @@
+plonk.rs - source
+
+
+
+
+useff::Field;
+
+usesuper::super::{Coeff, Polynomial};
+usesuper::{Blind, Params};
+usecrate::arithmetic::{
+ best_multiexp, compute_inner_product, eval_polynomial, parallelize, CurveAffine, FieldExt,
+};
+usecrate::transcript::{EncodedChallenge, TranscriptWrite};
+
+usegroup::Curve;
+usestd::io;
+
+/// Create a polynomial commitment opening proof for the polynomial defined
+/// by the coefficients `px`, the blinding factor `blind` used for the
+/// polynomial commitment, and the point `x` that the polynomial is
+/// evaluated at.
+///
+/// This function will panic if the provided polynomial is too large with
+/// respect to the polynomial commitment parameters.
+///
+/// **Important:** This function assumes that the provided `transcript` has
+/// already seen the common inputs: the polynomial commitment P, the claimed
+/// opening v, and the point x. It's probably also nice for the transcript
+/// to have seen the elliptic curve description and the URS, if you want to
+/// be rigorous.
+pubfncreate_proof<C: CurveAffine, E: EncodedChallenge<C>, T: TranscriptWrite<C, E>>(
+ params: &Params<C>,
+ transcript: &mutT,
+ px: &Polynomial<C::Scalar, Coeff>,
+ blind: Blind<C::Scalar>,
+ x: C::Scalar,
+) ->io::Result<()> {
+ // We're limited to polynomials of degree n - 1.
+ assert!(px.len() <=params.nasusize);
+
+ // Sample a random polynomial (of same degree) that has a root at x, first
+ // by setting all coefficients to random values.
+ letmuts_poly= (*px).clone();
+ forcoeffins_poly.iter_mut() {
+ *coeff=C::Scalar::rand();
+ }
+ // Evaluate the random polynomial at x
+ letv_prime=eval_polynomial(&s_poly[..], x);
+ // Subtract constant coefficient to get a random polynomial with a root at x
+ s_poly[0] =s_poly[0] -&v_prime;
+ // And sample a random blind
+ lets_poly_blind=Blind(C::Scalar::rand());
+
+ // Write a commitment to the random polynomial to the transcript
+ lets_poly_commitment=params.commit(&s_poly, s_poly_blind).to_affine();
+ transcript.write_point(s_poly_commitment)?;
+
+ // Challenge that will ensure that the prover cannot change P but can only
+ // witness a random polynomial commitment that agrees with P at x, with high
+ // probability.
+ letiota=*transcript.squeeze_challenge_scalar::<()>();
+
+ // Challenge that ensures that the prover did not interfere with the U term
+ // in their commitments.
+ letz=*transcript.squeeze_challenge_scalar::<()>();
+
+ // We'll be opening `s_poly_commitment * iota + P - [v] G_0` to ensure it
+ // has a root at zero.
+ letmutfinal_poly=s_poly*iota+px;
+ letv=eval_polynomial(&final_poly, x);
+ final_poly[0] =final_poly[0] -&v;
+ letblind=s_poly_blind*Blind(iota) +blind;
+ letmutblind=blind.0;
+
+ // Initialize the vector `a` as the coefficients of the polynomial,
+ // rounding up to the parameters.
+ letmuta=final_poly.values;
+ a.resize(params.nasusize, C::Scalar::zero());
+
+ // Initialize the vector `b` as the powers of `x`. The inner product of
+ // `a` and `b` is the evaluation of the polynomial at `x`.
+ letmutb=Vec::with_capacity(1<<params.k);
+ {
+ letmutcur=C::Scalar::one();
+ for_in0..(1<<params.k) {
+ b.push(cur);
+ cur*=&x;
+ }
+ }
+
+ // Initialize the vector `G` from the URS. We'll be progressively collapsing
+ // this vector into smaller and smaller vectors until it is of length 1.
+ letmutg=params.g.clone();
+
+ // Perform the inner product argument, round by round.
+ forkin (1..=params.k).rev() {
+ lethalf=1<< (k-1); // half the length of `a`, `b`, `G`
+
+ // Compute L, R
+ //
+ // TODO: If we modify multiexp to take "extra" bases, we could speed
+ // this piece up a bit by combining the multiexps.
+ letl=best_multiexp(&a[half..], &g[0..half]);
+ letr=best_multiexp(&a[0..half], &g[half..]);
+ letvalue_l=compute_inner_product(&a[half..], &b[0..half]);
+ letvalue_r=compute_inner_product(&a[0..half], &b[half..]);
+ letl_randomness=C::Scalar::rand();
+ letr_randomness=C::Scalar::rand();
+ letl=l+&best_multiexp(&[value_l*&z, l_randomness], &[params.u, params.h]);
+ letr=r+&best_multiexp(&[value_r*&z, r_randomness], &[params.u, params.h]);
+ letl=l.to_affine();
+ letr=r.to_affine();
+
+ // Feed L and R into the real transcript
+ transcript.write_point(l)?;
+ transcript.write_point(r)?;
+
+ letchallenge=*transcript.squeeze_challenge_scalar::<()>();
+ letchallenge_inv=challenge.invert().unwrap(); // TODO, bubble this up
+
+ // Collapse `a` and `b`.
+ // TODO: parallelize
+ foriin0..half {
+ a[i] =a[i] +&(a[i+half] *&challenge_inv);
+ b[i] =b[i] +&(b[i+half] *&challenge);
+ }
+ a.truncate(half);
+ b.truncate(half);
+
+ // Collapse `G`
+ parallel_generator_collapse(&mutg, challenge);
+ g.truncate(half);
+
+ // Update randomness (the synthetic blinding factor at the end)
+ blind+=&(l_randomness*&challenge_inv);
+ blind+=&(r_randomness*&challenge);
+ }
+
+ // We have fully collapsed `a`, `b`, `G`
+ assert_eq!(a.len(), 1);
+ leta=a[0];
+
+ transcript.write_scalar(a)?;
+ transcript.write_scalar(blind)?; // \xi
+
+ Ok(())
+}
+
+fnparallel_generator_collapse<C: CurveAffine>(g: &mut [C], challenge: C::Scalar) {
+ letlen=g.len() /2;
+ let (mutg_lo, g_hi) =g.split_at_mut(len);
+
+ parallelize(&mutg_lo, |g_lo, start| {
+ letg_hi=&g_hi[start..];
+ letmuttmp=Vec::with_capacity(g_lo.len());
+ for (g_lo, g_hi) ing_lo.iter().zip(g_hi.iter()) {
+ tmp.push(g_lo.to_curve() +&(*g_hi*challenge));
+ }
+ C::Curve::batch_normalize(&tmp, g_lo);
+ });
+}
+
+
+
+
\ No newline at end of file
diff --git a/rustdoc/latest/src/halo2/poly/commitment/verifier.rs.html b/rustdoc/latest/src/halo2/poly/commitment/verifier.rs.html
new file mode 100644
index 00000000..f7b2550e
--- /dev/null
+++ b/rustdoc/latest/src/halo2/poly/commitment/verifier.rs.html
@@ -0,0 +1,386 @@
+verifier.rs - source
+
+
+
+