github.com/consensys/gnark-crypto@v0.14.0/ecc/bw6-633/fp/element_exp.go (about) 1 // Copyright 2020 ConsenSys Software Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Code generated by consensys/gnark-crypto DO NOT EDIT 16 17 package fp 18 19 // expBySqrtExp is equivalent to z.Exp(x, 24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d37a6228fee79ae922dd48ae0001) 20 // 21 // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain 22 func (z *Element) expBySqrtExp(x Element) *Element { 23 // addition chain: 24 // 25 // _10 = 2*1 26 // _11 = 1 + _10 27 // _101 = _10 + _11 28 // _111 = _10 + _101 29 // _1001 = _10 + _111 30 // _1011 = _10 + _1001 31 // _1101 = _10 + _1011 32 // _1111 = _10 + _1101 33 // _10001 = _10 + _1111 34 // _10011 = _10 + _10001 35 // _10101 = _10 + _10011 36 // _10111 = _10 + _10101 37 // _11001 = _10 + _10111 38 // _11011 = _10 + _11001 39 // _11101 = _10 + _11011 40 // _11111 = _10 + _11101 41 // _111110 = 2*_11111 42 // _111111 = 1 + _111110 43 // _1111110 = 2*_111111 44 // _1111111 = 1 + _1111110 45 // _10010000 = _10001 + _1111111 46 // i36 = ((_10010000 << 3 + _11001) << 5 + _10001) << 5 47 // i45 = 2*((_10011 + i36) << 5 + _11001) + 1 48 // i69 = ((i45 << 10 + _1111) << 6 + _1101) << 6 49 // i85 = ((_11111 + i69) << 3 + _11) << 10 + _1111111 50 // i106 = ((2*i85 + 1) << 9 + _1101) << 9 51 // i117 = ((_10111 + i106) << 6 + _10011) << 2 + _11 52 // i142 = ((i117 << 12 + _11101) << 4 + _111) << 7 53 // i155 = ((_10101 + i142) << 5 + _1011) << 5 + _1011 54 // i177 = ((i155 << 4 + _101) << 9 + _111111) << 7 55 // i193 = ((_11011 + i177) << 5 + _11) << 8 + _11101 56 // i213 = ((i193 << 6 + _11101) << 5 + _1111) << 7 57 // i230 = ((_11101 + i213) << 6 + _1011) << 8 + _11101 58 // i250 = ((i230 << 5 + _111) << 6 + _1011) << 7 59 // i264 = ((_10111 + i250) << 5 + _1101) << 6 + _1101 60 // i284 = ((i264 << 6 + _11011) << 7 + _11011) << 5 61 // i297 = ((_10111 + i284) << 4 + _1011) << 6 + _10001 62 // i323 = ((i297 << 6 + _11111) << 11 + _10101) << 7 63 // i344 = ((_10101 + i323) << 7 + _11011) << 11 + _11111 64 // i360 = ((i344 << 5 + _1011) << 5 + _1111) << 4 65 // i372 = ((_101 + i360) << 6 + _1001) << 3 + 1 66 // i395 = ((i372 << 9 + _10111) << 8 + _11011) << 4 67 // i411 = ((_101 + i395) << 7 + _11111) << 6 + _10111 68 // i433 = ((i411 << 3 + _101) << 11 + _111111) << 6 69 // i447 = ((_10101 + i433) << 4 + _1111) << 7 + _1001 70 // i469 = ((i447 << 3 + 1) << 7 + _111111) << 10 71 // i483 = ((_11101 + i469) << 4 + 1) << 7 + _101 72 // i503 = ((i483 << 9 + _11101) << 4 + _1011) << 5 73 // i514 = ((_1111 + i503) << 5 + _1101) << 3 + 1 74 // i538 = ((i514 << 12 + _11111) << 6 + _10111) << 4 75 // i552 = ((_1011 + i538) << 6 + _10111) << 5 + _111 76 // i568 = ((i552 << 6 + _1111) << 6 + _10101) << 2 77 // i584 = ((_11 + i568) << 8 + _111) << 5 + _111 78 // i606 = ((i584 << 9 + _10001) << 5 + _101) << 6 79 // i620 = ((_1111 + i606) << 6 + _10011) << 5 + _1101 80 // i637 = ((i620 << 7 + _11011) << 4 + _1101) << 4 81 // i650 = ((_11 + i637) << 8 + _10001) << 2 + 1 82 // i672 = ((i650 << 10 + _1111111) << 4 + _111) << 6 83 // i687 = ((_1111 + i672) << 6 + _1101) << 6 + _11101 84 // i708 = ((i687 << 6 + _1001) << 7 + _1011) << 6 85 // i724 = ((_11101 + i708) << 5 + _1001) << 8 + _10101 86 // return (i724 << 2 + _11) << 17 + 1 87 // 88 // Operations: 625 squares 120 multiplies 89 90 // Allocate Temporaries. 91 var ( 92 t0 = new(Element) 93 t1 = new(Element) 94 t2 = new(Element) 95 t3 = new(Element) 96 t4 = new(Element) 97 t5 = new(Element) 98 t6 = new(Element) 99 t7 = new(Element) 100 t8 = new(Element) 101 t9 = new(Element) 102 t10 = new(Element) 103 t11 = new(Element) 104 t12 = new(Element) 105 t13 = new(Element) 106 t14 = new(Element) 107 t15 = new(Element) 108 t16 = new(Element) 109 ) 110 111 // var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16 Element 112 // Step 1: t7 = x^0x2 113 t7.Square(&x) 114 115 // Step 2: z = x^0x3 116 z.Mul(&x, t7) 117 118 // Step 3: t11 = x^0x5 119 t11.Mul(t7, z) 120 121 // Step 4: t6 = x^0x7 122 t6.Mul(t7, t11) 123 124 // Step 5: t1 = x^0x9 125 t1.Mul(t7, t6) 126 127 // Step 6: t3 = x^0xb 128 t3.Mul(t7, t1) 129 130 // Step 7: t4 = x^0xd 131 t4.Mul(t7, t3) 132 133 // Step 8: t5 = x^0xf 134 t5.Mul(t7, t4) 135 136 // Step 9: t8 = x^0x11 137 t8.Mul(t7, t5) 138 139 // Step 10: t10 = x^0x13 140 t10.Mul(t7, t8) 141 142 // Step 11: t0 = x^0x15 143 t0.Mul(t7, t10) 144 145 // Step 12: t12 = x^0x17 146 t12.Mul(t7, t0) 147 148 // Step 13: t15 = x^0x19 149 t15.Mul(t7, t12) 150 151 // Step 14: t9 = x^0x1b 152 t9.Mul(t7, t15) 153 154 // Step 15: t2 = x^0x1d 155 t2.Mul(t7, t9) 156 157 // Step 16: t13 = x^0x1f 158 t13.Mul(t7, t2) 159 160 // Step 17: t7 = x^0x3e 161 t7.Square(t13) 162 163 // Step 18: t14 = x^0x3f 164 t14.Mul(&x, t7) 165 166 // Step 19: t7 = x^0x7e 167 t7.Square(t14) 168 169 // Step 20: t7 = x^0x7f 170 t7.Mul(&x, t7) 171 172 // Step 21: t16 = x^0x90 173 t16.Mul(t8, t7) 174 175 // Step 24: t16 = x^0x480 176 for s := 0; s < 3; s++ { 177 t16.Square(t16) 178 } 179 180 // Step 25: t16 = x^0x499 181 t16.Mul(t15, t16) 182 183 // Step 30: t16 = x^0x9320 184 for s := 0; s < 5; s++ { 185 t16.Square(t16) 186 } 187 188 // Step 31: t16 = x^0x9331 189 t16.Mul(t8, t16) 190 191 // Step 36: t16 = x^0x126620 192 for s := 0; s < 5; s++ { 193 t16.Square(t16) 194 } 195 196 // Step 37: t16 = x^0x126633 197 t16.Mul(t10, t16) 198 199 // Step 42: t16 = x^0x24cc660 200 for s := 0; s < 5; s++ { 201 t16.Square(t16) 202 } 203 204 // Step 43: t15 = x^0x24cc679 205 t15.Mul(t15, t16) 206 207 // Step 44: t15 = x^0x4998cf2 208 t15.Square(t15) 209 210 // Step 45: t15 = x^0x4998cf3 211 t15.Mul(&x, t15) 212 213 // Step 55: t15 = x^0x126633cc00 214 for s := 0; s < 10; s++ { 215 t15.Square(t15) 216 } 217 218 // Step 56: t15 = x^0x126633cc0f 219 t15.Mul(t5, t15) 220 221 // Step 62: t15 = x^0x4998cf303c0 222 for s := 0; s < 6; s++ { 223 t15.Square(t15) 224 } 225 226 // Step 63: t15 = x^0x4998cf303cd 227 t15.Mul(t4, t15) 228 229 // Step 69: t15 = x^0x126633cc0f340 230 for s := 0; s < 6; s++ { 231 t15.Square(t15) 232 } 233 234 // Step 70: t15 = x^0x126633cc0f35f 235 t15.Mul(t13, t15) 236 237 // Step 73: t15 = x^0x93319e6079af8 238 for s := 0; s < 3; s++ { 239 t15.Square(t15) 240 } 241 242 // Step 74: t15 = x^0x93319e6079afb 243 t15.Mul(z, t15) 244 245 // Step 84: t15 = x^0x24cc67981e6bec00 246 for s := 0; s < 10; s++ { 247 t15.Square(t15) 248 } 249 250 // Step 85: t15 = x^0x24cc67981e6bec7f 251 t15.Mul(t7, t15) 252 253 // Step 86: t15 = x^0x4998cf303cd7d8fe 254 t15.Square(t15) 255 256 // Step 87: t15 = x^0x4998cf303cd7d8ff 257 t15.Mul(&x, t15) 258 259 // Step 96: t15 = x^0x93319e6079afb1fe00 260 for s := 0; s < 9; s++ { 261 t15.Square(t15) 262 } 263 264 // Step 97: t15 = x^0x93319e6079afb1fe0d 265 t15.Mul(t4, t15) 266 267 // Step 106: t15 = x^0x126633cc0f35f63fc1a00 268 for s := 0; s < 9; s++ { 269 t15.Square(t15) 270 } 271 272 // Step 107: t15 = x^0x126633cc0f35f63fc1a17 273 t15.Mul(t12, t15) 274 275 // Step 113: t15 = x^0x4998cf303cd7d8ff0685c0 276 for s := 0; s < 6; s++ { 277 t15.Square(t15) 278 } 279 280 // Step 114: t15 = x^0x4998cf303cd7d8ff0685d3 281 t15.Mul(t10, t15) 282 283 // Step 116: t15 = x^0x126633cc0f35f63fc1a174c 284 for s := 0; s < 2; s++ { 285 t15.Square(t15) 286 } 287 288 // Step 117: t15 = x^0x126633cc0f35f63fc1a174f 289 t15.Mul(z, t15) 290 291 // Step 129: t15 = x^0x126633cc0f35f63fc1a174f000 292 for s := 0; s < 12; s++ { 293 t15.Square(t15) 294 } 295 296 // Step 130: t15 = x^0x126633cc0f35f63fc1a174f01d 297 t15.Mul(t2, t15) 298 299 // Step 134: t15 = x^0x126633cc0f35f63fc1a174f01d0 300 for s := 0; s < 4; s++ { 301 t15.Square(t15) 302 } 303 304 // Step 135: t15 = x^0x126633cc0f35f63fc1a174f01d7 305 t15.Mul(t6, t15) 306 307 // Step 142: t15 = x^0x93319e6079afb1fe0d0ba780eb80 308 for s := 0; s < 7; s++ { 309 t15.Square(t15) 310 } 311 312 // Step 143: t15 = x^0x93319e6079afb1fe0d0ba780eb95 313 t15.Mul(t0, t15) 314 315 // Step 148: t15 = x^0x126633cc0f35f63fc1a174f01d72a0 316 for s := 0; s < 5; s++ { 317 t15.Square(t15) 318 } 319 320 // Step 149: t15 = x^0x126633cc0f35f63fc1a174f01d72ab 321 t15.Mul(t3, t15) 322 323 // Step 154: t15 = x^0x24cc67981e6bec7f8342e9e03ae5560 324 for s := 0; s < 5; s++ { 325 t15.Square(t15) 326 } 327 328 // Step 155: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b 329 t15.Mul(t3, t15) 330 331 // Step 159: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b0 332 for s := 0; s < 4; s++ { 333 t15.Square(t15) 334 } 335 336 // Step 160: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b5 337 t15.Mul(t11, t15) 338 339 // Step 169: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a00 340 for s := 0; s < 9; s++ { 341 t15.Square(t15) 342 } 343 344 // Step 170: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f 345 t15.Mul(t14, t15) 346 347 // Step 177: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f80 348 for s := 0; s < 7; s++ { 349 t15.Square(t15) 350 } 351 352 // Step 178: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b 353 t15.Mul(t9, t15) 354 355 // Step 183: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f360 356 for s := 0; s < 5; s++ { 357 t15.Square(t15) 358 } 359 360 // Step 184: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f363 361 t15.Mul(z, t15) 362 363 // Step 192: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f36300 364 for s := 0; s < 8; s++ { 365 t15.Square(t15) 366 } 367 368 // Step 193: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d 369 t15.Mul(t2, t15) 370 371 // Step 199: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c740 372 for s := 0; s < 6; s++ { 373 t15.Square(t15) 374 } 375 376 // Step 200: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d 377 t15.Mul(t2, t15) 378 379 // Step 205: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18eba0 380 for s := 0; s < 5; s++ { 381 t15.Square(t15) 382 } 383 384 // Step 206: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf 385 t15.Mul(t5, t15) 386 387 // Step 213: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d780 388 for s := 0; s < 7; s++ { 389 t15.Square(t15) 390 } 391 392 // Step 214: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d 393 t15.Mul(t2, t15) 394 395 // Step 220: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e740 396 for s := 0; s < 6; s++ { 397 t15.Square(t15) 398 } 399 400 // Step 221: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b 401 t15.Mul(t3, t15) 402 403 // Step 229: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b00 404 for s := 0; s < 8; s++ { 405 t15.Square(t15) 406 } 407 408 // Step 230: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d 409 t15.Mul(t2, t15) 410 411 // Step 235: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a0 412 for s := 0; s < 5; s++ { 413 t15.Square(t15) 414 } 415 416 // Step 236: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a7 417 t15.Mul(t6, t15) 418 419 // Step 242: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9c0 420 for s := 0; s < 6; s++ { 421 t15.Square(t15) 422 } 423 424 // Step 243: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb 425 t15.Mul(t3, t15) 426 427 // Step 250: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e580 428 for s := 0; s < 7; s++ { 429 t15.Square(t15) 430 } 431 432 // Step 251: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e597 433 t15.Mul(t12, t15) 434 435 // Step 256: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2e0 436 for s := 0; s < 5; s++ { 437 t15.Square(t15) 438 } 439 440 // Step 257: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed 441 t15.Mul(t4, t15) 442 443 // Step 263: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb40 444 for s := 0; s < 6; s++ { 445 t15.Square(t15) 446 } 447 448 // Step 264: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d 449 t15.Mul(t4, t15) 450 451 // Step 270: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed340 452 for s := 0; s < 6; s++ { 453 t15.Square(t15) 454 } 455 456 // Step 271: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b 457 t15.Mul(t9, t15) 458 459 // Step 278: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad80 460 for s := 0; s < 7; s++ { 461 t15.Square(t15) 462 } 463 464 // Step 279: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9b 465 t15.Mul(t9, t15) 466 467 // Step 284: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b360 468 for s := 0; s < 5; s++ { 469 t15.Square(t15) 470 } 471 472 // Step 285: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377 473 t15.Mul(t12, t15) 474 475 // Step 289: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b3770 476 for s := 0; s < 4; s++ { 477 t15.Square(t15) 478 } 479 480 // Step 290: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b 481 t15.Mul(t3, t15) 482 483 // Step 296: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cddec0 484 for s := 0; s < 6; s++ { 485 t15.Square(t15) 486 } 487 488 // Step 297: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded1 489 t15.Mul(t8, t15) 490 491 // Step 303: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b440 492 for s := 0; s < 6; s++ { 493 t15.Square(t15) 494 } 495 496 // Step 304: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f 497 t15.Mul(t13, t15) 498 499 // Step 315: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f800 500 for s := 0; s < 11; s++ { 501 t15.Square(t15) 502 } 503 504 // Step 316: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f815 505 t15.Mul(t0, t15) 506 507 // Step 323: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a80 508 for s := 0; s < 7; s++ { 509 t15.Square(t15) 510 } 511 512 // Step 324: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a95 513 t15.Mul(t0, t15) 514 515 // Step 331: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a80 516 for s := 0; s < 7; s++ { 517 t15.Square(t15) 518 } 519 520 // Step 332: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b 521 t15.Mul(t9, t15) 522 523 // Step 343: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d800 524 for s := 0; s < 11; s++ { 525 t15.Square(t15) 526 } 527 528 // Step 344: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f 529 t15.Mul(t13, t15) 530 531 // Step 349: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03e0 532 for s := 0; s < 5; s++ { 533 t15.Square(t15) 534 } 535 536 // Step 350: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb 537 t15.Mul(t3, t15) 538 539 // Step 355: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d60 540 for s := 0; s < 5; s++ { 541 t15.Square(t15) 542 } 543 544 // Step 356: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f 545 t15.Mul(t5, t15) 546 547 // Step 360: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f0 548 for s := 0; s < 4; s++ { 549 t15.Square(t15) 550 } 551 552 // Step 361: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f5 553 t15.Mul(t11, t15) 554 555 // Step 367: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd40 556 for s := 0; s < 6; s++ { 557 t15.Square(t15) 558 } 559 560 // Step 368: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd49 561 t15.Mul(t1, t15) 562 563 // Step 371: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea48 564 for s := 0; s < 3; s++ { 565 t15.Square(t15) 566 } 567 568 // Step 372: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea49 569 t15.Mul(&x, t15) 570 571 // Step 381: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd49200 572 for s := 0; s < 9; s++ { 573 t15.Square(t15) 574 } 575 576 // Step 382: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd49217 577 t15.Mul(t12, t15) 578 579 // Step 390: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd4921700 580 for s := 0; s < 8; s++ { 581 t15.Square(t15) 582 } 583 584 // Step 391: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b 585 t15.Mul(t9, t15) 586 587 // Step 395: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b0 588 for s := 0; s < 4; s++ { 589 t15.Square(t15) 590 } 591 592 // Step 396: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b5 593 t15.Mul(t11, t15) 594 595 // Step 403: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da80 596 for s := 0; s < 7; s++ { 597 t15.Square(t15) 598 } 599 600 // Step 404: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f 601 t15.Mul(t13, t15) 602 603 // Step 410: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7c0 604 for s := 0; s < 6; s++ { 605 t15.Square(t15) 606 } 607 608 // Step 411: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7 609 t15.Mul(t12, t15) 610 611 // Step 414: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53eb8 612 for s := 0; s < 3; s++ { 613 t15.Square(t15) 614 } 615 616 // Step 415: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd 617 t15.Mul(t11, t15) 618 619 // Step 426: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e800 620 for s := 0; s < 11; s++ { 621 t15.Square(t15) 622 } 623 624 // Step 427: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f 625 t15.Mul(t14, t15) 626 627 // Step 433: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fc0 628 for s := 0; s < 6; s++ { 629 t15.Square(t15) 630 } 631 632 // Step 434: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5 633 t15.Mul(t0, t15) 634 635 // Step 438: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd50 636 for s := 0; s < 4; s++ { 637 t15.Square(t15) 638 } 639 640 // Step 439: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f 641 t15.Mul(t5, t15) 642 643 // Step 446: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf80 644 for s := 0; s < 7; s++ { 645 t15.Square(t15) 646 } 647 648 // Step 447: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf89 649 t15.Mul(t1, t15) 650 651 // Step 450: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c48 652 for s := 0; s < 3; s++ { 653 t15.Square(t15) 654 } 655 656 // Step 451: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c49 657 t15.Mul(&x, t15) 658 659 // Step 458: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe2480 660 for s := 0; s < 7; s++ { 661 t15.Square(t15) 662 } 663 664 // Step 459: t14 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf 665 t14.Mul(t14, t15) 666 667 // Step 469: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc00 668 for s := 0; s < 10; s++ { 669 t14.Square(t14) 670 } 671 672 // Step 470: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d 673 t14.Mul(t2, t14) 674 675 // Step 474: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d0 676 for s := 0; s < 4; s++ { 677 t14.Square(t14) 678 } 679 680 // Step 475: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d1 681 t14.Mul(&x, t14) 682 683 // Step 482: t14 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e880 684 for s := 0; s < 7; s++ { 685 t14.Square(t14) 686 } 687 688 // Step 483: t14 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e885 689 t14.Mul(t11, t14) 690 691 // Step 492: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a00 692 for s := 0; s < 9; s++ { 693 t14.Square(t14) 694 } 695 696 // Step 493: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1d 697 t14.Mul(t2, t14) 698 699 // Step 497: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1d0 700 for s := 0; s < 4; s++ { 701 t14.Square(t14) 702 } 703 704 // Step 498: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db 705 t14.Mul(t3, t14) 706 707 // Step 503: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b60 708 for s := 0; s < 5; s++ { 709 t14.Square(t14) 710 } 711 712 // Step 504: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f 713 t14.Mul(t5, t14) 714 715 // Step 509: t14 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876de0 716 for s := 0; s < 5; s++ { 717 t14.Square(t14) 718 } 719 720 // Step 510: t14 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded 721 t14.Mul(t4, t14) 722 723 // Step 513: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f68 724 for s := 0; s < 3; s++ { 725 t14.Square(t14) 726 } 727 728 // Step 514: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f69 729 t14.Mul(&x, t14) 730 731 // Step 526: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f69000 732 for s := 0; s < 12; s++ { 733 t14.Square(t14) 734 } 735 736 // Step 527: t13 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f 737 t13.Mul(t13, t14) 738 739 // Step 533: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407c0 740 for s := 0; s < 6; s++ { 741 t13.Square(t13) 742 } 743 744 // Step 534: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7 745 t13.Mul(t12, t13) 746 747 // Step 538: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d70 748 for s := 0; s < 4; s++ { 749 t13.Square(t13) 750 } 751 752 // Step 539: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b 753 t13.Mul(t3, t13) 754 755 // Step 545: t13 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ec0 756 for s := 0; s < 6; s++ { 757 t13.Square(t13) 758 } 759 760 // Step 546: t12 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed7 761 t12.Mul(t12, t13) 762 763 // Step 551: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae0 764 for s := 0; s < 5; s++ { 765 t12.Square(t12) 766 } 767 768 // Step 552: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae7 769 t12.Mul(t6, t12) 770 771 // Step 558: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9c0 772 for s := 0; s < 6; s++ { 773 t12.Square(t12) 774 } 775 776 // Step 559: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf 777 t12.Mul(t5, t12) 778 779 // Step 565: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73c0 780 for s := 0; s < 6; s++ { 781 t12.Square(t12) 782 } 783 784 // Step 566: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5 785 t12.Mul(t0, t12) 786 787 // Step 568: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf54 788 for s := 0; s < 2; s++ { 789 t12.Square(t12) 790 } 791 792 // Step 569: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57 793 t12.Mul(z, t12) 794 795 // Step 577: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf5700 796 for s := 0; s < 8; s++ { 797 t12.Square(t12) 798 } 799 800 // Step 578: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf5707 801 t12.Mul(t6, t12) 802 803 // Step 583: t12 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e0 804 for s := 0; s < 5; s++ { 805 t12.Square(t12) 806 } 807 808 // Step 584: t12 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e7 809 t12.Mul(t6, t12) 810 811 // Step 593: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce00 812 for s := 0; s < 9; s++ { 813 t12.Square(t12) 814 } 815 816 // Step 594: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce11 817 t12.Mul(t8, t12) 818 819 // Step 599: t12 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c220 820 for s := 0; s < 5; s++ { 821 t12.Square(t12) 822 } 823 824 // Step 600: t11 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c225 825 t11.Mul(t11, t12) 826 827 // Step 606: t11 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e708940 828 for s := 0; s < 6; s++ { 829 t11.Square(t11) 830 } 831 832 // Step 607: t11 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f 833 t11.Mul(t5, t11) 834 835 // Step 613: t11 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253c0 836 for s := 0; s < 6; s++ { 837 t11.Square(t11) 838 } 839 840 // Step 614: t10 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d3 841 t10.Mul(t10, t11) 842 843 // Step 619: t10 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a60 844 for s := 0; s < 5; s++ { 845 t10.Square(t10) 846 } 847 848 // Step 620: t10 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d 849 t10.Mul(t4, t10) 850 851 // Step 627: t10 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d3680 852 for s := 0; s < 7; s++ { 853 t10.Square(t10) 854 } 855 856 // Step 628: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369b 857 t9.Mul(t9, t10) 858 859 // Step 632: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369b0 860 for s := 0; s < 4; s++ { 861 t9.Square(t9) 862 } 863 864 // Step 633: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd 865 t9.Mul(t4, t9) 866 867 // Step 637: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd0 868 for s := 0; s < 4; s++ { 869 t9.Square(t9) 870 } 871 872 // Step 638: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd3 873 t9.Mul(z, t9) 874 875 // Step 646: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd300 876 for s := 0; s < 8; s++ { 877 t9.Square(t9) 878 } 879 880 // Step 647: t8 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd311 881 t8.Mul(t8, t9) 882 883 // Step 649: t8 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c44 884 for s := 0; s < 2; s++ { 885 t8.Square(t8) 886 } 887 888 // Step 650: t8 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c45 889 t8.Mul(&x, t8) 890 891 // Step 660: t8 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd311400 892 for s := 0; s < 10; s++ { 893 t8.Square(t8) 894 } 895 896 // Step 661: t7 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f 897 t7.Mul(t7, t8) 898 899 // Step 665: t7 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f0 900 for s := 0; s < 4; s++ { 901 t7.Square(t7) 902 } 903 904 // Step 666: t6 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f7 905 t6.Mul(t6, t7) 906 907 // Step 672: t6 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdc0 908 for s := 0; s < 6; s++ { 909 t6.Square(t6) 910 } 911 912 // Step 673: t5 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf 913 t5.Mul(t5, t6) 914 915 // Step 679: t5 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73c0 916 for s := 0; s < 6; s++ { 917 t5.Square(t5) 918 } 919 920 // Step 680: t4 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd 921 t4.Mul(t4, t5) 922 923 // Step 686: t4 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf340 924 for s := 0; s < 6; s++ { 925 t4.Square(t4) 926 } 927 928 // Step 687: t4 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d 929 t4.Mul(t2, t4) 930 931 // Step 693: t4 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd740 932 for s := 0; s < 6; s++ { 933 t4.Square(t4) 934 } 935 936 // Step 694: t4 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd749 937 t4.Mul(t1, t4) 938 939 // Step 701: t4 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce1129e9b4de988a3fb9e6ba480 940 for s := 0; s < 7; s++ { 941 t4.Square(t4) 942 } 943 944 // Step 702: t3 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce1129e9b4de988a3fb9e6ba48b 945 t3.Mul(t3, t4) 946 947 // Step 708: t3 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d37a6228fee79ae922c0 948 for s := 0; s < 6; s++ { 949 t3.Square(t3) 950 } 951 952 // Step 709: t2 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d37a6228fee79ae922dd 953 t2.Mul(t2, t3) 954 955 // Step 714: t2 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba0 956 for s := 0; s < 5; s++ { 957 t2.Square(t2) 958 } 959 960 // Step 715: t1 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba9 961 t1.Mul(t1, t2) 962 963 // Step 723: t1 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba900 964 for s := 0; s < 8; s++ { 965 t1.Square(t1) 966 } 967 968 // Step 724: t0 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba915 969 t0.Mul(t0, t1) 970 971 // Step 726: t0 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd74916ea454 972 for s := 0; s < 2; s++ { 973 t0.Square(t0) 974 } 975 976 // Step 727: z = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd74916ea457 977 z.Mul(z, t0) 978 979 // Step 744: z = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d37a6228fee79ae922dd48ae0000 980 for s := 0; s < 17; s++ { 981 z.Square(z) 982 } 983 984 // Step 745: z = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d37a6228fee79ae922dd48ae0001 985 z.Mul(&x, z) 986 987 return z 988 } 989 990 // expByLegendreExp is equivalent to z.Exp(x, 93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce1129e9b4de988a3fb9e6ba48b7522b80006) 991 // 992 // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain 993 func (z *Element) expByLegendreExp(x Element) *Element { 994 // addition chain: 995 // 996 // _10 = 2*1 997 // _11 = 1 + _10 998 // _101 = _10 + _11 999 // _111 = _10 + _101 1000 // _1001 = _10 + _111 1001 // _1011 = _10 + _1001 1002 // _1101 = _10 + _1011 1003 // _1111 = _10 + _1101 1004 // _10001 = _10 + _1111 1005 // _10011 = _10 + _10001 1006 // _10101 = _10 + _10011 1007 // _10111 = _10 + _10101 1008 // _11001 = _10 + _10111 1009 // _11011 = _10 + _11001 1010 // _11101 = _10 + _11011 1011 // _11111 = _10 + _11101 1012 // _111110 = 2*_11111 1013 // _111111 = 1 + _111110 1014 // _1111110 = 2*_111111 1015 // _1111111 = 1 + _1111110 1016 // _10010000 = _10001 + _1111111 1017 // i36 = ((_10010000 << 3 + _11001) << 5 + _10001) << 5 1018 // i45 = 2*((_10011 + i36) << 5 + _11001) + 1 1019 // i69 = ((i45 << 10 + _1111) << 6 + _1101) << 6 1020 // i85 = ((_11111 + i69) << 3 + _11) << 10 + _1111111 1021 // i106 = ((2*i85 + 1) << 9 + _1101) << 9 1022 // i117 = ((_10111 + i106) << 6 + _10011) << 2 + _11 1023 // i142 = ((i117 << 12 + _11101) << 4 + _111) << 7 1024 // i155 = ((_10101 + i142) << 5 + _1011) << 5 + _1011 1025 // i177 = ((i155 << 4 + _101) << 9 + _111111) << 7 1026 // i193 = ((_11011 + i177) << 5 + _11) << 8 + _11101 1027 // i213 = ((i193 << 6 + _11101) << 5 + _1111) << 7 1028 // i230 = ((_11101 + i213) << 6 + _1011) << 8 + _11101 1029 // i250 = ((i230 << 5 + _111) << 6 + _1011) << 7 1030 // i264 = ((_10111 + i250) << 5 + _1101) << 6 + _1101 1031 // i284 = ((i264 << 6 + _11011) << 7 + _11011) << 5 1032 // i297 = ((_10111 + i284) << 4 + _1011) << 6 + _10001 1033 // i323 = ((i297 << 6 + _11111) << 11 + _10101) << 7 1034 // i344 = ((_10101 + i323) << 7 + _11011) << 11 + _11111 1035 // i360 = ((i344 << 5 + _1011) << 5 + _1111) << 4 1036 // i372 = ((_101 + i360) << 6 + _1001) << 3 + 1 1037 // i395 = ((i372 << 9 + _10111) << 8 + _11011) << 4 1038 // i411 = ((_101 + i395) << 7 + _11111) << 6 + _10111 1039 // i433 = ((i411 << 3 + _101) << 11 + _111111) << 6 1040 // i447 = ((_10101 + i433) << 4 + _1111) << 7 + _1001 1041 // i469 = ((i447 << 3 + 1) << 7 + _111111) << 10 1042 // i483 = ((_11101 + i469) << 4 + 1) << 7 + _101 1043 // i503 = ((i483 << 9 + _11101) << 4 + _1011) << 5 1044 // i514 = ((_1111 + i503) << 5 + _1101) << 3 + 1 1045 // i538 = ((i514 << 12 + _11111) << 6 + _10111) << 4 1046 // i552 = ((_1011 + i538) << 6 + _10111) << 5 + _111 1047 // i568 = ((i552 << 6 + _1111) << 6 + _10101) << 2 1048 // i584 = ((_11 + i568) << 8 + _111) << 5 + _111 1049 // i606 = ((i584 << 9 + _10001) << 5 + _101) << 6 1050 // i620 = ((_1111 + i606) << 6 + _10011) << 5 + _1101 1051 // i637 = ((i620 << 7 + _11011) << 4 + _1101) << 4 1052 // i650 = ((_11 + i637) << 8 + _10001) << 2 + 1 1053 // i672 = ((i650 << 10 + _1111111) << 4 + _111) << 6 1054 // i687 = ((_1111 + i672) << 6 + _1101) << 6 + _11101 1055 // i708 = ((i687 << 6 + _1001) << 7 + _1011) << 6 1056 // i724 = ((_11101 + i708) << 5 + _1001) << 8 + _10101 1057 // return 2*((i724 << 2 + _11) << 18 + _11) 1058 // 1059 // Operations: 627 squares 120 multiplies 1060 1061 // Allocate Temporaries. 1062 var ( 1063 t0 = new(Element) 1064 t1 = new(Element) 1065 t2 = new(Element) 1066 t3 = new(Element) 1067 t4 = new(Element) 1068 t5 = new(Element) 1069 t6 = new(Element) 1070 t7 = new(Element) 1071 t8 = new(Element) 1072 t9 = new(Element) 1073 t10 = new(Element) 1074 t11 = new(Element) 1075 t12 = new(Element) 1076 t13 = new(Element) 1077 t14 = new(Element) 1078 t15 = new(Element) 1079 t16 = new(Element) 1080 ) 1081 1082 // var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16 Element 1083 // Step 1: t7 = x^0x2 1084 t7.Square(&x) 1085 1086 // Step 2: z = x^0x3 1087 z.Mul(&x, t7) 1088 1089 // Step 3: t11 = x^0x5 1090 t11.Mul(t7, z) 1091 1092 // Step 4: t6 = x^0x7 1093 t6.Mul(t7, t11) 1094 1095 // Step 5: t1 = x^0x9 1096 t1.Mul(t7, t6) 1097 1098 // Step 6: t3 = x^0xb 1099 t3.Mul(t7, t1) 1100 1101 // Step 7: t4 = x^0xd 1102 t4.Mul(t7, t3) 1103 1104 // Step 8: t5 = x^0xf 1105 t5.Mul(t7, t4) 1106 1107 // Step 9: t8 = x^0x11 1108 t8.Mul(t7, t5) 1109 1110 // Step 10: t10 = x^0x13 1111 t10.Mul(t7, t8) 1112 1113 // Step 11: t0 = x^0x15 1114 t0.Mul(t7, t10) 1115 1116 // Step 12: t12 = x^0x17 1117 t12.Mul(t7, t0) 1118 1119 // Step 13: t15 = x^0x19 1120 t15.Mul(t7, t12) 1121 1122 // Step 14: t9 = x^0x1b 1123 t9.Mul(t7, t15) 1124 1125 // Step 15: t2 = x^0x1d 1126 t2.Mul(t7, t9) 1127 1128 // Step 16: t13 = x^0x1f 1129 t13.Mul(t7, t2) 1130 1131 // Step 17: t7 = x^0x3e 1132 t7.Square(t13) 1133 1134 // Step 18: t14 = x^0x3f 1135 t14.Mul(&x, t7) 1136 1137 // Step 19: t7 = x^0x7e 1138 t7.Square(t14) 1139 1140 // Step 20: t7 = x^0x7f 1141 t7.Mul(&x, t7) 1142 1143 // Step 21: t16 = x^0x90 1144 t16.Mul(t8, t7) 1145 1146 // Step 24: t16 = x^0x480 1147 for s := 0; s < 3; s++ { 1148 t16.Square(t16) 1149 } 1150 1151 // Step 25: t16 = x^0x499 1152 t16.Mul(t15, t16) 1153 1154 // Step 30: t16 = x^0x9320 1155 for s := 0; s < 5; s++ { 1156 t16.Square(t16) 1157 } 1158 1159 // Step 31: t16 = x^0x9331 1160 t16.Mul(t8, t16) 1161 1162 // Step 36: t16 = x^0x126620 1163 for s := 0; s < 5; s++ { 1164 t16.Square(t16) 1165 } 1166 1167 // Step 37: t16 = x^0x126633 1168 t16.Mul(t10, t16) 1169 1170 // Step 42: t16 = x^0x24cc660 1171 for s := 0; s < 5; s++ { 1172 t16.Square(t16) 1173 } 1174 1175 // Step 43: t15 = x^0x24cc679 1176 t15.Mul(t15, t16) 1177 1178 // Step 44: t15 = x^0x4998cf2 1179 t15.Square(t15) 1180 1181 // Step 45: t15 = x^0x4998cf3 1182 t15.Mul(&x, t15) 1183 1184 // Step 55: t15 = x^0x126633cc00 1185 for s := 0; s < 10; s++ { 1186 t15.Square(t15) 1187 } 1188 1189 // Step 56: t15 = x^0x126633cc0f 1190 t15.Mul(t5, t15) 1191 1192 // Step 62: t15 = x^0x4998cf303c0 1193 for s := 0; s < 6; s++ { 1194 t15.Square(t15) 1195 } 1196 1197 // Step 63: t15 = x^0x4998cf303cd 1198 t15.Mul(t4, t15) 1199 1200 // Step 69: t15 = x^0x126633cc0f340 1201 for s := 0; s < 6; s++ { 1202 t15.Square(t15) 1203 } 1204 1205 // Step 70: t15 = x^0x126633cc0f35f 1206 t15.Mul(t13, t15) 1207 1208 // Step 73: t15 = x^0x93319e6079af8 1209 for s := 0; s < 3; s++ { 1210 t15.Square(t15) 1211 } 1212 1213 // Step 74: t15 = x^0x93319e6079afb 1214 t15.Mul(z, t15) 1215 1216 // Step 84: t15 = x^0x24cc67981e6bec00 1217 for s := 0; s < 10; s++ { 1218 t15.Square(t15) 1219 } 1220 1221 // Step 85: t15 = x^0x24cc67981e6bec7f 1222 t15.Mul(t7, t15) 1223 1224 // Step 86: t15 = x^0x4998cf303cd7d8fe 1225 t15.Square(t15) 1226 1227 // Step 87: t15 = x^0x4998cf303cd7d8ff 1228 t15.Mul(&x, t15) 1229 1230 // Step 96: t15 = x^0x93319e6079afb1fe00 1231 for s := 0; s < 9; s++ { 1232 t15.Square(t15) 1233 } 1234 1235 // Step 97: t15 = x^0x93319e6079afb1fe0d 1236 t15.Mul(t4, t15) 1237 1238 // Step 106: t15 = x^0x126633cc0f35f63fc1a00 1239 for s := 0; s < 9; s++ { 1240 t15.Square(t15) 1241 } 1242 1243 // Step 107: t15 = x^0x126633cc0f35f63fc1a17 1244 t15.Mul(t12, t15) 1245 1246 // Step 113: t15 = x^0x4998cf303cd7d8ff0685c0 1247 for s := 0; s < 6; s++ { 1248 t15.Square(t15) 1249 } 1250 1251 // Step 114: t15 = x^0x4998cf303cd7d8ff0685d3 1252 t15.Mul(t10, t15) 1253 1254 // Step 116: t15 = x^0x126633cc0f35f63fc1a174c 1255 for s := 0; s < 2; s++ { 1256 t15.Square(t15) 1257 } 1258 1259 // Step 117: t15 = x^0x126633cc0f35f63fc1a174f 1260 t15.Mul(z, t15) 1261 1262 // Step 129: t15 = x^0x126633cc0f35f63fc1a174f000 1263 for s := 0; s < 12; s++ { 1264 t15.Square(t15) 1265 } 1266 1267 // Step 130: t15 = x^0x126633cc0f35f63fc1a174f01d 1268 t15.Mul(t2, t15) 1269 1270 // Step 134: t15 = x^0x126633cc0f35f63fc1a174f01d0 1271 for s := 0; s < 4; s++ { 1272 t15.Square(t15) 1273 } 1274 1275 // Step 135: t15 = x^0x126633cc0f35f63fc1a174f01d7 1276 t15.Mul(t6, t15) 1277 1278 // Step 142: t15 = x^0x93319e6079afb1fe0d0ba780eb80 1279 for s := 0; s < 7; s++ { 1280 t15.Square(t15) 1281 } 1282 1283 // Step 143: t15 = x^0x93319e6079afb1fe0d0ba780eb95 1284 t15.Mul(t0, t15) 1285 1286 // Step 148: t15 = x^0x126633cc0f35f63fc1a174f01d72a0 1287 for s := 0; s < 5; s++ { 1288 t15.Square(t15) 1289 } 1290 1291 // Step 149: t15 = x^0x126633cc0f35f63fc1a174f01d72ab 1292 t15.Mul(t3, t15) 1293 1294 // Step 154: t15 = x^0x24cc67981e6bec7f8342e9e03ae5560 1295 for s := 0; s < 5; s++ { 1296 t15.Square(t15) 1297 } 1298 1299 // Step 155: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b 1300 t15.Mul(t3, t15) 1301 1302 // Step 159: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b0 1303 for s := 0; s < 4; s++ { 1304 t15.Square(t15) 1305 } 1306 1307 // Step 160: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b5 1308 t15.Mul(t11, t15) 1309 1310 // Step 169: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a00 1311 for s := 0; s < 9; s++ { 1312 t15.Square(t15) 1313 } 1314 1315 // Step 170: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f 1316 t15.Mul(t14, t15) 1317 1318 // Step 177: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f80 1319 for s := 0; s < 7; s++ { 1320 t15.Square(t15) 1321 } 1322 1323 // Step 178: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b 1324 t15.Mul(t9, t15) 1325 1326 // Step 183: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f360 1327 for s := 0; s < 5; s++ { 1328 t15.Square(t15) 1329 } 1330 1331 // Step 184: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f363 1332 t15.Mul(z, t15) 1333 1334 // Step 192: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f36300 1335 for s := 0; s < 8; s++ { 1336 t15.Square(t15) 1337 } 1338 1339 // Step 193: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d 1340 t15.Mul(t2, t15) 1341 1342 // Step 199: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c740 1343 for s := 0; s < 6; s++ { 1344 t15.Square(t15) 1345 } 1346 1347 // Step 200: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d 1348 t15.Mul(t2, t15) 1349 1350 // Step 205: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18eba0 1351 for s := 0; s < 5; s++ { 1352 t15.Square(t15) 1353 } 1354 1355 // Step 206: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf 1356 t15.Mul(t5, t15) 1357 1358 // Step 213: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d780 1359 for s := 0; s < 7; s++ { 1360 t15.Square(t15) 1361 } 1362 1363 // Step 214: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d 1364 t15.Mul(t2, t15) 1365 1366 // Step 220: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e740 1367 for s := 0; s < 6; s++ { 1368 t15.Square(t15) 1369 } 1370 1371 // Step 221: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b 1372 t15.Mul(t3, t15) 1373 1374 // Step 229: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b00 1375 for s := 0; s < 8; s++ { 1376 t15.Square(t15) 1377 } 1378 1379 // Step 230: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d 1380 t15.Mul(t2, t15) 1381 1382 // Step 235: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a0 1383 for s := 0; s < 5; s++ { 1384 t15.Square(t15) 1385 } 1386 1387 // Step 236: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a7 1388 t15.Mul(t6, t15) 1389 1390 // Step 242: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9c0 1391 for s := 0; s < 6; s++ { 1392 t15.Square(t15) 1393 } 1394 1395 // Step 243: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb 1396 t15.Mul(t3, t15) 1397 1398 // Step 250: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e580 1399 for s := 0; s < 7; s++ { 1400 t15.Square(t15) 1401 } 1402 1403 // Step 251: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e597 1404 t15.Mul(t12, t15) 1405 1406 // Step 256: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2e0 1407 for s := 0; s < 5; s++ { 1408 t15.Square(t15) 1409 } 1410 1411 // Step 257: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed 1412 t15.Mul(t4, t15) 1413 1414 // Step 263: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb40 1415 for s := 0; s < 6; s++ { 1416 t15.Square(t15) 1417 } 1418 1419 // Step 264: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d 1420 t15.Mul(t4, t15) 1421 1422 // Step 270: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed340 1423 for s := 0; s < 6; s++ { 1424 t15.Square(t15) 1425 } 1426 1427 // Step 271: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b 1428 t15.Mul(t9, t15) 1429 1430 // Step 278: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad80 1431 for s := 0; s < 7; s++ { 1432 t15.Square(t15) 1433 } 1434 1435 // Step 279: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9b 1436 t15.Mul(t9, t15) 1437 1438 // Step 284: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b360 1439 for s := 0; s < 5; s++ { 1440 t15.Square(t15) 1441 } 1442 1443 // Step 285: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377 1444 t15.Mul(t12, t15) 1445 1446 // Step 289: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b3770 1447 for s := 0; s < 4; s++ { 1448 t15.Square(t15) 1449 } 1450 1451 // Step 290: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b 1452 t15.Mul(t3, t15) 1453 1454 // Step 296: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cddec0 1455 for s := 0; s < 6; s++ { 1456 t15.Square(t15) 1457 } 1458 1459 // Step 297: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded1 1460 t15.Mul(t8, t15) 1461 1462 // Step 303: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b440 1463 for s := 0; s < 6; s++ { 1464 t15.Square(t15) 1465 } 1466 1467 // Step 304: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f 1468 t15.Mul(t13, t15) 1469 1470 // Step 315: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f800 1471 for s := 0; s < 11; s++ { 1472 t15.Square(t15) 1473 } 1474 1475 // Step 316: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f815 1476 t15.Mul(t0, t15) 1477 1478 // Step 323: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a80 1479 for s := 0; s < 7; s++ { 1480 t15.Square(t15) 1481 } 1482 1483 // Step 324: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a95 1484 t15.Mul(t0, t15) 1485 1486 // Step 331: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a80 1487 for s := 0; s < 7; s++ { 1488 t15.Square(t15) 1489 } 1490 1491 // Step 332: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b 1492 t15.Mul(t9, t15) 1493 1494 // Step 343: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d800 1495 for s := 0; s < 11; s++ { 1496 t15.Square(t15) 1497 } 1498 1499 // Step 344: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f 1500 t15.Mul(t13, t15) 1501 1502 // Step 349: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03e0 1503 for s := 0; s < 5; s++ { 1504 t15.Square(t15) 1505 } 1506 1507 // Step 350: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb 1508 t15.Mul(t3, t15) 1509 1510 // Step 355: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d60 1511 for s := 0; s < 5; s++ { 1512 t15.Square(t15) 1513 } 1514 1515 // Step 356: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f 1516 t15.Mul(t5, t15) 1517 1518 // Step 360: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f0 1519 for s := 0; s < 4; s++ { 1520 t15.Square(t15) 1521 } 1522 1523 // Step 361: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f5 1524 t15.Mul(t11, t15) 1525 1526 // Step 367: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd40 1527 for s := 0; s < 6; s++ { 1528 t15.Square(t15) 1529 } 1530 1531 // Step 368: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd49 1532 t15.Mul(t1, t15) 1533 1534 // Step 371: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea48 1535 for s := 0; s < 3; s++ { 1536 t15.Square(t15) 1537 } 1538 1539 // Step 372: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea49 1540 t15.Mul(&x, t15) 1541 1542 // Step 381: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd49200 1543 for s := 0; s < 9; s++ { 1544 t15.Square(t15) 1545 } 1546 1547 // Step 382: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd49217 1548 t15.Mul(t12, t15) 1549 1550 // Step 390: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd4921700 1551 for s := 0; s < 8; s++ { 1552 t15.Square(t15) 1553 } 1554 1555 // Step 391: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b 1556 t15.Mul(t9, t15) 1557 1558 // Step 395: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b0 1559 for s := 0; s < 4; s++ { 1560 t15.Square(t15) 1561 } 1562 1563 // Step 396: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b5 1564 t15.Mul(t11, t15) 1565 1566 // Step 403: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da80 1567 for s := 0; s < 7; s++ { 1568 t15.Square(t15) 1569 } 1570 1571 // Step 404: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f 1572 t15.Mul(t13, t15) 1573 1574 // Step 410: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7c0 1575 for s := 0; s < 6; s++ { 1576 t15.Square(t15) 1577 } 1578 1579 // Step 411: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7 1580 t15.Mul(t12, t15) 1581 1582 // Step 414: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53eb8 1583 for s := 0; s < 3; s++ { 1584 t15.Square(t15) 1585 } 1586 1587 // Step 415: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd 1588 t15.Mul(t11, t15) 1589 1590 // Step 426: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e800 1591 for s := 0; s < 11; s++ { 1592 t15.Square(t15) 1593 } 1594 1595 // Step 427: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f 1596 t15.Mul(t14, t15) 1597 1598 // Step 433: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fc0 1599 for s := 0; s < 6; s++ { 1600 t15.Square(t15) 1601 } 1602 1603 // Step 434: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5 1604 t15.Mul(t0, t15) 1605 1606 // Step 438: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd50 1607 for s := 0; s < 4; s++ { 1608 t15.Square(t15) 1609 } 1610 1611 // Step 439: t15 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f 1612 t15.Mul(t5, t15) 1613 1614 // Step 446: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf80 1615 for s := 0; s < 7; s++ { 1616 t15.Square(t15) 1617 } 1618 1619 // Step 447: t15 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf89 1620 t15.Mul(t1, t15) 1621 1622 // Step 450: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c48 1623 for s := 0; s < 3; s++ { 1624 t15.Square(t15) 1625 } 1626 1627 // Step 451: t15 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c49 1628 t15.Mul(&x, t15) 1629 1630 // Step 458: t15 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe2480 1631 for s := 0; s < 7; s++ { 1632 t15.Square(t15) 1633 } 1634 1635 // Step 459: t14 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf 1636 t14.Mul(t14, t15) 1637 1638 // Step 469: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc00 1639 for s := 0; s < 10; s++ { 1640 t14.Square(t14) 1641 } 1642 1643 // Step 470: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d 1644 t14.Mul(t2, t14) 1645 1646 // Step 474: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d0 1647 for s := 0; s < 4; s++ { 1648 t14.Square(t14) 1649 } 1650 1651 // Step 475: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d1 1652 t14.Mul(&x, t14) 1653 1654 // Step 482: t14 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e880 1655 for s := 0; s < 7; s++ { 1656 t14.Square(t14) 1657 } 1658 1659 // Step 483: t14 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e885 1660 t14.Mul(t11, t14) 1661 1662 // Step 492: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a00 1663 for s := 0; s < 9; s++ { 1664 t14.Square(t14) 1665 } 1666 1667 // Step 493: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1d 1668 t14.Mul(t2, t14) 1669 1670 // Step 497: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1d0 1671 for s := 0; s < 4; s++ { 1672 t14.Square(t14) 1673 } 1674 1675 // Step 498: t14 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db 1676 t14.Mul(t3, t14) 1677 1678 // Step 503: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b60 1679 for s := 0; s < 5; s++ { 1680 t14.Square(t14) 1681 } 1682 1683 // Step 504: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f 1684 t14.Mul(t5, t14) 1685 1686 // Step 509: t14 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876de0 1687 for s := 0; s < 5; s++ { 1688 t14.Square(t14) 1689 } 1690 1691 // Step 510: t14 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded 1692 t14.Mul(t4, t14) 1693 1694 // Step 513: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f68 1695 for s := 0; s < 3; s++ { 1696 t14.Square(t14) 1697 } 1698 1699 // Step 514: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f69 1700 t14.Mul(&x, t14) 1701 1702 // Step 526: t14 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f69000 1703 for s := 0; s < 12; s++ { 1704 t14.Square(t14) 1705 } 1706 1707 // Step 527: t13 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f 1708 t13.Mul(t13, t14) 1709 1710 // Step 533: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407c0 1711 for s := 0; s < 6; s++ { 1712 t13.Square(t13) 1713 } 1714 1715 // Step 534: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7 1716 t13.Mul(t12, t13) 1717 1718 // Step 538: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d70 1719 for s := 0; s < 4; s++ { 1720 t13.Square(t13) 1721 } 1722 1723 // Step 539: t13 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b 1724 t13.Mul(t3, t13) 1725 1726 // Step 545: t13 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ec0 1727 for s := 0; s < 6; s++ { 1728 t13.Square(t13) 1729 } 1730 1731 // Step 546: t12 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed7 1732 t12.Mul(t12, t13) 1733 1734 // Step 551: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae0 1735 for s := 0; s < 5; s++ { 1736 t12.Square(t12) 1737 } 1738 1739 // Step 552: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae7 1740 t12.Mul(t6, t12) 1741 1742 // Step 558: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9c0 1743 for s := 0; s < 6; s++ { 1744 t12.Square(t12) 1745 } 1746 1747 // Step 559: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf 1748 t12.Mul(t5, t12) 1749 1750 // Step 565: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73c0 1751 for s := 0; s < 6; s++ { 1752 t12.Square(t12) 1753 } 1754 1755 // Step 566: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5 1756 t12.Mul(t0, t12) 1757 1758 // Step 568: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf54 1759 for s := 0; s < 2; s++ { 1760 t12.Square(t12) 1761 } 1762 1763 // Step 569: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57 1764 t12.Mul(z, t12) 1765 1766 // Step 577: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf5700 1767 for s := 0; s < 8; s++ { 1768 t12.Square(t12) 1769 } 1770 1771 // Step 578: t12 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf5707 1772 t12.Mul(t6, t12) 1773 1774 // Step 583: t12 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e0 1775 for s := 0; s < 5; s++ { 1776 t12.Square(t12) 1777 } 1778 1779 // Step 584: t12 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e7 1780 t12.Mul(t6, t12) 1781 1782 // Step 593: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce00 1783 for s := 0; s < 9; s++ { 1784 t12.Square(t12) 1785 } 1786 1787 // Step 594: t12 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce11 1788 t12.Mul(t8, t12) 1789 1790 // Step 599: t12 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c220 1791 for s := 0; s < 5; s++ { 1792 t12.Square(t12) 1793 } 1794 1795 // Step 600: t11 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c225 1796 t11.Mul(t11, t12) 1797 1798 // Step 606: t11 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e708940 1799 for s := 0; s < 6; s++ { 1800 t11.Square(t11) 1801 } 1802 1803 // Step 607: t11 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f 1804 t11.Mul(t5, t11) 1805 1806 // Step 613: t11 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253c0 1807 for s := 0; s < 6; s++ { 1808 t11.Square(t11) 1809 } 1810 1811 // Step 614: t10 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d3 1812 t10.Mul(t10, t11) 1813 1814 // Step 619: t10 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a60 1815 for s := 0; s < 5; s++ { 1816 t10.Square(t10) 1817 } 1818 1819 // Step 620: t10 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d 1820 t10.Mul(t4, t10) 1821 1822 // Step 627: t10 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d3680 1823 for s := 0; s < 7; s++ { 1824 t10.Square(t10) 1825 } 1826 1827 // Step 628: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369b 1828 t9.Mul(t9, t10) 1829 1830 // Step 632: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369b0 1831 for s := 0; s < 4; s++ { 1832 t9.Square(t9) 1833 } 1834 1835 // Step 633: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd 1836 t9.Mul(t4, t9) 1837 1838 // Step 637: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd0 1839 for s := 0; s < 4; s++ { 1840 t9.Square(t9) 1841 } 1842 1843 // Step 638: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd3 1844 t9.Mul(z, t9) 1845 1846 // Step 646: t9 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd300 1847 for s := 0; s < 8; s++ { 1848 t9.Square(t9) 1849 } 1850 1851 // Step 647: t8 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd311 1852 t8.Mul(t8, t9) 1853 1854 // Step 649: t8 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c44 1855 for s := 0; s < 2; s++ { 1856 t8.Square(t8) 1857 } 1858 1859 // Step 650: t8 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c45 1860 t8.Mul(&x, t8) 1861 1862 // Step 660: t8 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd311400 1863 for s := 0; s < 10; s++ { 1864 t8.Square(t8) 1865 } 1866 1867 // Step 661: t7 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f 1868 t7.Mul(t7, t8) 1869 1870 // Step 665: t7 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f0 1871 for s := 0; s < 4; s++ { 1872 t7.Square(t7) 1873 } 1874 1875 // Step 666: t6 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f7 1876 t6.Mul(t6, t7) 1877 1878 // Step 672: t6 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdc0 1879 for s := 0; s < 6; s++ { 1880 t6.Square(t6) 1881 } 1882 1883 // Step 673: t5 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf 1884 t5.Mul(t5, t6) 1885 1886 // Step 679: t5 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73c0 1887 for s := 0; s < 6; s++ { 1888 t5.Square(t5) 1889 } 1890 1891 // Step 680: t4 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd 1892 t4.Mul(t4, t5) 1893 1894 // Step 686: t4 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf340 1895 for s := 0; s < 6; s++ { 1896 t4.Square(t4) 1897 } 1898 1899 // Step 687: t4 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d 1900 t4.Mul(t2, t4) 1901 1902 // Step 693: t4 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd740 1903 for s := 0; s < 6; s++ { 1904 t4.Square(t4) 1905 } 1906 1907 // Step 694: t4 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd749 1908 t4.Mul(t1, t4) 1909 1910 // Step 701: t4 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce1129e9b4de988a3fb9e6ba480 1911 for s := 0; s < 7; s++ { 1912 t4.Square(t4) 1913 } 1914 1915 // Step 702: t3 = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce1129e9b4de988a3fb9e6ba48b 1916 t3.Mul(t3, t4) 1917 1918 // Step 708: t3 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d37a6228fee79ae922c0 1919 for s := 0; s < 6; s++ { 1920 t3.Square(t3) 1921 } 1922 1923 // Step 709: t2 = x^0x24cc67981e6bec7f8342e9e03ae556b51f9b18ebaf3a58e9cb2ed35b377b45f02a54d81f5bd492171b53ebd07eaf892fc1d10a1db7b480faf6b9cf57073844a7a6d37a6228fee79ae922dd 1924 t2.Mul(t2, t3) 1925 1926 // Step 714: t2 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba0 1927 for s := 0; s < 5; s++ { 1928 t2.Square(t2) 1929 } 1930 1931 // Step 715: t1 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba9 1932 t1.Mul(t1, t2) 1933 1934 // Step 723: t1 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba900 1935 for s := 0; s < 8; s++ { 1936 t1.Square(t1) 1937 } 1938 1939 // Step 724: t0 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba915 1940 t0.Mul(t0, t1) 1941 1942 // Step 726: t0 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd74916ea454 1943 for s := 0; s < 2; s++ { 1944 t0.Square(t0) 1945 } 1946 1947 // Step 727: t0 = x^0x126633cc0f35f63fc1a174f01d72ab5a8fcd8c75d79d2c74e59769ad9bbda2f8152a6c0fadea490b8da9f5e83f57c497e0e8850edbda407d7b5ce7ab839c2253d369bd31147f73cd74916ea457 1948 t0.Mul(z, t0) 1949 1950 // Step 745: t0 = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba915c0000 1951 for s := 0; s < 18; s++ { 1952 t0.Square(t0) 1953 } 1954 1955 // Step 746: z = x^0x4998cf303cd7d8ff0685d3c075caad6a3f3631d75e74b1d3965da6b66ef68be054a9b03eb7a9242e36a7d7a0fd5f125f83a2143b6f6901f5ed739eae0e70894f4da6f4c451fdcf35d245ba915c0003 1956 z.Mul(z, t0) 1957 1958 // Step 747: z = x^0x93319e6079afb1fe0d0ba780eb955ad47e6c63aebce963a72cbb4d6cdded17c0a953607d6f52485c6d4faf41fabe24bf07442876ded203ebdae73d5c1ce1129e9b4de988a3fb9e6ba48b7522b80006 1959 z.Square(z) 1960 1961 return z 1962 }