@aztec/protocol-contracts 0.0.1-commit.6230a0c → 0.0.1-commit.64b6bbb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/AuthRegistry.json +34 -34
- package/artifacts/ContractClassRegistry.json +29 -4011
- package/artifacts/ContractInstanceRegistry.json +41 -41
- package/artifacts/FeeJuice.json +29 -29
- package/artifacts/MultiCallEntrypoint.json +43 -43
- package/artifacts/PublicChecks.json +38 -38
- package/dest/protocol_contract_data.js +14 -14
- package/package.json +4 -4
- package/src/protocol_contract_data.ts +14 -14
package/artifacts/FeeJuice.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.18+
|
|
3
|
+
"noir_version": "1.0.0-beta.18+f1db9754dd26736a9bdbfd41c5ce15fe5d62ba6b",
|
|
4
4
|
"name": "FeeJuice",
|
|
5
5
|
"functions": [
|
|
6
6
|
{
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
|
-
"bytecode": "JwACBAEoAAABBIBIJwAABEglAAAASicCAwQCJwIEBAAfCgADAAQARhwAR0cGLQhGAS0IRwIlAAAAeicCAQRIJwICBAA7DgACAAEsAABDADBkTnLhMaApuFBFtoGBWF0oM+
|
|
74
|
-
"debug_symbols": "
|
|
73
|
+
"bytecode": "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",
|
|
74
|
+
"debug_symbols": "rZlRbhs5DIbv4uc8SJREirlKURRu6hYGDCdwkwUWRe6+pEaUnAISHHlfMp/pzD8USZGy/Wf34/D97de34/nn8+/d45c/u++X4+l0/PXt9Py0fz0+n8X6Z+f0jwfaPYaHnQ+we0x6pe0a/WaPuF2TvCa94nbF+hp5u1Ks17x79E4gBwGvkCswbgBO7vWogBV8MuAKEA3MEswSzBKDAVVIYGDKaM9CfQQLkDOIBrlCBgOqwGYpzgsEJ7eDV0gVvFl8rgDiGJCCWvSuoGHUt0pcC5hFIxuCAlZAs2hwC6irISvkChreDcTVCALqapTURRR/IiqIh1HciBkrsCjHrJA2SLqcyArRgCt4s3izgFl0XQW0bDagCrrADbBCskekZGCCKKtIUi2JaQPUSkgSFgRnYJagFlBIFTTdKShQBTSLZnkD/eeoIA9NEh/M0SBX4LABaWVuIM4niSF5b2CW4hgppPrPUJUpRAOzRFOO9VlUfC6ggpIC0uQmVuAKmlx0CrkCV0tWDzfACt4smqYCmib0ClwhmCWooIQuF8dYgSoUxwqYRetwA6xQolpAlSW8WYOJEl52YIAVdF9skAz0Lokh6wbZIFcIZglmiWaJZkn6LAkda9kgKYirKDFkggpZo8EK8lCSaDA7A21RXoE38M7FRs3myQigUbNp7W0UVRcKJaPUbOorhUK8Pd87dbtSNqJmIzLSNlRJu21U0p1bSZ+mLdrr3q3UbD40ykbQbME3UmVU0g1bqdnKOqhQqs/1ZR2FMDZqtrKOjbJRWUcuREZlHVwIK5V5UImNtPlUaraShULadrIrREax2XQdWXMEZWrlQslI22OlbmOjMsc2ykZtHdDWAbqOHAqlSmU0VGo232y+2aDZQD3Vegna3DK8vz/sbEh/e70cDjqjr6a2zPKX/eVwft09nt9Op4fdP/vTW/mn3y/7c7m+7i/yrsThcP4hVxH8eTwdlN4f+t1ufCvKNK53o8zaJpDgg4KfKETd7ZtCJGoK+NEHGCsEnQ5FIGBs91O43QMG8yDFOPIgzjywIETZDT0IS1GMeRRFHCuQ9tciQITt/gi3e5BaFqSsRx7kiYKc3ZqCg1EUeawAZALAwzzeGsWrKKTboxD1kFVr8TqRf1XzpBiloZgTutubRP5YDD5M4pBtQwbutRA9fVSY1KP0eLKSlt7ufFMJOX9USZNouGBFhS72eIZP+OFbShRh7AdNVFxO5ohMNOfGKpP6DAlaVHuXAebbU+vZGo00bRylFiYFlnKPaF9GprUCHbZbmKyC9WxfFOQcNHIBwiwdoEfbmg6YtOxZZTjnqYm4MOy6kO5uOYB39pzZQpj7TpMTYh46MS3NaGUR0sSNeVLiVVJ4GIwwqS6fuWmwD731SHpWChTTqEDDpECh7bLgrxoX3+5C32Tpqir+diHe3cRDureJB/w/mnige5v4reH043DydCV9CgQ/ajrRTWdAiK2+8+SUNjnoeeLmR3Z5WN9zR4h745KP0UNHprs1Ye8a0saGIrNDJ5JFJJBPCwcmL7O07/c0HIrzltFmIgMvSXAfJ5xoTYJ8k8iwIiFfL5oEuKsD8GckorNYyOfLNS9i6BLoliSSawtJgGsSyTWJ5NckYuwSsOgFNgnKd3uxKtEKXL4eXipwwAhNIq0lFbFlRL6bXJNon/AAs7t7IWsS8g10O+rI14GLEv0k75aSGridUgLjOJw4GfCxDxOZkL3C/Se8aMctQVpbCPdjBq8VuG9DAK4PGZ/qnRy7xNpm976Vlnyzt7gQ7BL3L2RRwvcO7iOtSSRqEsiLEm0IeHJ3L2RVon0+ky9m10YR9KSCz4sSrkvwvQtZlegfKQByGEpkWGs5X+XV/ul4+fCz7btqXY7776dDffnz7fx09e7rvy/2jv3s+3J5fjr8eLscVKn/9it/voCcsoDdV/1hQV5KJ6esL7y+J71SRtPXd3XlPw=="
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
"name": "balance_of_public",
|
|
@@ -122,8 +122,8 @@
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
},
|
|
125
|
-
"bytecode": "
|
|
126
|
-
"debug_symbols": "
|
|
125
|
+
"bytecode": "JwACBAEoAAABBIBGJwAABEYlAAAARScCAgQBJwIDBAAfCgACAAMARC0IRAElAAAARi0CAUUnAgIERScCAwQBOw4AAwACJiUAAAFAHgIAAgknAgMBASQCAAIAAABiJQAAAWYpAgACAO9SU00nAgMAASsCAAQAAAAAAAAAAAMAAAAAAAAAAC0IAQUnAgYEBQAIAQYBJwMFBAEAIgUCBi0KBgctDgIHACIHAgctDgMHACIHAgctDgEHACIHAgctDgQHLQsFAQAiAQIBLQ4BBS0IAQEnAgIEBQAIAQIBJwMBBAEAIgUCAgAiAQIDPw8AAgADJwICBAEAKgECBC0LBAMnAgEAAAoqAwECJwIBAQAKKgIBBCQCAAQAAAEfJQAAAXgeAgABAC8qAAMAAQACHAoCAwYcCgMBABwKAQIGLQoCASYoAAAEBHhGDAAABAMkAAADAAABZSoBAAEF2sX11rRKMm08BAIBJioBAAEF3Btu6/u2vEM8BAIBJioBAAEFursh14IzGGQ8BAIBJg==",
|
|
126
|
+
"debug_symbols": "nZbdjuIwDIXfJde9SBznx7zKaIQKlFGlqqAOrLRCffd1mLilKyUawQU5dehXO8cJfahTd7h/7fvxfPlWu4+HOkz9MPRf++FybG/9ZeToQ+n0FZza2UZFvkAe3HMg+zNEtTOmUUaHLAxkYa0ImUKZQok4iTiJeCPCZRG0CBRBWUR5RJQ0SIDkfwRoIyIBbRKUhUEREgGJgESsRDClgUm4LJxEXPqNT4Ky8BLxEgkSiSCCSwZgkXIG5ljNQPBJuCzMMzLPjRJb9rep65IrLz6xe9d26sab2o33YWjUn3a4P3/0fW3H53hrJ57VjerGE48MPPdDl9TcrHfr8q0RNea7I3JKAnCwIZgygXwq6Ukgj2Eh+G0OUCYYHSUHww23EIJ9r4pYqqJGcBiF4HwoEVylCu4gqQLILYToNgRfJkAUIy2tNaAJG0CopMCfJQeWsEBsjBtIrLrhrEA0aV2EUBliHSylrIsJRNuuqhgCvPkzgvexf4+xWgIQbZlRaU4MJAyMdl1R8/s0LNFq7Iuz/6dRay5DJJ5Y7UvNZSoIF8VV/+JpDG/tkEDFk6LSn4RBTooApRRMtTfB+aU3IRRPG0M1iDZhgWiLxSOrshp+bU8PGoqIysEJYWlwwtKhVyuEeBXXOjAWk7C1jYrSFtZV0qibgi+mUHkxag0eaWGQWbcqsj3zJ1+2x37avMTMCTb17WHo8uX5Ph5fZm9/rzIjL0HX6XLsTvepS6T1TSj9HX9403j/md50+CLoJsDnnB79Dw=="
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
"name": "check_balance",
|
|
@@ -164,8 +164,8 @@
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
},
|
|
167
|
-
"bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAARicCAgQBJwIDBAAfCgACAAMARBwAREQGLQhEASUAAABsJwIBBEUnAgIEADsOAAIAASwAAEMAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/
|
|
168
|
-
"debug_symbols": "
|
|
167
|
+
"bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAARicCAgQBJwIDBAAfCgACAAMARBwAREQGLQhEASUAAABsJwIBBEUnAgIEADsOAAIAASwAAEMAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/AAAAAmJQAAAaceAgACCScCAwEBJAIAAgAAAIglAAABzR4CAAIBCiICQwMWCgMEHAoEBQAEKgUCBCcCAgEACioDAgUkAgAFAAAAuycCBgQAPAYGASkCAAMA71JTTScCBQABKwIABgAAAAAAAAAAAwAAAAAAAAAALQgBBycCCAQFAAgBCAEnAwcEAQAiBwIILQoICS0OAwkAIgkCCS0OBQkAIgkCCS0OBAkAIgkCCS0OBgktCwcDACIDAgMtDgMHLQgBAycCBAQFAAgBBAEnAwMEAQAiBwIEACIDAgU/DwAEAAUnAgQEAQAqAwQGLQsGBScCAwAACioFAwQKKgQCAyQCAAMAAAFzJQAAAd8eAgADAC8qAAUAAwAEHAoEBQYcCgUDABwKAwQGDCoEAQMKKgMCASQCAAEAAAGmJQAAAfEmKAAABAR4RQwAAAQDJAAAAwAAAcwqAQABBdrF9da0SjJtPAQCASYqAQABBQ7+IEnrN048PAQCASYqAQABBbq7IdeCMxhkPAQCASYqAQABBYRygMKEIwtGPAQCASY=",
|
|
168
|
+
"debug_symbols": "nZZLbuMwDIbv4nUWEkk9mKsUReGmbmHAcAI3GWBQ5O5D1aIfM5AwTRbhLyr+QpGUrK/mrXu9fbz04/v5szk+fTWvUz8M/cfLcD611/48iverMenLWmyOeBAbmyOJBZwt2mx9cwxiScacrJ+tM7Pfudl6GVubhMsiqCfELCKqCCKiCPazAGOzAFChU6hTqB5SD6knRTMLUsFZeFQRswj6FyGHAVGB0WXBCmQBgkkizgINqlCPVY9VD6gHJAyQJSOSCvVQ+g0mEbNw6nHq8T6LIBECJyEeTI9HAWKaipwFq4eTR4pHhlSox4Yk7vdDo73wcp26LrXCpjmkZS7t1I3X5jjehuHQ/GqH2/ePPi/t+G2v7SSzssRufBMrwPd+6JK6H9anTfnRgNbnpwNiXAAOdgRbJrAHJbCnsBD8PgYoE6yJlAnWmpUQ8KFVkCmtokagoDEE4mIeXJngyStB0lDMgy8TkDgD0FMpC9UIGDQCR1SKINYicBlAcrSsSXgki25Tyb+7qYbwqITgFwD9oJBuLaTkrhRCrR9hSYMFdgsi7vNgsYyAqHsSN80k+35PoEoQ8lmiEAkLBWPcU1x1aznNpzVsTJlSa0wHy2rWogLznhAq+bAxZgTI6+YxxloWgIhlBpcZFHjp8IhrTu3/hyHn+lrbTXH/CaPWYZZ1q1s0vtRhUEG4qHX1m6rG8Mg+cdaV9glUWpQp6MEfoBQCVLsTnF+6E8qHJvgaxNiwQAwWzz2oFNWv/enBQBFROTshLB3OxdO7thCWLK7roFgKAk1tp5K2BbpKGPWi0KYoXEwG1ho88sJgu+5V+r71/LxBcf9Of5ZRe+qn3VX6nlhT374OXR6+38bTZvb6+6IzehW/TOdT93abukTa3Mfl+0leZYGf06VcBrLbonu+p7/+Aw=="
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
"name": "claim",
|
|
@@ -2015,9 +2015,9 @@
|
|
|
2015
2015
|
}
|
|
2016
2016
|
}
|
|
2017
2017
|
},
|
|
2018
|
-
"bytecode": "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NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF669hiOLaeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrk36LU5OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL137W44tp5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla5MaunB66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla2/h2HJ66dqcXro2p5euzemla3N66dqcXro2p5euvZNjy+mla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzeml63B66TqcXroOp5euw+ml63B66TqcXroOp5euw+ml63B66TqcXroOp5euw+ml63B66TqcXroOp5euE+DYZnJsC3JsC3FsOf1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9apwLHl9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91KnFsOf1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vnTs5tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rZHFsOf1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bJ5thy+t86nP63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",
|
|
2019
|
-
"debug_symbols": "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JC5JXJK4JHHJWve6aMF+wyWJSxKXJNc4a93rjtBwSeKSxCWJSxKXJC5Z614XrbPfcEniksQlyTXOWve6IzRckrgkcUniksQliUvWutdFS/YbLklckrgkucZZ6153hIZLEpckLklckrgkccla97pog/2GSxKXJC5JrnHWutcdoeGSxCWJSxKXJC5JXLLWvS7aZL/hksQlhUuKa5y17nVHJwaxE5NYxEG8xrbWvS5aa0QjOjGI0Bo0XFK4pHBJ4ZLCJYVLCpesda+LZp2YxCIOIjRcUpyXFOclhUuKa5y17nVHaLikcEnhkuK8ZK17LTvjObazwrrGWTGInZjEIg7ivOJyyYoHbbQzGtGJQezEJBZxEOcVT5fsCC2hJbSEltAS2umS47fn+lr3uiNjK8a2rnFWZCaLmSxmspjJYiaLmSxmsqANaAPagDagDWgD2mBsg5kczORgJiczOZnJyUxOZnIyk5OZnNAmtAltXrS17nXHRjTN+lr3eo5irXvdsROTWMRBvGZyrXvdsRGNCK1Ba9AatAatQWvQjLEZYzMjOjGInZjEIg4iM+nQHJpDc2gOzaGdLlmzfrpkjDMO4rzi6ZIdG9GITgxiJx6049dP+1r3uuMgziueLtmxEY3oxCB2IrQOrUPr0BJaQjtc8rzBeEYnxhHrjJ2YxCIO4rzi4RLFRjSiE6EVtIJW0ApaQRvQBrQBbUAb0Aa0AW1AG9AGtAltQpvQJrQJbUKb0Ca0CW1etHPdq2IjGtGJQezEJBZxEKE1aA3a4ZLnXdszHjTrZwxiJyaxiIM4r3i4RLERjQjNoBk0g2bQDJpBc2gOzaE5NIfm0ByaQ3NoDi2gBbSAFtACWkALaAEtoAW0Du1wyfOe9hmN6MQgdmISiziI84qHSxShJbSEltASWkJLaAktoRW0glbQClpBK2gFraAVtII2oA1oA9qANqANaAPagDagDWgT2oQ2oU1oE9qENqFNaBPaFC3Oda+KjWhEJwaxE5NYxEGE1qA1aA1ag9agNWgNWoPWoDVoBs2gGTSDZtAMmkEzaAbNoDk0h+bQHJpDc2gOzaE5NIcW0AJaQAtoAS2gBbSAFtACWofWoXVoHVqH1qF1aB1ah9ahJbSEltASWkJLaAktoSW0hFbQClpBK2gFraAVtIJW0AragDagDWgD2oA2oA1oA9qANqBNaBPahDahTWgT2oQ2oU1ouKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5puKThkoZLGi5pyyV5xoMW6786MYideNBinvGgHU+VinPdq+JByzOeLtmxEY140LKfMYgHLccZD1qtf1vEg1b+r2+/+T/f/fzDd3/+8fv/+eYP/3z+8b/+8dNf/v7DX3/af/z7//2b/ubPP//w448//Pef/vbzX//y/X/+4+fv//TjX/9y/N03j+P/juP5P1p+a+2Pz3/c9n//D+v1rVX+8fm5ffz9o3/7PISffzr/ufn89jkpxx/b8ccY31p/HO83vf+5p78Nt/3+Y9DPEej9z1O4b58f0Hr/0/nPP+bxfj/ef7zDj7fr3z/nP+bx1/HvW9z1juc5p19bGI9vox9/ndc7nlcN9mT8619//Nf/Aw==",
|
|
2020
|
-
"verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdwAAAAAAAAAAAAAAAAAAAADgP/lLerko/hiriWnBP+K5AAAAAAAAAAAAAAAAAAAAAAAABmyLPSzjG3iBfa3quTIwAAAAAAAAAAAAAAAAAAAP3tasvvMvhHkQHPGOE4T0imAAAAAAAAAAAAAAAAAAAAAAAW1EL8AIg+
|
|
2018
|
+
"bytecode": "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",
|
|
2019
|
+
"debug_symbols": "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",
|
|
2020
|
+
"verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdwAAAAAAAAAAAAAAAAAAAADgP/lLerko/hiriWnBP+K5AAAAAAAAAAAAAAAAAAAAAAAABmyLPSzjG3iBfa3quTIwAAAAAAAAAAAAAAAAAAAP3tasvvMvhHkQHPGOE4T0imAAAAAAAAAAAAAAAAAAAAAAAW1EL8AIg+veYfWyFWXqoAAAAAAAAAAAAAAAAAAABtz/i5xexraHjITpm9mzwQBQAAAAAAAAAAAAAAAAAAAAAACbOa+cOMmjJPphG4sqn7AAAAAAAAAAAAAAAAAAAAgXPk/J5fnygHA61mDjKQg2UAAAAAAAAAAAAAAAAAAAAAAA7kjWgordrxrZzOZT1iwQAAAAAAAAAAAAAAAAAAAL1Kxh2GIDC9y1VzXh4US8lbAAAAAAAAAAAAAAAAAAAAAAAv2DhBI93uhgoOD87bvTMAAAAAAAAAAAAAAAAAAADfUHaXROyVuiYmriVaCgUGJwAAAAAAAAAAAAAAAAAAAAAALXmk/a86uYYwsGoB0EgNAAAAAAAAAAAAAAAAAAAAYGHbi40FMY4nbHMUKNVZprMAAAAAAAAAAAAAAAAAAAAAAABRaAuI8KHHTAjOCuH9nwAAAAAAAAAAAAAAAAAAADDHf9aCeJeIBoI1O/JfdxQKAAAAAAAAAAAAAAAAAAAAAAAFrrN8srR4wBotTYsf5t0AAAAAAAAAAAAAAAAAAADjx8fLdyIoWhf6k7ax2kS0QwAAAAAAAAAAAAAAAAAAAAAAKwJJ2+HPpvztI6VdNAsvAAAAAAAAAAAAAAAAAAAAAAiinpXMtUIE6NCiej3JTRsAAAAAAAAAAAAAAAAAAAAAAB+7FOzj1CONwEqpqUlOxAAAAAAAAAAAAAAAAAAAALAl0Fo9eKpCtOvEyh156vHbAAAAAAAAAAAAAAAAAAAAAAAljtpNmqTp/J7Clp3YccYAAAAAAAAAAAAAAAAAAADUe3j4e/YTCKId1flr4T7ZjAAAAAAAAAAAAAAAAAAAAAAAL5mYkvzw/25NwpmXIv9pAAAAAAAAAAAAAAAAAAAAJzF9LwqADNbKcfUoT8KtTa8AAAAAAAAAAAAAAAAAAAAAAA518y3hD5iLVkztpJIXywAAAAAAAAAAAAAAAAAAAB5J8PjTkTM7ZuCKjl4o1N0dAAAAAAAAAAAAAAAAAAAAAAAGAYYZQRXqMgE23QeNvXEAAAAAAAAAAAAAAAAAAADXZSytT/7bmtUUvtUXXNWcDAAAAAAAAAAAAAAAAAAAAAAALzxAtw6k/wKUOXiU8y3zAAAAAAAAAAAAAAAAAAAAh1sDs0YAFv4LLEVlJprO148AAAAAAAAAAAAAAAAAAAAAAAVcCVujDZ8JOy6/irSpRgAAAAAAAAAAAAAAAAAAAB7KwfC8+691oN8CQQz+lwvEAAAAAAAAAAAAAAAAAAAAAAAgKb3j/U+k9wnUUcp1TAYAAAAAAAAAAAAAAAAAAAALJj9Uc0XX0APnLFilFw6wlAAAAAAAAAAAAAAAAAAAAAAAETNOEc61HmsSmRtFEa3pAAAAAAAAAAAAAAAAAAAAmLZKvvdYbYuwTY7nQh/ly0MAAAAAAAAAAAAAAAAAAAAAAAKQzJrf8f1egYEDKZI6MgAAAAAAAAAAAAAAAAAAABFfeduNxoQDwfDMywPcUEHrAAAAAAAAAAAAAAAAAAAAAAAdrqY4ljp08fTbYwdEnSYAAAAAAAAAAAAAAAAAAADVD8DDNHAP0OAn+P5T32yl9wAAAAAAAAAAAAAAAAAAAAAAD+R0jTQJPH5NSDAd0nbQAAAAAAAAAAAAAAAAAAAASoCx6fzD4f/lu4iVF/lEyOEAAAAAAAAAAAAAAAAAAAAAACWWz03vMcRx1iIi11ykogAAAAAAAAAAAAAAAAAAALAY54qhwDx8sEZfKG9oRq2/AAAAAAAAAAAAAAAAAAAAAAAKqlLhCnTcz+9mg1eSr+cAAAAAAAAAAAAAAAAAAAB2GImQP4SYLQs02hSFpe9itwAAAAAAAAAAAAAAAAAAAAAALoaX5sEWzrzhfL9/SzW4AAAAAAAAAAAAAAAAAAAAv3ryXkB9ZZhm7oQ+O2mCViYAAAAAAAAAAAAAAAAAAAAAAAsFCLDG/KxiJFQo+0ZIowAAAAAAAAAAAAAAAAAAAD9qmA9XQ4EU9ydlWAnuA/GzAAAAAAAAAAAAAAAAAAAAAAAka9wbUHjajcxGyTxdYIcAAAAAAAAAAAAAAAAAAAD28r8ZJHXcrQl3O+Zdrfy5tAAAAAAAAAAAAAAAAAAAAAAABB0ypf568QSSV/esZ9IbAAAAAAAAAAAAAAAAAAAAwCWfY0bE5kg+CPB6jFXRTpUAAAAAAAAAAAAAAAAAAAAAACEieUlc5yCzS5m0MELZBwAAAAAAAAAAAAAAAAAAAEdtT+3GDW/To/ckOjNvDgkoAAAAAAAAAAAAAAAAAAAAAAAbPUBXHqkjaLQvdh49w/YAAAAAAAAAAAAAAAAAAACNmFLLl3+xY7+lDwXKKr69OQAAAAAAAAAAAAAAAAAAAAAAJHSDnNPcZgPHZQiUilkAAAAAAAAAAAAAAAAAAAAAgBzt6EDgoOY0jC//ON1NIusAAAAAAAAAAAAAAAAAAAAAACZPRoQlbOhUJKlectsQsgAAAAAAAAAAAAAAAAAAAJ8B1Sj4iOlvWOkCRgFvdY1JAAAAAAAAAAAAAAAAAAAAAAAb0ztkdJx+OEb63dzxQmQAAAAAAAAAAAAAAAAAAAATpbR45RZAYe0VctJ1/7wNCAAAAAAAAAAAAAAAAAAAAAAALgfVwZKS17JASrznZIQDAAAAAAAAAAAAAAAAAAAAC5bugqA0Qx5pwHUIaCXHd3oAAAAAAAAAAAAAAAAAAAAAABGsq2Yaxu3xjh4fa5UIdAAAAAAAAAAAAAAAAAAAAAEPewV1NkVn3VY9OQJZ8GbXAAAAAAAAAAAAAAAAAAAAAAAdWVOADQSVaafIVOdvD24AAAAAAAAAAAAAAAAAAADwFqh5mtaMg0fxrw5wYf4YxwAAAAAAAAAAAAAAAAAAAAAAGiOzaFB574u6K9FzjfAPAAAAAAAAAAAAAAAAAAAA7FtRtEs6V85xqDvct15CXogAAAAAAAAAAAAAAAAAAAAAABbiduOnri7I7zKlsmklzAAAAAAAAAAAAAAAAAAAAOTqrEJbEc/inCCsNfg5Z88nAAAAAAAAAAAAAAAAAAAAAAANtd9mnxD5+qUII44hxgMAAAAAAAAAAAAAAAAAAADyaJzDAZ9cOoE6iw8RsOVmfAAAAAAAAAAAAAAAAAAAAAAAB0K2AbvT1xDK8APuT55mAAAAAAAAAAAAAAAAAAAAimTOr/kaYZyjnlG60TXIK98AAAAAAAAAAAAAAAAAAAAAACzm0843nAMB46Sluvo3GwAAAAAAAAAAAAAAAAAAAIal0tSfsR3JEC73/cHrk3xlAAAAAAAAAAAAAAAAAAAAAAAbnmTkJm7ica2ZzaVef4UAAAAAAAAAAAAAAAAAAADYQQqp0oPdgGfQ3vOKFDYI4wAAAAAAAAAAAAAAAAAAAAAAAwS8F0pxtKFGxAYM5hkvAAAAAAAAAAAAAAAAAAAAQ1IH/zudtGhAV6EzzEGXDY0AAAAAAAAAAAAAAAAAAAAAABHFyIqCjVdYsXFPKs/xRwAAAAAAAAAAAAAAAAAAAIcqm4sakYNhi249etbF9bzHAAAAAAAAAAAAAAAAAAAAAAAuKgfjkbdliiUw7kzHlk4AAAAAAAAAAAAAAAAAAAD9/PbCaBRS1FZxSEFzJlrxIwAAAAAAAAAAAAAAAAAAAAAAAIrAufSqN4Vqs0NuFVtVAAAAAAAAAAAAAAAAAAAAg/fI6nmKGNW0p8WfIpB3AhYAAAAAAAAAAAAAAAAAAAAAABUhbvvakE2mViP39Gd8QgAAAAAAAAAAAAAAAAAAAPSmxv/fgKctt4di4jfVjNX2AAAAAAAAAAAAAAAAAAAAAAAmgUpZgDVVY1o7bf0FbRkAAAAAAAAAAAAAAAAAAAD0W42WBpIx9I4NDDTVdZOmpgAAAAAAAAAAAAAAAAAAAAAAC53DI5kCV5YAWy9owVmRAAAAAAAAAAAAAAAAAAAAdQ4bXLmXo634VAv1W7kmTsQAAAAAAAAAAAAAAAAAAAAAAB9s1bbUP2d5iuRlXAFvNwAAAAAAAAAAAAAAAAAAAFlsxhg4SPMsYOx0/ivNdrIPAAAAAAAAAAAAAAAAAAAAAAAO1i0QsBk1XwCLRkEtDi0AAAAAAAAAAAAAAAAAAAAgIN/auMnbgzW8o8goSxWFsgAAAAAAAAAAAAAAAAAAAAAAI6KQbQMgSqT3m1uAuS6qAAAAAAAAAAAAAAAAAAAAkRbE0V98mlHxfDgw/nweO0IAAAAAAAAAAAAAAAAAAAAAACSuyuMy20jgO5f8ZFp/BQAAAAAAAAAAAAAAAAAAAINMXpOM+ei9S9WEfiQIQHJ2AAAAAAAAAAAAAAAAAAAAAAAIUktAz4e2aBGQIvaRz6wAAAAAAAAAAAAAAAAAAADmmd+GBzFDfsV/mJD+SzpCBQAAAAAAAAAAAAAAAAAAAAAADh6dQyfmNfVH2meu9X6GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4oU5aL5wJJQqJ1+n1gJkLvQAAAAAAAAAAAAAAAAAAAAAAJoP8dkdg+C1zy1w6TJPRAAAAAAAAAAAAAAAAAAAAjuQ9AGjXscfZuoR2fhu1mqIAAAAAAAAAAAAAAAAAAAAAACsj2jh3bKEyWDStNxVbQgAAAAAAAAAAAAAAAAAAAGvMegX/lalrKJQkxfczZw2WAAAAAAAAAAAAAAAAAAAAAAAAxDcm91tv2g3iLODg36sAAAAAAAAAAAAAAAAAAAAdCgnXF47JO614WPluZPC0jQAAAAAAAAAAAAAAAAAAAAAAL5tuC04sAZaN5cMkgqp9AAAAAAAAAAAAAAAAAAAAFLmaKhz1vbFNGPy31tW7G0MAAAAAAAAAAAAAAAAAAAAAABibwBFKqYLGRXSxHbsAPgAAAAAAAAAAAAAAAAAAAIFYESpGMQpiuEn23VYsLIaUAAAAAAAAAAAAAAAAAAAAAAASkF6WwsjbCGXWk491oyQ="
|
|
2021
2021
|
},
|
|
2022
2022
|
{
|
|
2023
2023
|
"name": "claim_and_end_setup",
|
|
@@ -3867,9 +3867,9 @@
|
|
|
3867
3867
|
}
|
|
3868
3868
|
}
|
|
3869
3869
|
},
|
|
3870
|
-
"bytecode": "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eunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrj2GY8vppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWuTfouT00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX/pZjy+mla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqkhi6cXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dpbOLacXro2p5euzemla3N66dqcXro2p5euzemla//LseX00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00nU4vXQdTi9dh9NL1+H00nU4vXQdTi9dh9NL1+H00nU4vXQdTi9dh9NL1+H00nU4vXQdTi9dh9NL1wlwbDM5tgU5toU4tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rVODYcvrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpU4tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+t86dHFtO/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dbI4tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/r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",
|
|
3871
|
-
"debug_symbols": "tZ3djuzGkW7fRde6qPjJiEi/ysAwPB7NQIAgGxr7AAeG3v0UmRlcLfk0Vepu+8L8tvauWMwkYxVZzK7+5zf/9d1//uN//vT9j//91//95g//8c9v/vOn73/44fv/+dMPf/3Ln//+/V9/fP7Xf37zOP5P/Js/aP787Tdy/knymz/E8w9SezvXVh97K3ure2t763s79jb2dtfTXU93Pdv1bNezXc92PXvWy2P7fH0d29rbubb+2Nvn6+exffLkcYTsUB3mDuP4N3KE7FAd5g7xrCt6BOmgHayDd3gOVuwZ8vgrP8KBGEc4Kh8DyblDPToclY+xlXawDt5hdDjqHAOdx6uOkU7tYB28w+jQuzGzQ3WYK+jj0UE6aAfr4B2edfRxhOowd5BHh2cdlSM86apHyA7VYe5wnE8rSAft8KSrHcE7jA5HHT/CUefYseM80jjCnh817WAdvMPocMzPfJ70epz0muuk0/S9HXsbe5t7W3u7TmKtx97K3ure7nq169WuV7te7Xq169WuNx/nSa/Hka1j63s79jb2Ns+T3s4D9jiCdfAOYwfRdWabWAfvMDrEOqHtOGArVIe5gz46yDrp7TgGx0lvts8bOyc6jjA6RIdcJ7QdjbzC3OFo5RWkg6+T3s5mPkZ6NvMZ5g7j0UE69G4M6+AdRofokB2qw24Mi0cHW2e2HQ2/wugQHXKd9Jb79LXjZFrBO4wO0SE7VIe5TnE7zqkVpIOvk96O0+g46e04j46T3qrnp3p+qudn9vy0OGyJ43nS23nSP6seDTTWJtYm16bW5llrPP+99/uEP/8wjj8cR/Pctefm+d/i/AfHCJ5/yPMPx4T//PxTv+H86e8/fffd8Tdv3oGe70t/+/NP3/3492/+8OM/fvjh22/+z59/+Mf5j/73b3/+8dz+/c8/Pf/2OdHf/fhfz+2z4H9//8N3R/r5W179eP+lGqH71ZpqV4GMVyt4jl0gzvfJ3/v6kb0DIW9eX6++/hOD96O7zxd7TdDz5V2Xh+0Cz+hXBR+vl9Dj3Fsl1O1DJbyyS4zH/FiJ6yB8uMTQx1XCPzYXmd4lcsZnS9Tj8cES10Et0Q+VKJOrhH9oL0KHXW0V42N7cXXmM35oOuOhV3M+7GMHdc5rLuacH5uLx+OaC7PPD6Q+ViKvvXjUh45IyKMu16l8sIRTQj9WIq6BPC/jP3hE5Doi4h8rIfXJgyoP6YMqj+C943mt+/qb13VEPIMeGfqLClrvl6jZjTptfGgfnoq43obGeG8f7K7JHno12S/61PTlvZjXG5HPeLy7F3pzLSHRk/m8W+F4hP2yhN0c0uf/WlpH5AR/XsL9sorfnRh12VMe8837wL9UGe9XeV4w7xo235xc81cV4qbC43ofeMb5sRoi3fD2dj7+pUbdnWHXpD7PMGrIfH03InpGn9f08rGhvK3xxqC/q8ZkSme8P6Wu/97pmPNx7casd3fjtmftuuZ61Lvq8bsz1OyaUH/T9r9S6G2Jwen1vPR7r8TtRbByEfzmMvrX47g5P58fOPUV7PMNSd8tMe8u5XsY7m8K/FLC4/ZCvK7rV31z8Sm/PKBDbt7SkouM9Hq3xN1ePO+hei/izdvJR0u8uaP4XSWyrhLzYyUGF+IjPzaQery5ln/3iNyeFTlpsXfPivr8WTE/f1bU58+K+vxZUZ8/K+rzZ0X9W8+KeQlrurx3VtwWuG5pnpeg755XkTfGM78uXe3N2+mvr0/iZiaCy/h8/44mbsZR107UfP+GJu+uGpVrV725Kco7bc7rQisfN5+i3NVIPkXKMevTNd5+FPW7atT14UHWfHywhs2rRn5BjY/ux9v5eOTHzo/nRUWfH3Zz939bY8zeD4/x/v1qPT5/jt3VePXY3td47di+XOOj+/Fiv7xa4+78eLnGTc/dWWw+usQc738gUnV713ldKMjzUe37n5XVvLvr9DefRzx1+MF9eX7cd+3L86nUu1XmTe9WWBepGPXBGjGvGjcfx96Pxq6PhZ95vH+2Tr/7iOWR1xvVzYfkdzUmn9XP5/H+fA19fLTGdbrKzede8/NXpfPzV6X3I7m8PJ/Pxt/v3dvroHk1nr/5hOTX10HnpL0rkYw+Ox5vLkH88XqJqrgOyuOjJcZV4oN7kdcH9vXRvUh69sMDuS7zPzyQeT1UnKUfLSFXifxgieva48Ml5HE9enjG+uB+TH+lxu0nJHUZUMre/ZDl/Kzw5lPR6xOn43NWe+/DnvMj2Pfvv3j+gEXzV9MhcWcvHkvFex8Si+RXfEosUl/xMbHI/OznxKKPz3+6el/kxY9GRT//2ehv7MhrH47enmdhl9TV3z3P9KbC9D5TZ/i755nGp99nRfPTb7T3+/Ha5z+v13j/A6DfqPHSJ0D3NV77COi+xmufAd2eHU8VY2V730N3z5lePT/unjK9en7c7seL58fLNW7Oj/sar50ftzVePD9ua3zJ+ZGcH2/G8uvz4+5B06vnh9vnz4/b/Xjx/Hi5xs35cV/jtfPjtsaL58dtja84P+R6t32+jz3ePT++4JmTfMFDJ/mCp07yBY+d5AueO8kXPHiSL3jy9Bvnx3V3LPrmPupfzo/6gvNjfsH5UV9wftQXnB/1BedHfcH5Uf/m80NHXOfHm+c3vz4/4guuT+MLrk/jC65P4wuuT+MLrk/jC65P4999fTrmmzUR71+f3taIcb1Hxc05luPzTyol47OPKiXzs88qJevzDyvPhwGffZJ0W+TVxy8vF7l7dnJf5MWHWr9R5LWnWq8X+fCevPhM6v48efGh5X2RF59ayt3jk5dPtrsiLx/i+yIvHuKXi3x4T17tnVeL3J4nLxe5bcD87NNLmfEVjy9l5lc8v/yNvXn1AabcPaB69QnmbxR57RHmbwzo1WeYevtY5cWHmLdFXn2K+XoRfXy4yEvPMfXx+QtYfXz+AvY3BvPao8zfuFJ67VmmyuOzzzJvS7z2LPM3SrzyLPM3BvLKs8z7Ei89y7wfyEvPMm9LvPYs8zdKvPIs877ES88yb0u8+izzfj9ee5Z5+2jn+ZRy8NFIvP8Q8fb22bh9fnMV8Ksaqjcfrdr1INLfXFsdD/F+WeJuZQpn+Rt9/WuJ25Fcz6me75z6rr/uduPNOZr6sZHMaf+/A/u7ajw/KB9vrkNuiszbR927hr75SVR73vT9ooQ9vuLBrpp89sGu3v1I1KsPdu+LvPhgV++eibz4YPc3duQLHuw+Lwmv893eXDj8ru43LjFd312GoHa7pCKu/Zj+7ge0avMrFiKcHz18wfnqnz9f756MvPoTa/dFXvyRtVN8nz1f/Su6776I1lXkzQ9z/+tJ77c3RcI9xNN/V5lfXy7frQKaJdelXb35TOFfasy7zyavH7t989S79Hfsxbx+6mzO939kTO+eWkk8WNAUb5+///pn1252RM83o/VW8fZn5H/9w7vj7vHq4xpMPN7cOdvre2HXz94+r0ns/b0YdzX4yVm3dx82n48MvsBFI7/ERXePSF500d2Tq5dddFvkVReFfN5FtzvyqoteLnLzE7T3RV69nIjxb56SFy8n7rvv+nDz2TnvO+DuB6nsuvT1NwbI37ETft3QPN377s+v6t1PuTxPThacPD8Med/u+RVe/Y19sXndXY3h779bpd3dlLz5GPDNHdrr3wyk1zvvUH//2N59KPP8xPm6Q3P19wdyV8P5UManvV8jv+TA3O3JeFyjGXenyLw7Wa8VvM/3JPvQcRnXo1p9o7LjuPzx+ac//+X7n375TYrnN94dX7x3fC/Wsa29nWt7fHnasQjq+O60c6t7a8fTk2/PL+M6t+P4md71dVzn9vg+Lt1fyKX7G7mOrwt77K3sre6t7a3v7djb2Ntdz3Y92/V81/Ndz3c93/V81/Ndz3c93/V81/Ndb+x6Y9cbu97Y9cauN3a9seuNXW/semPXi10vdr3Y9Y5vaBvPo318Qdu5HXt71HueSce3s53b2tu5tvnYW1n//vjytnO76x1f3Xb+/djbXS93vdz1cterXa92vdr1atervX+19692vdr1aterXW/uesd3t51b3Vvb271/c9c7vhjw3Obe1t7OtZXHLigP6aAdrIN3GB2iQ3aoDl35+PrHFaSDdrAOXVm6snRl6crSlWXPwfmVoyv0Pmvvs3Zl9Q6jQ3TIDl1Zu7J1ZevK1pWtZ8N6n6332XqfrStbdejZ8J4N79nwruxd2buyd2Xvyt6z4b3P3vs8ep9HVx49z6NnY/RsjJ6N0ZVHVx5deXTl6MrRsxG9z9H7HL3P3WESPc/RsxE9G9Gz0W0m2ZWzK2dX7laT7jXpZpPuNul2O79M9axcPc/dcdItJ91z55epnq+qrtxtJ9130o0n3XnSrSfde9LNd37h6ll59jx3/0k3oHQHnl+4ul61K2v3oHYPavegdg9q96B2D2r34PkVrEfl8ytYV9izod2D2j2o0pWlK3cPavegdg9q96B2D2r3oHYPnl/TelZW7WAdvMPo0JW1K3cPavegdg9q96B2D2r3oHYPnl/cela26NCz0T2o3YPqXdm7cvegdg9q96B2D2r3oHYPavegelcePc/dg9o9qN2DOrry6Mrdg9o9qN2D2j2o3YPaPajdg9rvcdpvcto9qN2D2j2o/Uan/U6n3YPaPajdg9o9qN2D2j2o3YPnV9+elbPnuXtQuwe1e/D8/tvzVdWVuwe1e1C7B7V7ULsHtXtQuwd1duXZ89w9qN2D2j14fjvuelVX7h7U7kHrHrTuQesetO5B6x48v0P3qGyP6JAdqsOeDZOuLF25e9C6B6170LoHrXvQugete/D85t2zsj46SAftYB26snbl7kHrHrTuQesetO5B6x607kGzrmzeoWeje9C6B8/v9F2v6srdg9Y9aN2D1j1o3YPWPWjdg+f3/p6Vvee5e9C6B6178Pze3/NVoyt3D1r3oHUPWvegdQ9a96B1D1p05eh57h607kHrHrS+1LS+1rTuQesetO5B6x607kHrHrTuwfPbgs/K2fPcPWjdg9Y9aH3heX5b8ApduXvQugete9C6B6170LoHz+8PPivPnufuQesetO5B68tQm125e9C6B6170LoHvXvQuwe9e9Afu7I/vMPoEB2yQ/WrunL3oHcPevegdw9696B3D3r3oEtXluqwZ8O7B7170Pta1LUrdw9696B3D3r3oHcPevegdw+6dWXTDj0b3YPePeh9LerWlbsHvXvQuwe9e9C7B7170LsH3buy9zx3D3r3oHcPel+L+ujK3YPePejdg9496N2D3j3o3YM+unL0PHcPevegdw96X4t696D3+6D3+6B3D3pfi3p25b7n8+5B7x707kHv90E/ezCPcHxl++MI1WHucH4L/Bmkg3awDt5hdIgOXbm6cnXl2ZVnV55deXbl2ZVnV55deXbl2ZXnrjwejw7SQTtYB+8wOkSH7FAdurJ0ZenK0pWPHozzUwHvMDocle0I2aE6zB3OX0FxBtmvOn8JxRm68vlrKM5/Mzp0Ze3K2pW1K1tXtq5sXdm6svU+W++zdWXrytaVrSt7Vz56cAXtYB16n70rHz24QnaoDnOH0ZVHVx5deXTl0ZVHz8bofR69z6P3eXTlowdX6NmIno3o2YiuHF05unJ05ejK0bORvc/Z+5y9z9mVs+c5ezayZyN7NrIrZ1eurlxdubpy9WxU73P1Plfvc3Xl6nmuno3ZszF7NmZXnl15duXZlWdXnj0bs/d57n2Ox6PDrhwP7WAdvMPoEP2q7FAdurJ0ZZEO2sE6eIeuLNEhO1SHPRvRPRjalbUra1fuHozuwegejO7B6B4M7cr26NCz0T0Y3YNhXdm6cvdgdA9G92B0D0b3YHQPRvdgeFf2nufuwegejO7B8K7sXbl7MLoHo3swugejezC6B6N7MEZXHj3P3YPRPRjdgxFdObpy92B0D0b3YHQPRvdgdA9G92BkV86e5+7B6B6M7sHIrpxduXswugejezC6B6N7MLoHo3swqitXz3P3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AS2gBbSAFtACWkALaAEtoCW0hJbQElpCS2gJLaGdLjm+FUzOda07ni7Z8aTlGZVoRCcOYlAhidBOl6x/e7pkR2gT2oQ2oU1oE9qENqHNHpuuda87Nk3XutcdjejEQQxiEos4ryjQTpfsqEQjOhGaQBNoAk2g6YPI2JSxKWNTaKdLdgxiEosIzaAZNINm0IyZNMZmjM0Ym0Ezjpszk85MOjPp0ByaQ3NoDs2ZSWdsg7ENxjagDY7bYCYHMzmYyQFtQBvQAlpAC2YyGFswtmBsAS04bsFMBjOZzGRCS2gJLaEltGQmk7ElY0vGVtCK41bMZDGTxUwWtIJW0ApaQZvM5GRsk7FNxjahTY7bZCYnMzmZyXnR1rrXHYWoRCM6cRCDmMSLtta9rohLBJcILlnrXlcFgYZLBJcILhFcIrhEcIngkrXuddHUiE4cxCBCU2i4RHCJ4BLBJYJLBJcILlnrXhfNkshM4hLBJWvd66rg0HCJ4BLBJYJLBJcILhFcsta9LtrguOESwSWCS9a6110BGi4RXCK4RHCJ4BLBJYJL1rrXRQuOGy4RXCK4ZK17XRUSGi4RXCK4RHCJ4BLBJYJLJKElxw2XCC4RXCIFraDhEsElgksElwguEVwiuGSte120yXHDJYJLBJesda+7AjRcorhEcYniEsUliksUl6x1rydtrXvdsYjXTCouWeteVwWBhksUlyguUVyiuERxieKSte510VSISjSiE6EpNFyiuERxieISxSWKSxSXrHWvi2aDyEziEsUla93rquDQcIniEsUliksUlyguUVyy1r0umnPccIniEsUla93rqjCg4RLFJYpLFJcoLlFcorhkrXtdtOC44RLFJYpL1rrXXQEaLlFcorhEcYniEsUlikvWutdFS44bLlFcorhEC1pBwyWKSxSXKC5RXKK4RHHJWve6aJPjhksUlygu0QltQsMliksUlxguMVxiuMRwyVr3etLWutcdg5jEIkITaLjEcInhEsMlhksMlxguWeteF02u42a4xHCJ4RLjHmete90RGi4xXGK4xHCJ4RLDJWvd66KZEZlJXGK4xLjHWeted4SGSwyXGC4xXGK4xHDJWve6aM5xwyWGSwyXGPc4a93rjtBwieESwyWGSwyXGC5Z614XLThuuMRwieES4x5nrXvdERouMVxiuMRwieESwyVr3euiJccNlxguMVxi3OMYLjGuS4zrEsMlxj3OWve6IzRcYrjEcIlxXbLWvR6/qUbXutfz+9vXutcdnTiIQUxiEWfHte51RyEq0YhOHMQgJrGI0ASaQBNoAk2gCTSBJtAEmkBTaApNoSk0habQFJpCO12yvif4dMmKp0t2PGnjjEo0ohMHMaiQRGinS9a/PV2yIzSH5tAcmkNzaA7NoTljG4xtQBvQBrQBbUA7XbJjEovI2ALa6ZIdlWhEJ0ILaAEtoAW0ZCaTsSVjS8aW0E6X7MhMJjOZzGRCK2gFraAVtGImi7EVYyvGVtCK4zaZyclMTmZyQpvQJrQJbUKbzOS8xrbWve4oxIu21r3u6MRBDGJSoYjQBJpAEyUa0YmDCE2SWMRrJte61x2hKTSFptAUmgaRsSljU8aGS9a61x2ZSWMmjZnEJWvd647QDBouGbhk4JKBSwYuWete97eUc9xwycAlA5esda+rwoCGSwYuGbhk4JKBSwYuGbhkrXtdtMFxwyUDlwxcsta9rgoBDZcMXDJwycAlA5cMXDJwyVr3umjJccMlA5cMXLLWve4K0HDJwCUDlwxcMnDJwCUDl6x1r4tWHDdcMnDJwCVr3euqMKHhkoFLBi4ZuGTgkoFLBi5Z615P2lr3uqMSjejEQYUgJrGI0HBJ4JLAJYFL1rrXRZNBDGISiwhNoeGSwCWBSwKXBC4JXBK4JLguCa5LApcELglcElyXBNclgUsClwQuCVwSuCRwSeCSte510ZzjhksClwQuWetedwVouCRwSeCSwCWBSwKXBC5Z614XbXDccEngksAla93rqhDQcEngksAlgUsClwQuCVyy1r0uWnLccEngksAla93rrgANlwQuCVwSuCRwSeCSwCVr3euiFccNlwQuCVyy1r2uChMaLglcErgkcEngksAlgUvWutdFm9dxS1ySuCRxyVr3elZY6153HMQgJrGI19gSlyQuWeteF02M6MRBDCI0gYZLEpckLklckrgkcUnikrXuddE0iUVkJnFJco+T3OMkLklckrgkcUniksQliUvWutdFc44bLklckrgkucdZ6153hIZLEpckLklckrgkccla97pog+OGSxKXJC5J7nHWutcdoeGSxCWJSxKXJC5JXLLWvS5acNxwSeKSxCXJPc5a97ojNFySuCRxSeKSxCWJS9a610UrjhsuSVySuCS5x1nrXneEhksSlyQuSVySuCRxyVr3umiT44ZLEpcULinucda61x2N6MRBDGISi3iNba17XTQRohKN6ERoAg2XFC4pXFK4pHBJ4ZLCJWvd66LpIAYxiUWEhkuK65LiuqRwSXGPs9a97ggNlxQuKVxSXJesda/Hb2TQte71+MUCuta97ujEQQxiEos4r3i6ZEchQhvQBrQBbUAb0Aa0AS2gBbSAFtACWkALaAEtoAW0hJbQElpCS2gJLaEltNMlx3dw6lr3uuLpkh1Pmp1RiUZ04iAGFZII7XTJ+renS3aENqFNaBPahDahTWgT2rzGtta97njR1rrXHY3oxEEMYhKLeI1trXtdtNMlOyrRiE6EJtAEmkATaPogMjZlbMrYFNrpkh2DmMQiQjNoBs2gGTRjJo2xGWMzxmbQjOPmzKQzk85MOjSH5tAcmkNzZtIZ22Bsg7ENaIPjNpjJwUwOZnJAG9AGtIAW0IKZDMYWjC0YW0ALjlswk8FMJjOZ0BJaQktoCS2ZyWRsydiSseGSte51R2aymMliJnHJWve6I7SChksmLpm4ZOKSiUvWutdFmxw3XDJxycQla93rUcHWutcdhahEIzpxEIOYxKbZWve64uUSe1wuscflElvrXlcFgSbQBJpAu1xiD2FsytiUsSk0NaITBzGI0BSaQjNoBs2YSWNsxtiMsRk0SyIzacykM5MOzaE5NIfm0JyZdMbmjM0Z24A2OG6DmRzM5GAmB7QBbUAb0Aa0YCaDsQVjC8YW0ILjFsxkMJPBTAa0hJbQElpCS2YyGVsytmRsCS05bsVMFjNZzGRBK2gFraAVtGImi7FNxjYZ24Q2OW6TmZzM5GQmJ7QJDZcILhFcIrhEcIngEsEla93rSVvrXncs4jWTgkvWutdVQaDhEsElgksElwguEVwiuGSte100FaISjehEaAoNlwguEVwiuERwieASwSVr3eui2SAyk7hEcMla97oqODRcIrhEcIngEsElgksEl6x1r4vmHDdcIrhEcMla97oqDGi4RHCJ4BLBJYJLBJcILlnrXhctOG64RHCJ4JK17nVXgIZLBJcILhFcIrhEcIngkrXuddGS44ZLBJcILpGCVtBwieASwSWCSwSXCC4RXLLWvS7a5LjhEsElgktkQpvQcIngEsEliksUlyguUVyy1r2etLXudccgJrGI0AQaLlFcorhEcYniEsUlikvWutdFk+u4KS5RXKK4RBWaQsMliksUlyguUVyiuERxyVr3umhmRGYSlyguUYNm0HCJ4hLFJYpLFJcoLlFcsta9Lppz3HCJ4hLFJTqgDWi4RHGJ4hLFJYpLFJcoLlnrXhctOG64RHGJ4hINaAENlyguUVyiuERxieISxSVr3euiJccNlyguUVyiCQ2XKNclynWJ4hItaAWtoOESxSWKS5TrkrXu9fitKLbWvUad0YhOHMQgJrGIs+Na97qjEJVoRCcOYhCTWERoAk2gCTSBJtAEmkATaAJNoCk0habQFJpCU2gKTaGdLsnHGecVT5fseNBSzqhEIzpxEIMKSYR2umT929MlO0JzaA7NoTk0h+bQHJoztsHYBrQBbUAb0Aa00yU7JrGIjC2gnS7ZUYlGdCK0gBbQAlpAS2YyGVsytmRsCe10yY7MZDKTyUwmtIJW0ApaQStmshhbMbZibAWtOG6TmZzM5GQmJ7QJbUKb0Ca0yUzOa2xr3euOQrxoa93rjk4cxCAmFYoITaAJNFGiEZ04iNAkiUW8ZnKte90RmkJTaApNoWkQGZsyNmVsuGSte92RmTRm0phJXLLWve4IzaDhEscljksclzguWeteF805brjEcYnjkrXudVUY0HCJ4xLHJY5LHJc4LnFcsta9LtrguOESxyWOS9a611UhoOESxyWOSxyXOC5xXOK4ZK17XbTkuOESxyWOS9a6110BGi5xXOK4xHGJ4xLHJY5L1rrXRSuOGy5xXOK4ZK17XRUmNFziuMRxieMSxyWOSxyXrHWvJ22te91RiUZ04qBCEJNYRGi4ZOCSgUsGLlnrXhdNBjGISSwiNIWGSwYuGbhk4JKBSwYuGbhkcF0yuC4ZuGTgkoFLBtclg+uSgUsGLhm4ZOCSgUsGLhm4ZK17XTTnuOGSgUsGLlnrXncFaLhk4JKBSwYuGbhk4JKBS9a610UbHDdcMnDJwCVr3euqENBwycAlA5cMXDJwycAlA5esda+Llhw3XDJwycAla93rrgANlwxcMnDJwCUDlwxcMnDJWve6aMVxwyUDlwxcsta9rgoTGi4ZuGTgkoFLBi4ZuGTgkrXuddHmddwClwQuCVyy1r2eFda61x0HMYhJLOI1tsAlgUvWutdFEyM6cRCDCE2g4ZLAJYFLApcELglcErhkrXtdNE1iEZlJXBLc4wT3OIFLApcELglcErgkcEngkrXuddGc44ZLApcELgnucda61x2h4ZLAJYFLApcELglcsta9LtrguOGSwCWBS4J7nLXudUdouCRwSeCSwCWBSwKXrHWvixYcN1wSuCRwSXCPs9a97ggNlwQuCVwSuCRwSeCSte510YrjhksClwQuCe5x1rrXHaHhksAlgUsClwQuCVyy1r0u2uS44ZLAJYlLknucte51RyM6cRCDmMQiXmNb614XTYSoRCM6EZpAwyWJSxKXJC5JXJK4JHHJWve6aDqIQUxiEaHhkuS6JLkuSVyS3OOsda87QsMliUsSlyTXJWvda9oZD1qdFU6X7OjEQQxiEos4r3i6ZMeDVnpGJRrRiYMYxCQWcV7xdMmO0AJaQAtoAS2gnS45ftuurXWvOzK2ZGynS3ZkJpOZTGYymclkJpOZTGYyoRW0glbQClpBK2jF2IqZLGaymMnJTE5mcjKTk5mczORkJie0CW1CmxdtrXvdUYjas77WvZ6jWOtedxzEICaxiNdMrnWvOwpRidAEmkATaAJNoAk0ZWzK2FSJRnTiIAYxiUVkJg2aQTNoBs2gGbTTJWvWT5fUPGMR5xVPl+woRCUa0YmDeNCOX1dta93rjkWcVzxdsqMQlWhEJw4itAFtQBvQAlpAO1zyfKp4RiP6EeuMgxjEJBZxXvFwSUchKtGI0BJaQktoCS2hFbSCVtAKWkEraAWtoBW0gjahTWgT2oQ2oU1oE9qENqHNi3aue+0oRCUa0YmDGMQkFhGaQBNoh0uej2rPeNA0zujEQQxiEos4r3i4pKMQlQhNoSk0habQFJpCM2gGzaAZNINm0AyaQTNoBs2hOTSH5tAcmkNzaA7NoTm0Ae1wyfNB9hmVaEQnDmIQk1jEecXDJR2hBbSAFtACWkALaAEtoCW0hJbQElpCS2gJLaEltIRW0ApaQStoBa2gFbSCVtAK2oQ2oU1oE9qENqFNaBPahDab5ue6145CVKIRnTiIQUxiEaEJNIEm0ASaQBNoAk2gCTSBptAUmkJTaApNoSk0habQFJpBM2gGzaAZNINm0AyaQTNoDs2hOTSH5tAcmkNzaA7NoQ1oA9qANqANaAPagDagDWgDWkALaAEtoAW0gBbQAlpAC2gJLaEltISW0BJaQktoCS2hFbSCVtAKWkEraAWtoBW0gjahTWgT2oQ2oU1oE9qENqHhEsElgksElwguEVwiuERwieASwSWCSwSXCC4RXCK4RHCJ4BLBJYJLBJcILhFcIrhEcIngEsElgksElwguEVwiuERwieASwSWCSwSXCC4RXCK4RHCJ4BLBJYJLBJcILhFcIrhEcIngEsElgksEl8hySZ7xoPn6r0Z04iAetPE440E7vlXKz3WvHQ9anPF0yY5CVOJBizijEw9azDMetFz/NokHLf2MBy3Pl50u2fGgZZ1RiQetHj9/+83/+fNP3//5P3/47n+/+cM/n3/873/8+Je/f//XH/cf//5//9Z/858/ff/DD9//z5/+9tNf//Ldf/3jp+/+9MNf/3L83TeP4/+ONvgPiW9V/vj8x7L/+3/oyG+fe/LH59v98feP8e3zzH/+6fznavNbdT/+KMcfvb59zufxeu3XP0+Qb910v15DntWkX/+88vv2+b7er3++VTz/GMfr7Xj98Qo7Xt7/3p9/P4+/9n/d49Gv0PGtXXvoj299HH8d1yv0uQsnIynyHKP+8eeff/7jz/8P",
|
|
3872
|
-
"verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdwAAAAAAAAAAAAAAAAAAAAUq5NnFpeFePs2Epz2s4fzz0AAAAAAAAAAAAAAAAAAAAAABHwSM+cJRkd6g/
|
|
3870
|
+
"bytecode": "H4sIAAAAAAAA/+z9B5xUxdb2Dc/em+nJ3UNQQUQwgpFgVlRyTkbMgoCKEgdQMAEmMEIPmEFQgiCi5Jxz6CKoJEUFE4JIkJy/aqDZm5nprmuKuu7j8719fud9n7rnXFxVtWrV+nfv7lnjZAc/GNusVdOWrR9t2qb5oy3k/9ehRcdO7UTBO9YXXtV9VJVWTZs9XaVt5xqd2jSr2rRVq+5D7qzcoGb17O5fNG7ZsU2LDh3sUoDIsQBRQcSpcCVAdHaoG6A6B1Kdh6yqBCI6HxGVRESloJVfAKkuhFQXQaqLkcVfKq1GVMlq2apVyyfCgr4JvXv36d17XqmE2P+xun9ZuUOHFlkdH2iR1bZP72D2vFLlmjfI2lh+4GWTGlWf0L37fQ+XueavWl0mtwtW3binzw75T4TzTWzbVVf99rSO7aiotomRQR6RGNeobYcWLZu3bVOhUYus1p06Nu3Ysm2b7L6nIiOXe2p8iRsvz/8+qq9wRgtnjHDGCmfc6Svvk60OYWlAI2eAYjBeaZWQ/wWWgRY4BlrgBGCBOoc03jOe4BmP9YzHyYOaKJxJwpksnCmnxyEb2GNhaIdTFUbWHcitlT6V8r/Ci6EVTgOuNbLCaaVOrxnJfboPvatlmydatThxZVWTXALkwilDdS0qlQ+xlRDsPqRyVlbTLusTSglnunBmCGemcGYJZ7Zw5ghnrnDmCWe+cBYIZ6FwFglnsXCWCGepcELCEcJZJpzlwlkhnJXC+VY43wnne+GsEs5q4awRzlrhrBPOD8L5UTjrsUKKRHx6MiSbgclmYrJZmGw2JpuDyeZisnmYbD4mW4DJFmKyRZhsMSZbgsmWYrIQJhOYbBkmW47JVmCylZjsW0z2HSb7HpOtwmSrMdkaTLYWk63DZD9gsh8x2frk02HWNzqoep8ElXxJMT+qqm3QVS2IpprUzqNaiKAxsDu/r59ybGR8HrZy8pWnqapNyFv1rVfVsHoU1XfQRvbndyPrE0ogyIZeYExXqLYfOyY3MkOpCm93pkp1PCizYquyT4RudkzV7pMBnhNLtSFyDHNjqKqcOqx5UVSdTzvSRXmrap5+8IvzVG3KkR5L8lJVyJlES/NQlc6VaqHcqodyJ6TIpWqcR9ouy6nqlldyL8+h6pbnFVjhUU1sFO2ifO+qykyKqlp1SjXgsuiq1RFVuYExVGtOqjaUj6Vae0LVfmNM1brjqvpZsVU/hFXNGihUP0pV2eYq1XrkbV5gN6RCys9p7x1Sgvl77yCXq6wxK497tm7XqoVwfsr/04xgH2gZ0jtbXe9WhmWI38/qAqu3yp+D0Cp/zu/JpWZrnJxCtCJfb+Wy3WP+xR1uMPe26xdMtiE5/89WTlw7NSx/gcC7AYhs/pPnZzk99gjuF/61/1EZrf6ea7+Rde3l+/qNwLXvH5Yhfr9Srr1c5a9BaJW/8q/9j0pRP91r/5s7/N3ctf8Nk/2ude1/hK79b9C1+x2IbK5niWpbbPI/NO6X2lXWnF+zMWBCq/wzn++HsPv1hzQOGpv/DCvjD8qEGuupjJtYlVE+9NwEVMaxYRni9xelMspV/hWEVvmXRuZA+f2nyfzenN/3+1gJ+AtSbQES6Qzh8YNSNEYXHn+7w63m4PE3JtuqBY8fIHj8DR3eViCyGpmDTf4PpQRtlimJleVtFCz8I40584PB3waptlOCH6lsQA2EVDvyW1zyT851ytvUy0POnSxyyk8MdwLk7BWWIX7/UsgpV/lvEFrlvxRybpcpYfIW7Mrvl1ywyf+FVLv55FynFL2rS8497nCvOXLuwWR7tci5DiLnHujw9gKR1cgcbPJ9lBK0S6YkRq79FHLuk8ac+cHg74dUByjBj1Q2tRKrbAf57znXKm9TKQ85D7HIuVZ6A+QsFZYhfocp5JSrPByEVnmYQs4DMiVM3oIjHHIehlRH+eRcqxSV1CXnsVPDAgnmyHkMkhVI0CLnWoicx5DDK5AARFYjc7DJLUoJOiJTEiJXAZtBzgLyvzZnfiz4BWxI5VCCH6lsaiVU2QoU4JNzjfI2rXDJWSCRRc410hsg54qwDElDH4WccpW+ILRKH4OcBRyZEiZvQRKFnAV8kCqZT841StFyTXIWSHGHqcbIWSAFk6VqkXMNQs4CKdDhpQKR1cgcbPI0RgkqkCRTEiNXOoWcadKYMz8Y/HRIlUEJfqSyqZVYZfPzyblaeZuaesgZYJFztfQGyNk0LEPim0khp1xlZhBaZSaFnBkyJUzegoIccmZCqkJ8cq5WiprokrOwOyxijpyFMVkRLXKuhsgJ/V5egSJAZDUyB5v8LErxLihTEiPX2RRyniWNOfODwT8bUp1DCX6ksqmVWGUryifnKuVtWushZzEWOVdJb4Cca8MyJL7nUsgpV3luEFrluRRyniNTwuQtKM4h57mQ6jw+OVcpRWt0yVnCHZ5vjpwlMNn5WuRcBZGzBHR45wOR1cgcbPKSlOJdXKYkRq5SFHKWlMac+cHgl4JUF1CCH6lsaiVW2S7kk/N75W2q7SHnRSxyfi+9AXLWDsuQ+F5MIadc5cVBaJUXU8h5gUwJk7fgEg45oWYdBS7lk/N7paiWLjlLu8My5shZGpOV0SLn9xA5S0OHVwaIrEbmYJNfRinel8iUxMh1OYWcl0ljzvxg8C+HVFdQgh+pbGolVtmu5JPzO+VtGu0h51Uscn4nvQFyjg7LkPheTSGnXOXVQWiVV1PIeYVMCZO3oCyHnFdDqnJ8cn6nFI3SJWd5d1jBHDnLY7IKWuT8DiJneejwKgCR1cgcbPJrKMW7rExJjFzXUsh5jTTmzA8G/1pIdR0l+JHKplZile16Pjm/Vd6maR5y3sAi57fSGyDntLAMie+NFHLKVd4YhFZ5I4Wc18mUMHkLbuKQ80ZIdTOfnN8qRVN1yXmLO6xojpy3YLKKWuT8FiLnLdDhVQQiq5E52OS3Uor3TTIlMXLdRiHnrdKYMz8Y/Nsg1e2U4Ecqm1qJVbZKfHKuVN6muh5yVmaRc6X0BshZNyxD4luFQk65yipBaJVVKOS8XaaEyVtQlUPOKpCqGp+cK5WiOrrkrO4Oa5gjZ3VMVkOLnCshclaHDq8GEFmNzMEmr0kp3lVlSmLkqkUhZ01pzJkfDH4tSFWbEvxIZVMrscpWh0/OFcrb1M1Dzroscq6Q3gA5u4VlSHzrUcgpV1kvCK2yHoWc8gPUOiZvQX0OOetBqgZ8cq5QirrqkrOhO2xkjpwNMVkjLXKugMjZEDq8RkBkNTIHm/wOSvGuL1MSI9edFHLeIY0584PBvxNS3UUJfqSyqZVYZbubT87l+SLnPSxyLpfeGDnvgeJ7L4WccpX3YuS8l0LOu2RKmLwFjTnkvBdS3ccn53IeOe93hw+YI+f9mOwBLXIuh8h5P3R4D3DIiU3+IKV4N5YpiZHrIQo5H5TGnPnB4D8EqR6mBD9S2dRKrLI9wifnMuVtGu4h56Msci6T3gA5h4dlSHybUMgpV9kkCK2yCYWcD8uUMHkLmnLI2QRSPcYn5zKlaJguOZu5w+bmyNkMkzXXIucyiJzNoMNrDkRWI3OwyVtQindTmZIYuR6nkFNm0uOc+cHgPw6pnqAEP1LZ1Eqssj3JJ6dQ3qbBHnK2ZJFTSG+AnIPDMiS+T1HIKVf5VBBa5VMUcj4hU8LkLXiaQ86nIFUrPjmFUjRIl5yt3WEbc+RsjcnaaJFTQORsDR1eGyCyGpmDTd6WUryflimJkasdhZxtpTFnfjD47SBVe0rwI5VNrcQqWxafnCHlbVrnIWcHFjlD0hsg57qwDIlvRwo55So7BqFVdqSQs71MCZO3oBOHnB0h1TN8coaUorW65HzWHXY2R85nMVlnLXKGIHI+Cx1eZyCyGpmDTd6FUrw7yZTEyPUchZxdpDFnfjD4z0Gq5ynBj1Q2tRKrbC/wyblUeZuWecj5IoucS6U3QM5lYRkS35co5JSrfCkIrfIlCjmflylh8hZ05ZDzJUjVjU/OpUqR0CVnd3f4sjlydsdkL2uRcylEzu7Q4b0MRFYjc7DJX6EU764yJTFyvUoh5yvSmDM/GPxXIdVrlOBHKptaiVW21/nkXKK8TcU85OzBIucS6Q2Qs1hYhsS3J4WccpU9g9Aqe1LI+ZpMCZO34A0OOXtCqjf55FyiFBXVJedb7vBtc+R8C5O9rUXOJRA534IO720gshqZg03+DqV4vyFTEiPXuxRyviONOfODwX8XUvWiBD9S2dRKrLL15pNzsfI2TfaQM8gi52LpDZBzcliGxDebQk65yuwgtMpsCjl7yZQweQv6cMiJqfryyblYKZqkS8733OH75sj5HiZ7X4uciyFyvgcd3vtAZDUyB5v8A0rx7iNTEiPXhxRyfiCNOfODwf8QUn1ECX6ksqmVWGX7mE/ORcrb1NNDzk9Y5FwkvQFy9gzLkPj2o5BTrrJfEFplPwo5P5IpYfIW9OeQsx+k+pRPzkVKUQ9dcg5whwPNkXMAJhuoRc5FEDkHQIc3EIisRuZgk39GKd79ZUpi5PqcQs7PpDFnfjD4n0OqQZTgRyqbWolVtsF8ci5U3qZaHnIOYZFzofQGyFkrLEPiO5RCTrnKoUFolUMp5BwkU8LkLfiCQ86hkGoYn5wLlaKauuQc7g6/NEfO4ZjsSy1yLoTIORw6vC+ByGpkDjb5CErx/kKmJEauryjkHCGNOfODwf8KUo2kBD9S2dRKrLJ9zSfnAuVtCnrI+Q2LnAukN0DOYFiGxHcUhZxylaOC0CpHUcg5UqaEyVswmkPOUZBqDJ+cC5Si3rrkHOsOx5kj51hMNk6LnAsgco6FDm8cEFmNzMEmH08p3qNlSmLkmkAh53hpzJkfDP4ESDWREvxIZVMrsco2iU/O+crb1M5Dzskscs6X3gA524VlSHynUMgpVzklCK1yCoWcE2VKmLwFUznknAKppvHJOV8paqtLzunucIY5ck7HZDO0yDkfIud06PBmAJHVyBxs8pmU4j1VpiRGrlkUcs6Uxpz5weDPglSzKcGPVDa1Eqtsc/jknKe8TTM85JzLIuc86Q2Qc0ZYhsR3HoWccpXzgtAq51HIOVumhMlbMJ9DznmQagGfnOpTmK5LzoXucJE5ci7EZIu0yDkPIudC6PAWAZHVyBxs8sWU4i1fFi/AyLWEQs7F0pgzPxj8JZBqKSX4kcqmVmKVLcQn51zlbSrlIadgkXOu9AbIWSosQ+K7jEJOucplQWiVyyjkXCpTwuQtWM4h5zJItYJPzrlKUUldcq50h9+aI+dKTPatFjnnQuRcCR3et0BkNTIHm/w7SvFeLlMSI9f3FHJ+J40584PB/x5SraIEP1LZ1Eqssq3mk3OO8jale8i5hkXOOdIbIGd6WIbEdy2FnHKVa4PQKtdSyLlKpoTJW7COQ861kOoHPjnVz2zSdMn5oztcb46cP2Ky9VrknAOR80fo8NYDkdXIHGzynyjFe51MSYxcP1PI+ZM05swPBv9nSPULJfiRyqZWYpVtA5+cs5W3qY2HnBtZ5JTv1jcC5GwTliHx/ZVCTrnKX4PQKn+lkPMXmRImb8FvHHL+Cql+55NT/ZlMa11y/uEO/zRHzj8w2Z9a5JwNkfMP6PD+BCKrkTnY5Jsoxfs3mZIYuf6ikHOTNObMDwb/L0i1mRL8SGVTK7HKtoVPzlnK21TQQ86/WeScJb0BchYMy5D4bqWQU65yaxBa5VYKOTfLlDB5C/7hkHMrpNrGJ6f6qxSZuuTc7g53mCPndky2Q4ucsyBybocObwcQWY3MwSbfSSne/8iUxMj1L4WcO6UxZ34w+P9Cql2U4Ecqm1qJVbbdfHKqv6eW4CHnHhY5Z0pvrDvQXgoT5fx7e1Not0seo8nM3ceh3V5ItV/j8IEtSeP/g3ZZM/KV6gdYqT5DemOpfpCS6nL+gzqprnQOn+PBoKEkPuPTnq5eh+e0D7FOe7r0xm7gISgnDlNyQq7yMHZyhylFUmbOYQyc+6BVHmHkdzhKR3pzXrUcgVRHKa9aIoRSKzFCHaMUl6PSGCubR4ArclpxSe6Tv+JyKbBB/A1ZQql8vXsLdh9SOSuraZf1CaVEYoJItESiLRIdkVhAJCaKRJ9ITBKJySIxRSSmisQ0kZguEjNEol8kBkRipkgsKBILicTCIrGISDxLJJ4tEs8RiUVFYjGReK5ILC4SzxOJJUTi+SKxpLF3hIkJyZDMwmQ2JnMwWQFMlojJfJgsCZMlY7IUTJaKydIwWTomy8BkfkwWwGSZmKwgJiuEyQpjsiKY7CxMdjYmOweTFcVkxTDZuZisOCY7D5OVwGTnY7KSOZ5R9Y1OwN4n4SILcnJUVdugq0qJpprUzqNKRZib6eT3ZUmOjYzPw1ZOXuQ0VbUJeavO8qoaVo+iOhvaSFJ+N7I+oQSCbGTyxATk2WKipVSFt2urVMeD4sRWZZ8IXeyWyLtPBjgxlmpD5Bh8MVRVTh1WUhRV59OONC1vVc3TDz49T9WmHOmRkZeqQs4k8uehKp0r1QK5VQ/lTsjMXKrGeaRtwZyqbnkld6Ecqm55XoHCHtXERtEuyjmuqsykqKqip1QDLouuKhZRlRsYQ3XuSdWG8rFUxU+o2m+MqTrvuKp+VmxV+M6Wa9ZAoTpfqso2V6lKIu8KMh1IlUR/MJFYUlljVroPJhJLkR5MJJaU3sBnlSvDMsTvAsaDifAqLwhCq7wgvyeX7w/iwienEK3Q/CAu8UJ3eJG5t10XYrKLdD6IO37t1LC8EALvRUBk8588F8jpoadaiRfyr/35ymj191z7i1nXXr6vvxi49v3DMsTvEsq1l6u8JAit8hL+tT9fKeqne+0vdYelzV37SzFZaa1rfz507bHX26WByOb/YSo4eRnGZ1nhmnNJNgZMaJWXMR6mJpaRxkFj859hZSyhTKixnsp4OasyyoeelwOVcWxYhvhdQamMcpVXBKFVXsH4pCac35eZzO8rKZ+nJF4Bqa6if3krnNwK0RhdeFztDsuag8fVmKysFjxKQPC4Gjq8skBkNTIHm7wcpQRdKVMSK8vlKVgoJ40584PBLw+pKlCCH6lsQA2EVNfkt7jkn5znKW9TLw85r2WRU35ieC1Azl5hGeJ3HYWccpXXBaFVXkchZwWZEiZvwfWUL4IlXgepbuCT8zyl6F1dct7oDm8yR84bMdlNWuQ8DyLnjdDh3QREViNzsMlvppSg62VKYuS6hULOm6UxZ34w+LdAqoqU4Ecqm1qJVbZb+e85iytvk6e9U+JtLHIWl95QeycpQ/xup5BTrvJ2qL1TeH6FnQ45K8qUMHkLKnHIeTukqswnZ3GlSLe9U2IVd1jVHDmrYLKqWuQsDpGzCnR4VYHIamQONnk1SgmqJFMSI1d1CjmrSWPO/GDwq0OqGpTgRyqbWolVtpp8cp6rvE0rPOSsxSLnudIbIOeKsAzxq00hp1xl7SC0ytoUctaQKWHyFtThkLM2pKrLJ+e5StFyXXLWc4f1zZGzHiarr0XOcyFy1oMOrz4QWY3MwSZvQClBdWRKYuRqSCFnA2nMmR8MfkNI1YgS/EhlUyuxynYHn5zFlLepqYecd7LIWUx6A+RsGpYhfndRyClXeVcQWuVdFHI2kilh8hbczSHnXZDqHj45iylFTXTJea87bGyOnPdissZa5CwGkfNe6PAaA5HVyBxs8vsoJehumZIYue6nkPM+acyZHwz+/ZDqAUrwI5VNrcQq24N8chZV3qa1HnI+xCJnUekNkHNtWIb4PUwhp1zlw0FolQ9TyPmATAmTt+ARDjkfhlSP8slZVClao0vOJu6wqTlyNsFkTbXIWRQiZxPo8JoCkdXIHGzyxygl6BGZkhi5mlHI+Zg05swPBr8ZpGpOCX6ksqmVWGVrwSfnOcrbVNtDzsdZ5DxHegPkrB2WIX5PUMgpV/lEEFrlExRyNpcpYfIWPMkh5xOQqiWfnOcoRbV0yfmUO3zaHDmfwmRPa5HzHIicT0GH9zQQWY3MwSZvRSlBT8qUxMjVmkLOVtKYMz8Y/NaQqg0l+JHKplZila0tn5xnK2/TaA8527HIebb0Bsg5OixD/NpTyClX2T4IrbI9hZxtZEqYvAVZHHK2h1Qd+OQ8WykapUvOju6wkzlydsRknbTIeTZEzo7Q4XUCIquROdjkz1BKUJZMSYxcz1LI+Yw05swPBv9ZSNWZEvxIZVMrscrWhU/Os5S3aZqHnM+xyHmW9AbIOS0sQ/yep5BTrvL5ILTK5ynk7CxTwuQteIFDzuch1Yt8cp6lFE3VJedL7rCrOXK+hMm6apHzLIicL0GH1xWIrEbmYJN3o5SgF2RKYuTqTiFnN2nMmR8MfndI9TIl+JHKplZile0VPjmLKG9TXQ85X2WRs4j0BshZNyxD/F6jkFOu8rUgtMrXKOR8WaaEyVvwOoecr0GqHnxyFlGK6uiSs6c7fMMcOXtisje0yFkEImdP6PDeACKrkTnY5G9SStDrMiUxcr1FIeeb0pgzPxj8tyDV25TgRyqbWolVtnf45CysvE3dPOR8l0XOwtIbIGe3sAzx60Uhp1xlryC0yl4Ucr4tU8LkLejNIWcvSBXkk7OwUtRVl5yeYR9z5MzGZH20yFkYIid2xH2AyGpkDqbqSylBvWVKYuR6j0LOvtKYMz8Y/Pcg1fuU4Ecqm1qJVbYP+OQslC9yfsgiZyHpjZHzQ2hbH1HIKVf5EUbOjyjkfF+mhMlb8DGHnB9Bqk/45CzEI2c/d9jfHDn7YbL+WuQsBJGzH3R4/TnkxCb/lFKCPpYpiZFrAIWcn0pjzvxg8AdAqoGU4Ecqm1qJVbbP+OQsqLxNwz3k/JxFzoLSGyDn8LAM8RtEIadc5aAgtMpBFHIOlClh8hYM5pBzEKQawidnQaVomC45h7rDL8yRcygm+0KLnAUhcg6FDu8LILIamYNNPoxSggbLlMTINZxCzmHSmDM/GPzhkOpLSvAjlU2txCrbCD45M5W3abCHnF+xyJkpvQFyDg7LEL+RFHLKVY4MQqscSSHnlzIlTN6CrznkHAmpvuGTM1MpGqRLzlHucLQ5co7CZKO1yJkJkXMUdHijgchqZA42+RhKCfpapiRGrrEUco6Rxpz5weCPhVTjKMGPVDa1Eqts4/nkDChv0zoPOSewyBmQ3gA514VliN9ECjnlKicGoVVOpJBznEwJk7dgEoecEyHVZD45A0rRWl1yTnGHU82Rcwomm6pFzgBEzinQ4U0FIquROdjk0yglaJJMSYxc0ynknCaNOfODwZ8OqWZQgh+pbGolVtlm8snpV96mZR5yzmKR0y+9AXIuC8sQv9kUcspVzg5Cq5xNIecMmRImb8EcDjlnQ6q5fHL6lSKhS8557nC+OXLOw2Tztcjph8g5Dzq8+UBkNTIHm3wBpQTNkSmJkWshhZwLpDFnfjD4CyHVIkrwI5VNrcQq22I+OTOUt6mYh5xLWOTMkN4AOYuFZYjfUgo55SqXBqFVLqWQc5FMCZO3IMQh51JIJfjkzFCKiuqSc5k7XG6OnMsw2XItcmZA5FwGHd5yILIamYNNvoJSgkIyJTFyraSQc4U05swPBn8lpPqWEvxIZVMrscr2HZ+c6crbNNlDzu9Z5EyX3gA5J4dliN8qCjnlKlcFoVWuopDzW5kSJm/Bag45V0GqNXxypitFk3TJudYdrjNHzrWYbJ0WOdMhcq6FDm8dEFmNzMEm/4FSglbLlMTI9SOFnD9IY878YPB/hFTrKcGPVDa1EqtsP/HJmaa8TT095PyZRc406Q2Qs2dYhvj9QiGnXOUvQWiVv1DIuV6mhMlbsIFDzl8g1UY+OdOUoh665PzVHf5mjpy/YrLftMiZBpHzV+jwfgMiq5E52OS/U0rQBpmSGLn+oJDzd2nMmR8M/h+Q6k9K8COVTa3EKtsmPjlTlbeploecf7HImSq9AXLWCssQv80UcspVbg5Cq9xMIeefMiVM3oItHHJuhlR/88mZqhTV1CXnVnf4jzlybsVk/2iRMxUi51bo8P4BIquROdjk2yglaItMSYxc2ynk3CaNOfODwd8OqXZQgh+pbGolVtl28smZorxNQQ85/2WRM0V6A+QMhmWI3y4KOeUqdwWhVe6ikHOHTAmTt2A3h5y7INUePjlTlKLeuuTc6w73mSPnXky2T4ucKRA590KHtw+IrEbmYJPvp5Sg3TIlMXIdoJBzvzTmzA8G/wCkOkgJfqSyqZVYZTvEJ2ey8ja185DzMIucydIbIGe7sAzxO0Ihp1zlkSC0yiMUch6UKWHyFhzlkPMIpDrGJ2eyUtRWk5y+BHdoGSOnD5RZWuRMRsjpS0AOz2cBkc1/5oCT25QSdFSmJEQun8Mgp8+Wxpz5weA7kKoAJfiRyqZWQpXNl8gnZ5LyNs1wyenzsciZJL0Bcs4Iy5A0TKKQU64yKQitMolBTl8BmRImb0EyhZy+JEiVwien+hSm65Iz1R2mmSNnKiZL0yJnEkTOVOjw0oDIamQONnk6owT5kmVKYuTKoJAzXRpz5geDnwGp/JTgRyqbWolVtgCfnD7lbSrlIWcmi5w+6Q2Qs1RYhsS3IIWccpUFg9AqC1LI6ZcpYfIWFOKQsyCkKswnp08pKqlLziLu8Cxz5CyCyc7SIqcPImcR6PDOAiKrkTnY5GdTinchmZIYuc6hkPNsacyZHwz+OZCqKCX4kcqmVmKVrRifnInK25TuIee5LHImSm+AnOlhGRLf4hRyylUWD0KrLE4hZ1GZEiZvwXkcchaHVCX45FQ/s0nTJef57rCkOXKej8lKapEzESLn+dDhlQQiq5E52OSlKMX7PJmSGLkuoJBTvt6+gDM/GPwLINWFlOBHKptaiVW2i/jkLKC8TW085LyYRU75bv1igJxtwjIkvpdQyClXeUkQWuUlFHJeKFPC5C24lEPOSyBVaT451Z/JtNYlZxl3eJk5cpbBZJdpkbMARM4y0OFdBkRWI3OwyS+nFO9LZUpi5LqCQs7LpTFnfjD4V0CqKynBj1Q2tRKrbFfxyekob1NBDzmvZpHTkd4AOQuGZUh8y1LIKVdZNgitsiyFnFfKlDB5C8pxyFkWUpXnk1P9VYpMXXJWcIfXmCNnBUx2jRY5HYicFaDDuwaIrEbmYJNfSyne5WRKYuS6jkLOa6UxZ34w+NdBquspwY9UNrUSq2w38Mmp/p5agoecN7LIaUtvaMG+myhMlPPf1JtCu+vlMZrM3Js5tLsJUt2icfjAlqRxb36qW/lK9YqsVJc5XBFL9VspqR421kl1pXP4HG8NGkriMz7tBPU6PKd9G+u05WZvw27gbVBO3E7JCTn97djJ3U4pkjJzbsfAeTO0ykqM/A5HqVJvzquWSpCqMuVVS4RQaiVGqCqU4lJZGmNlsxJwRU4rLlaf7kMqZ2U17bI+oRpSB5ohot2IqDYiehIseY66vVcCavWjOasfzFmtM2e11pzVGnNWq81ZrTJn9b05q+/MWX1rzmqlOasV5qyWm7NaZs5KmLMKmbNaas5qiTmrxeasFpmzWmjOaoE5q/nmrOaZs5przmqOOavZ5qxmmbOaac5qhjmr6casEkuaszrfnFUJc1bnmbMqbs7qXHNWxcxZFTVndY45q7PNWZ1lzqqIOavC5qwKmbMqaM4q05xVwJyV35xVhjmrdHNWaeasUs1ZpZizSjZnlWTOymfOKtGcVQFzVo45K9uclWXOKkFtlY9vJyRUy49YPsGPPLjLFL6qwldN+KoLXw3hqyl8tYSvtvDVEb66wldP+OoLXwPhayh8jYTvDuG709zXHaqVgmTVMVkNTFYTk9XCZLUxWR1MVheT1cNk9TFZA0zWEJM1wmR3YLI7S53+mQD2HLtq7OfYb6dN+Oh02/eQx/POOuQLNM4PStXxx8Qq1Ynn0tB2qwGFRGO7q6Dtroa2uwba7lpou9Xzu90+0OTQn1jy1ZCq8/4pvmeMU+S9S+2t626fc+TBogWqX7mn1tAWzXuX+aZfiyfWisB+zokI6ESWQSeyHArKCigoNTnbXQxtdwm03aXQdkPQdmtxEnARNHltqbp49ZSkfV/2KjBm7Y62z+65vM+Smu/MGFExW1x1W7e7fnt/W30R2M05kdnQicyBTmQuFJR5UFDqcLY7HdruDGi7M6HtQn9b3FeXst3E85DtJpZAtpt4PrLdxJLQdutxtlsU2m4xaLvnQtstDm23PqW8JJ4DTd4A4VtmEudEMqETKQidSCEoKIWhoDTkbBf703QZ0Hb90HYD0HYbcRIwDZr8DoRvmQ7nRKBfLgN+eTsBaY5y4okQFJQ787td7Ctpd8W2bba79pM6tnfHtn0q5c8ndGzviW079YmvX9OxvTe2bcU2u7J0bBvHth3ScM/NOrb3xba9w39nVx3b+2PbfpL45Ns6tg/Eti35yroROrYPxrZ9cIMolsfThdF3Pdm0wnXXV23bul2WfLjQsm2bPvLpl+dhw13eR1Pe50/eh0zeJ0nex0XeZ0LeBz/epzveRzje5zTehzHeJy7exyreZyfeByQfev6Puz3jezzjez3jxp7xfZ7x/Z7xA57xgx8K30PC97DwPSJ8jwpfE+FrKnyPCV+z+FcBFVbxrwLGvwp4yir+VcD4VwFPWcW/Chj/KuApq/hXAeNfBTxlFf8qYPyrgKes4l8FjH8V8JRV/KuA8a8CnrKKfxUw/lXAU1bxrwLGvwp42n/y9VXASqd9FbC58LUQvseF7wnhe1L4WgrfU8L3tPC1Er7WwtdG+NoKXzvhay98WcLXwdxXAZuX0vm8RvUXxU58XmNBn9fY0Oc1DvR5TXPgPDW+19aCY/s4x/YJju2THNuWHNunOLZPc2xbcWxbc2zbcGzbcmzbcWzbc2yzOLYddGzVHwh2jG3bTdO2E2e1z6hs7VI6H18294w7esad/sPjZ7wfXz7kGT/sGT/iGT/qGTfxjJt6xo95xs3kx5fPCl9n4esifM8J3/PC94LwvSh8L53+8WVyn3y2SfI9a/Y1W4F8daKMvGbrK3xdha+b8HUXvpfNvRrrmgzJumGy7pjs5eTcLwFVu5HHAF25rsgLRV835IWirzvyQtH3MpAeZ5iBnf8jGfiK8L0qfK8J3+vmMvAVLGdexWSvYbLXtTKwM5SBr0AZ+CqUga9BGfg6PwO7/EcysIfw9RS+N4TvTXMZ2APLmZ6Y7A1M9qZWBnaBMrAHlIE9oQx8A8rAN/kZ+Nx/JAPfEr63he8d4XvXXAa+heXM25jsHUz2rlYGPgdl4FtQBr4NZeA7UAa+y8/A5/8jGdhL+HoLX1D4ss1lYC8sZ3pjsiAmy9bKwOehDOwFZWBvKAODUAZm8zPwhf9IBvYRPvn/f0/43jeXgX2wnOmLyd7DZO9rZeALUAb2gTKwL5SB70EZ+D4/A1/8j2TgB8In3+9/JHwfm8vAD7Cc+RCTfYTJPtbKwBehDPwAysAPoQz8CMrAj/kZ+NJ/JAM/Eb5+wtdf+D41l4GfYDnTD5P1x2SfamXgS1AGfgJlYD8oA/tDGfgp50nugNi2B+/4tI6O7cCotvap1eY+w3GN2nZo0bJ52zYVGrXIat2pY9OO8hlxdl/PmQ44NS4d5XnsQJnCnwnf58I3SPgGn9mlPNfslSyldSXXJ5QSviHCN1T4vhC+YcI3XPi+FL4RwveV8I0Uvq+F7xvhGyV8o4VvjPCNFb5xwjde+CYI30ThmyR8k4VvivBNFb5pwjdd+GYI30zhmyV8s4VvjvDNFb555i76EOxqDsVkX2CyYZhsOCb7EpONwGRfYbKRmOxrTPYNJhuFyUZjsjGYbCwmG4fJxmOyCZhsIiabhMkmY7IpmGwqJpuGyaZjshmYbCYmm4XJZmOyOZhsLiabl+PFQoy3L71PYk5CeWRUVdugq/o6mmpSO4/qGwSsmZfm92VAjo2Mz8NWTj75NFW1CXmrpnhVDatHUU2FNnJ5fjeyPqEEgmzo5ckQ6OXbUOjl2xfQy7dhsVXZJ0I3PKZq98kAfxlLtSFyDCNiqKqcOqyvoqg6n3ako/JW1Tz94EfnqdqUIz3G5KWqkDOJxuahKp0r1cblVj2UOyHH51I1ziNtJ+RUdcsruSfmUHXL8wpM8qgmNop2Uaa5qjKToqrcFj4DLouuOtXCp9zAGKpIC58N5WOpZp1Qtd8YU3Wik1L9rNiq452UmjVQqMKdlMo2V6mgTkqZl0Kqy/P7hj4lv3+FyjdPWWNWev4K1XzSX6HyzZPewB+mXRmWIX4L1AVWb5ULgtAqF+T35PL9V1d96t8cXKH7V1cXusNF5t52LcRki3T+6urxa6eG5UIIvIuAyOY/eRbI6bHnEgv5136uMlr9Pdd+Mevay/f1i4Fr3z8sQ/yWUK69XOWSILTKJfxrr/4t3366136pOwyZu/ZLMVlI69rPha79UujahYDIavzlPGxyoXG/1K6y5izB/nLeAmiVQG8GjfslpHHQ2PxnWBnnKBNqrKcyLmdVRvnQczlQGceGZYjfCkpllKtcEYRWuUIjc6D8XmYyv1fmc5VgCVgBqb4FEukM4aHu6zBGFx7fucPvzcHjO0z2vRY85kDw+A46vO+ByGpkDjb5KkoJkm9jvsXK8moKFlZJY878YPBXQ6o1lOBHKhtQAyHV2vwWl/yTc7byNvXykHMdi5yzpTdAzl5hGeL3A4WccpU/BKFV/kAh5xqZEiZvwY/5PEvwCv4AqdbzyaluY/SuLjl/coc/myPnT5jsZy1yQg3qfT9Bh/czEFmNzMEm/4VSgn6UKYmRawOFnL9IY878YPA3QKqNlOBHKptaiVW2X/nvOWcpb1MpDzl/Y5FzlvQGyFkqLEP8fqeQU67y9yC0yt8p5NwoU8LkLfiDQ87fIdWffHKqu/aV1CXnJnf4lzlybsJkf2mRcxZEzk3Q4f0FRFYjc7DJN1NK0B8yJTFybaGQc7M05swPBn8LpPqbEvxIZVMrscq2lU/OmcrbtMJDzn9Y5JwpvQFyrgjLEL9tFHLKVW4LQqvcRiHn3zIlTN6C7RxyboNUO/jkVDepXa5Lzp3u8F9z5NyJyf7VIudMiJw7ocP7F4isRuZgk++ilKDtMiUxcu2mkHOXNObMDwZ/N6TaQwl+pLKplVhl28sn5wzlbWrqIec+FjlnSG+AnE3DMsRvP4WccpX7g9Aq91PIuUemhMlbcIBDzv2Q6iCfnOqe7E10yXnIHR42R85DmOywFjlnQOQ8BB3eYSCyGpmDTX6EUoIOyJTEyHWUQs4j0pgzPxj8o5DqGCX4kcqmVkKVLSmBT87pytu01iVnksUi53TpDZBzbVgG+CXZFHLKVdpBaJU2hZzHZEoYvAVJDoWcSTakKsAnp/pPkKzRJGdSojv0GSNnUiIm82mRE/rL1EmJ0OH5gMhqZA42eRKjBCU5MiUhciUlM8iZlCSNOfODwU+GVCmU+h+pbGolVtlS+eScprxNtT3kTGORc5r0BshZOyxD0jCdQk65yvQgtMp0BjmTUmRKmLwFGRxypkMqP5+c05SiWrrkDLjDTHPkDGCyTC1yToPIGYAOLxOIrEbmYJMXpJAzQ6YkRq5CFHIWlMac+cHgF4JUhSnBj1Q2tRKrbEX45JyqvE2jPeQ8i0XOqdIbIOfosAyJ79kUcspVnh2EVnk2hZyFZUqYvAXncMh5NqQqyifnVKVolC45i7nDc82RsxgmO1eLnFMhchaDDu9cILIamYNNXpxSvM+RKYmR6zwKOYtLY878YPDPg1QlKMGPVDa1Eqts5/PJOUV5m6Z5yFmSRc4p0hsg57SwDIlvKQo55SpLBaFVlqKQs4RMCZO34AIOOUtBqgv55JyiFE3VJedF7vBic+S8CJNdrEXOKRA5L4IO72IgshqZg01+CaV4XyBTEiPXpRRyXiKNOfODwb8UUpWmBD9S2dRKrLKV4ZNzsvI21fWQ8zIWOSdLb4CcdcMyJL6XU8gpV3l5EFrl5RRylpYpYfIWXMEh5+WQ6ko+OScrRXV0yXmVO7zaHDmvwmRXa5FzMkTOq6DDuxqIrEbmYJOXpRTvK2RKYuQqRyFnWWnMmR8MfjlIVZ4S/EhlUyuxylaBT85JytvUzUPOa1jknCS9AXJ2C8uQ+F5LIadc5bVBaJXXUshZXqaEyVtwHYec10Kq6/nknKQUddUl5w3u8EZz5LwBk92oRc5JEDlvgA7vRiCyGpmDTX4TpXhfJ1MSI9fNFHLeJI0584PBvxlS3UIJfqSyqZVYZavIJ+fEfJHzVhY5J0pvjJy3QvG9jUJOucrbMHLeRiHnLTIlTN6C2znkvA1SVeKTcyKPnJXdYRVz5KyMyapokXMiRM7K0OFV4ZATm7wqpXjfLlMSI1c1CjmrSmPO/GDwq0Gq6pTgRyqbWolVthp8ck5Q3qbhHnLWZJFzgvQGyDk8LEPiW4tCTrnKWkFolbUo5KwuU8LkLajNIWctSFWHT84JStEwXXLWdYf1zJGzLiarp0XOCRA560KHVw+IrEbmYJPXpxTv2jIlMXI1oJCzvjTmzA8GvwGkakgJfqSyqZVYZWvEJ+d45W0a7CHnHSxyjpfeADkHh2VIfO+kkFOu8s4gtMo7KeRsKFPC5C24i0POOyHV3XxyjleKBumS8x53eK85ct6Dye7VIud4iJz3QId3LxBZjczBJm9MKd53yZTEyHUfhZyNpTFnfjD490Gq+ynBj1Q2tRKrbA/wyTlOeZvWecj5IIuc46Q3QM51YRkS34co5JSrfCgIrfIhCjnvlylh8hY8zCHnQ5DqET45xylFa3XJ+ag7bGKOnI9isiZa5BwHkfNR6PCaAJHVyBxs8qaU4v2wTEmMXI9RyNlUGnPmB4P/GKRqRgl+pLKplVhla84n51jlbVrmIWcLFjnHSm+AnMvCMiS+j1PIKVf5eBBa5eMUcjaTKWHyFjzBIefjkOpJPjnHKkVCl5wt3eFT5sjZEpM9pUXOsRA5W0KH9xQQWY3MwSZ/mlK8n5ApiZGrFYWcT0tjzvxg8FtBqtaU4Ecqm1qJVbY2fHKOUd6mYh5ytmWRc4z0BshZLCxD4tuOQk65ynZBaJXtKORsLVPC5C1ozyFnO0iVxSfnGKWoqC45O7jDjubI2QGTddQi5xiInB2gw+sIRFYjc7DJO1GKd3uZkhi5nqGQs5M05swPBv8ZSPUsJfiRyqZWYpWtM5+co5W3abKHnF1Y5BwtvQFyTg7LkPg+RyGnXOVzQWiVz1HI+axMCZO34HkOOZ+DVC/wyTlaKZqkS84X3eFL5sj5IiZ7SYucoyFyvggd3ktAZDUyB5u8K6V4Py9TEiNXNwo5u0pjzvxg8LtBqu6U4Ecqm1qJVbaX+eQcpbxNPT3kfIVFzlHSGyBnz7AMie+rFHLKVb4ahFb5KoWc3WVKmLwFr3HI+Sqkep1PzlFKUQ9dcvZwhz3NkbMHJuupRc5REDl7QIfXE4isRuZgk79BKd6vyZTEyPUmhZxvSGPO/GDw34RUb1GCH6lsaiVW2d7mk/Mb5W2q5SHnOyxyfiO9AXLWCsuQ+L5LIadc5btBaJXvUsj5lkwJk7egF4ec70Kq3nxyfqMU1dQlp+dSZJsjZxCTZWuR8xuInFjxzgYiq5E52OR9KMW7l0xJbP6+FHL2kcac+cHg94VU71GCH6lsaiVW2d7nk/Nr5W0KeorEByxyfi29AXIGwzIkvh9SyClX+WEQWuWHFHK+J1PC5C34iEPODyHVx3xyfq0U9dYl5yfusJ85cn6CyfppkfNriJyfQIfXD4isRuZgk/enFO+PZEpi5PqUQs7+0pgzPxj8TyHVAErwI5VNrcQq20A+OUcqb1M7Dzk/Y5FzpPQGyNkuLEPi+zmFnHKVnwehVX5OIecAmRImb8EgDjk/h1SD+eQcqRS11SXnEHc41Bw5h2CyoVrkHAmRcwh0eEOByGpkDjb5F5TiPUimJEauYRRyfiGNOfODwR8GqYZTgh+pbGolVtm+5JPzK+VtmuEh5wgWOb+S3gA5Z4RlSHy/opBTrvKrILTKryjkHC5TwuQtGMkh51eQ6ms+OdWnMF2XnN+4w1HmyPkNJhulRc6vIHJ+Ax3eKCCyGpmDTT6aUrzly+KvMXKNoZBztDTmzA8GfwykGksJfqSyqZVYZRvHJ+cI5W0q5SHneBY5R0hvgJylwjIkvhMo5JSrnBCEVjmBQs6xMiVM3oKJHHJOgFST+OQcoRSV1CXnZHc4xRw5J2OyKVrkHAGRczJ0eFOAyGpkDjb5VErxnihTEiPXNAo5p0pjzvxg8KdBqumU4Ecqm1qJVbYZfHJ+qbxN6R5yzmSR80vpDZAzPSxD4juLQk65yllBaJWzKOScLlPC5C2YzSHnLEg1h09O9TObNF1yznWH88yRcy4mm6dFzi8hcs6FDm8eEFmNzMEmn08p3rNlSmLkWkAh53xpzJkfDP4CSLWQEvxIZVMrscq2iE/O4crb1MZDzsUscsp364sBcrYJy5D4LqGQU65ySRBa5RIKORfKlDB5C5ZyyLkEUoX45FR/JtNal5zCHS4zR06ByZZpkXM4RE4BHd4yILIamYNNvpxSvJfKlMTItYJCzuXSmDM/GPwVkGolJfiRyqZWYpXtWz45hylvU0EPOb9jkXOY9AbIWTAsQ+L7PYWccpXfB6FVfk8h50qZEiZvwSoOOb+HVKv55FR/lSJTl5xr3OFac+Rcg8nWapFzGETONdDhrQUiq5E52OTrKMV7lUxJjFw/UMi5Thpz5geD/wOk+pES/EhlUyuxyraeT07199QSPOT8iUXOL6Q3tOCknylMlPP/3JtCux/lMZrM3F84tPsZUm3QOHxgS9K4Nz/Vh+Yr1TeyUn2o9MZS/VdKqsv5f9VJdaVz+Bx/DRpK4jM+7SHqdXhO+zfWaQ+R3tgN/A3Kid8pOSFX+Tt2cr9TiqTMnN8xcP4CrfIPRn6Ho/RHb86rlj8g1Z+UVy0RQqmVGKE2UYrLn9IYK5t/AFfktOKS3Cd/xcUCNoi/IUsola93b8HuQypnZTXtsj6hlEj6SyRtFklbRNLfImmrSPpHJG0TSdtF0g6RtFMk/SuSdomk3SJpj0jaK5L2iaT9IumASDookg6JpMMi6YhIOiqSjonkBJFsiWRbJDsiuYBIThTJPpGcZO4d4V/JkGwzJtuCyf7GZFsx2T+YbBsm247JdmCynZjsX0y2C5PtxmR7MNleTLYPk+3HZAcw2UFMdgiTHcZkRzDZUUx2DJIlJ2AyC5PZmMzBZAUwWSIm82GypBzPqGL8Tmzvk3CRBNoRVdU26Kp2RlNNaudR/YswN/O6/L4sybGR8XnYyskPn6aqNiFv1RGvqmH1KKqj0EZuyu9G1ieUQJANvXL5C3q2uFmpCm93i0p1PCh/x1Zlnwjd1piq3ScD/E8s1YbIMWyLoapy6rC2R1F1Pu1Id+Wtqnn6we/OU7UpR3rsyUtVIWcS7c1DVTpXqu3LrXood0Luz6VqnEfaHsip6pZXch/MoeqW5xU45FFNbBTtohxzVWUmRVMlJ5xSDbgsuupU3pcbGENln1RtKB9L5ZxQtd8YU1XguKp+VmxVYljVrIFC5ZOqss1VKqC5lCUrJKS6if5gIjlJWWNWug8mkpNJDyaSk6Q38FnlyrAM8UthPJgIrzIlCK0yJb8nl+8P4sInpxCt0PwgLjnVHaYZe9uVnIrJ0nQ+iDt+7ZSwTE5FwJucBkQ2/8mTIqeHnmolp/KvvU8Zrf6ea5/OuvbyfX06cO37h2WIXwbl2stVZgShVWbwr71PKeqne+397jBg7tr7MVlA69r7oGvvh65dAIhs/h+mgpNnMj7LCtecjGwMmNAqCzIepiZnSuOgsfnPsDImKhNqrKcyFmJVRvnQsxBQGceGZYhfYUpllKssHIRWWZjxSU04vwuazO8ilM9TkgtDqrPoX94KJ7dCNEYXHme7w3PMweNsTHaOFjwSIXicDR3eOUBkNTIHm7wopQQVkSmJleViFCwUlcac+cHgF4NU51KCH6lsQA2EVMXzW1zyT84CytvUy0PO81jklJ8YngeQs1dYhviVoJBTrrJEEFplCQo5z5UpYfIWnE/5IlhyCUhVkk/OAkrRu7rkLOUOLzBHzlKY7AItchaAyFkKOrwLgMhqZA42+YWUEnS+TEmMXBdRyHmhNObMDwb/Ikh1MSX4kcqmVmKV7RL+e05HeZs87Z2SL2WR05HeUHsnKUP8SlPIKVdZGmrvFJ5fYadDzotlSpi8BWU45CwNqS7jk9NRinTbOyVf7g6vMEfOyzHZFVrkdCByXg4d3hVAZDUyB5v8SkoJKiNTEiPXVRRyXimNOfODwb8KUl1NCX6ksqmVWGUryyenrbxNKzzkLMcipy29AXKuCMsQv/IUcspVlg9CqyxPIefVMiVM3oIKHHKWh1TX8MlpK0XLdcl5rTu8zhw5r8Vk12mR04bIeS10eNcBkdXIHGzy6yklqIJMSYxcN1DIeb005swPBv8GSHUjJfiRyqZWYpXt/+CLX5byNjX1kPNmFjnlf28GyNk0LEP8bqGQM2wchFZ5C4WcN8qUMHkLKnLIeQukupVPTvXvRDXRJedt7vB2c+S8DZPdrkVOCyLnbdDh3Q5EViNzsMkrUUpQRZmSGLkqU8hZSRpz5geDXxlSVaEEP1LZ1EqsslXlkzNBeZvWeshZjUVOudlqADnXhmWIX3UKOeUqqwehVVankLOKTAmTt6AGh5zVIVVNPjkTlKI1uuSs5Q5rmyNnLUxWW4ucCRA5a0GHVxuIrEbmYJPXoZSgGjIlMXLVpZCzjjTmzA8Gvy6kqkcJfqSyqZVYZatPJ2fSMeVtqu0hZwMSOcMtBhoA5KwdliHxbcggZ3iVDYPQKhtSyFlPpoTJW9CIQ86GkOoOOjnDya0Q1dIl553u8C5z5LwTk92lQ07vr43GIOed0OHdBURWI3Owye+mFO9GMiUxct1DIefd0pgzPxj8eyDVvZTgRyqbWolVtsZ8ch5V3qbRHnLexyLnUekNkHN0WIbE934KOeUq7w9Cq7yfQs57ZUqYvAUPcMh5P6R6kE/Oo0rRKF1yPuQOHzZHzocw2cNa5DwKkfMh6PAeBiKrkTnY5I9QivcDMiUxcj1KIecj0pgzPxj8RyFVE0rwI5VNrcQqW1M+OY8ob9M0DzkfY5HziPQGyDktLEPi24xCTrnKZkFolc0o5GwiU8LkLWjOIWczSNWCT84jStFUXXI+7g6fMEfOxzHZE1rkPAKR83Ho8J4AIquROdjkT1KKd3OZkhi5WlLI+aQ05swPBr8lpHqKEvxIZVMrscr2NJ+ch5W3qa6HnK1Y5DwsvQFy1g3LkPi2ppBTrrJ1EFplawo5n5IpYfIWtOGQszWkassn52GlqI4uOdu5w/bmyNkOk7XXIudhiJztoMNrD0RWI3OwybMoxbuNTEmMXB0o5MySxpz5weB3gFQdKcGPVDa1EqtsnfjkPKS8Td085HyGRc5D0hsgZ7ewDInvsxRyylU+G4RW+SyFnB1lSpi8BZ055HwWUnXhk/OQUtRVl5zPucPnzZHzOUz2vBY5D0HkfA46vOeByGpkDjb5C5Ti3VmmJEauFynkfEEac+YHg/8ipHqJEvxIZVMrscrWlU/Og/kiZzcWOQ9Kb4yc3aD4dqeQU66yO0bO7hRyviRTwuQteJlDzu6Q6hU+OQ/yyPmqO3zNHDlfxWSvaZHzIETOV6HDe41DTmzy1ynF+2WZkhi5elDI+bo05swPBr8HpOpJCX6ksqmVWGV7g0/OA8rbNNxDzjdZ5DwgvQFyDg/LkPi+RSGnXOVbQWiVb1HI2VOmhMlb8DaHnG9Bqnf45DygFA3TJee77rCXOXK+i8l6aZHzAETOd6HD6wVEViNzsMk5vxj3tkxJjFxBCjl7S2PO/GDwscmzKcGPVDa1Eqtsffjk3K+8TYM95OzLIud+6Q2Qc3BYhsT3PQo55SrfC0KrfI9CzmyZEiZvwfsccr4HqT7gk3O/UjRIl5wfusOPzJHzQ0z2kRY590Pk/BA6vI+AyGpkDjb5x5Ti/b5MSezafEIh58fSmDM/GPxPIFU/SvAjlU2txELUn0/OfcrbtM5Dzk9Z5NwnvQFyrgvLkPgOoJBTrnJAEFrlAAo5+8mUMHkLBnLIOQBSfcYn5z6laK0uOT93h4PMkfNzTDZIi5z7IHJ+Dh3eICCyGpmDTT6YUrwHypTEyvIQCjnl6+0hnPnB4A+BVEMpwY9UNrUSq2xf8Mm5V3mblnnIOYxFzr3SGyDnsrAMie9wCjnlKocHoVUOp5BzqEwJk7fgSw45h0OqEXxy7lWKhC45v3KHI82R8ytMNlKLnHshcn4FHd5IILIamYNN/jWleH8pUxIj1zcUcn4tjTnzg8H/BlKNogQ/UtnUSqyyjeaTc4/yNhXzkHMMi5x7pDdAzmJhGRLfsRRyylWODUKrHEsh5yiZEiZvwTgOOcdCqvF8cu5RiorqknOCO5xojpwTMNlELXLugcg5ATq8iUBkNTIHm3wSpXiPkymJkWsyhZyTpDFnfjD4kyHVFErwI5VNrcQq21Q+OXcrb9NkDzmnsci5W3oD5JwcliHxnU4hp1zl9CC0yukUck6RKWHyFszgkHM6pJrJJ+dupWiSLjlnucPZ5sg5C5PN1iLnboics6DDmw1EViNzsMnnUIr3DJmSGLnmUsg5Rxpz5geDPxdSzaMEP1LZ1Eqsss3nk3OX8jb19JBzAYucu6Q3QM6eYRkS34UUcspVLgxCq1xIIec8mRImb8EiDjkXQqrFfHLuUop66JJziTtcao6cSzDZUi1y7oLIuQQ6vKVAZDUyB5s8RCnei2RKYuQSFHKGpDFnfjD4AlItowQ/UtnUSqyyLeeT81/lbarlIecKFjn/ld4AOWuFZUh8V1LIKVe5MgitciWFnPID1OUmb8G3HHKuhFTf8cn5r1JUU5ec37vDVebI+T0mW6VFzn8hcn4PHd4qILIamYNNvppSvL+VKYmRaw2FnKulMWd+MPhrINVaSvAjlU2txCrbOj45dypvU9BDzh9Y5NwpvQFyBsMyJL4/UsgpV/ljEFrljxRyrpUpYfIWrOeQ80dI9ROfnDuVot665PzZHf5ijpw/Y7JftMi5EyLnz9Dh/QJEViNzsMk3UIr3epmSGLk2Usi5QRpz5geDvxFS/UoJfqSyqZVYZfuNT84dytvUzkPO31nk3CG9AXK2C8uQ+P5BIadc5R9BaJV/UMj5q0wJk7fgTw45/4BUm/jk3KEUtdUl51/ucLM5cv6FyTZrkXMHRM6/oMPbDERWI3OwybdQivefMiUxcv1NIecWacyZHwz+35BqKyX4kcqmVmKV7R8+Obcrb9MMDzm3sci5XXoD5JwRliHx3U4hp1zl9iC0yu0Ucm6VKWHyFuzgkHM7pNrJJ6f6FKbrkvNfd7jLHDn/xWS7tMi5HSLnv9Dh7QIiq5E52OS7KcVbvizeiZFrD4Wcu6UxZ34w+Hsg1V5K8COVTa3EKts+Pjm3KW9TKQ8597PIuU16A+QsFZYh8T1AIadc5YEgtMoDFHLulSlh8hYc5JDzAKQ6xCfnNqWopC45D7vDI+bIeRiTHdEi5zaInIehwzsCRFYjc7DJj1KK90GZkhi5jlHIeVQac+YHg38MUaUkUIIfqWxqJVTZUiw+Of9R3qZ0l5wpNouc/0hvgJzpYRngl+JQyClX6QShVToMcqaEU8LkLShAIWeKA6kS+eRUP7NJ0yRnis8dJhkjZ4oPkyVpkfMfhJwpPujwkoDIamQONnkyowSlFJApCZErJYVBzpRkacyZHwx+CqRKpQQ/UtmUSrCypfHJuVV5m9p4yJnOIudW6Q2Qs01YhpxEBoWccpUZQWiVGRRypsqUMHkL/BxyZkCqAJ+c6s9kWuuSM9MdFjRHzkxMVlCLnFshcmZCh1cQiKxG5mCTF6IUb79MSYxchSnkLCSNOfODwS8MqYpQgh+pbGolVtnO4pPzb+VtKugh59kscv4tvQFyFgzLkPieQyGnXOU5QWiV51DIWUSmhMlbUJRDznMgVTE+OdVfpcjUJee57rC4OXKei8mKa5Hzb4ic50KHVxyIrEbmYJOfRyneRWVKYuQqQSHnedKYMz8Y/BKQ6nxK8COVTa3EKltJPjnV31NL8JCzFIucW6Q3tOCUCyhMlPNf0JtCu/PlMZrM3As5tLsAUl2kcfjAlqRxb36qb85Xql/MSvXN0htL9UsoqS7nv0Qn1ZXO4XO8JGgoic/4tP9Sr8Nz2peyTvsv6Y3dwEuhnChNyQm5ytLYyZWmFEmZOaUxcF4IrbIMI7/DUSrTm/OqpQykuozyqiVCKLUSI9TllOJymTTGymYZ4IqcVlyS++SvuBQHNoi/IUsola93b8HuQypnZTXtsj6hlEi5QqRcKVKuEilXi5SyIqWcSCkvUiqIlGtEyrUi5TqRcr1IuUGk3ChSbhIpN4uUW0RKRZFyq0i5TaTcLlIqiZTKIqWKSKkqUqqJlOoipYZIqSlSaomU2iKljrl3hFckQ7IrMdlVmOxqTFYWk5XDZOUxWQVMdg0muxaTXYfJrsdkN2CyGzHZTZjsZkx2CyariMluxWS3YbLbMVklTFYZk1XBZFUxWTVMVh2T1cBkNTFZLUxWG5PVyfGMqm90AvY+CRdJoGuiqtoGXdW10VST2nlU1yHMzayW35clOTYyPg9bOfntp6mqTchbVcmralg9iqoytJFa+d3I+oQSCLKhVy5XQM8Wr1Sqwtu9SqU6HpSrY6uyT4SubEzV7pMBLhdLtSFyDOVjqKqcOqwKUVSdTzvS6/NW1Tz94G/IU7UpR3rcmJeqQs4kuikPVelcqXZzbtVDuRPyllyqxnmkbcWcqm55JfetOVTd8rwCt3lUExtFuyhVXFWZSVFVVU+pBlwWXVUtoio3MIaq+knVhvKxVDVOqNpvjKmqeVxVPyu2qlZY1ayBQlVbqso2V6nqIO8KMqtBqlr0BxMpdZQ1ZqXnwURd0oOJlDrSG/iscmVYhvjVYzyYCK+yXhBaZb38nly+P4gLn5xCtEL3g7j67rCBubdd9TFZA50P4o5fOzUs60PgbQBENv/JU09Ojz3Vqs+/9rWV0ervufYNWddevq9vCFz7/mEZ4teIcu3lKhsFoVU24l/72kpRP91rf4c7vNPctb8Dk92pde1rQ9f+Duja3QlEVuNhKjb5XZTPsmTNaYQ9TK0HrfJuysPUu6Rx0Nj8Z1gZaykTaqynMt7Dqozyoec9QGUcG5YhfvdSKqNc5b1BaJX3Uj6pkfl9t8n8bsz5POVeSHUf/ctbKeo3FGN04XG/O3zAHDzux2QPaMGjFgSP+6HDewCIrEbmYJM/SClBjWVKYmX5IQoWHpTGnPnB4D8EqR6mBD9S2YAaCKkeyW9xyT85aypvUy8POR9lkVN+YvgoQM5eYRni14RCTrnKJkFolU0o5HxYpoTJW9CU80WwJpDqMT45aypF7+qSs5k7bG6OnM0wWXMtctaEyNkMOrzmQGQ1MgebvAWlBDWVKYmR63EKOWUmPc6ZHwz+45DqCUrwI5VNrcQq25P895w1lLfJ094ppSWLnDWkN9TeScoQv6co5JSrfApq7xSeX2GnQ84nZEqYvAVPc8j5FKRqxSdnDaVIt71TSmt32MYcOVtjsjZa5KwBkbM1dHhtgMhqZA42eVtKCXpapiRGrnYUcraVxpz5weC3g1TtKcGPVDa1EqtsWXxyVlfephUecnZgkbO69AbIuSIsQ/w6UsgpV9kxCK2yI4Wc7WVKmLwFnTjk7AipnuGTs7pStFyXnM+6w87myPksJuusRc7qEDmfhQ6vMxBZjczBJu9CKUGdZEpi5HqOQs4u0pgzPxj85yDV85TgRyqbWolVthf45KymvE1NPeR8kUXOatIbIGfTsAzxe4lCTrnKl4LQKl+ikPN5mRImb0FXDjlfglTd+ORUfwG9iS45u7vDl82Rszsme1mLnNUgcnaHDu9lILIamYNN/gqlBHWVKYmR61UKOV+Rxpz5weC/CqleowQ/UtnUSqyyvc4nZ1XlbVrrIWcPFjmrSm+AnGvDMsSvJ4WccpU9g9Aqe1LI+ZpMCZO34A0OOXtCqjf55KyqFK3RJedb7vBtc+R8C5O9rUXOqhA534IO720gshqZg03+DqUEvSFTEiPXuxRyviONOfODwX8XUvWiBD9S2dRKrLLxe96kVFHeptoecgZZ5KwivQFy1hYp2LayKeSUq8wOQqvMppCzl0wJk7egD4ecmKovn5xVlKJauuR8zx2+b46c72Gy97XIWQUi53vQ4b0PRFYjc7DJP6CUoD4yJTFyfUgh5wfSmDM/GPwPIdVHlOBHKptaiVW2j/nkrKy8TaM95PyERc7K0hsg5+iwDPHrRyGnXGW/ILTKfhRyfiRTwuQt6M8hZz9I9SmfnJWVolG65BzgDgeaI+cATDZQi5yVIXIOgA5vIBBZjczBJv+MUoL6y5TEyPU5hZyfSWPO/GDwP4dUgyjBj1Q2tRKrbIP55KykvE3TPOQcwiJnJekNkHNaWIb4DaWQU65yaBBa5VAKOQfJlDB5C77gkHMopBrGJ2clpWiqLjmHu8MvzZFzOCb7UouclSByDocO70sgshqZg00+glKCvpApiZHrKwo5R0hjzvxg8L+CVCMpwY9UNrUSq2xf88l5u/I21fWQ8xsWOW+X3gA564ZliN8oCjnlKkcFoVWOopBzpEwJk7dgNIecoyDVGD45b1eK6uiSc6w7HGeOnGMx2Tgtct4OkXMsdHjjgMhqZA42+XhKCZJPisZg5JpAIed4acyZHwz+BEg1kRL8SGVTK7HKNolPztuUt6mbh5yTWeS8TXoD5OwWliF+UyjklKucEoRWOYVCzokyJUzegqkcck6BVNP45LxNKeqqS87p7nCGOXJOx2QztMh5G0TO6dDhzQAiq5E52OQzKSVoqkxJjFyzKOScKY0584PBnwWpZlOCH6lsaiVW2ebwyXlrvsg5l0XOW6U3Rs650LbmUcgpVzkPI+c8Cjlny5QweQvmc8g5D1It4JPzVh45F7rDRebIuRCTLdIi560QORdCh7eIQ05s8sWUEjRfpiRGriUUci6Wxpz5weAvgVRLKcGPVDa1EqtsIT45Kypv03APOQWLnBWlN0DO4WEZ4reMQk65ymVBaJXLKORcKlPC5C1YziHnMki1gk/OikrRMF1yrnSH35oj50pM9q0WOStC5FwJHd63QGQ1Mgeb/DtKCVouUxIj1/cUcn4njTnzg8H/HlKtogQ/UtnUSqyyreaT8xblbRrsIecaFjlvkd4AOQeHZYjfWgo55SrXBqFVrqWQc5VMCZO3YB2HnGsh1Q98ct6iFA3SJeeP7nC9OXL+iMnWa5HzFoicP0KHtx6IrEbmYJP/RClB62RKYuT6mULOn6QxZ34w+D9Dql8owY9UNrUSq2wb+OS8WXmb1nnIuZFFzpulN0DOdWEZ4vcrhZxylb8GoVX+SiHnLzIlTN6C3zjk/BVS/c4n581K0Vpdcv7hDv80R84/MNmfWuS8GSLnH9Dh/QlEViNzsMk3UUrQbzIlMXL9RSHnJmnMmR8M/l+QajMl+JHKplZilW0Ln5w3KW/TMg85/2aR8ybpDZBzWViG+G2lkFOucmsQWuVWCjk3y5QweQv+4ZBzK6TaxifnTUqR0CXndne4wxw5t2OyHVrkvAki53bo8HYAkdXIHGzynZQS9I9MSYxc/1LIuVMac+YHg/8vpNpFCX6ksqmVWGXbzSfnjcrbVMxDzj0sct4ovQFyFgvLEL+9FHLKVe4NQqvcSyHnLpkSJm/BPg4590Kq/Xxy3qgUFdUl5wF3eNAcOQ9gsoNa5LwRIucB6PAOApHVyBxs8kOUErRPpiRGrsMUch6Sxpz5weAfhlRHKMGPVDa1EqtsR/nkvEF5myZ7yHmMRc4bpDdAzslhGeCXmkAh5w3SOIisMjy/wk6HnEdkShi8BakWhZypCZDK5pPzBqVokiY5Ux13WMAYOVMdTFZAi5w3IORMdaDDKwBEViNzsMkTGSUoVf7XhsiV6mOQMzVRGnPmB4Pvg1RJlPofqWxqJVbZkvnkvF55m3q65ExNYZHzeukNkLNnWIakYSqFnHKVqUFolakMcqYmyZQweQvSOORMhVTpfHJerxT10CVnhjv0myNnBibza5HzeoicGdDh+YHIamQONnmAQs40mZIYuTIp5AxIY878YPAzIVVBSvAjlU2txCpbIT45r1PeploechZmkfM66Q2Qs1ZYhsS3CIWccpVFgtAqi1DIWVCmhMlbcBaHnEUg1dl8cl6nFNXUJec57rCoOXKeg8mKapHzOoic50CHVxSIrEbmYJMXoxTvs2RKYuQ6l0LOYtKYMz8Y/HMhVXFK8COVTa3EKtt5fHJeq7xNQQ85S7DIea30BsgZDMuQ+J5PIadc5flBaJXnU8hZXKaEyVtQkkPO8yFVKT45r1WKeuuS8wJ3eKE5cl6AyS7UIue1EDkvgA7vQiCyGpmDTX4RpXiXlCmJketiCjkvksac+cHgXwypLqEEP1LZ1Eqssl3KJ+c1ytvUzkPO0ixyXiO9AXK2C8uQ+JahkFOuskwQWmUZCjkvkSlh8hZcxiFnGUh1OZ+c1yhFbXXJeYU7vNIcOa/AZFdqkfMaiJxXQId3JRBZjczBJr+KUrwvkymJketqCjmvksac+cHgXw2pylKCH6lsaiVW2crxyVlBeZtmeMhZnkXOCtIbIOeMsAyJbwUKOeUqKwShVVagkLOsTAmTt+AaDjkrQKpr+eRUn8J0XXJe5w6vN0fO6zDZ9VrkrACR8zro8K4HIquROdjkN1CKt3xZfC1Grhsp5LxBGnPmB4N/I6S6iRL8SGVTK7HKdjOfnOWVt6mUh5y3sMhZXnoD5CwVliHxrUghp1xlxSC0yooUct4kU8LkLbiVQ86KkOo2PjnLK0Uldcl5uzusZI6ct2OySlrkLA+R83bo8CoBkdXIHGzyypTifatMSYxcVSjkrCyNOfODwa8CqapSgh+pbGolVtmq8clZTnmb0j3krM4iZznpDZAzPSxD4luDQk65yhpBaJU1KOSsKlPC5C2oySFnDUhVi09O9TObNF1y1naHdcyRszYmq6NFznIQOWtDh1cHiKxG5mCT16UU75oyJTFy1aOQs6405swPBr8epKpPCX6ksqmVWGVrwCdnWeVtauMhZ0MWOeW79YYAOduEZUh8G1HIKVfZKAitshGFnPVlSpi8BXdwyNkIUt3JJ6f6M5nWuuS8yx3ebY6cd2Gyu7XIWRYi513Q4d0NRFYjc7DJ76EU7ztkSmLkupdCznukMWd+MPj3QqrGlOBHKptaiVW2+/jkvFp5mwp6yHk/i5xXS2+AnAXDMiS+D1DIKVf5QBBa5QMUcjaWKWHyFjzIIecDkOohPjnVX6XI1CXnw+7wEXPkfBiTPaJFzqshcj4MHd4jQGQ1Mgeb/FFK8X5QpiRGriYUcj4qjTnzg8FvAqmaUoIfqWxqJVbZHuOTU/09tQQPOZuxyHmV9IYWnNqcwkQ5f/PeFNo1lcdoMnNbcGjXHFI9rnH4wJakcW9+ql+Zr1R/gpXqV0pvLNWfpKS6nP9JnVRXOofP8cmgoSQ+49O+Qr0Oz2m3ZJ32FdIbu4EtoZx4ipITcpVPYSf3FKVIyhN4CgNnC2iVTzPyOxylp3tzXrU8DalaUV61RAilVmKEak0pLq2kMVY2nwauyGnFJbmPW1zWJ5Q8OYkVYxbh63pCFUskVd2Oq2KKpKp7WBVbJFUvezZvRVW94qqs6F6vnlJZMWZ8LaKyYq3r9RyHYuWp6nG6ysrbq+dpKivKjG94VVa0db2ZR7JYuVRv5VZZub3ezqWy8pjxnZwqK691vRslia3TVL3yVlmne/XOU2XlmDHPa2PlXFesEmCdUsV4k265Xn2jqizPjO9FU1nedb2vuPTWcdUHsVXWCa8PY6qskzN+FEtlRdb1MVKMfP2UKkt69VeprPCMnwKFFX8QlFAqX0+Ngt2HVM7KatplfUIpkSo/VWsrUtuJ1PYiNUukyoc5HUVqJ5H6jEh9VqR2FqldROpzIvV5kfqCSH1RpL4kUruK1G4itbtIfVmkviJSXxWpr4nU10VqD5HaU6S+IVLfFKlvidS3Reo75p5EtUmGZG0xWTtM1h6TZWGyDpisIybrhMmewWTPYrLOmKwLJnsOkz2PyV7AZC9ispcwWVdM1g2TdcdkL2OyVzDZq5jsNUz2Oibrgcl6YrI3MNmbmOwtTPY2Jnsnx7PxvtFfefc++aJWvvJ9JqqqbdBVPRtNNamdR9UZea2f+XB+3w7l2Mj4PGzl5C+fpqo2IW/VK15Vw+pRVK9CG2ma342sT7gl/kbhpCr+RiGiir9RiKjibxQi6/ofvFGAntO0gT5JbatUhYtsO5XqeCluH1uVfaJgZ8VU7T5Z1jvEUm2IFP+OMVRVTiGiUxRV59NA0iVvVc3TcfNcnqpNOaD0fF6qCjnR9UIeqtK5APdibtVDuTH4Ui5V4zxg2TWnqlteSO2WQ9UtT/B296gmNoqG59dcVZlJUVWvn1INuCy6qkdEVW5gDFXPk6oN5WOp3jihar8xpurN46r6WbFVYXaUa9ZAoQqzo2xzleodpJpkPgypkBc9Z/YxTOo7yhqz0vMxzLukj2FS35HewDezVoZliF8vxscw4VX2CkKr7JXfk8v3147CJ6cQrdD92lFvdxg097CnNyYL6nzt6Pi1U8OyNwTeIBDZ/CdPLzk99hke/7P21LeV0ervufbZrGsvnyZmA9e+f1iG+PWhXHu5yj5BaJV9+Nf+baWon+617+sO3zN37ftisve0rv3b0LXvC12794DIanx0jE3+vsb9UrvKmtMHuzm9oFV+QPno+H1pHDQ2/xlWxreUCTXWUxk/ZFVG+VHLh0BlHBuWIX4fUSqjXOVHQWiVH1G+lyLz+wOT+f0x59sjH0GqT4BEOkN4vKUUjdGFRz932N8cPPphsv5a8HgLgkc/6PD6A5HVyBxs8k8pJehjmZJYWR5AwcKn0pgzPxj8AZBqICX4kcoG1EBI9Vl+i0v+yfmm8jb18pDzcxY535TeADl7hWWI3yAKOeUqBwWhVQ6ikHOgTAmTt2BwPs8SvIKDINUQPjnfVIre1SXnUHf4hTlyDsVkX2iR802InEOhw/sCiKxG5mCTD6OUoMEyJTFyDaeQc5g05swPBn84pPqSEvxIZVMrsco2gv+e8w3lbfI2s/yKRc43pDfWzPIraFsjKeSUqxyJNbMcSSHnlzIlTN6CrznkHAmpvuGT8w2lSLuZ5Sh3ONocOUdhstFa5HwDIuco6PBGA5HVyBxs8jGUEvS1TEmMXGMp5BwjjTnzg8EfC6nGUYIfqWxqJVbZxvPJ2VN5m1Z4yDmBRc6e0hsg54qwDPGbSCGnXOXEILTKiRRyjpMpYfIWTOKQcyKkmswnZ0+laLkuOae4w6nmyDkFk03VImdPiJxToMObCkRWI3OwyadRStAkmZIYuaZTyDlNGnPmB4M/HVLNoAQ/UtnUSqyyzeSTs4fyNjX1kHMWi5w9pDdAzqZhGeI3m0JOucrZQWiVsynknCFTwuQtmMMh52xINZdPzh5KURNdcs5zh/PNkXMeJpuvRc4eEDnnQYc3H4isRuZgky+glKA5MiUxci2kkHOBNObMDwZ/IaRaRAl+pLKplVhlW8wn5+vK27TWQ84lLHK+Lr0Bcq4NyxC/pRRyylUuDUKrXEoh5yKZEiZvQYhDzqWQSvDJ+bpStEaXnMvc4XJz5FyGyZZrkfN1iJzLoMNbDkRWI3OwyVdQSlBIpiRGrpUUcsonVSs584PBXwmpvqUEP1LZ1Eqssn3HJ+dryttU20PO71nkfE16A+SsHZYhfqso5JSrXBWEVrmKQs5vZUqYvAWrOeRcBanW8Mn5mlJUS5eca93hOnPkXIvJ1mmR8zWInGuhw1sHRFYjc7DJf6CUoNUyJTFy/Ugh5w/SmDM/GPwfIdV6SvAjlU2txCrbT3xyvqq8TaM95PyZRc5XpTdAztFhGeL3C4WccpW/BKFV/kIh53qZEiZvwQYOOX+BVBv55HxVKRqlS85f3eFv5sj5Kyb7TYucr0Lk/BU6vN+AyGpkDjb575QStEGmJEauPyjk/F0ac+YHg/8HpPqTEvxIZVMrscq2iU/OV5S3aZqHnH+xyPmK9AbIOS0sQ/w2U8gpV7k5CK1yM4Wcf8qUMHkLtnDIuRlS/c0n5ytK0VRdcm51h/+YI+dWTPaPFjlfgci5FTq8f4DIamQONvk2SgnaIlMSI9d2Cjm3SWPO/GDwt0OqHZTgRyqbWolVtp18cr6svE11PeT8l0XOl6U3QM66YRnit4tCTrnKXUFolbso5NwhU8LkLdjNIecuSLWHT86XlaI6uuTc6w73mSPnXky2T4ucL0Pk3Asd3j4gshqZg02+n1KCdsuUxMh1gELO/dKYMz8Y/AOQ6iAl+JHKplZile0Qn5zdlbepm4ech1nk7C69AXJ2C8sQvyMUcspVHglCqzxCIedBmRImb8FRDjmPQKpjfHJ2V4q6apIzLcEdWsbImQbKLC1ydkfImZaAHF6aBUQ2/5kDTm5TStBRmZIQudIcBjnTbGnMmR8MvgOpClCCH6lsaiVU2dIS+eTslh9ypvlY5OwmvSFyShmShkkUcsrpkyByhudX2GmQM62ATAmTtyCZQs60JEiVwidnNx45U91hmjlypmKyNC1ydoPImQodXhqHnNjk6YwSlJYsUxIjVwaFnOnSmDM/GPwMSOWnBD9S2dRKrLIF+OTsqrxNwz3kzGSRs6v0Bsg5PCxD4luQQk65yoJBaJUFKeT0y5QweQsKcchZEFIV5pOzq1I0TJecRdzhWebIWQSTnaVFzq4QOYtAh3cWEFmNzMEmP5tSvAvJlMTIdQ6FnGdLY878YPDPgVRFKcGPVDa1EqtsxfjkfEl5mwZ7yHkui5wvSW+AnIPDMiS+xSnklKssHoRWWZxCzqIyJUzegvM45CwOqUrwyfmSUjRIl5znu8OS5sh5PiYrqUXOlyByng8dXkkgshqZg01eilK8z5MpiZHrAgo5S0ljzvxg8C+AVBdSgh+pbGolVtku4pPzReVtWuch58Uscr4ovQFyrgvLkPheQiGnXOUlQWiVl1DIeaFMCZO34FIOOS+BVKX55HxRKVqrS84y7vAyc+Qsg8ku0yLnixA5y0CHdxkQWY3MwSa/nFK8L5UpiZHrCgo5L5fGnPnB4F8Bqa6kBD9S2dRKrLJdxSfnC8rbtMxDzqtZ5HxBegPkXBaWIfEtSyGnXGXZILTKshRyXilTwuQtKMchZ1lIVZ5PzheUIqFLzgru8Bpz5KyAya7RIucLEDkrQId3DRBZjczBJr+WUrzLyZTEyHUdhZzXSmPO/GDwr4NU11OCH6lsaiVW2W7gk/N55W0q5iHnjSxyPi+9AXIWC8uQ+N5EIadc5U1BaJU3Uch5vUwJk7fgZg45b4JUt/DJ+bxSVFSXnBXd4a3myFkRk92qRc7nIXJWhA7vViCyGpmDTX4bpXjfLFMSI9ftFHLeJo0584PBvx1SVaIEP1LZ1EqsslXmk/M55W2a7CFnFRY5n5PeADknh2VIfKtSyClXWTUIrbIqhZyVZEqYvAXVOOSsCqmq88n5nFI0SZecNdxhTXPkrIHJamqR8zmInDWgw6sJRFYjc7DJa1GKdzWZkhi5alPIWUsac+YHg18bUtWhBD9S2dRKrLLV5ZOzi/I29fSQsx6LnF2kN0DOnmEZEt/6FHLKVdYPQqusTyFnHZkSJm9BAw4560OqhnxydlGKeuiSs5E7vMMcORthsju0yNkFImcj6PDuACKrkTnY5HdSincDmZIYue6ikPNOacyZHwz+XZDqbkrwI5VNrcQq2z18cnZW3qZaHnLeyyJnZ+kNkLNWWIbEtzGFnHKVjYPQKhtTyHm3TAmTt+A+DjkbQ6r7+eTsrBTV1CXnA+7wQXPkfACTPahFzs4QOR+ADu9BILIamYNN/hCleN8nUxIj18MUcj4kjTnzg8F/GFI9Qgl+pLKplVhle5RPzmeVtynoIWcTFjmfld4AOYNhGRLfphRyylU2DUKrbEoh5yMyJUzegsc45GwKqZrxyfmsUtRbl5zN3WELc+RsjslaaJHzWYiczaHDawFEViNzsMkfpxTvx2RKYuR6gkLOx6UxZ34w+E9AqicpwY9UNrUSq2wt+eR8Rnmb2nnI+RSLnM9Ib4Cc7cIyJL5PU8gpV/l0EFrl0xRyPilTwuQtaMUh59OQqjWfnM8oRW11ydnGHbY1R842mKytFjmfgcjZBjq8tkBkNTIHm7wdpXi3kimJkas9hZyyarTnzA8Gvz2kyqIEP1LZ1EqssnXgk7OT8jbN8JCzI4ucnaQ3QM4ZYRkS304UcspVdgpCq+xEIWeWTAmTt+AZDjk7Qapn+eRUn8J0XXJ2doddzJGzMybrokXOThA5O0OH1wWIrEbmYJM/Ryne8mXxsxi5nqeQ8zlpzJkfDP7zkOoFSvAjlU2txCrbi3xydlTeplIecr7EImdH6Q2Qs1RYhsS3K4WccpVdg9Aqu1LI+YJMCZO3oBuHnF0hVXc+OTsqRSV1yfmyO3zFHDlfxmSvaJGzI0TOl6HDewWIrEbmYJO/Sine3WRKYuR6jULOV6UxZ34w+K9BqtcpwY9UNrUSq2w9+OTsoLxN6R5y9mSRU5aDngA508MyJL5vUMgpV/lGEFrlGxRyvi5TwuQteJNDzjcg1Vt8cqqf2aTpkvNtd/iOOXK+jcne0SJnB4icb0OH9w4QWY3MwSZ/l1K835QpiZGrF4Wc70pjzvxg8HtBKkr9P1XZ1EqssgX55MxS3qY2HnJms8gp361nA+RsE5Yh8e1DIadcZZ8gtMo+FHL2lilh8hb05ZCzD6R6j09O9WcyrXXJ+b47/MAcOd/HZB9okTMLIuf70OF9AERWI3OwyT+kFO++MiUxcn1EIeeH0pgzPxj8jyDVx5TgRyqbWolVtk/45GyvvE0FPeTsxyJne+kNkLNgWIbEtz+FnHKV/YPQKvtTyPmxTAmTt+BTDjn7Q6oBfHKqv0qRqUvOge7wM3PkHIjJPtMiZ3uInAOhw/sMiKxG5mCTf04p3p/KlMTINYhCzs+lMWd+MPiDINVgSvAjlU2txCrbED451d9TS/CQcyiLnO2kN7TgtC8oTJTzf9GbQrvB8hhNZu4wDu2+gFTDNQ4f2JI07s1P9bb5SvUvWaneVnpjqT6Ckupy/hE6qa50Dp/jiKChJD7j026jXofntL9inbZ8/vQVdgO/gnJiJCUn5CpHYic3klIkZeaMxMA5DFrl14z8Dkfp696cVy1fQ6pvKK9aIoRSKzFCjaIUl2+kMVY2vwauyGnFJblPPouL7zNgi/hbsoRS+Xr/Fuw+pHJWVtMu6xNKibTRIm2MSBsr0saJtPEibYJImyjSJom0ySJtikibKtKmibTpIm2GSJsp0maJtNkibY5ImyvS5om0+SJtgUhbKNIWibTFIm2JSFsq0kIiTYi0ZSJtuUhbYe494ehkSDYGk43FZOMw2XhMNgGTTcRkkzDZZEw2BZNNxWTTMNl0TDYDk83EZLMw2WxMNgeTzcVk8zDZfEy2AJMtxGSLMNliTLYEky3FZCFMJjDZMky2HJOtyPGUqm90BvY+iRfJoMlRVW2DrmpKNNWkdh7VVIS6mfn+hascGxmfh62cfP5pqmoT8lYt8KoaVo+iWghtJL+/XNN7fUIJDNrQq5fR0PPFMUpVeMNjVarjYRkXW5V9InjjY6p2nwzxhFiqDZGDmBhDVeXUcU2Koup82qFOy1tV8/Sjn56nalOOBJmRl6pCzjSamYeqdK5km5Vb9VDulJydS9U4j8Sdk1PVLa/0nptD1S3PSzDPo5rYKNpVWeSqykyKqlp8SjXgsuiqJRFVuYExVEtPqjaUj6UKnVC13xhTJY6r6mfFVi0Lq5o1UKiWS1XZ5irVCqQCZLaHVJ3oDyfSVihrzErPw4mVpIcTaSukN/B55cqwDPH7lvFwIrzKb4PQKr/N78nl+8O48MkpRCt0P4z7zh1+b+6N13eY7HudD+OOXzs1LL+DwPs9ENn8J8+3cnrsydZ3/Gu/XBmt/p5rv4p17eU7+1XAte8fliF+qynXXq5ydRBa5Wr+tV+uFPXTvfZr3OFac9d+DSZbq3Xtl0PXfg107dYCkdV4oIpNvo7yeZasOauxB6rfQqv8gfJAdZ00Dhqb/wwr4zJlQo31VMYfWZVRPvb8EaiMY8MyxG89pTLKVa4PQqtcT/m0Rub3Dybz+yfOZyrrIdXP9C9whZNbIRqjC49f3OEGc/D4BZNt0ILHMggev0CHtwGIrEbmYJNvpJSgn2RKYmX5VwoWNkpjzvxg8H+FVL9Rgh+pbEANhFS/57e45J+cQnmbennI+QeLnPIzwz8AcvYKyxC/PynklKv8Mwit8k8KOX+TKWHyFmzifBnsT0j1F5+cQil6V5ecm93hFnPk3IzJtmiRU0Dk3Awd3hYgshqZg03+N6UEbZIpiZFrK4Wcf0tjzvxg8LdCqn8owY9UNrUSq2zb+O85Q8rb5G3xtJ1FzpD0xlo8bYe2tYNCTrnKHViLpx0Ucv4jU8LkLdjJIecOSPUvn5whpUi7xdMud7jbHDl3YbLdWuQMQeTcBR3ebiCyGpmDTb6HUoJ2ypTEyLWXQs490pgzPxj8vZBqHyX4kcqmVmKVbT+fnEuVt2mFh5wHWORcKr0Bcq4IyxC/gxRyylUeDEKrPEgh5z6ZEiZvwSEOOQ9CqsN8ci5VipbrkvOIOzxqjpxHMNlRLXIuhch5BDq8o0BkNTIHm/wYpQQdkikJkSs9gULOY9KYMz8W/PQESGVRgh+pbGolVNnSbT45lyhvU1OXnOkOi5xLpDdAzqZhGeCXXoBCTrnKAkFolQUY5EyXG7NN3oJECjnTC0AqH5+cS5SiJprkTE9yh8nGyJmehMmStci5BCFnehJ0eMlAZDUyB5s8hVGC0hNlSmLkSmWQMz1FGnPmB4OfCqnSKMGPVDa1Eqts6XxyLlbeprUecmawyLlYegPkXBuWIfH1U8gpV+kPQqv0U8iZJlPC5C0IcMjph1SZfHIuVorW6JKzoDssZI6cBTFZIS1yLobIWRA6vEJAZDUyB5u8MKV4B2RKYuQqQiFnYWnMmR8MfhFIdRYl+JHKplZile1sPjkXKW9TbQ85z2GRc5H0BshZOyxD4luUQk65yqJBaJVFKeQ8S6aEyVtQjEPOopDqXD45FylFtXTJWdwdnmeOnMUx2Xla5FwEkbM4dHjnAZHVyBxs8hKU4l1MpiRGrvMp5CwhjTnzg8E/H1KVpAQ/UtnUSqyyleKTc6HyNo32kPMCFjkXSm+AnKPDMiS+F1LIKVd5YRBa5YUUcpaUKWHyFlzEIeeFkOpiPjkXKkWjdMl5iTu81Bw5L8Fkl2qRcyFEzkugw7sUiKxG5mCTl6YU74tkSmLkKkMhZ2lpzJkfDH4ZSHUZJfiRyqZWYpXtcj45Fyhv0zQPOa9gkXOB9AbIOS0sQ+J7JYWccpVXBqFVXkkh52UyJUzegqs45LwSUl3NJ+cCpWiqLjnLusNy5shZFpOV0yLngmyEnGWhwysHRFYjc7DJy1OK91UyJTFyVaCQs7w05swPBr8CpLqGEvxIZVMrscp2LZ+c85W3qa6HnNexyDlfegPkrBuWIfG9nkJOucrrg9Aqr6eQ8xqZEiZvwQ0ccl4PqW7kk3O+UlRHl5w3ucObzZHzJkx2sxY550PkvAk6vJuByGpkDjb5LZTifYNMSYxcFSnkvEUac+YHg18RUt1KCX6ksqmVWGW7jU/Oecrb1M1DzttZ5JwnvQFydgvLkPhWopBTrrJSEFplJQo5b5UpYfIWVOaQsxKkqsIn5zylqKsuOau6w2rmyFkVk1XTIuc8iJxVocOrBkRWI3OwyatTindlmZIYuWpQyFldGnPmB4NfA1LVpAQ/UtnUSqyy1eKTc26+yFmbRc650hsjZ20ovnUo5JSrrIORsw6FnDVlSpi8BXU55KwDqerxyTmXR8767rCBOXLWx2QNtMg5FyJnfejwGnDIiU3ekFK85ZOiehi5GlHI2VAac+YHg98IUt1BCX6ksqmVWGW7k0/OOcrbNNxDzrtY5JwjvQFyDg/LkPjeTSGnXOXdQWiVd1PIeYdMCZO34B4OOe+GVPfyyTlHKRqmS87G7vA+c+RsjMnu0yLnHIicjaHDuw+IrEbmYJPfTyne98iUxMj1AIWc90tjzvxg8B+AVA9Sgh+pbGolVtke4pNztvI2DfaQ82EWOWdLb4Ccg8MyJL6PUMgpV/lIEFrlIxRyPihTwuQteJRDzkcgVRM+OWcrRYN0ydnUHT5mjpxNMdljWuScDZGzKXR4jwGR1cgcbPJmlOL9qExJjFzNKeRsJo0584PBbw6pWlCCH6lsaiVW2R7nk3OW8jat85DzCRY5Z0lvgJzrwjIkvk9SyClX+WQQWuWTFHLKE3jc5C1oySHnk5DqKT45ZylFa3XJ+bQ7bGWOnE9jslZa5JwFkfNp6PBaAZHVyBxs8taU4t1SpiRGrjYUcraWxpz5weC3gVRtKcGPVDa1Eqts7fjknKm8Tcs85GzPIudM6Q2Qc1lYhsQ3i0JOucqsILTKLAo528qUMHkLOnDImQWpOvLJOVMpErrk7OQOnzFHzk6Y7Bktcs6EyNkJOrxngMhqZA42+bOU4i3j2hEjV2cKOZ+Vxpz5weB3hlRdKMGPVDa1Eqtsz/HJOUN5m4p5yPk8i5wzpDdAzmJhGRLfFyjklKt8IQit8gUKObvIlDB5C17kkPMFSPUSn5wzlKKiuuTs6g67mSNnV0zWTYucMyBydoUOrxsQWY3MwSbvTineL8qUxMj1MoWc3aUxZ34w+C9DqlcowY9UNrUSq2yv8sk5XXmbJnvI+RqLnNOlN0DOyWEZEt/XKeSUq3w9CK3ydQo5X5EpYfIW9OCQ83VI1ZNPzulK0SRdcr7hDt80R843MNmbWuScDpHzDejw3gQiq5E52ORvUYp3D5mSGLneppDzLWnMmR8M/tuQ6h1K8COVTa3EKtu7fHJOU96mnh5y9mKRc5r0BsjZMyxD4tubQk65yt5BaJW9KeR8R6aEyVsQ5JCzN6TK5pNzmlLUQ5ecfdxhX3Pk7IPJ+mqRcxpEzj7Q4fUFIquROdjk71GKd1CmJEau9ynkfE8ac+YHg/8+pPqAEvxIZVMrscr2IZ+cU5W3qZaHnB+xyDlVegPkrBWWIfH9mEJOucqPg9AqP6aQ8wOZEiZvwScccn4MqfrxyTlVKaqpS87+7vBTc+Tsj8k+1SLnVIic/aHD+xSIrEbmYJMPoBTvT2RKYuQaSCHnAGnMmR8M/kBI9Rkl+JHKplZile1zPjmnKG9T0EPOQSxyTpHeADmDYRkS38EUcspVDg5CqxxMIednMiVM3oIhHHIOhlRD+eScohT11iXnF+5wmDlyfoHJhmmRcwpEzi+gwxsGRFYjc7DJh1OK9xCZkhi5vqSQc7g05swPBv9LSDWCEvxIZVMrscr2FZ+ck5W3qZ2HnCNZ5JQfDY4EyNkuLEPi+zWFnHKVXwehVX5NIecImRImb8E3HHJ+DalG8ck5WSlqq0vO0e5wjDlyjsZkY7TIORki52jo8MYAkdXIHGzysZTi/Y1MSYxc4yjkHCuNOfODwR8HqcZTgh+pbGolVtkm8Mk5SXmbZnjIOZFFzknSGyDnjLAMie8kCjnlKicFoVVOopBzvEwJk7dgMoeckyDVFD451acwXZecU93hNHPknIrJpmmRcxJEzqnQ4U0DIquROdjk0ynFW74snoKRawaFnNOlMWd+MPgzINVMSvAjlU2txCrbLD45JypvUykPOWezyDlRegPkLBWWIfGdQyGnXOWcILTKORRyzpQpYfIWzOWQcw6kmscn50SlqKQuOee7wwXmyDkfky3QIudEiJzzocNbAERWI3OwyRdSivdcmZIYuRZRyLlQGnPmB4O/CFItpgQ/UtnUSqyyLeGTc4LyNqV7yLmURc4J0hsgZ3pYhsQ3RCGnXGUoCK0yRCHnYpkSJm+B4JAzBKmW8cmpfmaTpkvO5e5whTlyLsdkK7TIOQEi53Lo8FYAkdXIHGzylZTiLWRKYuT6lkLOldKYMz8Y/G8h1XeU4Ecqm1qJVbbv+eQcr7xNbTzkXMUip3y3vgogZ5uwDInvago55SpXB6FVrqaQ8zuZEiZvwRoOOVdDqrV8cqo/k2mtS8517vAHc+Rch8l+0CLneIic66DD+wGIrEbmYJP/SCnea2RKYuRaTyHnj9KYMz8Y/PWQ6idK8COVTa3EKtvPfHKOU96mgh5y/sIi5zjpDZCzYFiGxHcDhZxylRuC0Co3UMj5k0wJk7dgI4ecGyDVr/PUk58hOdVfpcjUJedv7vB3c+T8DZP9rkXOcRA5f4MO73cgshqZg03+B6V4b5QpiZHrTwo5/5DGnPnB4P8JqTZRgh+pbGolVtn+4pNT/T21BA85N7PIOVZ6QwtO30Jhopx/C6d7wSZ5jCYz928O7bZAqq0ahw9sSRr35qf6mHyl+j+sVB8jvbFU30ZJdTn/Np1UVzqHz3Fb0FASn/Fpj1avw3Pa21mnPVp6YzdwO5QTOyg5IVe5Azu5HZQiKTNnBwbOv6FV7mTkdzhKO3tzXrXshFT/Ul61RAilVmKE2kUpLv9KY6xs7gSuyGnFJblP/opLGWCD+BuyhFL5evcW7D6kclZW0y7rE0qJ9N0ifY9I3yvS94n0/SL9gEg/KNIPifTDIv2ISD8q0o+JjASRYYkMW2Q4IqOAyEgUGT6RkSQykkVGishIFRlpIiNdZGSIDL/ICIiMTJFRUGQUEhmFzb0j3J0MyfZgsr2YbB8m24/JDmCyg5jsECY7jMmOYLKjmOwYJMtIwGQWJrMxmYPJCmCyREzmw2RJmCwZk6VgslRMlobJ0jFZBibzY7IAJsvEZAUxWSFMVjjHM6q+0QnY+yRcJIEOR1W1DbqqI9FUk9p5VEcR5mZ2y+/LkhwbGZ+HraRG8mmqahPyVqV4VQ2rR1GlQht5Nb8bWZ9QAkE29MplN/RscY9SFT63vSrV8dPdF1uVfSIH9sdU7T6ZKQdiqTZE8ulgDFWVU1l3KIqqs/dI04/lrap5+sEn5KnalCM9rLxUFXImkZ2HqnSuVHNyqx7KnZAFcqka55G2iTlV3fJKbl8OVbc8r0CSRzWxUbSLkuaqykyKqko/pRpwWXRVRkRVbmAMlf+kakP5WKrACVX7jTFVmcdV9bNiqwqGVc0aKFSFpKpsc5WqMPKuILMbpOJ3bc8orKwxK90HExlFSA8mMgpLb+CzypVhGeJ3FuPBRHiVZwWhVZ6V35PL9wdx4ZNTiFZofhCXcbY7PMfY266MszHZOTofxB2/dkpYZpyNgDfjHCCy+U+es+T00FOtjLP5176QMlr9Pde+KOvay/f1RYFr3z8sQ/yKUa69XGWxILTKYvxrX0gp6qd77c91h8XNXftzMVlxrWtfCLr250LXrjgQ2fw/TAUnP4/xWVa45hTLxoAJrbIE42FqxnnSOGhs/jOsjAWVCTXWUxnPZ1VG+dDzfKAyjg3LEL+SlMooV1kyCK2yJOOTmnB+lzCZ36Uon6dklIRUF9C/vBVOboVojC48LnSHF5mDx4WY7CIteBSE4HEhdHgXAZHVyBxs8ospJaiUTEmsLF9CwcLF0pgzPxj8SyDVpZTgRyobUAMhVen8Fpf8kzNTeZt6echZhkVO+YlhGYCcvcIyxO8yCjnlKi8LQqu8jELOS2VKmLwFl1O+CJZxGaS6gk/OTKXoXV1yXukOrzJHzisx2VVa5MyEyHkldHhXAZHVyBxs8qspJehymZIYucpSyHm1NObMDwa/LKQqRwl+pLKplVhlK89/zxlQ3iZPe6eMCixyBqQ31N5JyhC/ayjklKu8BmrvFJ5fYadDznIyJUzegms55LwGUl3HJ2dAKdJt75RxvTu8wRw5r8dkN2iRMwCR83ro8G4AIquROdjkN1JK0LUyJTFy3UQh543SmDM/GPybINXNlOBHKptaiVW2W/jk9Ctv0woPOSuyyOmX3gA5V4RliN+tFHLKVd4ahFZ5K4WcN8uUMHkLbuOQ81ZIdTufnH6laLkuOSu5w8rmyFkJk1XWIqcfImcl6PAqA5HVyBxs8iqUEnSbTEmMXFUp5KwijTnzg8GvCqmqUYIfqWxqJVbZqvPJmaG8TU095KzBImeG9AbI2TQsQ/xqUsgpV1kzCK2yJoWc1WRKmLwFtTjkrAmpavPJmaEUNdElZx13WNccOetgsrpa5MyAyFkHOry6QGQ1MgebvB6lBNWSKYmRqz6FnPWkMWd+MPj1IVUDSvAjlU2txCpbQz4505W3aa2HnI1Y5EyX3gA514ZliN8dFHLKVd4RhFZ5B4WcDWRKmLwFd3LIeQekuotPznSlaI0uOe92h/eYI+fdmOweLXKmQ+S8Gzq8e4DIamQONvm9lBJ0p0xJjFyNKeS8Vxpz5geD3xhS3UcJfqSyqZVYZbufT8405W2q7SHnAyxypklvgJy1wzLE70EKOeUqHwxCq3yQQs77ZEqYvAUPccj5IKR6mE/ONKWoli45H3GHj5oj5yOY7FEtcqZB5HwEOrxHgchqZA42eRNKCXpIpiRGrqYUcjaRxpz5weA3hVSPUYIfqWxqJVbZmvHJmaq8TaM95GzOImeq9AbIOTosQ/xaUMgpV9kiCK2yBYWcj8mUMHkLHueQswWkeoJPzlSlaJQuOZ90hy3NkfNJTNZSi5ypEDmfhA6vJRBZjczBJn+KUoIelymJketpCjmfksac+cHgPw2pWlGCH6lsaiVW2VrzyZmivE3TPORswyJnivQGyDktLEP82lLIKVfZNgitsi2FnK1kSpi8Be045GwLqdrzyZmiFE3VJWeWO+xgjpxZmKyDFjlTIHJmQYfXAYisRuZgk3eklKB2MiUxcnWikLOjNObMDwa/E6R6hhL8SGVTK7HK9iyfnMnK21TXQ87OLHImS2+AnHXDMsSvC4WccpVdgtAqu1DI+YxMCZO34DkOObtAquf55ExWiurokvMFd/iiOXK+gMle1CJnMkTOF6DDexGIrEbmYJO/RClBz8mUxMjVlULOl6QxZ34w+F0hVTdK8COVTa3EKlt3PjmTlLepm4ecL7PImSS9AXJ2C8sQv1co5JSrfCUIrfIVCjmlcXeTt+BVDjlfgVSv8cmZpBR11SXn6+6whzlyvo7JemiRMwki5+vQ4fUAIquROdjkPSkl6FWZkhi53qCQs6c05swPBv8NSPUmJfiRyqZWYpXtLT45ffki59sscvqkN0bOt6FtvUMhp1zlOxg536GQ802ZEiZvwbsccr4DqXrxyenjkbO3OwyaI2dvTBbUIqcPImdv6PCCHHJik2dTStC7MiUxcvWhkDNbGnPmB4PfB1L1pQQ/UtnUSqyyvccnZ6LyNg33kPN9FjkTpTdAzuFhGeL3AYWccpUfBKFVfkAhZ1+ZEiZvwYcccn4AqT7ikzNRKRqmS86P3eEn5sj5MSb7RIuciRA5P4YO7xMgshqZg03ej1KCPpQpiZGrP4Wc/aQxZ34w+P0h1aeU4Ecqm1qJVbYBfHIWUN6mwR5yDmSRs4D0Bsg5OCxD/D6jkFOu8rMgtMrPKOT8VKaEyVvwOYecn0GqQXxyFlCKBumSc7A7HGKOnIMx2RAtchaAyDkYOrwhQGQ1MgebfCilBH0uUxIj1xcUcg6Vxpz5weB/AamGUYIfqWxqJVbZhvPJ6Shv0zoPOb9kkdOR3gA514VliN8ICjnlKkcEoVWOoJBzmEwJk7fgKw45R0CqkXxyOkrRWl1yfu0OvzFHzq8x2Tda5HQgcn4NHd43QGQ1MgebfBSlBH0lUxIj12gKOUdJY878YPBHQ6oxlOBHKptaiVW2sXxy2srbtMxDznEsctrSGyDnsrAM8RtPIadc5fggtMrxFHKOkSlh8hZM4JBzPKSayCenrRQJXXJOcoeTzZFzEiabrEVOGyLnJOjwJgOR1cgcbPIplBI0QaYkRq6pFHJOkcac+cHgT4VU0yjBj1Q2tRKrbNP55LSUt6mYh5wzWOSU/50BkLNYWIb4zaSQM2wchFY5k0LOaTIlTN6CWRxyzoRUs/nktJSiorrknOMO55oj5xxMNleLnBZEzjnQ4c0FIquROdjk8yglaJZMSYxc8ynknCeNOfODwZ8PqRZQgh+pbGolVtkW8smZoLxNkz3kXMQip9zsIoCck8MyxG8xhZxylYuD0CoXU8i5QKaEyVuwhEPOxZBqKZ+cCUrRJF1yhtyhMEfOECYTWuRMgMgZgg5PAJHVyBxs8mWUErREpiRGruUUcsonVcs584PBXw6pVlCCH6lsaiVW2VbSyZl+THmbenrI+S2JnOnHpDdAzp5hGRLf7xjkDK/yuyC0yu8o5FwhU8LkLfieQ87vINUqOjnDya0Q9dAl52p3uMYcOVdjsjU65Ew/BpFzNXR4a4DIamQONvlaSvH+XqYkRq51FHKulcac+cHgr4NUP1CCH6lsaiVW2X7kk/Oo8jbV8pBzPYucR6U3QM5aYRkS358o5JSr/CkIrfInCjl/kClh8hb8zCHnT5DqFz45jypFNXXJucEdbjRHzg2YbKMWOY9C5NwAHd5GILIamYNN/iuleP8sUxIj128Ucv4qjTnzg8H/DVL9Tgl+pLKplVhl+4NPziPK2xT0kPNPFjmPSG+AnMGwDInvJgo55So3BaFVbqKQ83eZEiZvwV8ccm6CVJv55DyiFPXWJecWd/i3OXJuwWR/a5HzCETOLdDh/Q1EViNzsMm3Uor3XzIlMXL9QyHnVmnMmR8M/j+Qahsl+JHKplZilW07n5yHlbepnYecO1jkPCy9AXK2C8uQ+O6kkFOucmcQWuVOCjm3yZQweQv+5ZBzJ6TaxSfnYaWorS45d7vDPebIuRuT7dEi52GInLuhw9sDRFYjc7DJ91KK978yJTFy7aOQc6805swPBn8fpNpPCX6ksqmVWGU7wCfnIeVtmuEh50EWOQ9Jb4CcM8IyJL6HKOSUqzwUhFZ5iELO/TIlTN6CwxxyHoJUR/jkVJ/CdF1yHnWHx8yR8ygmO6ZFzkMQOY9Ch3cMiKxG5kCT+xMoxVu+LD4CkctvMcjpDxtz5seC77cglU0JfqSyqZVQZfM7fHIeVN6mUi45/QVY5DwovQFylgrLkDRMpJBTrjIxCK0ykUFOvy1TwuQt8FHI6U+EVEl8ch5UikpqktOf7A5TjJHTn4zJUrTIeRAhpz8ZOrwUILIamYNNnsooQX6fTEmMXGkUcqZKY878YPDTIFU6JfiRyqZWYpUtg0/OA8rblO4hp59FzgPSGyBneliGxDdAIadcZSAIrTJAIac0zjB5CzI55AxAqoJ8cqqf2aTpkrOQOyxsjpyFMFlhLXIegMhZCDq8wkBkNTIHm7wIpXhnypTEyHUWhZxFpDFnfjD4Z0GqsynBj1Q2tRKrbOfwyblfeZvaeMhZlEXO/dIbIGebsAyJbzEKOeUqiwWhVRajkPNsmRImb8G5HHIWg1TF+eRUfybTWpec57nDEubIeR4mK6FFzv0QOc+DDq8EEFmNzMEmP59SvM+VKYmRqySFnOdLY878YPBLQqpSlOBHKptaiVW2C/jk3Ke8TQU95LyQRc590hsgZ8GwDInvRRRyylVeFIRWeRGFnPIx8AUmb8HFHHJeBKku4ZNT/VWKTF1yXuoOS5sj56WYrLQWOfdB5LwUOrzSQGQ1MgebvAyleF8sUxIj12UUcpaRxpz5weBfBqkupwQ/UtnUSqyyXcEnp/p7agkecl7JIude6Q0t2H8VhYly/qt6U2h3uTxGk5l7NYd2V0GqshqHD2xJGvfmp/qefKV6OVaq75HeWKqXp6S6nL+8TqorncPnWD5oKInP+LR3q9fhOe0KrNPeLb2xG1gByolrKDkhV3kNdnLXUIqkzJxrMHBeDa3yWkZ+h6N0bW/Oq5ZrIdV1lFctEUKplRihrqcUl+ukMVY2rwWuyGnFxe7TfUjlrKymXdYnbEDqQEJcFBfFRXHR/70oEXz545uHzIdZzTVnNcec1WxzVrPMWc00ZzXDnNV0c1bTzFlNNWc1xZzVZHNWk8xZTTRnNcGc1XhzVuPMWY01ZzXGnNVoc1ajzFl9Y87qa3NWI81ZfWXOaoQ5qy/NWQ03ZzXMnNUX5qyGmrMaYswqOcmclc+cVaI5qwLmrBxzVrY5K8ucVYIxq6Rj5qyOmrM6Ys7qsDmrQ+asDpqzOmDOar85q33mrPaas9pjzmq3Oatd5qz+NWe105zVDnNW281ZbTNn9Y85q63mrP42Z7XFnNVmc1Z/GbNKqWPOqrY5q1rmrGqas6phzqq6Oatq5qyqmrOqYs6qsjmrSuasbjdndZs5q1vNWVU0Z3WLOaubzVndZM7qRnNWN5izut6c1XXmrK41Z3WNOasK5qzKm7MqZ86qrDmrq81ZXWXO6kpzVlcYs0p9x5zV2+as3jJn9aY5qzfMWfU0Z9XDnNXr5qxeM2f1qjmrV8xZvWzOqrs5q27mrLqas3rJnNWL5qxeMGf1vDmr58xZdTFn1dmc1bPmrJ4xZ9XJnFVHc1YdzFllmbNqb86qnTmrtuas2hizSlthzmq5Oatl5qyEOauQOaul5qyWmLNabM5qkTmrheasFpizmm/Oytx3INPMfQcyzdx3INPMfQcyzdx3INPMfQcyzdx3INPMfQcyzdx3INPMfQcyzdx3INPMfQcyzdx3INPMfQcyzdx3INPMfQcyzdx3INPMfQcybYw5K3PfgcwobM6qkDmrguasMs1ZBcxZ+c1ZZZizSjdnlWbOKtWcVYo5q2RzVua+A5lh7juQGea+A5lh7juQGea+A5lh7juQGea+A5lh7juQ6ea+A5lu7juQ6ea+A5lu7juQ6ea+A5lu7juQ6ea+A5lu7juQ6ea+A5lu7juQ6ea+A5kOfAcyH52iEjbkR5wQPPVL1JnCf4Pw3yj8Nwn/zcJ/i/BXFP5bhf824b9d+CsJf2XhryL8VYW/mvBXF/4a5lpP3V4KklXCZJUxWRVMVhWTVcNk1TFZjVKntyOAEskPfNlDx/ZGju1NHNubOba3cGwrcmxv5djepmzidvh02/eygdYTvtnZQHM43xylKiH8a88qVXgjvnnQdm/PbxSx7U6HtjsD2u5MaLuzoO1Wyu92+0CTT4MmryxV5/1TfM8Yp8h7l9pb190+58iDRQtUv3JPraEtmvcu802/Fk+sFZmXc05kPHQiE6ATmQgFZRIUlCqc7Y6GtjsG2u5YaLvjoO1W5STgKGjyalJ18eopSfu+7FVgzNodbZ/dc3mfJTXfmTGiYra46rZud/32/rb6IvNSzokMh07kS+hERkBB+QoKSnXOdodA2x0KbfcLaLvDoO3W0MGmurWS+pcGEvN4VTj6riebVrju+qptW7fLki8KW7Zt00e+SHdfJPo6mR/7a3pflXtfentfX3tfRHtfKXtfDntf83pf2H7omfhuz/gez/hez7ixZ3yfZ3y/Z/yAZ/zgh8JfS/hrC38d4a8r/PWEv77wNxD+hvHuUXFRXBQX/T8ninePiljFu0fhVvHuUbhVvHsUbhXvHoVbxbtH4Vbx7lG4Vbx7FG4V7x6FW8W7R+FW8e5RuFW8exRuFe8ehVvFu0fhVvHuUbhVvHsUbhXvHoVbxbtH4Vbx7lG4Vbx7FG4V7x6FW8W7R+FW8e5RuFW8exRuFe8ehVvFu0fhVvHuUbhVvHsUbhXvHoVbxbtH4Vbx7lG4VZY5q3j3KNgq3j0qH1bx7lG4Vbx7FG4V7x6FW8W7R+FW8e5RuFW8exRuFe8eBVvFu0flwyrePQq3inePwq3i3aNwq3j3KNgq3j0qH1bx7lG4Vbx7FLF7VKXTukc1Ev47hP9O4b9L+O8W/nuE/17hbyz89wn//cL/gPA/KPwPCf/Dwv+I8D9qrntUI6yn0h2Y7E5MdhcmuxuT3YPJ7sVkjTHZfZjsfkz2ACZ7EJM9hMkexmSPYLJHS2k0s0gukA00s0hOzAaaWST7soFmFslJSGHwNwIKg8Z2E6DtWtB2bWi7DrTdO/K7Xah5TNIxaPI7s5HuRTdRTiRpP3IiSQeQE0k6CAXlEBSUuzjb3Q1tdw+03b3QdvdB272bk4C7oMnvyUa6F13HOZGt0In8A53INigo26Gg3MvZ7l/QdjdD290CbfdvaLuNKdtNqYlsN6UWst2U2sh2U+pA272Ps92q0HarQdutDm23BrTd+ynlJaUKNPkDEN9qcU7kFuhEKkIncisUlNugoDzI2e4N0HZvhLZ7E7Tdm6HtPsRJwOuhyR+G+FaNcyJloRMpB51IeSgoFaCgPMLZ7hXQdq+EtnsVtN2roe0+Cmw3/230/I28zwi8DwK87/a9b+m979u9b86978C9b7O976W9b5i974q9b32972+9b2K971Q9bfT8tTzj2p5xHc+4rmdczzOu7xk38Iwbfij8TYS/qfA/JvzNhL+58LcQ/seF/4l4G724KC6Ki/6fE8Xb6EWs4m30cKt4Gz3cKt5GD7eKt9HDreJt9HCreBs93CreRg+3irfRw63ibfRwq3gbPdwq3kYPt4q30cOt4m30cKt4Gz3cKt5GD7eKt9HDreJt9HCreBs93CreRg+3irfRw63ibfRwq3gbPdwq3kYPt4q30cOt4m30cKt4Gz3cKt5GD7eKt9HDreJt9HCreBs93CrLnFW8jR5sFW+jlw+reBs93CreRg+3irfRw63ibfRwq3gbPdwq3kYPt4q30YOt4m308mEVb6OHW8Xb6OFW8TZ6uFW8jR5sFW+jlw+reBs93CreRo/YRq/baW30nhT+lsL/lPA/LfythL+18LcR/rbC30742wt/lvB3EP6Owt9J+J8R/mfNtdF7EmuS1hKTPYXJnsZkrTBZa0zWBpO1xWTtMFl7TJaFyTpgso6YrBMmewaTPavTRi/1zWyg60TqW9lA14nUt7OBrhOp7yCFwf8kUBg0tvs6tN0e0HZ7Qtt9A9puy/xuF+rykvoaNPlT2UiboaacE3kJOpGu0Il0g4LSHQrK05ztPgdt93louy9A230R2m4rTgJ2gSZvnY20GXqYcyJZ0Il0gE6kIxSUTlBQ2nC22wbabltou+2g7baHttuWst00gWw3bRmy3bTlyHbTVkDbbcfZ7mJou0ug7S6FthuCttueUl7SFkGTZ0F868Q5kdnQicyBTmQuFJR5UFA6cLY7HdruDGi7M6HtzoK225GTgNOgyTtBfGvPOZHx0IlMgE5kIhSUSVBQnuFsdzS03THQdsdC2x0HbRf4MplOG70nvc8IvA8CvO/2vW/pve/bvW/Ove/AvW+zve+lvW+Yve+KvW99ve9vvW9ive9UvW30mnjGTT3jxzzjZp5xc8+4hWf8uGf8xIfC31n4uwj/c8L/vPC/IPwvCv9Lwt813kYvLoqL4qL/50TxNnoRq3gbPdwq3kYPt4q30cOt4m30cKt4Gz3cKt5GD7eKt9HDreJt9HCreBs93CreRg+3irfRw63ibfRwq3gbPdwq3kYPt4q30cOt4m30cKt4Gz3cKt5GD7eKt9HDreJt9HCreBs93CreRg+3irfRw63ibfRwq3gbPdwq3kYPt4q30cOt4m30cKt4Gz3cKt5GD7fKMmcVb6MHW8Xb6OXDKt5GD7eKt9HDreJt9HCreBs93CreRg+3irfRw63ibfRgq3gbvXxYxdvo4VbxNnq4VbyNHm4Vb6MHW8Xb6OXDKt5GD7eKt9EjttGbdVobvW7C3134Xxb+V4T/VeF/TfhfF/4ewt9T+N8Q/jeF/y3hf1v43xH+d4W/l7k2et2wJmndMdnLmOwVTPYqJnsNk72OyXrotIPLyMwGuidkFMwGuidkFMoGuidkFEYS3A98zKWz3XRouxnQdv3QdgPQdrvnd7tQt5KMNGjyl7ORdjmvck6kAHQiidCJ+KCgJEFBeYWz3QRouxa0XRvargNt91VKAqYfgyYPdy1Ut8vhlIT0/ciJpB9ATiT9IBSUQ1BQXudsdze03T3QdvdC290HbbdHfrcLvVDy9+TYvsGxfZNj+xbH9m2O7Tsc23c5tr10bJXX1K98mZyk1T2qm/elsff1r/dFrveVrPflqvc1qfeFpzv2ebpB+TqZGft7e7tHdfaMu3jGz3nGz3vGL3jGL3rGL3nGXT8U/qDwZwt/H+HvK/zvCf/7wv+B8H94eveo5D7u2yQsOYJm36YVyIfYSoi8TZM7+kj4Pxb+T4S/n7k3YB8lQ7KPMdknmKxfcm7mqXYjjwG6ch8hZPR/jJDR/wlCRn8/ID3OMAOz/yMZ2F/4PxX+AcI/0FwG9sdy5lNMNgCTDdTKwGwoA/tDGfgplIEDoAwcyM/APv+RDPxM+D8X/kHCP9hcBn6G5cznmGwQJhuslYF9oAz8DMrAz6EMHARl4GB+Bvb9j2TgEOEfKvxfCP8wcxk4BMuZoZjsC0w2TCsD+0IZOATKwKFQBn4BZeAwfga+9x/JwOHC/6XwjxD+r8xl4HAsZ77EZCMw2VdaGQg9IfEPhzLwSygDR0AZ+BU/A9//j2TgSOH/Wvi/Ef5R5jJwJJYzX2OybzDZKK0MfB/KwJFQBn4NZeA3UAaO4mfgB/+RDBwt/GOEf6zwjzOXgaOxnBmDycZisnFaGfgBlIGjoQyEmqr7oabq/nH8DPzwP5KB44V/gvBPFP5J5jJwPJYzEzDZREw2SSsDP4QyEPorBn7orxj4ob9i4J+U3wx08pmBVn7yb31CyZOWVgz9iadWClHCiadWClHCiadWCpFU9fNs1Yqq6u+qrOhen55SWTFmHBBRWbHWNTDHEVh5qj47XWXl7fX5aSoryoyDvCor2roG55EaVi7VkNwqK7fX0FwqK48Zv8ipsvJa17AoKWudphqet8o63evLPFVWjhlH5KWycq7rqxhXyTqlGhldZbleX0dVWZ4Zv4mmsrzrGqW44lZChJwKUcIJcipECSfIqRBJFfbnSCYoVVbCiUqpECVglTJflbG02jA77Ni6XasWwj/51PfPLhb+KcI/VfinCf904Z8h/DOFf5bwzxb+OcI/V/jnCf984V8g/AuFf5HwLxb+JcK/VPhDwi+Ef5nwLxf+FcK/Uvi/Ff7vhP974V8l/KuFf43wrxX+dcL/g/D/KPzrhf8nDNZn9BqljNlXKBfnR2wHvWH9Wfh/Ef4Nwr9R+H8V/t+E/3fh/0P4/xT+TcL/l/BvFv4twv+38G8V/n+Ef5vwbxf+HcK/U/j/Ff5dwr9b+PcI/17h3yf8+4X/gPAfFP5Dwn9Y+I8I/1HhPyYCCSJgmXsN9DMm+wWTbcBkGzHZr5jsN0z2Oyb7A5P9ick2YbK/MNlmTLYFk/2NybZisn8w2TZMth2T7cBkOzHZv5hsFybbjcn2YLK9mGwfJtuPyQ5gsoOY7BAmO4zJjmCyo5jsGCQLYEU1YFmnv8dbn3AJAjLoPd7P6vd4x2S9VqskUDaoVRJBG9UqCbBf1SqJxd/UKvk65He1qrus1NC73T+VqqNStUmpOixVfylV+6Vqs1K1Q6q2KFUbpOpvpWqWVG1VqrpJ1T/Q+/5tKtXRsGq7SnU4rNqhUu0Pq3aqVDvCqn9Vqg1h1S6ValZYpfw+Z7ewSvl9zuPvEVTf59x2XLVPodp6XKX6Wu1fx1Wqr9VuOK5Sfa12xXHVIYVq1HHVYYWq3XHVkdiq7B3HVUdjq4InVMdiq3odVwUUXwx/64QKeYTkLdfBPidcN0Svw9bxr4f9DH1HKnOx3vztN8ac/2N4/iX5nL933//JQzT1RjZrbeT//NmceiNbdE/k//aRn3ojf+tvJOrchCeJ6o1sPcON5LkG8w8o1Rv554w38n/y3FO9kW0mToT/OFW9ke1mNnLa3ISntOqN7DC4kVNrMP/wV72RnUY3QnumrN7Iv/ncSJ/jryzqZ8V+ZfGJfGURFjZroBD2Oyk8uc6JUYX94dcqu7V2dNy1TPSFfupd6IAYOxrgEZaLtfWB8I726O/ouGu3POf/7PTQS+H4vBf6eU5htSg7GgTvaO+Z7KhhtIgOzrWj48LSuYRD8hQ+lNtxKLyjfWd4Rt27N85jR1/ksdBueW19WN5bDws7nyYcDu9o/xnv6LhrzdMX+mW0hW7KsaMRUYQVcm79K3hHB8zs6LhrlVPzj4weeins7S7061jCtp4dfQPv6KCpHU3yRnRUzB15HlyMVgpPvmMfA+/okMEzqrpx98kdjVUsdENk6+PUWz/xDHUCvKPDRncUeSY5ETij4w/jJp0QKlZgHf9EF9zRkfy++FmfUBT7gBuZPmAjL5IyF0OqJZBqM6TaAqn+hlRbIdU/kGobpNoOqXZAqp2Q6l9ItRtS7YFUeyEV9Ivzmfsh1QFIdRBSQf0LMg9Dqnxf4U+hdyZToAvsYM88sSeT2HsC7HU29toVez2IvcbCXrdgrwUwvmLMMsaB3J91jmvUtkOLls3btqnQqEVW604dm3Zs2bZNdl/PZ5+2Z+xE+U31gX1FoIAIJIqATwSScj38TlCm6lT5CSeEu4Lp+bwrQegFxC9y/dj8Gfm9q32RuxooAN3VZMSrYDqk4mzEPxXaSAp21sZORCfxkz3jlBiJnyoCaSKQLgIZGok/TX5ojyWen5L4G+T6sfkDnMRPhfLFD6U0puJsxD8N2kgAO2tjJ6KT+H7POBAj8TNFoKAIFBKBwhqJP134N2KJl0lJ/I1y/dj8BTmJnwnlSxEopTMhFWcj/unQRs7CztrYiegkfhHP+KwYiX+2CJwjAkVFoJhG4s8Q/l+xxCtESfxf5fqx+QtzEv9sKF/OhVK6EKTibMQ/A9pIceysjZ2ITuKf6xkXj5H454lACRE4XwRKaiT+TOH/DUu8IpTE/02uH5v/LE7inwflSykopTEucDbinwlt5ALsrI2diE7il/KML4iR+BeKwEUicLEIXKKR+LOE/3cs8c6mJP7vcv3Y/OdwEv9CKF8uhVL6bEjF2Yh/FrSR0thZGzsRncS/1DMuHSPxy4jAZSJwuQhcoZH4s4X/DyzxilIS/w+5fmz+YpzEh34DIHAllNJFIRVnI/7Z0Eauws7a2InoJP6VnvFVMRL/ahEoKwLlRKC8RuLPEf4/scQ7l5L4f8r1Y/MX5yT+1VC+VIBSGnsnwNmIfw60kWuwszZ2IjqJX8EzviZG4l8rAteJwPUicING4s8V/k1Y4p1HSfxNcv3Y/CU4iX8tlC83Qil9HqTibMQ/F9rITdhZGzsRncS/0TO+KUbi3ywCt4hARRG4VSPx5wn/X1jinU9J/L/k+rH5S3IS/2YoX26DUvp8SMXZiH8etJHbsbM2diI6iX+bZ3x7jMSvJAKVRaCKCFTVSPz5wr8ZS7xSlMTfLNePzX8BJ/ErQflSDUpp7NkPZyP++dBGqmNnbexEdBK/mmdcPUbi1xCBmiJQSwRqayT+AuHfgiXehZTE3yLXj81/ESfxa0D5UgdK6QshFWcj/gXQRupiZ23sRHQSv45nXDdG4tcTgfoi0EAEGmok/kLh/xtLvIspif+3XD82/yWcxK8H5UsjKKUvhlScjfgXQhu5AztrYyeik/iNPOM7YiT+nSJwlwjcLQL3aCT+IuHfiiXepZTE3yrXj81fmpP4d0L5ci+U0tjTfs5G/IugjTTGztrYiegk/r2eceMYiX+fCNwvAg+IwIMaib9Y+P/BEq8MJfH/kevH5r+Mk/j3QfnyEJTSZSAVZyN+6GvcgYexszZ2IjqJ/5Bn/HCMxH9EBB4VgSYi0FQj8ZcI/zYs8S6nJP42uX5s/is4if8IlC+PQSl9OaTibMQP/WZCoBl21sZORCfxH/OMm8VI/OYi0EIEHheBJzQSf6nwb8cS70pK4m+X68fmv4qT+M2hfHkSSmns813ORvxLoY20xM7a2InoJP6TnnHLGIn/lAg8LQKtRKC1RuKHhH8HlnhXUxJ/h1w/Nn9ZTuI/BeVLGyilr4ZUnI34Q9BG2mJnbexEdBK/jWfcNkbitxOB9iKQJQIdNBJfCP9OLPHKURJ/p1w/Nn95TuK3g/KlI5TS5SAVZyN+AW2kE3bWxk5EJ/E9f0g30ClG4j8jAs+KQGcR6KKR+MuE/18s8SpQEv9fuX5s/ms4if8MlC/PQSmNfaOHsxH/Mmgjz2NnbexEdBLf84ecA8/HSPwXROBFEXhJBLpqJP5y4d+FJd61lMTfJdePzX8dJ/FfgPKlG5TS10Iqzkb8y6GNdMfO2tiJ6CS+50+zB7rHSPyXReAVEXhVBF7TSPwVwr8bS7zrKYm/W64fm/8GTuK/DOXL61BKXw+pOBvxr4A20gM7a2MnopP4r3vGPWIkfk8ReEME3hSBtzQSf6Xw78ES70ZK4u+R68fmv4mT+D2hfHkbSmnsO5ycjfhXQht5BztrYyeik/hve8bvxEj8d0Wglwj0FoGgRuJ/K/x7scS7mZL4e+X6sflv4ST+u1C+ZEMpfTOk4mzE/y20kT7YWRs7EZ3E9/59kT4xEl/+9z0ReF8EPtBI/O+Efx+WeBUpib9Prh+b/1ZO4kN/bz3wIZTSFSEVZyP+76CNfISdtbET0Un8Dz3jj2Ik/sci8IkI9BOB/hqJ/73w78cS7zZK4u+X68fmv52T+B9D+QI1kiuIfWufsxH/99BGBmBnbexEdBL/U894QIzEHygCn4nA5yIwSCPxVwn/ASzxKlES/4BcPzZ/ZU7iD4TyZTCU0pUgFWcj/lXQRoZgZ23sRHQSf7BnPCRG4g8VgS9EYJgIDNdI/NXCfxBLvCqUxD8o14/NX5WT+EOhfPkSSukqkIqzEf9qaCMjsLM2diI6if+lZzwiRuJ/JQIjReBrEfhGI/HXCP8hLPGqURL/kFw/Nn91TuJ/BeXLKCilsd/T4mzEvwbayGjsrI2diE7ij/KMR8dI/DEiMFYExonAeI3EXyv8h7HEq0FJ/MNy/dj8NTmJPwbKlwlQSteAVJyN+NdCG5mInbWxE9FJ/Ame8cQYiT9JBCaLwBQRmKqR+OuE/wiWeLUoiX9Erh+bvzYn8bE/TTANSulakIqzEf86aCPTsbM2diI6iT/NM54eI/FniMBMEZglArM1Ev8H4T+KJV4dSuIflevH5q/LSXys5eQcKKWx38zlbMT/A7SRudhZGzsRncSf4xnPjZH480RgvggsEIGFGon/o/AfwxKvHiXxj8n1Y/PX5yQ+1pVjEZTS9SAVZyP+H6GNLMbO2tiJ6CT+Is94cYzEXyICS0UgJAJCI/HXi0AClngNGIkfkP9dgs3fkJP42C8uLYNSugGk4mzEvx7ayHLsrI2diE7iL/OMl8dI/BUisFIEvhWB7zQS/ycRsLDEa0RJfJl6K7D57+AkPvbdru+hlMZ6MXA24v8J2sgq7KyNnYhO4n/vGa+KkfirRWCNCKwVgXWnxysbWL0PSo7V+T0qKJUDP8S2/WVx9XKn2/ZTrTYff0nvR2Tn8b9+d0pl9K/fcfJpfVRb55StzkX8wTP+8dTY08c5sF5eQ4mQn0XgFxHY0H1ElayWrVq1fCLs37dAsPvQu1q2eaJVixP7SFCFJ/CTOjy9+/TurbbKXQ9U/0I42B/W2QhMnjvUQ+6s3KBmde9XsTaW0jnoX2PPPrjHsE90bH+LbbtpR/VjOra/R7UtEBlopeWvnvFvp8aXeH76u0zLP0TgTxHYJAJ/nb72PkA2QF1jAn9AUdhMouRmz/hPz3iTZ/yXjMMWEfhbBLaKwD+nX8/E7O5DKmdlNe3SR3mlwgmA3WGg8RJmhLQ2ymd12fI/rC6BjVCubDNUXbaVOv2sfX3zFyzrfxL9/FpuNG3p/C8zZBuUIdsNZcj2Ujpr3A6tcYehNe7IkcVJ+X5BsZ13oKowJAALzHf3JWRiC5j4csbEyJ/ovoIxsQNMfKXOxCpT6A9ROBN1XvSrpr6aEcgCwMRlGRMnAhOXY0yMPAYoz5g4CZi4AmNi5G/7XsOYOAWY+FrGxKnAxNcxJk4DJr6eMTHyl5lvYEycAUx8I2Ni5E/y3sSYOABMfDNjYuRvsd7CmLggMHFFxsTIH+G8lTFxYWDi2xgTFwEmvp0x8VnAxJUYEyN/dq8yY+JzgImrMCZG/t5aVcbExYCJqzEmRv7QVnXGxMWBiWswJkb+wlJNxsQlgIlrMSZG/rRObcbEJYGJ6zAmRv6mSl3GxBcAE9djTIz8MY36jIkvAiZuoDOxyrShoUd0Gu/3GzH2cwf0/GIq4wyRP0hxJ2PPdxl6hKlxhnczTO9hmN7LMG3MML2PYXo/w/QBhumDDNOHGKYPM0wfYZg+yjBtwjBtyjB9jGHajGHanGHagmH6OMP0CYbpkwzTlgzTpximTzNMWzFMWzNM2zBM2zJM2zFM2zNMsximHRimHRmmnRimzzBMn2WYdmaYdmGYPscwfZ5h+gLD9EWG6UsM064M01A3imt3iuvLFNdXKK6vUlxfo7i+TnHtQXHtSXF9g+L6JsX1LYrr2xTXdyiu71Jce1Fce1NcgxTXbIprH4prX4rrexTX9ymuH1BcP6S4fkRx/Zji+gnFtR/FtT/F9VOK6wCK60CK62cU188proMoroMprkMorkMprl9QXIdRXIdTXL+kuI6guH5FcR1Jcf2a4voNxXUUxXU0xXUMxXUsxXUcxXU8xXUCxZXy+zGhSRTXyRTXKRTXqRTXaRTX6RTXGRTXmRTXWRTX2RTXORTXuRTXeRTX+RTXBRTXhRTXRRTXxRTXJRTXpRTXEMVVUFyXUVyXU1xXUFxXUly/pbh+R3H9nuK6iuK6muK6huK6luK6juL6A8X1R4rreorrTxTXnymuv1BcN1BcN1Jcf6W4/kZx/Z3i+gfF9U+K6yaK618U180U1y0U178prlsprv9QXLdRXCm//xWi/EZSaCfF9V+K6y6K626K6x6K616K6z6K636K6wGK60GK6yGK62GK6xGK61GK6zGGq7ASOLYWx9bm2Doc2wIc20SOrY9jm8SxTebYpnBsUzm2aRzbdI5tBsfWz7ENcGwzObYFObaFOLaFObZFOLZncWzP5tiew7EtyrEtxrE9l2NbnGN7Hse2BMf2fI5tSY5tKY7tBRzbCzm2F3FsL+bYXsKxvZRjW5pjW4ZjexnH9nKO7RUc2ys5tldxbK/m2Jbl2Jbj2Jbn2Fbg2F7Dsb2WY3sdx/Z6ju0NHNsbObY3cWxv5tjewrGtyLG9lWN7G8f2do5tJY5tZY5tFY5tVY5tNY5tdY5tDY5tTY5tLY4tpbuuBU1d5383NaXDrgNNrdVjV21bPxvpV7qFMzn0B5ADGzkZ3JBj24hjewfH9k6O7V0c27s5tvdwbO/l2Dbm2N7Hsb2fY/sAx/ZBju1DHNuHObaPcGwf5dg24dg25dg+xrFtxrFtzrFtwbF9nGP7BMf2SY5tS47tUxzbpzm2rTi2rTm2bTi2bTm27Ti27Tm2WRzbDhzbjhzbThzbZzi2z3JsO3Nsu3Bsn+PYPs+xfYFj+yLH9iWObVeObTeObXeO7csc21c4tq9ybF/j2L7Ose3Bse3JsX2DY/smx/Ytju3bHNt3OLbvcmx7cWx7c2yDHNtsjm0fjm1fju17HNv3ObYfcGw/5Nh+xLH9mGP7Cce2H8e2P8f2U47tAI7tQI7tZxzbzzm2gzi2gzm2Qzi2Qzm2X3Bsh3Fsh3Nsv+TYjuDYfsWxHcmx/Zpj+w3HdhTHdjTHdgzHdizHdhzHdjzHdgLHdiLHdhLHdjLHdgrHdirHdhrHdjrHdgbHdibHdhbHdjbHdg7Hdi7Hdh7Hdj7HdgHHdiHHdhHHdjHHdgnHdinHNsSxFRzbZRzb5RzbFRzblRzbbzm233Fsv+fYruLYrubYruHYruXYruPY/sCx/ZFju55j+xPH9meO7S8c2w0cW9IvffzKsf2NY/s7x/YPju2fHNtNHNu/OLabObZb1L8opWP7N2e1Wzm2/3Bst3Fst3Nsd3Bsd3Js/+XY7uLY7ubY7uHY7uXY7uPY7ufYHuDYHuTYHuLYHubYHuHYHuXYcvr22py+vTanb6/N6dtrc/r22py+vTanb6/N6dtrc/r22py+vTanb6/N6dtrc/r22py+vTanb6/N6dtr57tvL9QTws7MRnpCcB692AU5eyqE7MnhfAprc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7BdgWPL6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsc3oA25wewDanB7DN6QFsV6J8CmtzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWzX5tjW4djW5djW49jW59g24NhyeunanF66NqeXrn0nx5bTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob107SyOLaeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeuna2RxbTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rXHcGw5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRt0m9xcnrp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2t9ybDm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b1NCF00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL117C8eW00vX5vTStTm9dG1OL12b00vX5vTStTm9dO1/ObacXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXroOp5euw+ml63B66TqcXroOp5euw+ml63B66TqcXroOp5euw+ml63B66TqcXroOp5euw+ml63B66ToBjm0mx7Ygx7YQx5bT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vnQocW07/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W6cSx5bT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9a5k2PL6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+t04Wx5bT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vnWyOLaf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86UP/b+i1at83qUrtNy459Gq13Xr/s8iuuvOrqsuXKV7jm2uuuv+HGm26+peKtt91eqXKVqtWq16hZq3aduvXqN2jY6I4777r7nnsb33f/Aw8+9PAjjzZp+liz5i0ef+LJlk893ap1m7bt2md16NjpmWc7d3nu+RdefKlrqFuoe+jl0CuhV0OvhV4P9Qj1DL0RejP0Vujt0Duhd0O9Qr1DwVB2qE+ob+i90PuhD0Ifhj4KfRz6JNQv1D/0aWhAaGDos9DnoUGhwaEhoaGhL0LDQsNDX4ZGhL4KjQx9HfomNCo0OjQmNDY0LjQ+NCE0MTQpNDk0JTQ1NC00PTQjNDM0KzQ7NCc0NzQvND+0ILQwtCi0OLQktDQUConQstDy0IrQytC3oe9C34dWhVaH1oTWhtaFfgj9GFof+in0c+iX0IbQxtCvod9Cv4f+CP0Z2hT6K7Q5tCX0d2hr6J/QttD20I7QztC/oV2h3aE9ob2hfaH9oQOhg6FDocOhI6GjoWPCShCWJSxbWI6wCggrUVg+YSUJK1lYKcJKFVaasNKFlSEsv7ACwsoUVkFhFRJWYWEVEdZZwjpbWOcIq6iwignrXGEVF9Z5wiohrPOFVVJYpYR1gbAuFNZFwrpYWJcI61JhlRZWGWFdJqzLhXWFsK4U1lXCulpYZYVVTljlhVVBWNcI61phXSes64V1g7BuFNZNwrpZWLcIq6KwbhXWbcK6XViVhFVZWFWEVVVY1YRVXVg1hFVTWLWEVVtYdYRVV1j1hFVfWA2E1VBYjYR1h7DuFNZdwrpbWPcI615hNRbWfcK6X1gPCOtBYT0krIeF9YiwHhVWE2E1FdZjwmomrObCaiGsx4X1hLCeFFZLYT0lrKeF1UpYrYXVRlhthdVOWO2FlSWsDsLqKKxOwnpGWM8Kq7OwugjrOWE9L6wXhPWisF4SVldhdRNWd2G9LKxXhPWqsF4T1uvC6iGsnsJ6Q1hvCustYb0trHeE9a6wegmrt7CCwsoWVh9h9RXWe8J6X1gfCOtDYX0krI+F9Ymw+gmrv7A+FdYAYQ0U1mfC+lxYg4Q1WFhDhDVUWF8Ia5iwhgvrS2GNENZXwhoprK+F9Y2wRglrtLDGCGussMYJa7ywJghrorAmCWuysKYIa6qwpglrurBmCGumsGYJa7aw5ghrrrDmCWu+sBYIa6GwFglrsbCWCGupsELCEsJaJqzlwlohrJXC+lZY3wnre2GtEtZqYa0R1lphrRPWD8L6UVjrhfWTsH4W1i/C2iCsjcL6VVi/Cet3Yf0hrD+FtUlYfwlrs7C2COtvYW0V1j/C2ias7cLaIaydwvpXWLuEtVtYe4S1V1j7hLVfWAeEdVBYh4R1WFhHhHVUWMeEnSBsS9i2sB1hFxB2orB9wk4SdrKwU4SdKuw0YacLO0PYfmEHhJ0p7ILCLiTswsIuIuyzhH22sM8RdlFhFxP2ucIuLuzzhF1C2OcLu6SwSwn7AmFfKOyLhH2xsC8R9qXCLi3sMsK+TNiXC/sKYV8p7KuEfbWwywq7nLDLC7uCsK8R9rXCvk7Y1wv7BmHfKOybhH2zsG8RdkVh3yrs24R9u7ArCbuysKsIu6qwqwm7urBrCLumsGsJu7aw6wi7rrDrCbu+sBsIu6GwGwn7DmHfKey7hH23sO8R9r3Cbizs+4R9v7AfEPaDwn5I2A8L+xFhPyrsJsJuKuzHhN1M2M2F3ULYjwv7CWE/KeyWwn5K2E8Lu5WwWwu7jbDbCrudsNsLO0vYHYTdUdidhP2MsJ8VdmdhdxH2c8J+XtgvCPtFYb8k7K7C7ibs7sJ+WdivCPtVYb8m7NeF3UPYPYX9hrDfFPZbwn5b2O8I+11h9xJ2b2EHhZ0t7D7C7ivs94T9vrA/EPaHwv5I2B8L+xNh9xN2f2F/KuwBwh4o7M+E/bmwBwl7sLCHCHuosL8Q9jBhDxf2l8IeIeyvhD1S2F8L+xthjxL2aGGPEfZYYY8T9nhhTxD2RGFPEvZkYU8R9lRhTxP2dGHPEPZMYc8S9mxhzxH2XGHPE/Z8YS8Q9kJhLxL2YmEvEfZSYYeELYS9TNjLhb1C2CuF/a2wvxP298JeJezVwl4j7LXCXifsH4T9o7DXC/snYf8s7F+EvUHYG4X9q7B/E/bvwv5D2H8Ke5Ow/xL2ZmFvEfbfwt4q7H+EvU3Y24W9Q9g7hf2vsHcJe7ew9wh7r7D3CXu/sA8I+6CwDwn7sLCPCPuosI8JJ0E4Esm2cBzhFBBOonB8wkkSTrJwUoSTKpw04aQLJ0M4fuEEhJMpnILCKSScwsIpIpyzhHO2cM4RTlHhFBPOucIpLpzzhFNCOOcLp6RwSgnnAuFcKJyLhHOxcC4RzqXCKS2cMsK5TDiXC+cK4VwpnKuEc7VwygqnnHDKC6eCcK4RzrXCuU441wvnBuHcKJybhHOzcG4RTkXh3Cqc24Rzu3AqCaeycKoIp6pwqgmnunBqCKemcGoJp7Zw6ginrnDqCae+cBoIp6FwGgnnDuHcKZy7hHO3cO4Rzr3CaSyc+4Rzv3AeEM6DwnlIOA8L5xHhPCqcJsJpKpzHhNNMOM2F00I4jwvnCeE8KZyW8mN++ZG8/PhcftQtP5aWHyHLj3vlR7PyY1T5kaf8eFJ+lCg/9pMf0cmP0+RHX/JjKvmRkvz4R35UIz9WkR+ByI8r5EcL8mMA+chePl6Xj8LlY2v5iFk+DpaPbuVjVvlIVD6+lI8a5WNB+QhPPm6Tj8bkYyz5yEk+HpKPcuRjF/mIRD7OkI8e5GMC+ZZevv2Wb5Xl21r5FlS+XZRv7eTbMPmWSb69kW9F5NsG+RJfvhyXL53ly1z5klS+fJQv9eTLsi/vbNGxU1abak07Nl2fcFmCZTsFEn1JySmpaekZ/kBmwUKFi5x19jlFi51b/LwS55csdcGFF118yaWly/TuvT6hXHb3wZWbtcwqmr18RdLfu5cueKJ375M/Ojf3jypmL/9x7hV3rq7uKxn50a25f3Rb7h/Jop3XD4/l8UM7IY8fOr9nL/9wa5Eh6Z9kPOD+cEteP9yR1w/35vXDw3n8sICd1w+T8/qhP68fXpPH4gtcm9cPr8vjh4l78vrh3rx+uC+PHyZNzOuHk/L64eQ8fpjSJa8fPpfXD5/P44dpt+T1w4p5/TCPpBHpR/L6YV5pk55X2gRK5HEcgYvy+uFlef2wbF4/vC6vH96S1w8r5/XDmnn9sE328hFf9Wr+YrdF3U/9MPOG7OUPTk09+H6jRf3dH96W+wKKzJp5/bBOXj+s5/nhJ9nryjQ9/n7v0WZtW7dr2rHlY61aPNo2q2kz+f880yKrQ8u2bR59Nqtpu3YtstYnnN19SNW2bTp07NN9aLWWWS2adbS7f1G7TccWT7TIGnTPNRXUbxVz/nsrX/++W7Wc/z4hf/NX6z64atNWrYJpp3yG3dmildz0My3ytxL5fjaXg51fh6/Ca2kua3PVtu26nNpSNe+aPOYnVp5xxiuvZmDlg+/q2LZdMDvKSnOcUdUhNVq2aKX+ImX60BO0OrnTzO4jarTNatHyiTbh//O9dRd36tiyVcuOXU48nah6KlkbHs/Ve0+kau/ewe4jTzxoqNy8eVaLDh1OrSLYfehdLVu3a9XixHIik+VYbIF8haJzte4jqrRs0zT8WKNjw3bvRVycYfXk1Hc/2bRN2MVN1lOTDK3TqXW72o9nn/oHZ3UfWbtN8xMrjXpDro/x260/zN+zelydCq27D75b3tZgtvvvI1f15I6zJzzWqWWr5o+27vDEo4+1atvs6UefbNEqfLuts/7Ht/uTM7zdn5zMnMdzZ3j+jjWhRm6HRDO3u7p3TR5zuXLPxqu7g8isn99zYw5RDXcQXVTTHUQX1XIH0UW13UF0UR13EF1U1x1EF9VzB9FF9d1BdFEDdxBd1NAdRBc1cgfRRXe4g+iiO91BdNFd7iC66G53EF10jzuILrrXHUQXNXYH0UX3uYPoovvdQXTRA+4guuhBdxBd9JA7iC562B1EFz3iDqKLHnUH0UVN3EF0UVN3EF30mDuILmrmDqKLmruD6KIW7iC66HF3EF30hDuILnrSHUQXtXQH0UVPuYPooqfdQXRRK3cQXdTaHUQXtXEH0UVt3UF0UTt3EF3U3h1EF2W5g+iiDu4guqijO4gu6uQOoouecQfRRc+6g+iizu4guqiLO4gues4dRBc97w6ii15wB9FFL7qD6KKX3EF0UVd3EF0U6uYZxZB194xiyF72jGLIXvGMYshe9YxiyF7zjGLIXveMYsh6eEYxZD09oxiyNzwj76vLnLo3PaPTdGf6XrD6Gb/OrdZ9UP22z2R7X9WeXKuV29uX39Xl+ebKGiTf2nnfV1neGXK+jRqm+RbAyjG5O8Wp6XPv2T4ZjZP/p+M9mNP+lwLeJZ/2vyTmeFcg38+0zBljyzt1jv/N9uRUjv/J8aTRCeeO0TZp596k+0Yy98E6+YvtW2f8Bi0zaqDtqIF2oga6wKlAn+mjkbfOODaZuR+u2F6znA9X8udeKee/r5a/f18g8tgkz5uZlPNmOm6wT4t9sis47ecp7rHlOUHq0OrtOzVt1cE7xymvpFxPVVI7dB9cr23T5qd+4HP/0RAZ5awWuWf25T1zcs6tJbvXIc9/kJLzH6S4/2BweJ3BVqc/7wptN/DQIceN98Uoxkn58y6Y/2KcFL0Y+wwV46TcdcoXo04l5/cuRpk2Ofe0yd595ziGFO//FsUy9evII0NPiuflnuKmufuP5UulSELnNWtitFlTcm8kV56+lHM7Se5ZoznhHknOVSZ5Ty4ack9/nJp3YcwdFV/o45NbkCzET9Jxa2u0qMU8K8d7bLlXlRJ6J3Lj90SdQL3hvK2zIxvuHbUUVI1IPowek7s6PRYj0mcaFTvPpb8ficr+3Ev37PrU4nO97vToT4r6xRAluiKNF3rVosYuZhBOW2TuICSHBrqpcabFy4p+53Md72kRPtMC5cuzQA1xjzdqvKu1fCZKLcrjQ6uU/NbyXA6pnvdm5fPx6cYpg7Qz/uQt3fv2UOdDx4z8LSE599uF3DdiZLQT8qvLUl6H7w+NiViPirwgG5bHe5mkyAuiHGsMmORNAKBi5qD6nVrl3KLq5hfKnb6Zyn9UcGhel6lQ7FpZMDQlcpkO5YyVP4/znBZ19ijn6XfXndfsyyPGM3Odpt8b6Jz/YwB4GZSpTrG8XgBlhuZFQnI06lvDwJl92CtfAp+YQlhWzrBnum90osU6N00yo72F8ORUrn9U0BuTXNldyHsUsV5rRX1p68895WmvOqLXD7+yfhTKKwaefx/lnxWOSZ5M7+5zZ0bh0HfKl1uFoyRdodPIn4f12siWV+eMS0FvjT8p+j3q/Hm9CPWsIso/K4K+4Cqcx+KLhNYr41IoSlwKexGY27pQ6Bf3MkZbe8wHTFH+0Vm5/1ER76pyFhzP+Z0V44AKuQcUwyEQ/fTuerJV1MTJiDzMzet/LHj641y8dBQ+4/Qo7F1FXunxt+elaAyIFszHqv0xConfa3kKXGf27ZxPTH07J7T7/+zrOWc6UeSbffSJik9rseL29VvW0ydKLFD8o1LfNKlHn+j35EbV7fFvl1RPFOWpohPlsWgeTy09T6lyZluSsCIv3YSVlPOh9ampIooiURT5frFcAHyQ6bj/4LSZU6M81E2L9tro5I/T8whPquepaY7wpAurcI4DSHb/WY7HummuJO8Hyjk3l6p4rJuW8x+k5XxcJqz0aImYz8e5lvIbe6P/t9/Y637DmX1jz7rh1Ctq+4w/Evo1/p29+Hf24t/Zi39nL/6dvfh39uLf2Yt/Zy/+nb34d/Za/J98Zy8PWV5f2ctD9pZnFEP2tmcUQ/aOZxRD9q5nFEPWyzOKIevtGcWQBT2jGLJszyiGzDuKIevrGcWQvecZxZC97xnFkH3gGcWQfegZxZB95BnFkH3sGcWQfeIZxZD184xiyPp7RjFkn3pGMWQDPKMYsoGeUQzZZ55RDNnnnlEM2SDPKIZssGcUQzbEM4ohG+oZxZB94RnFkA3zjGLIhntGMWRfekYxZCM8oxiyrzyjGLKRnlEM2deeUQzZN55RDNkozyiGbLRnFEM2xjOKIRvrGcWQjfOMYsjGe0YxZBM8oxiyiZ5RDNkkzyiGbLJnFEM2xTOKIZvqGcWQTfOMYsime0YxZDM8oxiymZ5RDNkszyiGbLZnFEM2xzOKIZvrGcWQzfOMYsjme0YxZAs8oxiyhZ5RDNkizyiGbLFnFEO2xDOKIVvqGcWQhTyjGDLhGcWQLfOMYsiWe0YxZCs8oxiylZ5RDNm3nlEM2XeeUQzZ955RDNkqzyiGbLVnFEO2xjOKIVvrGcWQrfOMYsh+8IxiyH70jGLI1ntGMWQ/eUYxZD97RjFkv3hGMWQbPKMYso2eUQzZr55RDNlvnlEM2e+eUQzZH55RDNmfnlEM2SbPKIbsL88ohmyzZxRDtsUziiH72zOKIdvqGcWQ/eMZxZBt84xiyLZ7RjFkOzyjGLKdnlEM2b+eUQzZLs8ohmy3ZxRDtscziiHb6xnFkO3zjGLI9ntGMWQHPKMYsoOeUQzZIc8ohuywZxRDdsQziiE76hnFkB3zjKLLhJXgHcYSWt5hLKHtHcYSOt5hLGEB7zCWMNE7jCX0eYexhEneYSxhsncYS5jiHcYSpnqHsYRp3mEsYbp3GEuY4R3GEvq9w1jCgHcYS5jpHcYSFvQOYwkLeYexhIW9w1jCIt5hLOFZ3mEs4dneYSzhOd5hLGFR7zCWsJh3GEt4rncYS1jcO4wlPM87jCUs4R3GEp7vHcYSlvQOYwlLeYexhBd4h7GEF3qHsYQXeYexhBd7h7GEl3iHEWEev8MvrEu9w9OU//vf4t9A/C3+jfHf4j/5HadErd/jDydWtF/kD6dSxD3zf/K7/Fbp/+jv8ofDfYa/zZ/X3uK/zd/if/bb/OEXOv/h3+eXL1NP/41+Yb0V/5X+aP+J/0q/1yyP35gNv4yi/U5/+AXn/6u/1S+s60/t4pL/0O/1C+uyUxc/aPo3+4V19alNX6n83X5hXfuf+uV+YVU4FZq+wK/3h9ev/v1+Yd0I/IJ/WPXf+Q1/YVX0JMn/f/2Ov7Aqe075/6u/5b/h/43f8hdWbdO/5i+sBqfM68V/0d/AL/oL695TN+oD4Ff9hXWf2d/1F9bTp6wf/O/8tr+wmpyKy8f/B7/v3z/++/65/ze/upL8T37hX1ht1a/DdH/lX1gdT207C/ilf2F1+0/91r+wOquDo/t7/8J63nMt/x/6zf/wKcV/9d/NkR7e16j/m1/+D6PsjMp3lxtM/fa/sHrHf/0/53/iv/6f6yGksV///+zUHRik/PX/Uf/f+/X/b/7bv/4/zPSv/898okXHR1uVf7Rj20dbVXi0dYvWj7XI6vBky3aPPtuyYxtZy9YnVPgf/+WeVmf4l3taneTN2Wf8YZJD6wJQzbsmj3muz/RO6aN9olc96ud5NU7G4ZzTr1BNr30U4jp5vY6P/tg8n2GtdcZhvTjq2zQn6qd8BZQfql5wxp/Q1Tzj2FyS+zM+z+4KnP6ZUK5nt4kxPs/x5XchJj9pTzT0KDKPh6yJnip72t94u+Dk33ir2aJjvfJ3t61Xof6pYtf4RK3Lzvnn3TynNrxWi6btKmdlNe3ifbp8cfbpf/it+5ATkhx/D+7i/193V7PbNBCEYzuhbfiRggj/N4qKBFTqnVtqCAcKIg9gJc5arGSc1LGj9C2qtAc4wwkJCXFE8CCVeBjW9vpvveva7MaNe8vPrme9OzPffLNrzwnzyhLzH5n5j3JCSM37VupYQDyL9dq9fbrOe7fbYsoBmqIox1515QDPHlsTBxpHmm6DoQPGmuWaJjQgsMMyoFN7sji6+OKfKmeQoWIXfI27yoPEjToFggw5i5C0IOOroLKg6qrLguZW9/wzteEcad+Br4q9QBMPQkWkVPWMRaykrqdaw7qeZzszz41q0NLAAugISieWpg/1D1E936iO7+4Fm3Kf05T7WIvuchtikzv8K2DKyXBwFfV7S3MkFv+QuMP8ZvkYtMWOQRVBMWgr5zTI/5z2bJ17/PBeTlCnMJnhK9x7m1tL+lW583oEn4/WOfh8mIbGJyUovsRgUr8xnvr39tpSQzzoeXDglYKnciVFYTOdJYM3KauA374o+H1eIfw+w3E0sA5d4KJAeuqOTKhrhmvpGItNM8bgB5cEgzsCMIM381EAg1vJi6efzaC8lNPXr3Qr6ls59wSn/1iPYYTAcLM+wBAMuEtkeHZSgb6KTeWdbykvsaF4LY+PT8XmY9h5o9MimZq0ZpA/IkVYM8d3v0LH9wI7vhnapviI2IcN5sB24AgxjhkcAw0YBmqv6RMXCbYzZOTOJckrXK9hXiHt4vbjDyl1Py/7cKNu2YcO4ZV2U15pAJw30HofafEAKbHq63AvUOFi+YjU+NcsLXG7OvfwMxCDpsbbwLSHY7j42+iQE1F6k47of4XTZ2yUpdB0O2skOEh4Y2kbk+heihxPyXPP7YI8bCuW/j3o4KPc22n0pkTlG5a7D+eZu5JZvZreQdoM2ctpPnBHFD1lcbFmWWpFPI7ZiIdGJ3VUA9piE8rNDe4FC91VZmWWP2KLgZbnhD6Twrqc2n5LDKo04vFEFyaxPAijCohg6SNm+hRdzHi1zUwkUFA60xoaXxJmIMVjIBYven1Bd/kruXj+FGuHLoIVYDmfyOG1yy2DTPa/KngZ2/GFGfMh53kH5ixKSe8gF2hO8w4Sw6RlcjGiIzntfx8U+xvXMAsA",
|
|
3871
|
+
"debug_symbols": "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e9C6B6170LoHz2/ePSvro4N00A7WoStrV+4etO5B6x607kHrHrTuQeseNOvK5h16NroHrXvw/E7f9aqu3D1o3YPWPWjdg9Y9aN2D1j14fu/vWdl7nrsHrXvQugfP7/09XzW6cvegdQ9a96B1D1r3oHUPWvegRVeOnufuQesetO5B60tN62tN6x607kHrHrTuQesetO5B6x48vy34rJw9z92D1j1o3YPWF57ntwWv0JW7B6170LoHrXvQugete/D8/uCz8ux57h607kHrHrS+DLXZlbsHrXvQugete9C7B7170LsH/bEr+8M7jA7RITtUv6ordw9696B3D3r3oHcPevegdw+6dGWpDns2vHvQuwe9r0Vdu3L3oHcPevegdw9696B3D3r3oFtXNu3Qs9E96N2D3teibl25e9C7B7170LsHvXvQuwe9e9C9K3vPc/egdw9696D3taiPrtw96N2D3j3o3YPePejdg9496KMrR89z96B3D3r3oPe1qHcPer8Per8Peveg97WoZ1fuez7vHvTuQe8e9H4f9LMH8wjHV7Y/jlAd5g7nt8CfQTpoB+vgHUaH6NCVqytXV55deXbl2ZVnV55deXbl2ZVnV55dee7K4/HoIB20g3XwDqNDdMgO1aErS1eWrixd+ejBOD8V8A6jw1HZjpAdqsPc4fwVFGeQ/arzl1CcoSufv4bi/DejQ1fWrqxdWbuydWXrytaVrStb77P1PltXtq5sXdm6snflowdX0A7WoffZu/LRgytkh+owdxhdeXTl0ZVHVx5defRsjN7n0fs8ep9HVz56cIWejejZiJ6N6MrRlaMrR1eOrhw9G9n7nL3P2fucXTl7nrNnI3s2smcju3J25erK1ZWrK1fPRvU+V+9z9T5XV66e5+rZmD0bs2djduXZlWdXnl15duXZszF7n+fe53g8OuzK8dAO1sE7jA7Rr8oO1aErS1cW6aAdrIN36MoSHbJDddizEd2DoV1Zu7J25e7B6B6M7sHoHozuwdCubI8OPRvdg9E9GNaVrSt3D0b3YHQPRvdgdA9G92B0D4Z3Ze957h6M7sHoHgzvyt6VuwejezC6B6N7MLoHo3swugdjdOXR89w9GN2D0T0Y0ZWjK3cPRvdgdA9G92B0D0b3YHQPRnbl7HnuHozuwegejOzK2ZW7B6N7MLoHo3swugejezC6B6O6cvU8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gBbQAlpAC2gBLaAFtIAW0AJaQktoCS2hJbSEltAS2umS41vB5FzXuuPpkh1PWp5RiUZ04iAGFZII7XTJ+renS3aENqFNaBPahDahTWgT2uyx6Vr3umPTdK173dGIThzEICaxiPOKAu10yY5KNKIToQk0gSbQBJo+iIxNGZsyNoV2umTHICaxiNAMmkEzaAbNmEljbMbYjLEZNOO4OTPpzKQzkw7NoTk0h+bQnJl0xjYY22BsA9rguA1mcjCTg5kc0Aa0AS2gBbRgJoOxBWMLxhbQguMWzGQwk8lMJrSEltASWkJLZjIZWzK2ZGwFrThuxUwWM1nMZEEraAWtoBW0yUxOxjYZ22RsE9rkuE1mcjKTk5mcF22te91RiEo0ohMHMYhJvGhr3euKuERwieCSte51VRBouERwieASwSWCSwSXCC5Z614XTY3oxEEMIjSFhksElwguEVwiuERwieCSte510SyJzCQuEVyy1r2uCg4NlwguEVwiuERwieASwSVr3euiDY4bLhFcIrhkrXvdFaDhEsElgksElwguEVwiuGSte1204LjhEsElgkvWutdVIaHhEsElgksElwguEVwiuEQSWnLccIngEsElUtAKGi4RXCK4RHCJ4BLBJYJL1rrXRZscN1wiuERwyVr3uitAwyWKSxSXKC5RXKK4RHHJWvd60ta61x2LeM2k4pK17nVVEGi4RHGJ4hLFJYpLFJcoLlnrXhdNhahEIzoRmkLDJYpLFJcoLlFcorhEccla97poNojMJC5RXLLWva4KDg2XKC5RXKK4RHGJ4hLFJWvd66I5xw2XKC5RXLLWva4KAxouUVyiuERxieISxSWKS9a610ULjhsuUVyiuGSte90VoOESxSWKSxSXKC5RXKK4ZK17XbTkuOESxSWKS7SgFTRcorhEcYniEsUliksUl6x1r4s2OW64RHGJ4hKd0CY0XKK4RHGJ4RLDJYZLDJesda8nba173TGISSwiNIGGSwyXGC4xXGK4xHCJ4ZK17nXR5DpuhksMlxguMe5x1rrXHaHhEsMlhksMlxguMVyy1r0umhmRmcQlhkuMe5y17nVHaLjEcInhEsMlhksMl6x1r4vmHDdcYrjEcIlxj7PWve4IDZcYLjFcYrjEcInhkrXuddGC44ZLDJcYLjHucda61x2h4RLDJYZLDJcYLjFcsta9Llpy3HCJ4RLDJcY9juES47rEuC4xXGLc46x1rztCwyWGSwyXGNcla93r8ZtqdK17Pb+/fa173dGJgxjEJBZxdlzrXncUohKN6MRBDGISiwhNoAk0gSbQBJpAE2gCTaAJNIWm0BSaQlNoCk2hKbTTJet7gk+XrHi6ZMeTNs6oRCM6cRCDCkmEdrpk/dvTJTtCc2gOzaE5NIfm0ByaM7bB2Aa0AW1AG9AGtNMlOyaxiIwtoJ0u2VGJRnQitIAW0AJaQEtmMhlbMrZkbAntdMmOzGQyk8lMJrSCVtAKWkErZrIYWzG2YmwFrThuk5mczORkJie0CW1Cm9AmtMlMzmtsa93rjkK8aGvd645OHMQgJhWKCE2gCTRRohGdOIjQJIlFvGZyrXvdEZpCU2gKTaFpEBmbMjZlbLhkrXvdkZk0ZtKYSVyy1r3uCM2g4ZKBSwYuGbhk4JK17nV/SznHDZcMXDJwyVr3uioMaLhk4JKBSwYuGbhk4JKBS9a610UbHDdcMnDJwCVr3euqENBwycAlA5cMXDJwycAlA5esda+Llhw3XDJwycAla93rrgANlwxcMnDJwCUDlwxcMnDJWve6aMVxwyUDlwxcsta9rgoTGi4ZuGTgkoFLBi4ZuGTgkrXu9aStda87KtGIThxUCGISiwgNlwQuCVwSuGSte100GcQgJrGI0BQaLglcErgkcEngksAlgUuC65LguiRwSeCSwCXBdUlwXRK4JHBJ4JLAJYFLApcELlnrXhfNOW64JHBJ4JK17nVXgIZLApcELglcErgkcEngkrXuddEGxw2XBC4JXLLWva4KAQ2XBC4JXBK4JHBJ4JLAJWvd66Ilxw2XBC4JXLLWve4K0HBJ4JLAJYFLApcELglcsta9Llpx3HBJ4JLAJWvd66owoeGSwCWBSwKXBC4JXBK4ZK17XbR5HbfEJYlLEpesda9nhbXudcdBDGISi3iNLXFJ4pK17nXRxIhOHMQgQhNouCRxSeKSxCWJSxKXJC5Z614XTZNYRGYSlyT3OMk9TuKSxCWJSxKXJC5JXJK4ZK17XTTnuOGSxCWJS5J7nLXudUdouCRxSeKSxCWJSxKXrHWvizY4brgkcUnikuQeZ6173REaLklckrgkcUniksQla93rogXHDZckLklcktzjrHWvO0LDJYlLEpckLklckrhkrXtdtOK44ZLEJYlLknucte51R2i4JHFJ4pLEJYlLEpesda+LNjluuCRxSeGS4h5nrXvd0YhOHMQgJrGI19jWutdFEyEq0YhOhCbQcEnhksIlhUsKlxQuKVyy1r0umg5iEJNYRGi4pLguKa5LCpcU9zhr3euO0HBJ4ZLCJcV1yVr3evxGBl3rXo9fLKBr3euOThzEICaxiPOKp0t2FCK0AW1AG9AGtAFtQBvQAlpAC2gBLaAFtIAW0AJaQEtoCS2hJbSEltASWkI7XXJ8B6euda8rni7Z8aTZGZVoRCcOYlAhidBOl6x/e7pkR2gT2oQ2oU1oE9qENqHNa2xr3euOF22te93RiE4cxCAmsYjX2Na610U7XbKjEo3oRGgCTaAJNIGmDyJjU8amjE2hnS7ZMYhJLCI0g2bQDJpBM2bSGJsxNmNsBs04bs5MOjPpzKRDc2gOzaE5NGcmnbENxjYY24A2OG6DmRzM5GAmB7QBbUALaAEtmMlgbMHYgrEFtOC4BTMZzGQykwktoSW0hJbQkplMxpaMLRkbLlnrXndkJouZLGYSl6x1rztCK2i4ZOKSiUsmLpm4ZK17XbTJccMlE5dMXLLWvR4VbK173VGISjSiEwcxiElsmq11ryteLrHH5RJ7XC6xte51VRBoAk2gCbTLJfYQxqaMTRmbQlMjOnEQgwhNoSk0g2bQjJk0xmaMzRibQbMkMpPGTDoz6dAcmkNzaA7NmUlnbM7YnLENaIPjNpjJwUwOZnJAG9AGtAFtQAtmMhhbMLZgbAEtOG7BTAYzGcxkQEtoCS2hJbRkJpOxJWNLxpbQkuNWzGQxk8VMFrSCVtAKWkErZrIY22Rsk7FNaJPjNpnJyUxOZnJCm9BwieASwSWCSwSXCC4RXLLWvZ60te51xyJeMym4ZK17XRUEGi4RXCK4RHCJ4BLBJYJL1rrXRVMhKtGIToSm0HCJ4BLBJYJLBJcILhFcsta9LpoNIjOJSwSXrHWvq4JDwyWCSwSXCC4RXCK4RHDJWve6aM5xwyWCSwSXrHWvq8KAhksElwguEVwiuERwieCSte510YLjhksElwguWetedwVouERwieASwSWCSwSXCC5Z614XLTluuERwieASKWgFDZcILhFcIrhEcIngEsEla93rok2OGy4RXCK4RCa0CQ2XCC4RXKK4RHGJ4hLFJWvd60lb6153DGISiwhNoOESxSWKSxSXKC5RXKK4ZK17XTS5jpviEsUliktUoSk0XKK4RHGJ4hLFJYpLFJesda+LZkZkJnGJ4hI1aAYNlyguUVyiuERxieISxSVr3euiOccNlyguUVyiA9qAhksUlyguUVyiuERxieKSte510YLjhksUlygu0YAW0HCJ4hLFJYpLFJcoLlFcsta9Llpy3HCJ4hLFJZrQcIlyXaJclygu0YJW0AoaLlFcorhEuS5Z616P34pia91r1BmN6MRBDGISizg7rnWvOwpRiUZ04iAGMYlFhCbQBJpAE2gCTaAJNIEm0ASaQlNoCk2hKTSFptAU2umSfJxxXvF0yY4HLeWMSjSiEwcxqJBEaKdL1r89XbIjNIfm0ByaQ3NoDs2hOWMbjG1AG9AGtAFtQDtdsmMSi8jYAtrpkh2VaEQnQgtoAS2gBbRkJpOxJWNLxpbQTpfsyEwmM5nMZEIraAWtoBW0YiaLsRVjK8ZW0IrjNpnJyUxOZnJCm9AmtAltQpvM5LzGtta97ijEi7bWve7oxEEMYlKhiNAEmkATJRrRiYMITZJYxGsm17rXHaEpNIWm0BSaBpGxKWNTxoZL1rrXHZlJYyaNmcQla93rjtAMGi5xXOK4xHGJ45K17nXRnOOGSxyXOC5Z615XhQENlzgucVziuMRxieMSxyVr3euiDY4bLnFc4rhkrXtdFQIaLnFc4rjEcYnjEscljkvWutdFS44bLnFc4rhkrXvdFaDhEscljksclzgucVziuGSte1204rjhEscljkvWutdVYULDJY5LHJc4LnFc4rjEccla93rS1rrXHZVoRCcOKgQxiUWEhksGLhm4ZOCSte510WQQg5jEIkJTaLhk4JKBSwYuGbhk4JKBSwbXJYPrkoFLBi4ZuGRwXTK4Lhm4ZOCSgUsGLhm4ZOCSgUvWutdFc44bLhm4ZOCSte51V4CGSwYuGbhk4JKBSwYuGbhkrXtdtMFxwyUDlwxcsta9rgoBDZcMXDJwycAlA5cMXDJwyVr3umjJccMlA5cMXLLWve4K0HDJwCUDlwxcMnDJwCUDl6x1r4tWHDdcMnDJwCVr3euqMKHhkoFLBi4ZuGTgkoFLBi5Z614XbV7HLXBJ4JLAJWvd61lhrXvdcRCDmMQiXmMLXBK4ZK17XTQxohMHMYjQBBouCVwSuCRwSeCSwCWBS9a610XTJBaRmcQlwT1OcI8TuCRwSeCSwCWBSwKXBC5Z614XzTluuCRwSeCS4B5nrXvdERouCVwSuCRwSeCSwCVr3euiDY4bLglcErgkuMdZ6153hIZLApcELglcErgkcMla97powXHDJYFLApcE9zhr3euO0HBJ4JLAJYFLApcELlnrXhetOG64JHBJ4JLgHmete90RGi4JXBK4JHBJ4JLAJWvd66JNjhsuCVySuCS5x1nrXnc0ohMHMYhJLOI1trXuddFEiEo0ohOhCTRckrgkcUniksQliUsSl6x1r4umgxjEJBYRGi5JrkuS65LEJck9zlr3uiM0XJK4JHFJcl2y1r2mnfGg1VnhdMmOThzEICaxiPOKp0t2PGilZ1SiEZ04iEFMYhHnFU+X7AgtoAW0gBbQAtrpkuO37dpa97ojY0vGdrpkR2YymclkJpOZTGYymclkJhNaQStoBa2gFbSCVoytmMliJouZnMzkZCYnMzmZyclMTmZyQpvQJrR50da61x2FqD3ra93rOYq17nXHQQxiEot4zeRa97qjEJUITaAJNIEm0ASaQFPGpoxNlWhEJw5iEJNYRGbSoBk0g2bQDJpBO12yZv10Sc0zFnFe8XTJjkJUohGdOIgH7fh11bbWve5YxHnF0yU7ClGJRnTiIEIb0Aa0AS2gBbTDJc+nimc0oh+xzjiIQUxiEecVD5d0FKISjQgtoSW0hJbQElpBK2gFraAVtIJW0ApaQStoE9qENqFNaBPahDahTWgT2rxo57rXjkJUohGdOIhBTGIRoQk0gXa45Pmo9owHTeOMThzEICaxiPOKh0s6ClGJ0BSaQlNoCk2hKTSDZtAMmkEzaAbNoBk0g2bQHJpDc2gOzaE5NIfm0ByaQxvQDpc8H2SfUYlGdOIgBjGJRZxXPFzSEVpAC2gBLaAFtIAW0AJaQktoCS2hJbSEltASWkJLaAWtoBW0glbQClpBK2gFraBNaBPahDahTWgT2oQ2oU1os2l+rnvtKEQlGtGJgxjEJBYRmkATaAJNoAk0gSbQBJpAE2gKTaEpNIWm0BSaQlNoCk2hGTSDZtAMmkEzaAbNoBk0g+bQHJpDc2gOzaE5NIfm0BzagDagDWgD2oA2oA1oA9qANqAFtIAW0AJaQAtoAS2gBbSAltASWkJLaAktoSW0hJbQElpBK2gFraAVtIJW0ApaQStoE9qENqFNaBPahDahTWgTGi4RXCK4RHCJ4BLBJYJLBJcILhFcIrhEcIngEsElgksElwguEVwiuERwieASwSWCSwSXCC4RXCK4RHCJ4BLBJYJLBJcILhFcIrhEcIngEsElgksElwguEVwiuERwieASwSWCSwSXCC4RXCK4RHCJLJfkGQ+ar/9qRCcO4kEbjzMetONbpfxc99rxoMUZT5fsKEQlHrSIMzrxoMU840HL9W+TeNDSz3jQ8nzZ6ZIdD1rWGZV40Orx87ff/J8///T9n//zh+/+95s//PP5x//+x49/+fv3f/1x//Hv//dv/Tf/+dP3P/zw/f/86W8//fUv3/3XP3767k8//PUvx9998zj+72iD/5D4VuWPz38s+7//h4789rknf3y+3R9//xjfPs/855/Of642v1X3449y/NHr2+d8Hq/Xfv3zBPnWTffrNeRZTfr1zyu/b5/v6/3651vF849xvN6O1x+vsOPl/e/9+ffz+Gv/1z0e/Qod39q1h/741sfx13G9Qp+7cDKSIs8x6h9//vnnP/78/wA=",
|
|
3872
|
+
"verification_key": "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"
|
|
3873
3873
|
},
|
|
3874
3874
|
{
|
|
3875
3875
|
"name": "public_dispatch",
|
|
@@ -3940,8 +3940,8 @@
|
|
|
3940
3940
|
}
|
|
3941
3941
|
}
|
|
3942
3942
|
},
|
|
3943
|
-
"bytecode": "JwACBAEoAAABBIBOJwAABE4lAAAAQScCAgQBJwIDBAAfCgACAAMATS0ITQElAAAAoCcCAQROJwICBAA7DgACAAEpAABDAOfwRf8pAABEAPAkOdspAABFAP95SfIsAABGADBkTnLhMaApuFBFtoGBWF0oM+
|
|
3944
|
-
"debug_symbols": "
|
|
3943
|
+
"bytecode": "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",
|
|
3944
|
+
"debug_symbols": "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"
|
|
3945
3945
|
}
|
|
3946
3946
|
],
|
|
3947
3947
|
"outputs": {
|
|
@@ -4200,13 +4200,13 @@
|
|
|
4200
4200
|
},
|
|
4201
4201
|
"19": {
|
|
4202
4202
|
"path": "std/hash/mod.nr",
|
|
4203
|
-
"source": "// Exposed only for usage in `std::meta`\npub(crate) mod poseidon2;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\n\n#[foreign(sha256_compression)]\n// docs:start:sha256_compression\npub fn sha256_compression(input: [u32; 16], state: [u32; 8]) -> [u32; 8] {}\n// docs:end:sha256_compression\n\n#[foreign(keccakf1600)]\n// docs:start:keccakf1600\npub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {}\n// docs:end:keccakf1600\n\npub mod keccak {\n #[deprecated(\"This function has been moved to std::hash::keccakf1600\")]\n pub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {\n super::keccakf1600(input)\n }\n}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{\n if crate::runtime::is_unconstrained() {\n // Temporary measure while Barretenberg is main proving system.\n // Please open an issue if you're working on another proving system and running into problems due to this.\n crate::static_assert(\n N <= 1024,\n \"Barretenberg cannot prove blake3 hashes with inputs larger than 1024 bytes\",\n );\n }\n __blake3(input)\n}\n\n#[foreign(blake3)]\nfn __blake3<let N: u32>(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n input: [Field; N],\n separator: u32,\n) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n let mut generators: [EmbeddedCurvePoint; N + 1] =\n [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n let domain_generators: [EmbeddedCurvePoint; N] =\n derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n for i in 0..N {\n scalars[i] = from_field_unsafe(input[i]);\n generators[i] = domain_generators[i];\n }\n scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n let length_generator: [EmbeddedCurvePoint; 1] =\n derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n generators[N] = length_generator[0];\n multi_scalar_mul_array_return(generators, scalars, true)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Decompose the input 'bn254 scalar' into two 128 bits limbs.\n// It is called 'unsafe' because it does not assert the limbs are 128 bits\n// Assuming the limbs are 128 bits:\n// Assert the decomposition does not overflow the field size.\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n // Safety: xlo and xhi decomposition is checked below\n let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n // Check that the decomposition does not overflow the field size\n let (a, b) = if xhi == crate::field::bn254::PHI {\n (xlo, crate::field::bn254::PLO)\n } else {\n (xhi, crate::field::bn254::PHI)\n };\n crate::field::bn254::assert_lt(a, b);\n\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn poseidon2_permutation<let N: u32>(input: [Field; N], state_len: u32) -> [Field; N] {\n assert_eq(input.len(), state_len);\n poseidon2_permutation_internal(input)\n}\n\n#[foreign(poseidon2_permutation)]\nfn poseidon2_permutation_internal<let N: u32>(input: [Field; N]) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: TypeDefinition) -> Quoted {\n let name = quote { $crate::hash::Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: $crate::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(\n s,\n name,\n signature,\n for_each_field,\n quote {},\n |fields| fields,\n )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher {\n type H: Hasher;\n\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n type H = H;\n\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u128 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u8 as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u16 as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u32 as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u64 as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n E: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1),\n 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1),\n EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false,\n },\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2),\n 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2),\n EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3),\n 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3),\n EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4),\n 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false,\n },\n );\n}\n"
|
|
4203
|
+
"source": "// Exposed only for usage in `std::meta`\npub(crate) mod poseidon2;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\n\n#[foreign(sha256_compression)]\n// docs:start:sha256_compression\npub fn sha256_compression(input: [u32; 16], state: [u32; 8]) -> [u32; 8] {}\n// docs:end:sha256_compression\n\n#[foreign(keccakf1600)]\n// docs:start:keccakf1600\npub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {}\n// docs:end:keccakf1600\n\npub mod keccak {\n #[deprecated(\"This function has been moved to std::hash::keccakf1600\")]\n pub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {\n super::keccakf1600(input)\n }\n}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{\n if crate::runtime::is_unconstrained() {\n // Temporary measure while Barretenberg is main proving system.\n // Please open an issue if you're working on another proving system and running into problems due to this.\n crate::static_assert(\n N <= 1024,\n \"Barretenberg cannot prove blake3 hashes with inputs larger than 1024 bytes\",\n );\n }\n __blake3(input)\n}\n\n#[foreign(blake3)]\nfn __blake3<let N: u32>(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n input: [Field; N],\n separator: u32,\n) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n let mut generators: [EmbeddedCurvePoint; N + 1] =\n [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n crate::assert_constant(separator);\n let domain_generators: [EmbeddedCurvePoint; N] =\n derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n for i in 0..N {\n scalars[i] = from_field_unsafe(input[i]);\n generators[i] = domain_generators[i];\n }\n scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n let length_generator: [EmbeddedCurvePoint; 1] =\n derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n generators[N] = length_generator[0];\n multi_scalar_mul_array_return(generators, scalars, true)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n crate::assert_constant(starting_index);\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Decompose the input 'bn254 scalar' into two 128 bits limbs.\n// It is called 'unsafe' because it does not assert the limbs are 128 bits\n// Assuming the limbs are 128 bits:\n// Assert the decomposition does not overflow the field size.\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n // Safety: xlo and xhi decomposition is checked below\n let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n // Check that the decomposition does not overflow the field size\n let (a, b) = if xhi == crate::field::bn254::PHI {\n (xlo, crate::field::bn254::PLO)\n } else {\n (xhi, crate::field::bn254::PHI)\n };\n crate::field::bn254::assert_lt(a, b);\n\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn poseidon2_permutation<let N: u32>(input: [Field; N], state_len: u32) -> [Field; N] {\n assert_eq(input.len(), state_len);\n poseidon2_permutation_internal(input)\n}\n\n#[foreign(poseidon2_permutation)]\nfn poseidon2_permutation_internal<let N: u32>(input: [Field; N]) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: TypeDefinition) -> Quoted {\n let name = quote { $crate::hash::Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: $crate::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(\n s,\n name,\n signature,\n for_each_field,\n quote {},\n |fields| fields,\n )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher {\n type H: Hasher;\n\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n type H = H;\n\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u128 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u8 as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u16 as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u32 as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u64 as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n E: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1),\n 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1),\n EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false,\n },\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2),\n 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2),\n EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3),\n 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3),\n EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4),\n 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false,\n },\n );\n}\n"
|
|
4204
4204
|
},
|
|
4205
4205
|
"231": {
|
|
4206
4206
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/oracle/version.nr",
|
|
4207
|
-
"source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called\n/// and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field =
|
|
4207
|
+
"source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called\n/// and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field = 12;\n\n/// Asserts that the version of the oracle is compatible with the version expected by the contract.\npub fn assert_compatible_oracle_version() {\n // Safety: This oracle call returns nothing: we only call it to check Aztec.nr and Oracle interface versions are\n // compatible. It is therefore always safe to call.\n unsafe {\n assert_compatible_oracle_version_wrapper();\n }\n}\n\nunconstrained fn assert_compatible_oracle_version_wrapper() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n}\n\n#[oracle(utilityAssertCompatibleOracleVersion)]\nunconstrained fn assert_compatible_oracle_version_oracle(version: Field) {}\n\nmod test {\n use super::{assert_compatible_oracle_version_oracle, ORACLE_VERSION};\n\n #[test]\n unconstrained fn compatible_oracle_version() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n }\n\n #[test(should_fail_with = \"Incompatible oracle version. TXE is using version\")]\n unconstrained fn incompatible_oracle_version() {\n let arbitrary_incorrect_version = 318183437;\n assert_compatible_oracle_version_oracle(arbitrary_incorrect_version);\n }\n}\n"
|
|
4208
4208
|
},
|
|
4209
|
-
"
|
|
4209
|
+
"299": {
|
|
4210
4210
|
"path": "/home/aztec-dev/nargo/github.com/noir-lang/poseidon/v0.2.3/src/poseidon2.nr",
|
|
4211
4211
|
"source": "use std::default::Default;\nuse std::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n self.state[0] += self.cache[0];\n self.state[1] += self.cache[1];\n self.state[2] += self.cache[2];\n self.state = crate::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut state = [0; 4];\n state[RATE] = iv;\n\n if std::runtime::is_unconstrained() {\n for i in 0..(in_len / RATE) {\n state[0] += input[i * RATE];\n state[1] += input[i * RATE + 1];\n state[2] += input[i * RATE + 2];\n state = crate::poseidon2_permutation(state, 4);\n }\n\n // handle remaining elements after last full RATE-sized chunk\n let num_extra_fields = in_len % RATE;\n if num_extra_fields != 0 {\n let remainder_start = in_len - num_extra_fields;\n state[0] += input[remainder_start];\n if num_extra_fields > 1 {\n state[1] += input[remainder_start + 1]\n }\n }\n } else {\n let mut states: [[Field; 4]; N / RATE + 1] = [[0; 4]; N / RATE + 1];\n states[0] = state;\n\n // process all full RATE-sized chunks, storing state after each permutation\n for chunk_idx in 0..(N / RATE) {\n for i in 0..RATE {\n state[i] += input[chunk_idx * RATE + i];\n }\n state = crate::poseidon2_permutation(state, 4);\n states[chunk_idx + 1] = state;\n }\n\n // get state at the last full block before in_len\n let first_partially_filled_chunk = in_len / RATE;\n state = states[first_partially_filled_chunk];\n\n // handle remaining elements after last full RATE-sized chunk\n let remainder_start = (in_len / RATE) * RATE;\n for j in 0..RATE {\n let idx = remainder_start + j;\n if idx < in_len {\n state[j] += input[idx];\n }\n }\n }\n\n // always run final permutation unless we just completed a full chunk\n // still need to permute once if in_len is 0\n if (in_len == 0) | (in_len % RATE != 0) {\n state = crate::poseidon2_permutation(state, 4)\n };\n\n state[0]\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"
|
|
4212
4212
|
},
|
|
@@ -4216,23 +4216,23 @@
|
|
|
4216
4216
|
},
|
|
4217
4217
|
"388": {
|
|
4218
4218
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
4219
|
-
"source": "mod poseidon2_chunks;\n\nuse crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_log::{PrivateLog, PrivateLogData},\n transaction::tx_request::TxRequest,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DOM_SEP__NOTE_HASH_NONCE,\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD, DOM_SEP__SILOED_NOTE_HASH, DOM_SEP__SILOED_NULLIFIER,\n DOM_SEP__UNIQUE_NOTE_HASH, FUNCTION_TREE_HEIGHT, NULL_MSG_SENDER_CONTRACT_ADDRESS,\n TWO_POW_64,\n },\n merkle_tree::root_from_sibling_path,\n messaging::l2_to_l1_message::L2ToL1Message,\n poseidon2::Poseidon2Sponge,\n side_effect::{Counted, Scoped},\n traits::{FromField, Hash, ToField},\n utils::field::{field_from_bytes, field_from_bytes_32_trunc},\n};\n\npub use poseidon2_chunks::poseidon2_absorb_in_chunks_existing_sponge;\nuse poseidon2_chunks::poseidon2_absorb_in_chunks;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\n// TODO: refactor these into their own files: sha256, poseidon2, some protocol-specific hash computations, some merkle computations.\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n DOM_SEP__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(note_nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [note_nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, DOM_SEP__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_note_nonce_and_unique_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n let note_nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(note_nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_note_hash(contract_address: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), note_hash],\n DOM_SEP__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique, siloed note hashes from siloed note hashes.\n///\n/// The protocol injects uniqueness into every note_hash, so that every single note_hash in the\n/// tree is unique. This prevents faerie gold attacks, where a malicious sender could create\n/// two identical note_hashes for a recipient (meaning only one would be nullifiable in future).\n///\n/// Most privacy protocols will inject the note's leaf_index (its position in the Note Hashes Tree)\n/// into the note, but this requires the creator of a note to wait until their tx is included in\n/// a block to know the note's final note hash (the unique, siloed note hash), because inserting\n/// leaves into trees is the job of a block producer.\n///\n/// We took a different approach so that the creator of a note will know each note's unique, siloed\n/// note hash before broadcasting their tx to the network.\n/// (There was also a historical requirement relating to \"chained transactions\" -- a feature that\n/// Aztec Connect had to enable notes to be spent from distinct txs earlier in the same block,\n/// and hence before an archive block root had been established for that block -- but that feature\n/// was abandoned for the Aztec Network for having too many bad tradeoffs).\n///\n/// (\n/// Edit: it is no longer true that all final note_hashes will be known by the creator of a tx\n/// before they send it to the network. If a tx makes public function calls, then _revertible_\n/// note_hashes that are created in private will not be made unique in private by the Reset circuit,\n/// but will instead be made unique by the AVM, because the `note_index_in_tx` will not be known\n/// until the AVM has executed the public functions of the tx. (See an explanation in\n/// reset_output_composer.nr for why).\n/// For some such txs, the `note_index_in_tx` might still be predictable through simulation, but\n/// for txs whose public functions create a varying number of non-revertible notes (determined at\n/// runtime), the `note_index_in_tx` will not be deterministically derivable before submitting the\n/// tx to the network.\n/// )\n///\n/// We use the `first_nullifier` of a tx as a seed of uniqueness. We have a guarantee that there will\n/// always be at least one nullifier per tx, because the init circuit will create one if one isn't\n/// created naturally by any functions of the tx. (Search \"protocol_nullifier\").\n/// We combine the `first_nullifier` with the note's index (its position within this tx's new\n/// note_hashes array) (`note_index_in_tx`) to get a truly unique value to inject into a note, which\n/// we call a `note_nonce`.\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n compute_note_nonce_and_unique_note_hash(siloed_note_hash, first_nullifier, note_index_in_tx)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: Scoped<Counted<NoteHash>>) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.innermost())\n }\n}\n\npub fn compute_siloed_nullifier(contract_address: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), nullifier],\n DOM_SEP__SILOED_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: Scoped<Counted<Nullifier>>) -> Field {\n let value = nullifier.innermost().value;\n // Q: shouldn't we be checking whether the _whole_ scoped, counted, nullifier struct is empty?\n // A: We don't have to. The init and inner circuits add a contract address only to non-empty nullifiers.\n // So we know we should silo it if the contract address is not empty.\n if nullifier.contract_address.is_zero() {\n // Return `.value` instead of 0, because already-siloed nullifiers also have a zero\n // contract_address field, and we of course want to return that already-siloed nullifier\n // (we just don't want to silo it a second time).\n value\n } else {\n compute_siloed_nullifier(nullifier.contract_address, value)\n }\n}\n\npub fn create_protocol_nullifier(tx_request: TxRequest) -> Scoped<Counted<Nullifier>> {\n // The protocol nullifier is ascribed a special side-effect counter of 1. No other side-effect\n // can have counter 1 (see `validate_as_first_call` for that assertion).\n Nullifier { value: tx_request.hash(), note_hash: 0 }.count(1).scope(\n NULL_MSG_SENDER_CONTRACT_ADDRESS,\n )\n}\n\npub fn compute_siloed_private_log_first_field(\n contract_address: AztecAddress,\n field: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), field],\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD,\n )\n}\n\npub fn silo_private_log(private_log: Scoped<Counted<PrivateLogData>>) -> PrivateLog {\n let log = private_log.innermost().log;\n if private_log.contract_address.is_zero() {\n log\n } else {\n let mut fields = log.fields;\n fields[0] = compute_siloed_private_log_first_field(private_log.contract_address, fields[0]);\n PrivateLog::new(fields, log.length)\n }\n}\n\npub fn compute_contract_class_log_hash(log: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS]) -> Field {\n poseidon2_hash(log)\n}\n\npub fn compute_app_siloed_secret_key(\n master_secret_key: EmbeddedCurveScalar,\n app_address: AztecAddress,\n app_secret_key_domain_separator: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [master_secret_key.hi, master_secret_key.lo, app_address.to_field()],\n app_secret_key_domain_separator,\n )\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let contract_address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n let recipient_bytes: [u8; 20] = recipient.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let rollup_version_id_bytes: [u8; 32] = rollup_version_id.to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n\n let mut bytes: [u8; 148] = std::mem::zeroed();\n for i in 0..32 {\n bytes[i] = contract_address_bytes[i];\n bytes[i + 32] = rollup_version_id_bytes[i];\n // 64 - 84 are for recipient.\n bytes[i + 84] = chain_id_bytes[i];\n bytes[i + 116] = content_bytes[i];\n }\n\n for i in 0..20 {\n bytes[64 + i] = recipient_bytes[i];\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: Scoped<L2ToL1Message>,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.inner.recipient,\n msg.inner.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// TODO: consider a variant that enables domain separation with a u32 (we seem to have standardised u32s for domain separators)\n/// Computes sha256 hash of 2 input fields.\n///\n/// @returns A truncated field (i.e., the first byte is always 0).\npub fn accumulate_sha256(v0: Field, v1: Field) -> Field {\n // Concatenate two fields into 32 x 2 = 64 bytes\n let v0_as_bytes: [u8; 32] = v0.to_be_bytes();\n let v1_as_bytes: [u8; 32] = v1.to_be_bytes();\n let hash_input_flattened = v0_as_bytes.concat(v1_as_bytes);\n\n sha256_to_field(hash_input_flattened)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n poseidon::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = [separator.to_field()].concat(inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n/// Computes a Poseidon2 hash over a dynamic-length subarray of the given input.\n/// Only the first `in_len` fields of `input` are absorbed; any remaining fields are ignored.\n/// The caller is responsible for ensuring that the input is padded with zeros if required.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// NB the below is the same as poseidon::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// This function is unconstrained because it is intended to be used in unconstrained context only as\n// in constrained contexts it would be too inefficient.\npub unconstrained fn poseidon2_hash_with_separator_bounded_vec<let N: u32, T>(\n inputs: BoundedVec<Field, N>,\n separator: T,\n) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs.get(i));\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256::digest(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0x3b18c58c739716e76429634a61375c45b3b5cd470c22ab6d3e14cee23dd992);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0xaab2a5828156782b12a1dc6f336e2bc627eb1b9514b02d511f66296990c050);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n L2ToL1Message { recipient: EthAddress::from_field(1), content: 2 }.scope(\n AztecAddress::from_field(3),\n ),\n version,\n chainId,\n );\n\n // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n let hash_from_typescript = 0x0081edf209e087ad31b3fd24263698723d57190bd1d6e9fe056fc0c0a68ee661;\n\n assert_eq(hash, hash_from_typescript);\n}\n\n#[test]\nunconstrained fn poseidon2_hash_with_separator_bounded_vec_matches_non_bounded_vec_version() {\n let inputs = BoundedVec::<Field, 4>::from_array([1, 2, 3]);\n let separator = 42;\n\n // Hash using bounded vec version\n let bounded_result = poseidon2_hash_with_separator_bounded_vec(inputs, separator);\n\n // Hash using regular version\n let regular_result = poseidon2_hash_with_separator([1, 2, 3], separator);\n\n // Results should match\n assert_eq(bounded_result, regular_result);\n}\n"
|
|
4219
|
+
"source": "mod poseidon2_chunks;\n\nuse crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_log::{PrivateLog, PrivateLogData},\n transaction::tx_request::TxRequest,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DOM_SEP__NOTE_HASH_NONCE,\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD, DOM_SEP__SILOED_NOTE_HASH, DOM_SEP__SILOED_NULLIFIER,\n DOM_SEP__UNIQUE_NOTE_HASH, FUNCTION_TREE_HEIGHT, NULL_MSG_SENDER_CONTRACT_ADDRESS,\n TWO_POW_64,\n },\n merkle_tree::root_from_sibling_path,\n messaging::l2_to_l1_message::L2ToL1Message,\n poseidon2::Poseidon2Sponge,\n side_effect::{Counted, Scoped},\n traits::{FromField, Hash, ToField},\n utils::field::{field_from_bytes, field_from_bytes_32_trunc},\n};\n\npub use poseidon2_chunks::poseidon2_absorb_in_chunks_existing_sponge;\nuse poseidon2_chunks::poseidon2_absorb_in_chunks;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\n// TODO: refactor these into their own files: sha256, poseidon2, some protocol-specific hash computations, some merkle computations.\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n DOM_SEP__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(note_nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [note_nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, DOM_SEP__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_note_nonce_and_unique_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n let note_nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(note_nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_note_hash(contract_address: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), note_hash],\n DOM_SEP__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique, siloed note hashes from siloed note hashes.\n///\n/// The protocol injects uniqueness into every note_hash, so that every single note_hash in the\n/// tree is unique. This prevents faerie gold attacks, where a malicious sender could create\n/// two identical note_hashes for a recipient (meaning only one would be nullifiable in future).\n///\n/// Most privacy protocols will inject the note's leaf_index (its position in the Note Hashes Tree)\n/// into the note, but this requires the creator of a note to wait until their tx is included in\n/// a block to know the note's final note hash (the unique, siloed note hash), because inserting\n/// leaves into trees is the job of a block producer.\n///\n/// We took a different approach so that the creator of a note will know each note's unique, siloed\n/// note hash before broadcasting their tx to the network.\n/// (There was also a historical requirement relating to \"chained transactions\" -- a feature that\n/// Aztec Connect had to enable notes to be spent from distinct txs earlier in the same block,\n/// and hence before an archive block root had been established for that block -- but that feature\n/// was abandoned for the Aztec Network for having too many bad tradeoffs).\n///\n/// (\n/// Edit: it is no longer true that all final note_hashes will be known by the creator of a tx\n/// before they send it to the network. If a tx makes public function calls, then _revertible_\n/// note_hashes that are created in private will not be made unique in private by the Reset circuit,\n/// but will instead be made unique by the AVM, because the `note_index_in_tx` will not be known\n/// until the AVM has executed the public functions of the tx. (See an explanation in\n/// reset_output_composer.nr for why).\n/// For some such txs, the `note_index_in_tx` might still be predictable through simulation, but\n/// for txs whose public functions create a varying number of non-revertible notes (determined at\n/// runtime), the `note_index_in_tx` will not be deterministically derivable before submitting the\n/// tx to the network.\n/// )\n///\n/// We use the `first_nullifier` of a tx as a seed of uniqueness. We have a guarantee that there will\n/// always be at least one nullifier per tx, because the init circuit will create one if one isn't\n/// created naturally by any functions of the tx. (Search \"protocol_nullifier\").\n/// We combine the `first_nullifier` with the note's index (its position within this tx's new\n/// note_hashes array) (`note_index_in_tx`) to get a truly unique value to inject into a note, which\n/// we call a `note_nonce`.\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n compute_note_nonce_and_unique_note_hash(siloed_note_hash, first_nullifier, note_index_in_tx)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: Scoped<Counted<NoteHash>>) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.innermost())\n }\n}\n\npub fn compute_siloed_nullifier(contract_address: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), nullifier],\n DOM_SEP__SILOED_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: Scoped<Counted<Nullifier>>) -> Field {\n let value = nullifier.innermost().value;\n // Q: shouldn't we be checking whether the _whole_ scoped, counted, nullifier struct is empty?\n // A: We don't have to. The init and inner circuits add a contract address only to non-empty nullifiers.\n // So we know we should silo it if the contract address is not empty.\n if nullifier.contract_address.is_zero() {\n // Return `.value` instead of 0, because already-siloed nullifiers also have a zero\n // contract_address field, and we of course want to return that already-siloed nullifier\n // (we just don't want to silo it a second time).\n value\n } else {\n compute_siloed_nullifier(nullifier.contract_address, value)\n }\n}\n\npub fn create_protocol_nullifier(tx_request: TxRequest) -> Scoped<Counted<Nullifier>> {\n // The protocol nullifier is ascribed a special side-effect counter of 1. No other side-effect\n // can have counter 1 (see `validate_as_first_call` for that assertion).\n Nullifier { value: tx_request.hash(), note_hash: 0 }.count(1).scope(\n NULL_MSG_SENDER_CONTRACT_ADDRESS,\n )\n}\n\npub fn compute_siloed_private_log_first_field(\n contract_address: AztecAddress,\n field: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), field],\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD,\n )\n}\n\npub fn silo_private_log(private_log: Scoped<Counted<PrivateLogData>>) -> PrivateLog {\n let log = private_log.innermost().log;\n if private_log.contract_address.is_zero() {\n log\n } else {\n let mut fields = log.fields;\n fields[0] = compute_siloed_private_log_first_field(private_log.contract_address, fields[0]);\n PrivateLog::new(fields, log.length)\n }\n}\n\npub fn compute_contract_class_log_hash(log: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS]) -> Field {\n poseidon2_hash(log)\n}\n\npub fn compute_app_siloed_secret_key(\n master_secret_key: EmbeddedCurveScalar,\n app_address: AztecAddress,\n app_secret_key_domain_separator: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [master_secret_key.hi, master_secret_key.lo, app_address.to_field()],\n app_secret_key_domain_separator,\n )\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let contract_address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n let recipient_bytes: [u8; 20] = recipient.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let rollup_version_id_bytes: [u8; 32] = rollup_version_id.to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n\n let mut bytes: [u8; 148] = std::mem::zeroed();\n for i in 0..32 {\n bytes[i] = contract_address_bytes[i];\n bytes[i + 32] = rollup_version_id_bytes[i];\n // 64 - 84 are for recipient.\n bytes[i + 84] = chain_id_bytes[i];\n bytes[i + 116] = content_bytes[i];\n }\n\n for i in 0..20 {\n bytes[64 + i] = recipient_bytes[i];\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: Scoped<L2ToL1Message>,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.inner.recipient,\n msg.inner.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// TODO: consider a variant that enables domain separation with a u32 (we seem to have standardised u32s for domain separators)\n/// Computes sha256 hash of 2 input fields.\n///\n/// @returns A truncated field (i.e., the first byte is always 0).\npub fn accumulate_sha256(v0: Field, v1: Field) -> Field {\n // Concatenate two fields into 32 x 2 = 64 bytes\n let v0_as_bytes: [u8; 32] = v0.to_be_bytes();\n let v1_as_bytes: [u8; 32] = v1.to_be_bytes();\n let hash_input_flattened = v0_as_bytes.concat(v1_as_bytes);\n\n sha256_to_field(hash_input_flattened)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n poseidon::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = [separator.to_field()].concat(inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n/// Computes a Poseidon2 hash over a dynamic-length subarray of the given input.\n/// Only the first `in_len` fields of `input` are absorbed; any remaining fields are ignored.\n/// The caller is responsible for ensuring that the input is padded with zeros if required.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// NB the below is the same as poseidon::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// This function is unconstrained because it is intended to be used in unconstrained context only as\n// in constrained contexts it would be too inefficient.\npub unconstrained fn poseidon2_hash_with_separator_bounded_vec<let N: u32, T>(\n inputs: BoundedVec<Field, N>,\n separator: T,\n) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs.get(i));\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256::digest(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0x3b18c58c739716e76429634a61375c45b3b5cd470c22ab6d3e14cee23dd992);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0xaab2a5828156782b12a1dc6f336e2bc627eb1b9514b02d511f66296990c050);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n L2ToL1Message { recipient: EthAddress::from_field(1), content: 2 }.scope(\n AztecAddress::from_field(3),\n ),\n version,\n chainId,\n );\n\n // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n let l2_to_l1_message_hash_from_ts =\n 0x0081edf209e087ad31b3fd24263698723d57190bd1d6e9fe056fc0c0a68ee661;\n\n assert_eq(hash, l2_to_l1_message_hash_from_ts);\n}\n\n#[test]\nunconstrained fn poseidon2_hash_with_separator_bounded_vec_matches_non_bounded_vec_version() {\n let inputs = BoundedVec::<Field, 4>::from_array([1, 2, 3]);\n let separator = 42;\n\n // Hash using bounded vec version\n let bounded_result = poseidon2_hash_with_separator_bounded_vec(inputs, separator);\n\n // Hash using regular version\n let regular_result = poseidon2_hash_with_separator([1, 2, 3], separator);\n\n // Results should match\n assert_eq(bounded_result, regular_result);\n}\n"
|
|
4220
4220
|
},
|
|
4221
4221
|
"39": {
|
|
4222
4222
|
"path": "std/ops/arith.nr",
|
|
4223
4223
|
"source": "use crate::convert::AsPrimitive;\n\n// docs:start:add-trait\npub trait Add {\n fn add(self, other: Self) -> Self;\n}\n// docs:end:add-trait\n\nimpl Add for Field {\n fn add(self, other: Field) -> Field {\n self + other\n }\n}\n\nimpl Add for u128 {\n fn add(self, other: u128) -> u128 {\n self + other\n }\n}\nimpl Add for u64 {\n fn add(self, other: u64) -> u64 {\n self + other\n }\n}\nimpl Add for u32 {\n fn add(self, other: u32) -> u32 {\n self + other\n }\n}\nimpl Add for u16 {\n fn add(self, other: u16) -> u16 {\n self + other\n }\n}\nimpl Add for u8 {\n fn add(self, other: u8) -> u8 {\n self + other\n }\n}\nimpl Add for u1 {\n fn add(self, other: u1) -> u1 {\n self + other\n }\n}\n\nimpl Add for i8 {\n fn add(self, other: i8) -> i8 {\n self + other\n }\n}\nimpl Add for i16 {\n fn add(self, other: i16) -> i16 {\n self + other\n }\n}\nimpl Add for i32 {\n fn add(self, other: i32) -> i32 {\n self + other\n }\n}\nimpl Add for i64 {\n fn add(self, other: i64) -> i64 {\n self + other\n }\n}\n\n// docs:start:sub-trait\npub trait Sub {\n fn sub(self, other: Self) -> Self;\n}\n// docs:end:sub-trait\n\nimpl Sub for Field {\n fn sub(self, other: Field) -> Field {\n self - other\n }\n}\n\nimpl Sub for u128 {\n fn sub(self, other: u128) -> u128 {\n self - other\n }\n}\nimpl Sub for u64 {\n fn sub(self, other: u64) -> u64 {\n self - other\n }\n}\nimpl Sub for u32 {\n fn sub(self, other: u32) -> u32 {\n self - other\n }\n}\nimpl Sub for u16 {\n fn sub(self, other: u16) -> u16 {\n self - other\n }\n}\nimpl Sub for u8 {\n fn sub(self, other: u8) -> u8 {\n self - other\n }\n}\nimpl Sub for u1 {\n fn sub(self, other: u1) -> u1 {\n self - other\n }\n}\n\nimpl Sub for i8 {\n fn sub(self, other: i8) -> i8 {\n self - other\n }\n}\nimpl Sub for i16 {\n fn sub(self, other: i16) -> i16 {\n self - other\n }\n}\nimpl Sub for i32 {\n fn sub(self, other: i32) -> i32 {\n self - other\n }\n}\nimpl Sub for i64 {\n fn sub(self, other: i64) -> i64 {\n self - other\n }\n}\n\n// docs:start:mul-trait\npub trait Mul {\n fn mul(self, other: Self) -> Self;\n}\n// docs:end:mul-trait\n\nimpl Mul for Field {\n fn mul(self, other: Field) -> Field {\n self * other\n }\n}\n\nimpl Mul for u128 {\n fn mul(self, other: u128) -> u128 {\n self * other\n }\n}\nimpl Mul for u64 {\n fn mul(self, other: u64) -> u64 {\n self * other\n }\n}\nimpl Mul for u32 {\n fn mul(self, other: u32) -> u32 {\n self * other\n }\n}\nimpl Mul for u16 {\n fn mul(self, other: u16) -> u16 {\n self * other\n }\n}\nimpl Mul for u8 {\n fn mul(self, other: u8) -> u8 {\n self * other\n }\n}\nimpl Mul for u1 {\n fn mul(self, other: u1) -> u1 {\n self * other\n }\n}\n\nimpl Mul for i8 {\n fn mul(self, other: i8) -> i8 {\n self * other\n }\n}\nimpl Mul for i16 {\n fn mul(self, other: i16) -> i16 {\n self * other\n }\n}\nimpl Mul for i32 {\n fn mul(self, other: i32) -> i32 {\n self * other\n }\n}\nimpl Mul for i64 {\n fn mul(self, other: i64) -> i64 {\n self * other\n }\n}\n\n// docs:start:div-trait\npub trait Div {\n fn div(self, other: Self) -> Self;\n}\n// docs:end:div-trait\n\nimpl Div for Field {\n fn div(self, other: Field) -> Field {\n self / other\n }\n}\n\nimpl Div for u128 {\n fn div(self, other: u128) -> u128 {\n self / other\n }\n}\nimpl Div for u64 {\n fn div(self, other: u64) -> u64 {\n self / other\n }\n}\nimpl Div for u32 {\n fn div(self, other: u32) -> u32 {\n self / other\n }\n}\nimpl Div for u16 {\n fn div(self, other: u16) -> u16 {\n self / other\n }\n}\nimpl Div for u8 {\n fn div(self, other: u8) -> u8 {\n self / other\n }\n}\nimpl Div for u1 {\n fn div(self, other: u1) -> u1 {\n self / other\n }\n}\n\nimpl Div for i8 {\n fn div(self, other: i8) -> i8 {\n self / other\n }\n}\nimpl Div for i16 {\n fn div(self, other: i16) -> i16 {\n self / other\n }\n}\nimpl Div for i32 {\n fn div(self, other: i32) -> i32 {\n self / other\n }\n}\nimpl Div for i64 {\n fn div(self, other: i64) -> i64 {\n self / other\n }\n}\n\n// docs:start:rem-trait\npub trait Rem {\n fn rem(self, other: Self) -> Self;\n}\n// docs:end:rem-trait\n\nimpl Rem for u128 {\n fn rem(self, other: u128) -> u128 {\n self % other\n }\n}\nimpl Rem for u64 {\n fn rem(self, other: u64) -> u64 {\n self % other\n }\n}\nimpl Rem for u32 {\n fn rem(self, other: u32) -> u32 {\n self % other\n }\n}\nimpl Rem for u16 {\n fn rem(self, other: u16) -> u16 {\n self % other\n }\n}\nimpl Rem for u8 {\n fn rem(self, other: u8) -> u8 {\n self % other\n }\n}\nimpl Rem for u1 {\n fn rem(self, other: u1) -> u1 {\n self % other\n }\n}\n\nimpl Rem for i8 {\n fn rem(self, other: i8) -> i8 {\n self % other\n }\n}\nimpl Rem for i16 {\n fn rem(self, other: i16) -> i16 {\n self % other\n }\n}\nimpl Rem for i32 {\n fn rem(self, other: i32) -> i32 {\n self % other\n }\n}\nimpl Rem for i64 {\n fn rem(self, other: i64) -> i64 {\n self % other\n }\n}\n\n// docs:start:neg-trait\npub trait Neg {\n fn neg(self) -> Self;\n}\n// docs:end:neg-trait\n\n// docs:start:neg-trait-impls\nimpl Neg for Field {\n fn neg(self) -> Field {\n -self\n }\n}\n\nimpl Neg for i8 {\n fn neg(self) -> i8 {\n -self\n }\n}\nimpl Neg for i16 {\n fn neg(self) -> i16 {\n -self\n }\n}\nimpl Neg for i32 {\n fn neg(self) -> i32 {\n -self\n }\n}\nimpl Neg for i64 {\n fn neg(self) -> i64 {\n -self\n }\n}\n// docs:end:neg-trait-impls\n\n// docs:start:wrapping-add-trait\npub trait WrappingAdd {\n fn wrapping_add(self, y: Self) -> Self;\n}\n// docs:end:wrapping-add-trait\n\nimpl WrappingAdd for u1 {\n fn wrapping_add(self: u1, y: u1) -> u1 {\n self ^ y\n }\n}\n\nimpl WrappingAdd for u8 {\n fn wrapping_add(self: u8, y: u8) -> u8 {\n wrapping_add_hlp(self, y)\n }\n}\n\nimpl WrappingAdd for u16 {\n fn wrapping_add(self: u16, y: u16) -> u16 {\n wrapping_add_hlp(self, y)\n }\n}\n\nimpl WrappingAdd for u32 {\n fn wrapping_add(self: u32, y: u32) -> u32 {\n wrapping_add_hlp(self, y)\n }\n}\n\nimpl WrappingAdd for u64 {\n fn wrapping_add(self: u64, y: u64) -> u64 {\n wrapping_add_hlp(self, y)\n }\n}\n\nimpl WrappingAdd for u128 {\n fn wrapping_add(self: u128, y: u128) -> u128 {\n wrapping_add_hlp(self, y)\n }\n}\n\nimpl WrappingAdd for i8 {\n fn wrapping_add(self: i8, y: i8) -> i8 {\n let x = self as u8;\n x.wrapping_add(y as u8) as i8\n }\n}\n\nimpl WrappingAdd for i16 {\n fn wrapping_add(self: i16, y: i16) -> i16 {\n let x = self as u16;\n x.wrapping_add(y as u16) as i16\n }\n}\n\nimpl WrappingAdd for i32 {\n fn wrapping_add(self: i32, y: i32) -> i32 {\n let x = self as u32;\n x.wrapping_add(y as u32) as i32\n }\n}\n\nimpl WrappingAdd for i64 {\n fn wrapping_add(self: i64, y: i64) -> i64 {\n let x = self as u64;\n x.wrapping_add(y as u64) as i64\n }\n}\nimpl WrappingAdd for Field {\n fn wrapping_add(self: Field, y: Field) -> Field {\n self + y\n }\n}\n\n// docs:start:wrapping-sub-trait\npub trait WrappingSub {\n fn wrapping_sub(self, y: Self) -> Self;\n}\n// docs:start:wrapping-sub-trait\n\nimpl WrappingSub for u1 {\n fn wrapping_sub(self: u1, y: u1) -> u1 {\n self ^ y\n }\n}\n\nimpl WrappingSub for u8 {\n fn wrapping_sub(self: u8, y: u8) -> u8 {\n wrapping_sub_hlp(self, y) as u8\n }\n}\n\nimpl WrappingSub for u16 {\n fn wrapping_sub(self: u16, y: u16) -> u16 {\n wrapping_sub_hlp(self, y) as u16\n }\n}\n\nimpl WrappingSub for u32 {\n fn wrapping_sub(self: u32, y: u32) -> u32 {\n wrapping_sub_hlp(self, y) as u32\n }\n}\nimpl WrappingSub for u64 {\n fn wrapping_sub(self: u64, y: u64) -> u64 {\n wrapping_sub_hlp(self, y) as u64\n }\n}\nimpl WrappingSub for u128 {\n fn wrapping_sub(self: u128, y: u128) -> u128 {\n wrapping_sub_hlp(self, y) as u128\n }\n}\n\nimpl WrappingSub for i8 {\n fn wrapping_sub(self: i8, y: i8) -> i8 {\n let x = self as u8;\n x.wrapping_sub(y as u8) as i8\n }\n}\n\nimpl WrappingSub for i16 {\n fn wrapping_sub(self: i16, y: i16) -> i16 {\n let x = self as u16;\n x.wrapping_sub(y as u16) as i16\n }\n}\n\nimpl WrappingSub for i32 {\n fn wrapping_sub(self: i32, y: i32) -> i32 {\n let x = self as u32;\n x.wrapping_sub(y as u32) as i32\n }\n}\nimpl WrappingSub for i64 {\n fn wrapping_sub(self: i64, y: i64) -> i64 {\n let x = self as u64;\n x.wrapping_sub(y as u64) as i64\n }\n}\nimpl WrappingSub for Field {\n fn wrapping_sub(self: Field, y: Field) -> Field {\n self - y\n }\n}\n\n// docs:start:wrapping-mul-trait\npub trait WrappingMul {\n fn wrapping_mul(self, y: Self) -> Self;\n}\n// docs:start:wrapping-mul-trait\n\nimpl WrappingMul for u1 {\n fn wrapping_mul(self: u1, y: u1) -> u1 {\n self & y\n }\n}\n\nimpl WrappingMul for u8 {\n fn wrapping_mul(self: u8, y: u8) -> u8 {\n wrapping_mul_hlp(self, y)\n }\n}\n\nimpl WrappingMul for u16 {\n fn wrapping_mul(self: u16, y: u16) -> u16 {\n wrapping_mul_hlp(self, y)\n }\n}\n\nimpl WrappingMul for u32 {\n fn wrapping_mul(self: u32, y: u32) -> u32 {\n wrapping_mul_hlp(self, y)\n }\n}\nimpl WrappingMul for u64 {\n fn wrapping_mul(self: u64, y: u64) -> u64 {\n wrapping_mul_hlp(self, y)\n }\n}\n\nimpl WrappingMul for i8 {\n fn wrapping_mul(self: i8, y: i8) -> i8 {\n let x = self as u8;\n x.wrapping_mul(y as u8) as i8\n }\n}\n\nimpl WrappingMul for i16 {\n fn wrapping_mul(self: i16, y: i16) -> i16 {\n let x = self as u16;\n x.wrapping_mul(y as u16) as i16\n }\n}\n\nimpl WrappingMul for i32 {\n fn wrapping_mul(self: i32, y: i32) -> i32 {\n let x = self as u32;\n x.wrapping_mul(y as u32) as i32\n }\n}\n\nimpl WrappingMul for i64 {\n fn wrapping_mul(self: i64, y: i64) -> i64 {\n let x = self as u64;\n x.wrapping_mul(y as u64) as i64\n }\n}\n\nimpl WrappingMul for u128 {\n fn wrapping_mul(self: u128, y: u128) -> u128 {\n wrapping_mul128_hlp(self, y)\n }\n}\nimpl WrappingMul for Field {\n fn wrapping_mul(self: Field, y: Field) -> Field {\n self * y\n }\n}\n\nfn wrapping_add_hlp<T>(x: T, y: T) -> T\nwhere\n T: AsPrimitive<Field>,\n Field: AsPrimitive<T>,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n\nfn wrapping_sub_hlp<T>(x: T, y: T) -> Field\nwhere\n T: AsPrimitive<Field>,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n x.as_() + 340282366920938463463374607431768211456 - y.as_()\n}\n\nfn wrapping_mul_hlp<T>(x: T, y: T) -> T\nwhere\n T: AsPrimitive<Field>,\n Field: AsPrimitive<T>,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\nglobal two_pow_64: u128 = 0x10000000000000000;\n/// Splits a 128 bits number into two 64 bits limbs\nunconstrained fn split64(x: u128) -> (u64, u64) {\n let lo = x as u64;\n let hi = (x / two_pow_64) as u64;\n (lo, hi)\n}\n\n/// Split a 128 bits number into two 64 bits limbs\n/// It will fail if the number is more than 128 bits\nfn split_into_64_bit_limbs(x: u128) -> (u64, u64) {\n // Safety: the limbs are constrained below\n let (x_lo, x_hi) = unsafe { split64(x) };\n assert(x as Field == x_lo as Field + x_hi as Field * two_pow_64 as Field);\n (x_lo, x_hi)\n}\n\n#[field(bn254)]\nfn wrapping_mul128_hlp(x: u128, y: u128) -> u128 {\n let (x_lo, x_hi) = split_into_64_bit_limbs(x);\n let (y_lo, y_hi) = split_into_64_bit_limbs(y);\n // Multiplication using the limbs:(x_lo + 2**64*x_hi)*(y_lo + 2**64*y_hi)=x_lo*y_lo+...\n // and skipping the terms over 2**128\n // Working with u64 limbs ensures that we cannot overflow the field modulus.\n let low = x_lo as Field * y_lo as Field;\n let lo = low as u64 as Field;\n let carry = (low - lo) / two_pow_64 as Field;\n let high = x_lo as Field * y_hi as Field + x_hi as Field * y_lo as Field + carry;\n let hi = high as u64 as Field;\n (lo + two_pow_64 as Field * hi) as u128\n}\n\nmod tests {\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n crate::static_assert(1 == 2, \"custom message\");\n }\n\n mod arithmetic {\n use crate::ops::arith::{Add, Div, Mul, Neg, Rem, Sub};\n #[test]\n fn test_basic_arithmetic_traits() {\n // add\n assert_eq(5.add(3), 8);\n assert_eq(0u8.add(255u8), 255u8);\n assert_eq(42.add(58), 100);\n\n // sub\n assert_eq(10.sub(3), 7);\n assert_eq(100.sub(42), 58);\n\n // mul\n assert_eq(6.mul(7), 42);\n\n // div\n assert_eq(15.div(3), 5);\n assert_eq(10u8.div(3u8), 3u8);\n assert_eq(15.div(3), 5);\n\n // rem\n assert_eq(17.rem(5), 2);\n assert_eq(10u8.rem(3u8), 1u8);\n\n // neg\n assert_eq(42.neg(), -42);\n assert_eq((-10).neg(), 10);\n assert_eq(42.neg(), -42);\n }\n\n #[test]\n fn test_division() {\n // test division by one\n assert_eq(42.div(1), 42);\n assert_eq(0.div(1), 0);\n assert_eq(255u8.div(1u8), 255u8);\n\n // test division by self\n assert_eq(42.div(42), 1);\n assert_eq(1.div(1), 1);\n\n // test remainder\n assert_eq(42.rem(42), 0);\n assert_eq(0.rem(42), 0);\n assert_eq(1.rem(42), 1);\n }\n\n #[test(should_fail)]\n fn test_u8_sub_overflow_failure() {\n let _ = 0u8.sub(1u8);\n }\n\n #[test(should_fail)]\n fn test_u8_add_overflow_failure() {\n let _ = 255u8.add(1u8);\n }\n\n #[test(should_fail)]\n fn test_u8_mul_overflow_failure() {\n let _ = 255u8.mul(2u8);\n }\n\n #[test(should_fail)]\n fn test_u16_sub_overflow_failure() {\n let _ = 0u16.sub(1u16);\n }\n\n #[test(should_fail)]\n fn test_u16_add_overflow_failure() {\n let _ = 65535u16.add(1u16);\n }\n\n #[test(should_fail)]\n fn test_u16_mul_overflow_failure() {\n let _ = 65535u16.mul(2u16);\n }\n\n #[test(should_fail)]\n fn test_signed_sub_overflow_failure() {\n let val: i8 = -128;\n let _ = val.sub(1i8);\n }\n\n #[test(should_fail)]\n fn test_signed_overflow_failure() {\n let _ = 127i8.add(1i8);\n }\n\n #[test]\n fn test_field() {\n let zero: Field = 0;\n let one: Field = 1;\n\n // test Field basic operations\n assert_eq(zero.add(one), one);\n assert_eq(one.add(zero), one);\n assert_eq(one.sub(one), zero);\n assert_eq(one.mul(one), one);\n assert_eq(one.div(one), one);\n assert_eq(zero.neg(), zero);\n assert_eq(one.neg(), -one);\n }\n\n }\n\n mod wrapping_arithmetic {\n use crate::ops::arith::{Add, Div, Mul, Neg, Sub, WrappingAdd, WrappingMul, WrappingSub};\n #[test]\n fn test_wrapping_add() {\n assert_eq(255u8.wrapping_add(1u8), 0u8);\n assert_eq(255u8.wrapping_add(255u8), 254u8);\n assert_eq(0u8.wrapping_add(0u8), 0u8);\n assert_eq(128u8.wrapping_add(128u8), 0u8);\n\n // test u16 wrapping add\n assert_eq(65535u16.wrapping_add(1u16), 0u16);\n assert_eq(65535u16.wrapping_add(65535u16), 65534u16);\n\n // test u32 wrapping add\n assert_eq(0xffffffffu32.wrapping_add(1u32), 0u32);\n assert_eq(0xffffffffu32.wrapping_add(0xffffffffu32), 0xfffffffeu32);\n\n // test u64 wrapping add\n assert_eq(0xffffffffffffffffu64.wrapping_add(1u64), 0u64);\n assert_eq(\n 0xffffffffffffffffu64.wrapping_add(0xffffffffffffffffu64),\n 0xfffffffffffffffeu64,\n );\n\n // test u128 wrapping add\n assert_eq(0xffffffffffffffffffffffffffffffffu128.wrapping_add(1u128), 0u128);\n\n // test signed types\n assert_eq(127i8.wrapping_add(1i8), -128i8);\n let val: i8 = -128;\n assert_eq(val.wrapping_add(-1i8), 127i8);\n\n // test Field wrapping add\n let forty_two: Field = 42;\n let fifty_eight: Field = 58;\n let hundred: Field = 100;\n let neg_two: Field = -2;\n let two: Field = 2;\n let zero: Field = 0;\n let neg_two_hundred: Field = -200;\n let neg_one_ninety_eight: Field = -198;\n assert_eq(forty_two.wrapping_add(fifty_eight), hundred);\n assert_eq(neg_two.wrapping_add(two), zero);\n assert_eq(neg_two_hundred.wrapping_add(two), neg_one_ninety_eight);\n }\n\n #[test]\n fn test_wrapping_sub() {\n assert_eq(0u8.wrapping_sub(1u8), 255u8);\n assert_eq(255u8.wrapping_sub(255u8), 0u8);\n assert_eq(0u8.wrapping_sub(0u8), 0u8);\n assert_eq(1u8.wrapping_sub(2u8), 255u8);\n\n // test u16 wrapping sub\n assert_eq(0u16.wrapping_sub(1u16), 65535u16);\n assert_eq(65535u16.wrapping_sub(65535u16), 0u16);\n\n // test u32 wrapping sub\n assert_eq(0u32.wrapping_sub(1u32), 0xffffffffu32);\n assert_eq(0xffffffffu32.wrapping_sub(0xffffffffu32), 0u32);\n\n // test u64 wrapping sub\n assert_eq(0u64.wrapping_sub(1u64), 0xffffffffffffffffu64);\n assert_eq(0xffffffffffffffffu64.wrapping_sub(0xffffffffffffffffu64), 0u64);\n\n // test u128 wrapping sub\n assert_eq(0u128.wrapping_sub(1u128), 0xffffffffffffffffffffffffffffffffu128);\n\n // test signed types\n let val: i8 = -128;\n assert_eq(val.wrapping_sub(1i8), 127i8);\n assert_eq(127i8.wrapping_sub(-1i8), -128i8);\n\n // test Field wrapping sub\n let forty_two: Field = 42;\n let fifty_eight: Field = 58;\n let neg_sixteen: Field = -16;\n assert_eq(forty_two.wrapping_sub(fifty_eight), neg_sixteen);\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n assert_eq(zero, zero.wrapping_mul(one));\n assert_eq(zero, one.wrapping_mul(zero));\n assert_eq(one, one.wrapping_mul(one));\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n\n // test u8 wrapping mul\n assert_eq(255u8.wrapping_mul(2u8), 254u8);\n assert_eq(255u8.wrapping_mul(255u8), 1u8);\n assert_eq(128u8.wrapping_mul(2u8), 0u8);\n\n // test u16 wrapping mul\n assert_eq(65535u16.wrapping_mul(2u16), 65534u16);\n assert_eq(65535u16.wrapping_mul(65535u16), 1u16);\n\n // test u32 wrapping mul\n assert_eq(0xffffffffu32.wrapping_mul(2u32), 0xfffffffeu32);\n assert_eq(0xffffffffu32.wrapping_mul(0xffffffffu32), 1u32);\n\n // test u64 wrapping mul\n // 0xffffffffffffffffu64 is 2^64 - 1\n assert_eq(0xffffffffffffffffu64.wrapping_mul(2u64), 0xfffffffffffffffeu64);\n assert_eq(0xffffffffffffffffu64.wrapping_mul(0xffffffffffffffffu64), 1u64);\n\n // test signed types\n assert_eq(127i8.wrapping_mul(2i8), -2i8);\n let val: i8 = -128;\n assert_eq(val.wrapping_mul(-1i8), -128i8);\n\n // test Field wrapping mul\n let six: Field = 6;\n let seven: Field = 7;\n let forty_two: Field = 42;\n let neg_two: Field = -2;\n let two: Field = 2;\n let neg_four: Field = -4;\n assert_eq(six.wrapping_mul(seven), forty_two);\n assert_eq(neg_two.wrapping_mul(two), neg_four);\n }\n\n #[test]\n fn test_u1_behavior() {\n // u1 wrapping add is XOR\n assert_eq(0u1.wrapping_add(0u1), 0u1);\n assert_eq(0u1.wrapping_add(1u1), 1u1);\n assert_eq(1u1.wrapping_add(0u1), 1u1);\n assert_eq(1u1.wrapping_add(1u1), 0u1);\n\n // u1 wrapping sub is XOR\n assert_eq(0u1.wrapping_sub(0u1), 0u1);\n assert_eq(0u1.wrapping_sub(1u1), 1u1);\n assert_eq(1u1.wrapping_sub(0u1), 1u1);\n assert_eq(1u1.wrapping_sub(1u1), 0u1);\n\n // u1 wrapping mul is AND\n assert_eq(0u1.wrapping_mul(0u1), 0u1);\n assert_eq(0u1.wrapping_mul(1u1), 0u1);\n assert_eq(1u1.wrapping_mul(0u1), 0u1);\n assert_eq(1u1.wrapping_mul(1u1), 1u1);\n }\n\n // test wrapping operations is the same as the regular operations\n #[test]\n fn test_wrapping_vs_regular() {\n let u64_large = 0x123456789abcdef0u64;\n let u128_large = 0x123456789abcdef0123456789abcdef0u128;\n\n assert_eq(u64_large.wrapping_add(1u64), u64_large + 1u64);\n assert_eq(u64_large.wrapping_sub(1u64), u64_large - 1u64);\n assert_eq(u64_large.wrapping_mul(2u64), u64_large * 2u64);\n\n assert_eq(u128_large.wrapping_add(1u128), u128_large + 1u128);\n assert_eq(u128_large.wrapping_sub(1u128), u128_large - 1u128);\n assert_eq(u128_large.wrapping_mul(2u128), u128_large * 2u128);\n }\n\n #[test]\n fn test_field_wrapping_operations() {\n let zero: Field = 0;\n let one: Field = 1;\n let large_val = 0xffffffffffffffff;\n\n // test Field wrapping operations\n assert_eq(zero.wrapping_add(one), one);\n assert_eq(one.wrapping_add(large_val), one + large_val);\n assert_eq(zero.wrapping_sub(one), -one);\n assert_eq(one.wrapping_sub(large_val), one - large_val);\n assert_eq(zero.wrapping_mul(one), zero);\n assert_eq(one.wrapping_mul(large_val), large_val);\n\n // test Field basic operations\n assert_eq(zero.add(one), one);\n assert_eq(one.add(zero), one);\n assert_eq(one.sub(one), zero);\n assert_eq(one.mul(one), one);\n assert_eq(one.div(one), one);\n assert_eq(zero.neg(), zero);\n assert_eq(one.neg(), -one);\n }\n\n }\n\n mod split_functions {\n\n use crate::ops::arith::{split64, split_into_64_bit_limbs};\n\n // test split64 and split_into_64_bit_limbs functions\n #[test]\n fn test_split_functions() {\n let small_val = 0x123456789abcdefu128;\n let large_val = 0x123456789abcdef0123456789abcdef0u128;\n let max_val = 0xffffffffffffffffffffffffffffffffu128;\n\n // test split64 (unconstrained)\n // Safety: testing\n unsafe {\n let (lo, hi) = split64(small_val);\n assert_eq(lo, 0x123456789abcdefu64);\n assert_eq(hi, 0u64);\n\n let (lo2, hi2) = split64(large_val);\n assert_eq(lo2, 0x123456789abcdef0u64);\n assert_eq(hi2, 0x123456789abcdef0u64);\n }\n\n // test split_into_64_bit_limbs (constrained)\n let (lo3, hi3) = split_into_64_bit_limbs(small_val);\n assert_eq(lo3, 0x123456789abcdefu64);\n assert_eq(hi3, 0u64);\n\n let (lo4, hi4) = split_into_64_bit_limbs(large_val);\n assert_eq(lo4, 0x123456789abcdef0u64);\n assert_eq(hi4, 0x123456789abcdef0u64);\n\n let (lo5, hi5) = split_into_64_bit_limbs(max_val);\n assert_eq(lo5, 0xffffffffffffffffu64);\n assert_eq(hi5, 0xffffffffffffffffu64);\n }\n }\n}\n"
|
|
4224
4224
|
},
|
|
4225
|
-
"
|
|
4225
|
+
"396": {
|
|
4226
4226
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/merkle_tree.nr",
|
|
4227
4227
|
"source": "use crate::{\n hash::{accumulate_sha256, poseidon2_hash},\n traits::Empty,\n utils::math::is_power_of_2_u32,\n};\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn sha_merkle_hash(left: Field, right: Field) -> Field {\n accumulate_sha256(left, right)\n}\n\n#[derive(Eq)]\npub struct MerkleTree<let N: u32> {\n pub leaves: [Field; N],\n pub nodes: [Field; N - 1],\n}\n\nimpl<let N: u32> Empty for MerkleTree<N> {\n fn empty() -> Self {\n MerkleTree { leaves: [0; N], nodes: [0; N - 1] }\n }\n}\n\nimpl<let N: u32> MerkleTree<N> {\n pub fn new(leaves: [Field; N]) -> Self {\n let nodes = compute_merkle_tree_nodes(leaves, merkle_hash);\n MerkleTree { leaves, nodes }\n }\n\n pub fn new_sha(leaves: [Field; N]) -> Self {\n let nodes = compute_merkle_tree_nodes(leaves, sha_merkle_hash);\n MerkleTree { leaves, nodes }\n }\n\n pub fn get_root(self) -> Field {\n self.nodes[N - 2]\n }\n\n pub fn get_sibling_path<let K: u32>(self, leaf_index: u32) -> [Field; K] {\n assert_eq(2.pow_32(K as Field), N as Field, \"Invalid path length\");\n\n let mut path = [0; K];\n let mut current_index = leaf_index;\n let mut subtree_width = N;\n\n let mut current_sibling_index = sibling_index(current_index);\n\n path[0] = self.leaves[current_sibling_index];\n\n let mut subtree_offset: u32 = 0;\n\n for i in 1..K {\n current_index = current_index / 2;\n subtree_width = subtree_width / 2;\n\n current_sibling_index = sibling_index(current_index);\n\n path[i] = self.nodes[subtree_offset + current_sibling_index];\n\n subtree_offset += subtree_width;\n }\n\n path\n }\n}\n\npub fn sibling_index(index: u32) -> u32 {\n if index % 2 == 0 {\n index + 1\n } else {\n index - 1\n }\n}\n\npub fn compute_merkle_tree_nodes<let N: u32>(\n leaves: [Field; N],\n hasher: fn(Field, Field) -> Field,\n) -> [Field; N - 1] {\n // Note: `N` must be a power of 2.\n std::static_assert(is_power_of_2_u32(N), \"N must be a power of 2\");\n std::static_assert(N != 1, \"2 must divide N\");\n\n let mut nodes = [0; N - 1];\n\n let total_nodes = N - 1;\n let half_size = N / 2;\n\n // Hash base layer.\n for i in 0..half_size {\n nodes[i] = hasher(leaves[2 * i], leaves[2 * i + 1]);\n }\n\n // Hash the other layers.\n for i in 0..(total_nodes - half_size) {\n nodes[half_size + i] = hasher(nodes[2 * i], nodes[2 * i + 1]);\n }\n\n nodes\n}\n"
|
|
4228
4228
|
},
|
|
4229
|
-
"
|
|
4229
|
+
"398": {
|
|
4230
4230
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr",
|
|
4231
4231
|
"source": "use crate::merkle_tree::merkle_tree::{compute_merkle_tree_nodes, merkle_hash, sha_merkle_hash};\n\n/// Calculate the Merkle tree root from the sibling path and leaf, using the default merkle hash.\npub fn root_from_sibling_path<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N],\n) -> Field {\n root_from_sibling_path_with_hasher(leaf, leaf_index, sibling_path, merkle_hash)\n}\n\n/// Calculate the Merkle tree root from the sibling path and leaf, using a custom hasher.\n///\n/// The leaf is hashed with its sibling, the result is then hashed with the next sibling in the path. and so on.\n/// The last hash is the root.\npub fn root_from_sibling_path_with_hasher<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N],\n hasher: fn(Field, Field) -> Field,\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = hasher(hash_left, hash_right);\n }\n node\n}\n\npub fn compute_tree_root<let N: u32>(leaves: [Field; N]) -> Field {\n compute_tree_root_with_hasher(leaves, merkle_hash)\n}\n\npub fn compute_sha_tree_root<let N: u32>(leaves: [Field; N]) -> Field {\n compute_tree_root_with_hasher(leaves, sha_merkle_hash)\n}\n\nfn compute_tree_root_with_hasher<let N: u32>(\n leaves: [Field; N],\n hasher: fn(Field, Field) -> Field,\n) -> Field {\n compute_merkle_tree_nodes(leaves, hasher)[N - 2]\n}\n\npub fn compute_empty_tree_root<let TreeHeight: u32>() -> Field {\n compute_empty_tree_root_with_hasher::<TreeHeight>(merkle_hash)\n}\n\npub fn compute_empty_sha_tree_root<let TreeHeight: u32>() -> Field {\n compute_empty_tree_root_with_hasher::<TreeHeight>(sha_merkle_hash)\n}\n\npub fn compute_empty_tree_root_with_hasher<let TreeHeight: u32>(\n hasher: fn(Field, Field) -> Field,\n) -> Field {\n let mut hashes = [0; TreeHeight + 1];\n for i in 1..TreeHeight + 1 {\n hashes[i] = hasher(hashes[i - 1], hashes[i - 1]);\n }\n hashes[TreeHeight]\n}\n\n#[test]\nfn test_merkle_roots_match_typescript() {\n // The following hardcoded values are generated from yarn-project/foundation/src/trees/balanced_merkle_tree_root.test.ts\n\n let root = compute_tree_root([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);\n let expected_tree_root_from_ts =\n 0x1528946361c480e8dc1e9ae3f8c31c997625fa1ddeddc7db5ad0dce3ac58fc4c;\n assert_eq(root, expected_tree_root_from_ts);\n\n let empty_root = compute_tree_root([0; 16]);\n let expected_empty_root_from_ts =\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e;\n assert_eq(empty_root, expected_empty_root_from_ts);\n\n let sha_root = compute_sha_tree_root([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);\n let expected_sha_root_from_ts =\n 0x00b007869b8a5e2a9b3b580a318e702cea04b2f5438f2e26743f545e4d1ecbdb;\n assert_eq(sha_root, expected_sha_root_from_ts);\n}\n\n#[test]\nfn test_empty_tree_root() {\n assert_eq(compute_empty_tree_root::<0>(), 0);\n\n assert_eq(\n compute_empty_tree_root::<1>(),\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1,\n );\n\n assert_eq(\n compute_empty_tree_root::<2>(),\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290,\n );\n\n assert_eq(\n compute_empty_tree_root::<6>(),\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76,\n );\n\n assert_eq(\n compute_empty_tree_root::<10>(),\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686,\n );\n}\n"
|
|
4232
4232
|
},
|
|
4233
|
-
"
|
|
4233
|
+
"417": {
|
|
4234
4234
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr",
|
|
4235
|
-
"source": "use crate::{\n constants::DOM_SEP__PUBLIC_STORAGE_MAP_SLOT, hash::poseidon2_hash_with_separator,\n traits::ToField,\n};\n\n// TODO: Move this to src/public_data/storage/map.nr\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field\nwhere\n K: ToField,\n{\n poseidon2_hash_with_separator(\n [storage_slot, key.to_field()],\n DOM_SEP__PUBLIC_STORAGE_MAP_SLOT,\n )\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map, traits::FromField};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(\n 0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f,\n );\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript =\n
|
|
4235
|
+
"source": "use crate::{\n constants::DOM_SEP__PUBLIC_STORAGE_MAP_SLOT, hash::poseidon2_hash_with_separator,\n traits::ToField,\n};\n\n// TODO: Move this to src/public_data/storage/map.nr\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field\nwhere\n K: ToField,\n{\n poseidon2_hash_with_separator(\n [storage_slot, key.to_field()],\n DOM_SEP__PUBLIC_STORAGE_MAP_SLOT,\n )\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map, traits::FromField};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(\n 0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f,\n );\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript =\n 0x2d225f361108379adc2da91378b9702675c5546b57e78bafc1e74ec7fec55967;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"
|
|
4236
4236
|
},
|
|
4237
4237
|
"42": {
|
|
4238
4238
|
"path": "std/option.nr",
|
|
@@ -4242,23 +4242,23 @@
|
|
|
4242
4242
|
"path": "std/panic.nr",
|
|
4243
4243
|
"source": "pub fn panic<T, U>(message: T) -> U\nwhere\n T: StringLike,\n{\n assert(false, message);\n crate::mem::zeroed()\n}\n\ntrait StringLike {}\n\nimpl<let N: u32> StringLike for str<N> {}\nimpl<let N: u32, T> StringLike for fmtstr<N, T> {}\n"
|
|
4244
4244
|
},
|
|
4245
|
-
"
|
|
4245
|
+
"434": {
|
|
4246
4246
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/type_packing.nr",
|
|
4247
4247
|
"source": "use crate::traits::Packable;\n\nglobal BOOL_PACKED_LEN: u32 = 1;\nglobal U8_PACKED_LEN: u32 = 1;\nglobal U16_PACKED_LEN: u32 = 1;\nglobal U32_PACKED_LEN: u32 = 1;\nglobal U64_PACKED_LEN: u32 = 1;\nglobal U128_PACKED_LEN: u32 = 1;\nglobal FIELD_PACKED_LEN: u32 = 1;\nglobal I8_PACKED_LEN: u32 = 1;\nglobal I16_PACKED_LEN: u32 = 1;\nglobal I32_PACKED_LEN: u32 = 1;\nglobal I64_PACKED_LEN: u32 = 1;\n\nimpl Packable for bool {\n let N: u32 = BOOL_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> bool {\n (fields[0] as u1) != 0\n }\n}\n\nimpl Packable for u8 {\n let N: u32 = U8_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Packable for u16 {\n let N: u32 = U16_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u16\n }\n}\n\nimpl Packable for u32 {\n let N: u32 = U32_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Packable for u64 {\n let N: u32 = U64_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u64\n }\n}\n\nimpl Packable for u128 {\n let N: u32 = U128_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u128\n }\n}\n\nimpl Packable for Field {\n let N: u32 = FIELD_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0]\n }\n}\n\nimpl Packable for i8 {\n let N: u32 = I8_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as u8 as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u8 as i8\n }\n}\n\nimpl Packable for i16 {\n let N: u32 = I16_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as u16 as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u16 as i16\n }\n}\n\nimpl Packable for i32 {\n let N: u32 = I32_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as u32 as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u32 as i32\n }\n}\n\nimpl Packable for i64 {\n let N: u32 = I64_PACKED_LEN;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n [self as u64 as Field]\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n fields[0] as u64 as i64\n }\n}\n\nimpl<T, let M: u32> Packable for [T; M]\nwhere\n T: Packable,\n{\n let N: u32 = M * <T as Packable>::N;\n\n #[inline_always]\n fn pack(self) -> [Field; Self::N] {\n let mut result: [Field; Self::N] = std::mem::zeroed();\n for i in 0..M {\n let serialized = self[i].pack();\n for j in 0..<T as Packable>::N {\n result[i * <T as Packable>::N + j] = serialized[j];\n }\n }\n result\n }\n\n #[inline_always]\n fn unpack(fields: [Field; Self::N]) -> Self {\n let mut reader = crate::utils::reader::Reader::new(fields);\n let mut result: [T; M] = std::mem::zeroed();\n reader.read_struct_array::<T, <T as Packable>::N, M>(Packable::unpack, result)\n }\n}\n\n#[test]\nfn test_u16_packing() {\n let a: u16 = 10;\n assert_eq(a, u16::unpack(a.pack()));\n}\n\n#[test]\nfn test_i8_packing() {\n let a: i8 = -10;\n assert_eq(a, i8::unpack(a.pack()));\n}\n\n#[test]\nfn test_i16_packing() {\n let a: i16 = -10;\n assert_eq(a, i16::unpack(a.pack()));\n}\n\n#[test]\nfn test_i32_packing() {\n let a: i32 = -10;\n assert_eq(a, i32::unpack(a.pack()));\n}\n\n#[test]\nfn test_i64_packing() {\n let a: i64 = -10;\n assert_eq(a, i64::unpack(a.pack()));\n}\n"
|
|
4248
4248
|
},
|
|
4249
|
-
"
|
|
4249
|
+
"447": {
|
|
4250
4250
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/serde/src/reader.nr",
|
|
4251
4251
|
"source": "pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_u64(&mut self) -> u64 {\n self.read() as u64\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() != 0\n }\n\n pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n let mut result = [0; K];\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array());\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(\n &mut self,\n deserialise: fn([Field; K]) -> T,\n mut result: [T; C],\n ) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn peek_offset(&mut self, offset: u32) -> Field {\n self.data[self.offset + offset]\n }\n\n pub fn advance_offset(&mut self, offset: u32) {\n self.offset += offset;\n }\n\n pub fn finish(self) {\n assert_eq(self.offset, self.data.len(), \"Reader did not read all data\");\n }\n}\n"
|
|
4252
4252
|
},
|
|
4253
|
-
"
|
|
4253
|
+
"448": {
|
|
4254
4254
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/serde/src/serialization.nr",
|
|
4255
4255
|
"source": "use crate::{reader::Reader, writer::Writer};\n\n// docs:start:serialize\n/// Trait for serializing Noir types into arrays of Fields.\n///\n/// An implementation of the Serialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait (and Deserialize) are\n/// typically used to communicate between Noir and TypeScript (via oracles and function arguments).\n///\n/// # On Following Noir's Intrinsic Serialization\n/// When calling a Noir function from TypeScript (TS), first the function arguments are serialized into an array\n/// of fields. This array is then included in the initial witness. Noir's intrinsic serialization is then used\n/// to deserialize the arguments from the witness. When the same Noir function is called from Noir this Serialize trait\n/// is used instead of the serialization in TS. For this reason we need to have a match between TS serialization,\n/// Noir's intrinsic serialization and the implementation of this trait. If there is a mismatch, the function calls\n/// fail with an arguments hash mismatch error message.\n///\n/// # Associated Constants\n/// * `N` - The length of the output Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let N: u32> Serialize for str<N> {\n/// let N: u32 = N;\n///\n/// fn serialize(self) -> [Field; Self::N] {\n/// let mut writer: Writer<Self::N> = Writer::new();\n/// self.stream_serialize(&mut writer);\n/// writer.finish()\n/// }\n///\n/// fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n/// let bytes = self.as_bytes();\n/// for i in 0..bytes.len() {\n/// writer.write(bytes[i] as Field);\n/// }\n/// }\n/// }\n/// ```\n#[derive_via(derive_serialize)]\npub trait Serialize {\n let N: u32;\n\n fn serialize(self) -> [Field; Self::N];\n\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>);\n}\n\n/// Generates a `Serialize` trait implementation for a struct type.\n///\n/// # Parameters\n/// - `s`: The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A quoted code block containing the trait implementation\n///\n/// # Example\n/// For a struct defined as:\n/// ```\n/// struct Log<N> {\n/// fields: [Field; N],\n/// length: u32\n/// }\n/// ```\n///\n/// This function generates code equivalent to:\n/// ```\n/// impl<let N: u32> Serialize for Log<N> {\n/// let N: u32 = <[Field; N] as Serialize>::N + <u32 as Serialize>::N;\n///\n/// fn serialize(self) -> [Field; Self::N] {\n/// let mut writer: Writer<Self::N> = Writer::new();\n/// self.stream_serialize(&mut writer);\n/// writer.finish()\n/// }\n///\n/// #[inline_always]\n/// fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n/// Serialize::stream_serialize(self.fields, writer);\n/// Serialize::stream_serialize(self.length, writer);\n/// }\n/// }\n/// ```\npub comptime fn derive_serialize(s: TypeDefinition) -> Quoted {\n let typ = s.as_type();\n let nested_struct = typ.as_data_type().unwrap();\n\n // We care only about the name and type so we drop the last item of the tuple\n let params = nested_struct.0.fields(nested_struct.1).map(|(name, typ, _)| (name, typ));\n\n // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n // for the `Serialize` trait.\n let generics_declarations = get_generics_declarations(s);\n let where_serialize_clause = get_where_trait_clause(s, quote {Serialize});\n\n let params_len_quote = get_params_len_quote(params);\n\n let function_body = params\n .map(|(name, _typ): (Quoted, Type)| {\n quote {\n $crate::serialization::Serialize::stream_serialize(self.$name, writer);\n }\n })\n .join(quote {});\n\n quote {\n impl$generics_declarations $crate::serialization::Serialize for $typ\n $where_serialize_clause\n {\n let N: u32 = $params_len_quote;\n\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n $crate::serialization::Serialize::stream_serialize(self, &mut writer);\n writer.finish()\n }\n\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n $function_body\n }\n }\n }\n}\n\n// docs:start:deserialize\n/// Trait for deserializing Noir types from arrays of Fields.\n///\n/// An implementation of the Deserialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait is typically used when\n/// deserializing return values from function calls in Noir. Since the same function could be called from TypeScript\n/// (TS), in which case the TS deserialization would get used, we need to have a match between the 2.\n///\n/// # Associated Constants\n/// * `N` - The length of the input Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let M: u32> Deserialize for str<M> {\n/// let N: u32 = M;\n///\n/// fn deserialize(fields: [Field; Self::N]) -> Self {\n/// let mut reader = Reader::new(fields);\n/// let result = Self::stream_deserialize(&mut reader);\n/// reader.finish();\n/// result\n/// }\n///\n/// fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n/// let mut bytes = [0 as u8; M];\n/// for i in 0..M {\n/// bytes[i] = reader.read() as u8;\n/// }\n/// str::<M>::from(bytes)\n/// }\n/// }\n/// ```\n#[derive_via(derive_deserialize)]\npub trait Deserialize {\n let N: u32;\n\n fn deserialize(fields: [Field; Self::N]) -> Self;\n\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self;\n}\n\n/// Generates a `Deserialize` trait implementation for a given struct `s`.\n///\n/// # Arguments\n/// * `s` - The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A `Quoted` block containing the generated trait implementation\n///\n/// # Requirements\n/// Each struct member type must implement the `Deserialize` trait (it gets used in the generated code).\n///\n/// # Example\n/// For a struct like:\n/// ```\n/// struct MyStruct {\n/// x: AztecAddress,\n/// y: Field,\n/// }\n/// ```\n///\n/// This generates:\n/// ```\n/// impl Deserialize for MyStruct {\n/// let N: u32 = <AztecAddress as Deserialize>::N + <Field as Deserialize>::N;\n///\n/// fn deserialize(fields: [Field; Self::N]) -> Self {\n/// let mut reader = Reader::new(fields);\n/// let result = Self::stream_deserialize(&mut reader);\n/// reader.finish();\n/// result\n/// }\n///\n/// #[inline_always]\n/// fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n/// let x = <AztecAddress as Deserialize>::stream_deserialize(reader);\n/// let y = <Field as Deserialize>::stream_deserialize(reader);\n/// Self { x, y }\n/// }\n/// }\n/// ```\npub comptime fn derive_deserialize(s: TypeDefinition) -> Quoted {\n let typ = s.as_type();\n let nested_struct = typ.as_data_type().unwrap();\n let params = nested_struct.0.fields(nested_struct.1);\n\n // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n // for the `Deserialize` trait.\n let generics_declarations = get_generics_declarations(s);\n let where_deserialize_clause = get_where_trait_clause(s, quote {Deserialize});\n\n // The following will give us:\n // <type_of_struct_member_1 as Deserialize>::N + <type_of_struct_member_2 as Deserialize>::N + ...\n // (or 0 if the struct has no members)\n let right_hand_side_of_definition_of_n = if params.len() > 0 {\n params\n .map(|(_, param_type, _): (Quoted, Type, Quoted)| {\n quote {\n <$param_type as $crate::serialization::Deserialize>::N\n }\n })\n .join(quote {+})\n } else {\n quote {0}\n };\n\n // For structs containing a single member, we can enhance performance by directly deserializing the input array,\n // bypassing the need for loop-based array construction. While this optimization yields significant benefits in\n // Brillig where the loops are expected to not be optimized, it is not relevant in ACIR where the loops are\n // expected to be optimized away.\n let function_body = if params.len() > 1 {\n // This generates deserialization code for each struct member and concatenates them together.\n let deserialization_of_struct_members = params\n .map(|(param_name, param_type, _): (Quoted, Type, Quoted)| {\n quote {\n let $param_name = <$param_type as Deserialize>::stream_deserialize(reader);\n }\n })\n .join(quote {});\n\n // We join the struct member names with a comma to be used in the `Self { ... }` syntax\n // This will give us e.g. `a, b, c` for a struct with three fields named `a`, `b`, and `c`.\n let struct_members = params\n .map(|(param_name, _, _): (Quoted, Type, Quoted)| quote { $param_name })\n .join(quote {,});\n\n quote {\n $deserialization_of_struct_members\n\n Self { $struct_members }\n }\n } else if params.len() == 1 {\n let param_name = params[0].0;\n quote {\n Self { $param_name: $crate::serialization::Deserialize::stream_deserialize(reader) }\n }\n } else {\n quote {\n Self {}\n }\n };\n\n quote {\n impl$generics_declarations $crate::serialization::Deserialize for $typ\n $where_deserialize_clause\n {\n let N: u32 = $right_hand_side_of_definition_of_n;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = $crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n $function_body\n }\n }\n }\n}\n\n/// Generates a quoted expression that computes the total serialized length of function parameters.\n///\n/// # Parameters\n/// * `params` - An array of tuples where each tuple contains a quoted parameter name and its Type. The type needs\n/// to implement the Serialize trait.\n///\n/// # Returns\n/// A quoted expression that evaluates to:\n/// * `0` if there are no parameters\n/// * `(<type1 as Serialize>::N + <type2 as Serialize>::N + ...)` for one or more parameters\ncomptime fn get_params_len_quote(params: [(Quoted, Type)]) -> Quoted {\n if params.len() == 0 {\n quote { 0 }\n } else {\n let params_quote_without_parentheses = params\n .map(|(_, param_type): (Quoted, Type)| {\n quote {\n <$param_type as $crate::serialization::Serialize>::N\n }\n })\n .join(quote {+});\n quote { ($params_quote_without_parentheses) }\n }\n}\n\ncomptime fn get_generics_declarations(s: TypeDefinition) -> Quoted {\n let generics = s.generics();\n\n if generics.len() > 0 {\n let generics_declarations_items = generics\n .map(|(name, maybe_integer_typ)| {\n // The second item in the generics tuple is an Option of an integer type that is Some only if\n // the generic is numeric.\n if maybe_integer_typ.is_some() {\n // The generic is numeric, so we return a quote defined as e.g. \"let N: u32\"\n let integer_type = maybe_integer_typ.unwrap();\n quote {let $name: $integer_type}\n } else {\n // The generic is not numeric, so we return a quote containing the name of the generic (e.g. \"T\")\n quote {$name}\n }\n })\n .join(quote {,});\n quote {<$generics_declarations_items>}\n } else {\n // The struct doesn't have any generics defined, so we just return an empty quote.\n quote {}\n }\n}\n\ncomptime fn get_where_trait_clause(s: TypeDefinition, trait_name: Quoted) -> Quoted {\n let generics = s.generics();\n\n // The second item in the generics tuple is an Option of an integer type that is Some only if the generic is\n // numeric.\n let non_numeric_generics =\n generics.filter(|(_, maybe_integer_typ)| maybe_integer_typ.is_none());\n\n if non_numeric_generics.len() > 0 {\n let non_numeric_generics_declarations =\n non_numeric_generics.map(|(name, _)| quote {$name: $trait_name}).join(quote {,});\n quote {where $non_numeric_generics_declarations}\n } else {\n // There are no non-numeric generics, so we return an empty quote.\n quote {}\n }\n}\n"
|
|
4256
4256
|
},
|
|
4257
|
-
"
|
|
4257
|
+
"450": {
|
|
4258
4258
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/serde/src/type_impls.nr",
|
|
4259
|
-
"source": "use crate::{reader::Reader, serialization::{Deserialize, Serialize}, writer::Writer};\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint;\nuse dep::std::embedded_curve_ops::EmbeddedCurveScalar;\n\nglobal U1_SERIALIZED_LEN: u32 = 1;\nglobal BOOL_SERIALIZED_LEN: u32 = 1;\nglobal U8_SERIALIZED_LEN: u32 = 1;\nglobal U16_SERIALIZED_LEN: u32 = 1;\nglobal U32_SERIALIZED_LEN: u32 = 1;\nglobal U64_SERIALIZED_LEN: u32 = 1;\nglobal U128_SERIALIZED_LEN: u32 = 1;\nglobal FIELD_SERIALIZED_LEN: u32 = 1;\nglobal I8_SERIALIZED_LEN: u32 = 1;\nglobal I16_SERIALIZED_LEN: u32 = 1;\nglobal I32_SERIALIZED_LEN: u32 = 1;\nglobal I64_SERIALIZED_LEN: u32 = 1;\n\nimpl Serialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> bool {\n reader.read() != 0\n }\n}\n\nimpl Serialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u1\n }\n}\n\nimpl Serialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8\n }\n}\n\nimpl Serialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16\n }\n}\n\nimpl Serialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32\n }\n}\n\nimpl Serialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64\n }\n}\n\nimpl Serialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u128\n }\n}\n\nimpl Serialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self);\n }\n}\n\nimpl Deserialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read()\n }\n}\n\nimpl Serialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u8 as Field);\n }\n}\n\nimpl Deserialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8 as i8\n }\n}\n\nimpl Serialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u16 as Field);\n }\n}\n\nimpl Deserialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16 as i16\n }\n}\n\nimpl Serialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u32 as Field);\n }\n}\n\nimpl Deserialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32 as i32\n }\n}\n\nimpl Serialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u64 as Field);\n }\n}\n\nimpl Deserialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64 as i64\n }\n}\n\nimpl<T, let M: u32> Serialize for [T; M]\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n for i in 0..M {\n self[i].stream_serialize(writer);\n }\n }\n}\n\nimpl<T, let M: u32> Deserialize for [T; M]\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut result: [T; M] = std::mem::zeroed();\n for i in 0..M {\n result[i] = T::stream_deserialize(reader);\n }\n result\n }\n}\n\nimpl<T> Serialize for Option<T>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N + 1;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write_bool(self.is_some());\n if self.is_some() {\n self.unwrap_unchecked().stream_serialize(writer);\n } else {\n writer.advance_offset(<T as Serialize>::N);\n }\n }\n}\n\nimpl<T> Deserialize for Option<T>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n if reader.read_bool() {\n Option::some(<T as Deserialize>::stream_deserialize(reader))\n } else {\n reader.advance_offset(<T as Deserialize>::N);\n Option::none()\n }\n }\n}\n\nglobal SCALAR_SIZE: u32 = 2;\n\nimpl Serialize for EmbeddedCurveScalar {\n\n let N: u32 = SCALAR_SIZE;\n\n fn serialize(self) -> [Field; SCALAR_SIZE] {\n [self.lo, self.hi]\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.lo);\n writer.write(self.hi);\n }\n}\n\nimpl Deserialize for EmbeddedCurveScalar {\n let N: u32 = SCALAR_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { lo: fields[0], hi: fields[1] }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { lo: reader.read(), hi: reader.read() }\n }\n}\n\nglobal POINT_SIZE: u32 = 3;\n\nimpl Serialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn serialize(self) -> [Field; Self::N] {\n [self.x, self.y, self.is_infinite as Field]\n }\n\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.x);\n writer.write(self.y);\n writer.write(self.is_infinite as Field);\n }\n}\n\nimpl Deserialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { x: fields[0], y: fields[1], is_infinite: fields[2] != 0 }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { x: reader.read(), y: reader.read(), is_infinite: reader.read_bool() }\n }\n}\n\nimpl<let M: u32> Deserialize for str<M> {\n let N: u32 = M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let u8_arr = <[u8; Self::N] as Deserialize>::stream_deserialize(reader);\n str::<Self::N>::from(u8_arr)\n }\n}\n\nimpl<let M: u32> Serialize for str<M> {\n let N: u32 = M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.as_bytes().stream_serialize(writer);\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Deserialize for BoundedVec<T, M>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut new_bounded_vec: BoundedVec<T, M> = BoundedVec::new();\n let payload_len = Self::N - 1;\n\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n let len = reader.peek_offset(payload_len) as u32;\n\n for i in 0..M {\n if i < len {\n new_bounded_vec.push(<T as Deserialize>::stream_deserialize(reader));\n }\n }\n\n // +1 for the length of the BoundedVec\n reader.advance_offset((M - len) * <T as Deserialize>::N + 1);\n\n new_bounded_vec\n }\n}\n\n// This may cause issues if used as program input, because noir disallows empty arrays for program input.\n// I think this is okay because I don't foresee a unit type being used as input. But leaving this comment as a hint\n// if someone does run into this in the future.\nimpl Deserialize for () {\n let N: u32 = 0;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(_reader: &mut Reader<K>) -> Self {\n ()\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Serialize for BoundedVec<T, M>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M + 1; // +1 for the length of the BoundedVec\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.storage().stream_serialize(writer);\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n writer.write_u32(self.len() as u32);\n }\n}\n\n// Create a slice of the given length with each element made from `f(i)` where `i` is the current index\ncomptime fn make_slice<Env, T>(length: u32, f: fn[Env](u32) -> T) -> [T] {\n let mut slice = @[];\n for i in 0..length {\n slice = slice.push_back(f(i));\n }\n slice\n}\n\n// Implements Serialize and Deserialize for an arbitrary tuple type\ncomptime fn impl_serialize_for_tuple(_m: Module, length: u32) -> Quoted {\n // `T0`, `T1`, `T2`\n let type_names = make_slice(length, |i| f\"T{i}\".quoted_contents());\n\n // `result0`, `result1`, `result2`\n let result_names = make_slice(length, |i| f\"result{i}\".quoted_contents());\n\n // `T0, T1, T2`\n let field_generics = type_names.join(quote [,]);\n\n // `<T0 as Serialize>::N + <T1 as Serialize>::N + <T2 as Serialize>::N`\n let full_size_serialize = type_names\n .map(|type_name| quote {\n <$type_name as Serialize>::N\n })\n .join(quote [+]);\n\n // `<T0 as Deserialize>::N + <T1 as Deserialize>::N + <T2 as Deserialize>::N`\n let full_size_deserialize = type_names\n .map(|type_name| quote {\n <$type_name as Deserialize>::N\n })\n .join(quote [+]);\n\n // `T0: Serialize, T1: Serialize, T2: Serialize,`\n let serialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Serialize,\n })\n .join(quote []);\n\n // `T0: Deserialize, T1: Deserialize, T2: Deserialize,`\n let deserialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Deserialize,\n })\n .join(quote []);\n\n // Statements to serialize each field\n let serialized_fields = type_names\n .mapi(|i, _type_name| quote {\n $crate::serialization::Serialize::stream_serialize(self.$i, writer);\n })\n .join(quote []);\n\n // Statements to deserialize each field\n let deserialized_fields = type_names\n .mapi(|i, type_name| {\n let result_name = result_names[i];\n quote {\n let $result_name = <$type_name as $crate::serialization::Deserialize>::stream_deserialize(reader);\n }\n })\n .join(quote []);\n let deserialize_results = result_names.join(quote [,]);\n\n quote {\n impl<$field_generics> Serialize for ($field_generics) where $serialize_constraints {\n let N: u32 = $full_size_serialize;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n\n $serialized_fields\n }\n }\n\n impl<$field_generics> Deserialize for ($field_generics) where $deserialize_constraints {\n let N: u32 = $full_size_deserialize;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = $crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n \n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n $deserialized_fields\n ($deserialize_results)\n }\n }\n }\n}\n\n// Keeping these manual impls. They are more efficient since they do not\n// require copying sub-arrays from any serialized arrays.\nimpl<T1> Serialize for (T1,)\nwhere\n T1: Serialize,\n{\n let N: u32 = <T1 as Serialize>::N;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: crate::writer::Writer<Self::N> = crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.0.stream_serialize(writer);\n }\n}\n\nimpl<T1> Deserialize for (T1,)\nwhere\n T1: Deserialize,\n{\n let N: u32 = <T1 as Deserialize>::N;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n (<T1 as Deserialize>::stream_deserialize(reader),)\n }\n}\n\n#[impl_serialize_for_tuple(2)]\n#[impl_serialize_for_tuple(3)]\n#[impl_serialize_for_tuple(4)]\n#[impl_serialize_for_tuple(5)]\n#[impl_serialize_for_tuple(6)]\nmod impls {\n use crate::serialization::{Deserialize, Serialize};\n}\n"
|
|
4259
|
+
"source": "use crate::{reader::Reader, serialization::{Deserialize, Serialize}, writer::Writer};\nuse std::embedded_curve_ops::EmbeddedCurvePoint;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\nglobal U1_SERIALIZED_LEN: u32 = 1;\nglobal BOOL_SERIALIZED_LEN: u32 = 1;\nglobal U8_SERIALIZED_LEN: u32 = 1;\nglobal U16_SERIALIZED_LEN: u32 = 1;\nglobal U32_SERIALIZED_LEN: u32 = 1;\nglobal U64_SERIALIZED_LEN: u32 = 1;\nglobal U128_SERIALIZED_LEN: u32 = 1;\nglobal FIELD_SERIALIZED_LEN: u32 = 1;\nglobal I8_SERIALIZED_LEN: u32 = 1;\nglobal I16_SERIALIZED_LEN: u32 = 1;\nglobal I32_SERIALIZED_LEN: u32 = 1;\nglobal I64_SERIALIZED_LEN: u32 = 1;\n\nimpl Serialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> bool {\n reader.read() != 0\n }\n}\n\nimpl Serialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u1\n }\n}\n\nimpl Serialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8\n }\n}\n\nimpl Serialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16\n }\n}\n\nimpl Serialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32\n }\n}\n\nimpl Serialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64\n }\n}\n\nimpl Serialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u128\n }\n}\n\nimpl Serialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self);\n }\n}\n\nimpl Deserialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read()\n }\n}\n\nimpl Serialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u8 as Field);\n }\n}\n\nimpl Deserialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8 as i8\n }\n}\n\nimpl Serialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u16 as Field);\n }\n}\n\nimpl Deserialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16 as i16\n }\n}\n\nimpl Serialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u32 as Field);\n }\n}\n\nimpl Deserialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32 as i32\n }\n}\n\nimpl Serialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u64 as Field);\n }\n}\n\nimpl Deserialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64 as i64\n }\n}\n\nimpl<T, let M: u32> Serialize for [T; M]\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n for i in 0..M {\n self[i].stream_serialize(writer);\n }\n }\n}\n\nimpl<T, let M: u32> Deserialize for [T; M]\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut result: [T; M] = std::mem::zeroed();\n for i in 0..M {\n result[i] = T::stream_deserialize(reader);\n }\n result\n }\n}\n\nimpl<T> Serialize for Option<T>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N + 1;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write_bool(self.is_some());\n if self.is_some() {\n self.unwrap_unchecked().stream_serialize(writer);\n } else {\n writer.advance_offset(<T as Serialize>::N);\n }\n }\n}\n\nimpl<T> Deserialize for Option<T>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n if reader.read_bool() {\n Option::some(<T as Deserialize>::stream_deserialize(reader))\n } else {\n reader.advance_offset(<T as Deserialize>::N);\n Option::none()\n }\n }\n}\n\nglobal SCALAR_SIZE: u32 = 2;\n\nimpl Serialize for EmbeddedCurveScalar {\n\n let N: u32 = SCALAR_SIZE;\n\n fn serialize(self) -> [Field; SCALAR_SIZE] {\n [self.lo, self.hi]\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.lo);\n writer.write(self.hi);\n }\n}\n\nimpl Deserialize for EmbeddedCurveScalar {\n let N: u32 = SCALAR_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { lo: fields[0], hi: fields[1] }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { lo: reader.read(), hi: reader.read() }\n }\n}\n\nglobal POINT_SIZE: u32 = 3;\n\nimpl Serialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn serialize(self) -> [Field; Self::N] {\n [self.x, self.y, self.is_infinite as Field]\n }\n\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.x);\n writer.write(self.y);\n writer.write(self.is_infinite as Field);\n }\n}\n\nimpl Deserialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { x: fields[0], y: fields[1], is_infinite: fields[2] != 0 }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { x: reader.read(), y: reader.read(), is_infinite: reader.read_bool() }\n }\n}\n\nimpl<let M: u32> Deserialize for str<M> {\n let N: u32 = M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let u8_arr = <[u8; Self::N] as Deserialize>::stream_deserialize(reader);\n str::<Self::N>::from(u8_arr)\n }\n}\n\nimpl<let M: u32> Serialize for str<M> {\n let N: u32 = M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.as_bytes().stream_serialize(writer);\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Deserialize for BoundedVec<T, M>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut new_bounded_vec: BoundedVec<T, M> = BoundedVec::new();\n let payload_len = Self::N - 1;\n\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n let len = reader.peek_offset(payload_len) as u32;\n\n for i in 0..M {\n if i < len {\n new_bounded_vec.push(<T as Deserialize>::stream_deserialize(reader));\n }\n }\n\n // +1 for the length of the BoundedVec\n reader.advance_offset((M - len) * <T as Deserialize>::N + 1);\n\n new_bounded_vec\n }\n}\n\n// This may cause issues if used as program input, because noir disallows empty arrays for program input.\n// I think this is okay because I don't foresee a unit type being used as input. But leaving this comment as a hint\n// if someone does run into this in the future.\nimpl Deserialize for () {\n let N: u32 = 0;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(_reader: &mut Reader<K>) -> Self {\n ()\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Serialize for BoundedVec<T, M>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M + 1; // +1 for the length of the BoundedVec\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.storage().stream_serialize(writer);\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n writer.write_u32(self.len() as u32);\n }\n}\n\n// Create a slice of the given length with each element made from `f(i)` where `i` is the current index\ncomptime fn make_slice<Env, T>(length: u32, f: fn[Env](u32) -> T) -> [T] {\n let mut slice = @[];\n for i in 0..length {\n slice = slice.push_back(f(i));\n }\n slice\n}\n\n// Implements Serialize and Deserialize for an arbitrary tuple type\ncomptime fn impl_serialize_for_tuple(_m: Module, length: u32) -> Quoted {\n // `T0`, `T1`, `T2`\n let type_names = make_slice(length, |i| f\"T{i}\".quoted_contents());\n\n // `result0`, `result1`, `result2`\n let result_names = make_slice(length, |i| f\"result{i}\".quoted_contents());\n\n // `T0, T1, T2`\n let field_generics = type_names.join(quote [,]);\n\n // `<T0 as Serialize>::N + <T1 as Serialize>::N + <T2 as Serialize>::N`\n let full_size_serialize = type_names\n .map(|type_name| quote {\n <$type_name as Serialize>::N\n })\n .join(quote [+]);\n\n // `<T0 as Deserialize>::N + <T1 as Deserialize>::N + <T2 as Deserialize>::N`\n let full_size_deserialize = type_names\n .map(|type_name| quote {\n <$type_name as Deserialize>::N\n })\n .join(quote [+]);\n\n // `T0: Serialize, T1: Serialize, T2: Serialize,`\n let serialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Serialize,\n })\n .join(quote []);\n\n // `T0: Deserialize, T1: Deserialize, T2: Deserialize,`\n let deserialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Deserialize,\n })\n .join(quote []);\n\n // Statements to serialize each field\n let serialized_fields = type_names\n .mapi(|i, _type_name| quote {\n $crate::serialization::Serialize::stream_serialize(self.$i, writer);\n })\n .join(quote []);\n\n // Statements to deserialize each field\n let deserialized_fields = type_names\n .mapi(|i, type_name| {\n let result_name = result_names[i];\n quote {\n let $result_name = <$type_name as $crate::serialization::Deserialize>::stream_deserialize(reader);\n }\n })\n .join(quote []);\n let deserialize_results = result_names.join(quote [,]);\n\n quote {\n impl<$field_generics> Serialize for ($field_generics) where $serialize_constraints {\n let N: u32 = $full_size_serialize;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n\n $serialized_fields\n }\n }\n\n impl<$field_generics> Deserialize for ($field_generics) where $deserialize_constraints {\n let N: u32 = $full_size_deserialize;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = $crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n \n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n $deserialized_fields\n ($deserialize_results)\n }\n }\n }\n}\n\n// Keeping these manual impls. They are more efficient since they do not\n// require copying sub-arrays from any serialized arrays.\nimpl<T1> Serialize for (T1,)\nwhere\n T1: Serialize,\n{\n let N: u32 = <T1 as Serialize>::N;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: crate::writer::Writer<Self::N> = crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.0.stream_serialize(writer);\n }\n}\n\nimpl<T1> Deserialize for (T1,)\nwhere\n T1: Deserialize,\n{\n let N: u32 = <T1 as Deserialize>::N;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n (<T1 as Deserialize>::stream_deserialize(reader),)\n }\n}\n\n#[impl_serialize_for_tuple(2)]\n#[impl_serialize_for_tuple(3)]\n#[impl_serialize_for_tuple(4)]\n#[impl_serialize_for_tuple(5)]\n#[impl_serialize_for_tuple(6)]\nmod impls {\n use crate::serialization::{Deserialize, Serialize};\n}\n"
|
|
4260
4260
|
},
|
|
4261
|
-
"
|
|
4261
|
+
"460": {
|
|
4262
4262
|
"path": "/home/aztec-dev/nargo/github.com/noir-lang/sha256/v0.3.0/src/sha256.nr",
|
|
4263
4263
|
"source": "use std::hash::sha256_compression;\nuse std::runtime::is_unconstrained;\n\nuse constants::{\n BLOCK_BYTE_PTR, BLOCK_SIZE, HASH, INITIAL_STATE, INT_BLOCK_SIZE, INT_SIZE, INT_SIZE_PTR,\n MSG_BLOCK, MSG_SIZE_PTR, STATE, TWO_POW_16, TWO_POW_24, TWO_POW_32, TWO_POW_8,\n};\n\npub(crate) mod constants;\nmod tests;\nmod oracle_tests;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> HASH\n// docs:end:sha256\n{\n digest(input)\n}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> HASH {\n sha256_var(msg, N)\n}\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u32) -> HASH {\n assert(message_size <= N);\n\n let (h, msg_block) = process_full_blocks(msg, message_size, INITIAL_STATE);\n\n finalize_sha256_blocks(message_size, h, msg_block)\n}\n\n/// Returns the first partially filled message block along with the internal state prior to its compression.\npub(crate) fn process_full_blocks<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n initial_state: STATE,\n) -> (STATE, MSG_BLOCK) {\n if std::runtime::is_unconstrained() {\n let num_full_blocks = message_size / BLOCK_SIZE;\n // Intermediate hash, starting with the canonical initial value\n let mut h: STATE = initial_state;\n // Pointer into msg_block on a 64 byte scale\n for i in 0..num_full_blocks {\n let msg_block = build_msg_block(msg, message_size, BLOCK_SIZE * i);\n h = sha256_compression(msg_block, h);\n }\n\n // We now build the final un-filled block.\n let msg_byte_ptr = message_size % BLOCK_SIZE;\n let msg_block: MSG_BLOCK = if msg_byte_ptr != 0 {\n let num_full_blocks = message_size / BLOCK_SIZE;\n let msg_start = BLOCK_SIZE * num_full_blocks;\n build_msg_block(msg, message_size, msg_start)\n } else {\n // If the message size is a multiple of the block size (i.e. `msg_byte_ptr == 0`) then this block will be empty,\n // so we short-circuit in this case.\n [0; 16]\n };\n\n (h, msg_block)\n } else {\n let num_blocks = N / BLOCK_SIZE;\n\n // We store the intermediate hash states and message blocks in these two arrays which allows us to select the correct state\n // for the given message size with a lookup.\n //\n // These can be reasoned about as followed:\n // Consider a message with an unknown number of bytes, `msg_size. It can be seen that this will have `msg_size / BLOCK_SIZE` full blocks.\n // - `states[i]` should then be the state after processing the first `i` blocks.\n // - `blocks[i]` should then be the next message block after processing the first `i` blocks.\n // blocks[first_partially_filled_block_index] is the last block that is partially filled or all 0 if the message is a multiple of the block size.\n //\n // In other words:\n //\n // blocks = [block 1, block 2, ..., block N / BLOCK_SIZE, block N / BLOCK_SIZE + 1]\n // states = [INITIAL_STATE, state after block 1, state after block 2, ..., state after block N / BLOCK_SIZE]\n //\n // We place the initial state in `states[0]` as in the case where the `message_size < BLOCK_SIZE` then there are no full blocks to process and no compressions should occur.\n let mut blocks: [MSG_BLOCK; N / BLOCK_SIZE + 1] = std::mem::zeroed();\n let mut states: [STATE; N / BLOCK_SIZE + 1] = [initial_state; N / BLOCK_SIZE + 1];\n\n // Optimization for small messages. If the largest possible message is smaller than a block then we know that the first block is partially filled\n // no matter the value of `message_size`.\n //\n // Note that the condition `N >= BLOCK_SIZE` is known during monomorphization so this has no runtime cost.\n let first_partially_filled_block_index = if N >= BLOCK_SIZE {\n message_size / BLOCK_SIZE\n } else {\n 0\n };\n\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let new_msg_block = build_msg_block(msg, message_size, msg_start);\n\n blocks[i] = new_msg_block;\n states[i + 1] = sha256_compression(new_msg_block, states[i]);\n }\n // If message_size/BLOCK_SIZE == N/BLOCK_SIZE, and there is a remainder, we need to process the last block.\n if N % BLOCK_SIZE != 0 {\n let new_msg_block = build_msg_block(msg, message_size, BLOCK_SIZE * num_blocks);\n\n blocks[num_blocks] = new_msg_block;\n }\n\n (states[first_partially_filled_block_index], blocks[first_partially_filled_block_index])\n }\n}\n\n// Take `BLOCK_SIZE` number of bytes from `msg` starting at `msg_start` and pack them into a `MSG_BLOCK`.\npub(crate) unconstrained fn build_msg_block_helper<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_start: u32,\n) -> MSG_BLOCK {\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else if message_size < msg_start + BLOCK_SIZE {\n message_size - msg_start\n } else {\n BLOCK_SIZE\n };\n\n // Figure out the number of items in the int array that we have to pack.\n // e.g. if the input is [0,1,2,3,4,5] then we need to pack it as 2 items: [0123, 4500]\n let int_input = (block_input + INT_SIZE - 1) / INT_SIZE;\n\n for i in 0..int_input {\n let mut msg_item: u32 = 0;\n // Always construct the integer as 4 bytes, even if it means going beyond the input.\n for j in 0..INT_SIZE {\n let k = i * INT_SIZE + j;\n let msg_byte = if k < block_input {\n msg[msg_start + k]\n } else {\n 0\n };\n msg_item = (msg_item << 8) + msg_byte as u32;\n }\n msg_block[i] = msg_item;\n }\n\n // Returning the index as if it was a 64 byte array.\n // We have to project it down to 16 items and bit shifting to get a byte back if we need it.\n msg_block\n}\n\n// Build a message block from the input message starting at `msg_start`.\n//\n// If `message_size` is less than `msg_start` then this is called with the old non-empty block;\n// in that case we can skip verification, ie. no need to check that everything is zero.\nfn build_msg_block<let N: u32>(msg: [u8; N], message_size: u32, msg_start: u32) -> MSG_BLOCK {\n let msg_block =\n // Safety: We constrain the block below by reconstructing each `u32` word from the input bytes.\n unsafe { build_msg_block_helper(msg, message_size, msg_start) };\n\n if !is_unconstrained() {\n let mut msg_end = msg_start + BLOCK_SIZE;\n\n let max_read_index = std::cmp::min(message_size, msg_end);\n\n // Reconstructed packed item\n let mut msg_item: Field = 0;\n\n // Inclusive at the end so that we can compare the last item.\n for k in msg_start..=msg_end {\n if (k != msg_start) & (k % INT_SIZE == 0) {\n // If we consumed some input we can compare against the block.\n let msg_block_index = (k - msg_start) / INT_SIZE - 1;\n assert_eq(msg_block[msg_block_index] as Field, msg_item);\n\n msg_item = 0;\n }\n\n // If we have input to consume, add it at the rightmost position.\n let msg_byte = if k < max_read_index { msg[k] } else { 0 };\n msg_item = msg_item * (TWO_POW_8 as Field) + msg_byte as Field;\n }\n }\n msg_block\n}\n\n// Encode `8 * message_size` into two `u32` limbs.\nunconstrained fn encode_len(message_size: u32) -> (u32, u32) {\n let len = 8 * message_size as u64;\n let lo = len & 0xFFFFFFFF;\n let hi = (len >> 32) & 0xFFFFFFFF;\n (lo as u32, hi as u32)\n}\n\n// Write the length into the last 8 bytes of the block.\nfn attach_len_to_msg_block(mut msg_block: MSG_BLOCK, message_size: u32) -> MSG_BLOCK {\n // Safety: We assert the correctness of the decomposition below.\n // 2 `u32` limbs cannot overflow the field modulus so performing the check as `Field`s is safe.\n let (lo, hi) = unsafe { encode_len(message_size) };\n assert_eq(8 * (message_size as Field), lo as Field + hi as Field * TWO_POW_32);\n\n msg_block[INT_SIZE_PTR] = hi;\n msg_block[INT_SIZE_PTR + 1] = lo;\n msg_block\n}\n\n// Perform the final compression, then transform the `STATE` into `HASH`.\nfn hash_final_block(msg_block: MSG_BLOCK, mut state: STATE) -> HASH {\n // Hash final padded block\n state = sha256_compression(msg_block, state);\n\n // Return final hash as byte array\n let mut out_h: HASH = [0; 32]; // Digest as sequence of bytes\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[j] as Field).to_be_bytes();\n for k in 0..4 {\n out_h[4 * j + k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\n/// Lookup table for the position of the padding bit within one of the `u32` words in the final message block.\nglobal PADDING_BIT_TABLE: [u32; 4] =\n [(1 << 7) * TWO_POW_24, (1 << 7) * TWO_POW_16, (1 << 7) * TWO_POW_8, (1 << 7)];\n\n/// Add 1 bit padding to end of message and compress the block if there's not enough room for the 8-byte length.\n/// Returns the updated hash state and message block that will be used to write the message size.\n///\n/// # Assumptions:\n///\n/// - `msg_block[i] == 0` for all `i > msg_byte_ptr / INT_SIZE`\n/// - `msg_block[msg_byte_ptr / INT_SIZE] & ((1 << 7) * (msg_byte_ptr % INT_SIZE)) == 0`\nfn add_padding_byte_and_compress_if_needed(\n mut msg_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n h: STATE,\n) -> (STATE, MSG_BLOCK) {\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n // Here we rely on the fact that everything beyond the available input is set to 0.\n let index = msg_byte_ptr / INT_SIZE;\n\n // Lookup the position of the padding bit and insert it into the message block.\n msg_block[index] += PADDING_BIT_TABLE[msg_byte_ptr % INT_SIZE];\n\n // If we don't have room to write the size, compress the block and reset it.\n if msg_byte_ptr >= MSG_SIZE_PTR {\n let h = sha256_compression(msg_block, h);\n\n // In this case, the final block consists of all zeros with the last 8 bytes containing the length.\n // We set msg_block to all zeros and attach_len_to_msg_block will add the length to the last 8 bytes.\n let msg_block = [0; INT_BLOCK_SIZE];\n (h, msg_block)\n } else {\n (h, msg_block)\n }\n}\n\npub(crate) fn finalize_sha256_blocks(\n message_size: u32,\n mut h: STATE,\n mut msg_block: MSG_BLOCK,\n) -> HASH {\n let msg_byte_ptr = message_size % BLOCK_SIZE;\n\n let (h, mut msg_block) = add_padding_byte_and_compress_if_needed(msg_block, msg_byte_ptr, h);\n\n msg_block = attach_len_to_msg_block(msg_block, message_size);\n\n hash_final_block(msg_block, h)\n}\n\n/**\n * Given some state of a partially computed sha256 hash and part of the preimage, continue hashing\n * @notice used for complex/ recursive offloading of post-partial hashing\n *\n * @param N - the maximum length of the message to hash\n * @param h - the intermediate hash state\n * @param msg - the preimage to hash\n * @param message_size - the actual length of the preimage to hash\n * @return the intermediate hash state after compressing in msg to h\n */\npub fn partial_sha256_var_interstitial<let N: u32>(\n mut h: [u32; 8],\n msg: [u8; N],\n message_size: u32,\n) -> [u32; 8] {\n assert(message_size % BLOCK_SIZE == 0, \"Message size must be a multiple of the block size\");\n if std::runtime::is_unconstrained() {\n // Safety: running as an unconstrained function\n unsafe {\n __sha_partial_var_interstitial(h, msg, message_size)\n }\n } else {\n let (h, _) = process_full_blocks(msg, message_size, h);\n\n h\n }\n}\n\n/**\n * Given some state of a partially computed sha256 hash and remaining preimage, complete the hash\n * @notice used for traditional partial hashing\n *\n * @param N - the maximum length of the message to hash\n * @param h - the intermediate hash state\n * @param msg - the remaining preimage to hash\n * @param message_size - the size of the current chunk\n * @param real_message_size - the total size of the original preimage\n * @return finalized sha256 hash\n */\npub fn partial_sha256_var_end<let N: u32>(\n mut h: [u32; 8],\n msg: [u8; N],\n message_size: u32,\n real_message_size: u32,\n) -> [u8; 32] {\n assert(message_size % BLOCK_SIZE == 0, \"Message size must be a multiple of the block size\");\n if std::runtime::is_unconstrained() {\n // Safety: running as an unconstrained function\n unsafe {\n h = __sha_partial_var_interstitial(h, msg, message_size);\n\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n\n finalize_last_sha256_block(h, real_message_size, msg)\n }\n } else {\n let (h, msg_block) = process_full_blocks(msg, message_size, h);\n finalize_sha256_blocks(real_message_size, h, msg_block)\n }\n}\n\nunconstrained fn __sha_partial_var_interstitial<let N: u32>(\n mut h: [u32; 8],\n msg: [u8; N],\n message_size: u32,\n) -> [u32; 8] {\n let num_full_blocks = message_size / BLOCK_SIZE;\n // Intermediate hash, starting with the canonical initial value\n // Pointer into msg_block on a 64 byte scale\n for i in 0..num_full_blocks {\n let msg_block = build_msg_block(msg, message_size, BLOCK_SIZE * i);\n h = sha256_compression(msg_block, h);\n }\n h\n}\n\n// Helper function to finalize the message block with padding and length\nunconstrained fn finalize_last_sha256_block<let N: u32>(\n mut h: STATE,\n message_size: u32,\n msg: [u8; N],\n) -> HASH {\n let msg_byte_ptr = message_size % BLOCK_SIZE;\n\n // We now build the final un-filled block.\n let msg_block: MSG_BLOCK = if msg_byte_ptr != 0 {\n let num_full_blocks = message_size / BLOCK_SIZE;\n let msg_start = BLOCK_SIZE * num_full_blocks;\n build_msg_block(msg, message_size, msg_start)\n } else {\n // If the message size is a multiple of the block size (i.e. `msg_byte_ptr == 0`) then this block will be empty,\n // so we short-circuit in this case.\n [0; 16]\n };\n\n // Once built, we need to add the necessary padding bytes and encoded length\n let (h, mut msg_block) = add_padding_byte_and_compress_if_needed(msg_block, msg_byte_ptr, h);\n msg_block = attach_len_to_msg_block(msg_block, message_size);\n\n hash_final_block(msg_block, h)\n}\n\nmod test_process_full_blocks {\n\n /// Wrapper to force an unconstrained runtime on process_full_blocks.\n unconstrained fn unconstrained_process_full_blocks<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n h: super::STATE,\n ) -> (super::STATE, super::MSG_BLOCK) {\n super::process_full_blocks(msg, message_size, h)\n }\n\n #[test]\n fn test_implementations_agree(msg: [u8; 100], message_size: u32) {\n let message_size = message_size % 100;\n // Safety: test function\n let unconstrained_state =\n unsafe { unconstrained_process_full_blocks(msg, message_size, super::INITIAL_STATE) };\n let state = super::process_full_blocks(msg, message_size, super::INITIAL_STATE);\n assert_eq(state, unconstrained_state);\n }\n}\n\nmod test_sha256_var {\n\n /// Wrapper to force an unconstrained runtime on sha256.\n unconstrained fn unconstrained_sha256<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n ) -> super::HASH {\n super::sha256_var(msg, message_size)\n }\n\n #[test]\n fn test_implementations_agree(msg: [u8; 100], message_size: u32) {\n let message_size = message_size % 100;\n // Safety: test function\n let unconstrained_sha = unsafe { unconstrained_sha256(msg, message_size) };\n let sha = super::sha256_var(msg, message_size);\n assert_eq(sha, unconstrained_sha);\n }\n\n}\n"
|
|
4264
4264
|
},
|