github.com/consensys/gnark-crypto@v0.14.0/ecc/bw6-761/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, 48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1c000020bd27400000000023)
    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  	//	_10010    = 1 + _10001
    35  	//	_10011    = 1 + _10010
    36  	//	_10111    = _101 + _10010
    37  	//	_11001    = _10 + _10111
    38  	//	_11011    = _10 + _11001
    39  	//	_11101    = _10 + _11011
    40  	//	_11111    = _10 + _11101
    41  	//	_100001   = _10 + _11111
    42  	//	_100011   = _10 + _100001
    43  	//	_100101   = _10 + _100011
    44  	//	_100111   = _10 + _100101
    45  	//	_101001   = _10 + _100111
    46  	//	_101011   = _10 + _101001
    47  	//	_101101   = _10 + _101011
    48  	//	_101111   = _10 + _101101
    49  	//	_110001   = _10 + _101111
    50  	//	_110011   = _10 + _110001
    51  	//	_110101   = _10 + _110011
    52  	//	_110111   = _10 + _110101
    53  	//	_111001   = _10 + _110111
    54  	//	_111011   = _10 + _111001
    55  	//	_111101   = _10 + _111011
    56  	//	_1111010  = 2*_111101
    57  	//	_1111111  = _101 + _1111010
    58  	//	_11111110 = 2*_1111111
    59  	//	_11111111 = 1 + _11111110
    60  	//	i43       = ((_100001 + _11111111) << 3 + _10111) << 2 + 1
    61  	//	i65       = ((i43 << 9 + _1001) << 7 + _11111) << 4
    62  	//	i82       = ((_111 + i65) << 9 + _1111) << 5 + _111
    63  	//	i111      = ((i82 << 11 + _101011) << 7 + _100011) << 9
    64  	//	i139      = ((_11111 + i111) << 8 + _100101) << 17 + _100111
    65  	//	i161      = ((i139 << 4 + _1101) << 9 + _11111111) << 7
    66  	//	i176      = ((_11111 + i161) << 6 + _10111) << 6 + _1001
    67  	//	i198      = ((i176 << 4 + _11) << 6 + _11) << 10
    68  	//	i214      = ((_110101 + i198) << 2 + 1) << 11 + _11101
    69  	//	i238      = ((i214 << 6 + _101) << 7 + _1101) << 9
    70  	//	i259      = ((_100001 + i238) << 7 + _100101) << 11 + _100111
    71  	//	i287      = ((i259 << 7 + _101111) << 6 + _11111) << 13
    72  	//	i302      = ((_100001 + i287) << 6 + _111011) << 6 + _111001
    73  	//	i329      = ((i302 << 10 + _10111) << 11 + _111101) << 4
    74  	//	i346      = ((_1101 + i329) << 8 + _110001) << 6 + _110001
    75  	//	i366      = ((i346 << 5 + _11001) << 3 + _11) << 10
    76  	//	i382      = ((_100111 + i366) << 5 + _1001) << 8 + _11001
    77  	//	i407      = ((i382 << 10 + _1111) << 7 + _11101) << 6
    78  	//	i427      = ((_11101 + i407) << 9 + _11111111) << 8 + _100101
    79  	//	i454      = ((i427 << 6 + _101101) << 10 + _100011) << 9
    80  	//	i474      = ((_1001 + i454) << 8 + _1101) << 9 + _100111
    81  	//	i499      = ((i474 << 8 + _100011) << 6 + _101101) << 9
    82  	//	i515      = ((_100101 + i499) << 4 + _1111) << 9 + _1111111
    83  	//	i540      = ((i515 << 6 + _11001) << 8 + _111) << 9
    84  	//	i555      = ((_111011 + i540) << 5 + _10011) << 7 + _100111
    85  	//	i577      = ((i555 << 5 + _10111) << 9 + _111001) << 6
    86  	//	i591      = ((_111101 + i577) << 9 + _11111111) << 2 + _11
    87  	//	i612      = ((i591 << 7 + _10111) << 6 + _10011) << 6
    88  	//	i630      = ((_101 + i612) << 9 + _10001) << 6 + _11011
    89  	//	i657      = ((i630 << 10 + _100101) << 7 + _110011) << 8
    90  	//	i670      = ((_111101 + i657) << 7 + _100011) << 3 + _111
    91  	//	i696      = ((i670 << 10 + _1011) << 11 + _110011) << 3
    92  	//	i713      = ((_111 + i696) << 9 + _101011) << 5 + _10111
    93  	//	i734      = ((i713 << 7 + _101011) << 2 + _11) << 10
    94  	//	i753      = ((_101001 + i734) << 10 + _110111) << 6 + _111001
    95  	//	i776      = ((i753 << 6 + _101001) << 9 + _100111) << 6
    96  	//	i788      = ((_110011 + i776) << 7 + _100001) << 2 + _11
    97  	//	i827      = ((i788 << 21 + 1) << 11 + _101111) << 5
    98  	//	return      ((_1001 + i827) << 7 + _11101) << 46 + _100011
    99  	//
   100  	// Operations: 753 squares 130 multiplies
   101  
   102  	// Allocate Temporaries.
   103  	var (
   104  		t0  = new(Element)
   105  		t1  = new(Element)
   106  		t2  = new(Element)
   107  		t3  = new(Element)
   108  		t4  = new(Element)
   109  		t5  = new(Element)
   110  		t6  = new(Element)
   111  		t7  = new(Element)
   112  		t8  = new(Element)
   113  		t9  = new(Element)
   114  		t10 = new(Element)
   115  		t11 = new(Element)
   116  		t12 = new(Element)
   117  		t13 = new(Element)
   118  		t14 = new(Element)
   119  		t15 = new(Element)
   120  		t16 = new(Element)
   121  		t17 = new(Element)
   122  		t18 = new(Element)
   123  		t19 = new(Element)
   124  		t20 = new(Element)
   125  		t21 = new(Element)
   126  		t22 = new(Element)
   127  		t23 = new(Element)
   128  		t24 = new(Element)
   129  		t25 = new(Element)
   130  		t26 = new(Element)
   131  		t27 = new(Element)
   132  		t28 = new(Element)
   133  		t29 = new(Element)
   134  		t30 = new(Element)
   135  	)
   136  
   137  	// var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30 Element
   138  	// Step 1: t14 = x^0x2
   139  	t14.Square(&x)
   140  
   141  	// Step 2: t3 = x^0x3
   142  	t3.Mul(&x, t14)
   143  
   144  	// Step 3: t18 = x^0x5
   145  	t18.Mul(t14, t3)
   146  
   147  	// Step 4: t12 = x^0x7
   148  	t12.Mul(t14, t18)
   149  
   150  	// Step 5: t1 = x^0x9
   151  	t1.Mul(t14, t12)
   152  
   153  	// Step 6: t13 = x^0xb
   154  	t13.Mul(t14, t1)
   155  
   156  	// Step 7: t26 = x^0xd
   157  	t26.Mul(t14, t13)
   158  
   159  	// Step 8: t24 = x^0xf
   160  	t24.Mul(t14, t26)
   161  
   162  	// Step 9: t17 = x^0x11
   163  	t17.Mul(t14, t24)
   164  
   165  	// Step 10: z = x^0x12
   166  	z.Mul(&x, t17)
   167  
   168  	// Step 11: t19 = x^0x13
   169  	t19.Mul(&x, z)
   170  
   171  	// Step 12: t11 = x^0x17
   172  	t11.Mul(t18, z)
   173  
   174  	// Step 13: t22 = x^0x19
   175  	t22.Mul(t14, t11)
   176  
   177  	// Step 14: t16 = x^0x1b
   178  	t16.Mul(t14, t22)
   179  
   180  	// Step 15: t0 = x^0x1d
   181  	t0.Mul(t14, t16)
   182  
   183  	// Step 16: t28 = x^0x1f
   184  	t28.Mul(t14, t0)
   185  
   186  	// Step 17: t4 = x^0x21
   187  	t4.Mul(t14, t28)
   188  
   189  	// Step 18: z = x^0x23
   190  	z.Mul(t14, t4)
   191  
   192  	// Step 19: t15 = x^0x25
   193  	t15.Mul(t14, z)
   194  
   195  	// Step 20: t6 = x^0x27
   196  	t6.Mul(t14, t15)
   197  
   198  	// Step 21: t7 = x^0x29
   199  	t7.Mul(t14, t6)
   200  
   201  	// Step 22: t10 = x^0x2b
   202  	t10.Mul(t14, t7)
   203  
   204  	// Step 23: t25 = x^0x2d
   205  	t25.Mul(t14, t10)
   206  
   207  	// Step 24: t2 = x^0x2f
   208  	t2.Mul(t14, t25)
   209  
   210  	// Step 25: t27 = x^0x31
   211  	t27.Mul(t14, t2)
   212  
   213  	// Step 26: t5 = x^0x33
   214  	t5.Mul(t14, t27)
   215  
   216  	// Step 27: t29 = x^0x35
   217  	t29.Mul(t14, t5)
   218  
   219  	// Step 28: t9 = x^0x37
   220  	t9.Mul(t14, t29)
   221  
   222  	// Step 29: t8 = x^0x39
   223  	t8.Mul(t14, t9)
   224  
   225  	// Step 30: t21 = x^0x3b
   226  	t21.Mul(t14, t8)
   227  
   228  	// Step 31: t14 = x^0x3d
   229  	t14.Mul(t14, t21)
   230  
   231  	// Step 32: t20 = x^0x7a
   232  	t20.Square(t14)
   233  
   234  	// Step 33: t23 = x^0x7f
   235  	t23.Mul(t18, t20)
   236  
   237  	// Step 34: t20 = x^0xfe
   238  	t20.Square(t23)
   239  
   240  	// Step 35: t20 = x^0xff
   241  	t20.Mul(&x, t20)
   242  
   243  	// Step 36: t30 = x^0x120
   244  	t30.Mul(t4, t20)
   245  
   246  	// Step 39: t30 = x^0x900
   247  	for s := 0; s < 3; s++ {
   248  		t30.Square(t30)
   249  	}
   250  
   251  	// Step 40: t30 = x^0x917
   252  	t30.Mul(t11, t30)
   253  
   254  	// Step 42: t30 = x^0x245c
   255  	for s := 0; s < 2; s++ {
   256  		t30.Square(t30)
   257  	}
   258  
   259  	// Step 43: t30 = x^0x245d
   260  	t30.Mul(&x, t30)
   261  
   262  	// Step 52: t30 = x^0x48ba00
   263  	for s := 0; s < 9; s++ {
   264  		t30.Square(t30)
   265  	}
   266  
   267  	// Step 53: t30 = x^0x48ba09
   268  	t30.Mul(t1, t30)
   269  
   270  	// Step 60: t30 = x^0x245d0480
   271  	for s := 0; s < 7; s++ {
   272  		t30.Square(t30)
   273  	}
   274  
   275  	// Step 61: t30 = x^0x245d049f
   276  	t30.Mul(t28, t30)
   277  
   278  	// Step 65: t30 = x^0x245d049f0
   279  	for s := 0; s < 4; s++ {
   280  		t30.Square(t30)
   281  	}
   282  
   283  	// Step 66: t30 = x^0x245d049f7
   284  	t30.Mul(t12, t30)
   285  
   286  	// Step 75: t30 = x^0x48ba093ee00
   287  	for s := 0; s < 9; s++ {
   288  		t30.Square(t30)
   289  	}
   290  
   291  	// Step 76: t30 = x^0x48ba093ee0f
   292  	t30.Mul(t24, t30)
   293  
   294  	// Step 81: t30 = x^0x9174127dc1e0
   295  	for s := 0; s < 5; s++ {
   296  		t30.Square(t30)
   297  	}
   298  
   299  	// Step 82: t30 = x^0x9174127dc1e7
   300  	t30.Mul(t12, t30)
   301  
   302  	// Step 93: t30 = x^0x48ba093ee0f3800
   303  	for s := 0; s < 11; s++ {
   304  		t30.Square(t30)
   305  	}
   306  
   307  	// Step 94: t30 = x^0x48ba093ee0f382b
   308  	t30.Mul(t10, t30)
   309  
   310  	// Step 101: t30 = x^0x245d049f7079c1580
   311  	for s := 0; s < 7; s++ {
   312  		t30.Square(t30)
   313  	}
   314  
   315  	// Step 102: t30 = x^0x245d049f7079c15a3
   316  	t30.Mul(z, t30)
   317  
   318  	// Step 111: t30 = x^0x48ba093ee0f382b4600
   319  	for s := 0; s < 9; s++ {
   320  		t30.Square(t30)
   321  	}
   322  
   323  	// Step 112: t30 = x^0x48ba093ee0f382b461f
   324  	t30.Mul(t28, t30)
   325  
   326  	// Step 120: t30 = x^0x48ba093ee0f382b461f00
   327  	for s := 0; s < 8; s++ {
   328  		t30.Square(t30)
   329  	}
   330  
   331  	// Step 121: t30 = x^0x48ba093ee0f382b461f25
   332  	t30.Mul(t15, t30)
   333  
   334  	// Step 138: t30 = x^0x9174127dc1e70568c3e4a0000
   335  	for s := 0; s < 17; s++ {
   336  		t30.Square(t30)
   337  	}
   338  
   339  	// Step 139: t30 = x^0x9174127dc1e70568c3e4a0027
   340  	t30.Mul(t6, t30)
   341  
   342  	// Step 143: t30 = x^0x9174127dc1e70568c3e4a00270
   343  	for s := 0; s < 4; s++ {
   344  		t30.Square(t30)
   345  	}
   346  
   347  	// Step 144: t30 = x^0x9174127dc1e70568c3e4a0027d
   348  	t30.Mul(t26, t30)
   349  
   350  	// Step 153: t30 = x^0x122e824fb83ce0ad187c94004fa00
   351  	for s := 0; s < 9; s++ {
   352  		t30.Square(t30)
   353  	}
   354  
   355  	// Step 154: t30 = x^0x122e824fb83ce0ad187c94004faff
   356  	t30.Mul(t20, t30)
   357  
   358  	// Step 161: t30 = x^0x9174127dc1e70568c3e4a0027d7f80
   359  	for s := 0; s < 7; s++ {
   360  		t30.Square(t30)
   361  	}
   362  
   363  	// Step 162: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f
   364  	t30.Mul(t28, t30)
   365  
   366  	// Step 168: t30 = x^0x245d049f7079c15a30f928009f5fe7c0
   367  	for s := 0; s < 6; s++ {
   368  		t30.Square(t30)
   369  	}
   370  
   371  	// Step 169: t30 = x^0x245d049f7079c15a30f928009f5fe7d7
   372  	t30.Mul(t11, t30)
   373  
   374  	// Step 175: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c0
   375  	for s := 0; s < 6; s++ {
   376  		t30.Square(t30)
   377  	}
   378  
   379  	// Step 176: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c9
   380  	t30.Mul(t1, t30)
   381  
   382  	// Step 180: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c90
   383  	for s := 0; s < 4; s++ {
   384  		t30.Square(t30)
   385  	}
   386  
   387  	// Step 181: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c93
   388  	t30.Mul(t3, t30)
   389  
   390  	// Step 187: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c0
   391  	for s := 0; s < 6; s++ {
   392  		t30.Square(t30)
   393  	}
   394  
   395  	// Step 188: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c3
   396  	t30.Mul(t3, t30)
   397  
   398  	// Step 198: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c00
   399  	for s := 0; s < 10; s++ {
   400  		t30.Square(t30)
   401  	}
   402  
   403  	// Step 199: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c35
   404  	t29.Mul(t29, t30)
   405  
   406  	// Step 201: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d4
   407  	for s := 0; s < 2; s++ {
   408  		t29.Square(t29)
   409  	}
   410  
   411  	// Step 202: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d5
   412  	t29.Mul(&x, t29)
   413  
   414  	// Step 213: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a800
   415  	for s := 0; s < 11; s++ {
   416  		t29.Square(t29)
   417  	}
   418  
   419  	// Step 214: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d
   420  	t29.Mul(t0, t29)
   421  
   422  	// Step 220: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0740
   423  	for s := 0; s < 6; s++ {
   424  		t29.Square(t29)
   425  	}
   426  
   427  	// Step 221: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0745
   428  	t29.Mul(t18, t29)
   429  
   430  	// Step 228: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a280
   431  	for s := 0; s < 7; s++ {
   432  		t29.Square(t29)
   433  	}
   434  
   435  	// Step 229: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d
   436  	t29.Mul(t26, t29)
   437  
   438  	// Step 238: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a00
   439  	for s := 0; s < 9; s++ {
   440  		t29.Square(t29)
   441  	}
   442  
   443  	// Step 239: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a21
   444  	t29.Mul(t4, t29)
   445  
   446  	// Step 246: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d1080
   447  	for s := 0; s < 7; s++ {
   448  		t29.Square(t29)
   449  	}
   450  
   451  	// Step 247: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a5
   452  	t29.Mul(t15, t29)
   453  
   454  	// Step 258: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852800
   455  	for s := 0; s < 11; s++ {
   456  		t29.Square(t29)
   457  	}
   458  
   459  	// Step 259: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852827
   460  	t29.Mul(t6, t29)
   461  
   462  	// Step 266: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a3442941380
   463  	for s := 0; s < 7; s++ {
   464  		t29.Square(t29)
   465  	}
   466  
   467  	// Step 267: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af
   468  	t29.Mul(t2, t29)
   469  
   470  	// Step 273: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebc0
   471  	for s := 0; s < 6; s++ {
   472  		t29.Square(t29)
   473  	}
   474  
   475  	// Step 274: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf
   476  	t28.Mul(t28, t29)
   477  
   478  	// Step 287: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be000
   479  	for s := 0; s < 13; s++ {
   480  		t28.Square(t28)
   481  	}
   482  
   483  	// Step 288: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021
   484  	t28.Mul(t4, t28)
   485  
   486  	// Step 294: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef80840
   487  	for s := 0; s < 6; s++ {
   488  		t28.Square(t28)
   489  	}
   490  
   491  	// Step 295: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087b
   492  	t28.Mul(t21, t28)
   493  
   494  	// Step 301: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ec0
   495  	for s := 0; s < 6; s++ {
   496  		t28.Square(t28)
   497  	}
   498  
   499  	// Step 302: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef9
   500  	t28.Mul(t8, t28)
   501  
   502  	// Step 312: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be400
   503  	for s := 0; s < 10; s++ {
   504  		t28.Square(t28)
   505  	}
   506  
   507  	// Step 313: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be417
   508  	t28.Mul(t11, t28)
   509  
   510  	// Step 324: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b800
   511  	for s := 0; s < 11; s++ {
   512  		t28.Square(t28)
   513  	}
   514  
   515  	// Step 325: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d
   516  	t28.Mul(t14, t28)
   517  
   518  	// Step 329: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d0
   519  	for s := 0; s < 4; s++ {
   520  		t28.Square(t28)
   521  	}
   522  
   523  	// Step 330: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd
   524  	t28.Mul(t26, t28)
   525  
   526  	// Step 338: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd00
   527  	for s := 0; s < 8; s++ {
   528  		t28.Square(t28)
   529  	}
   530  
   531  	// Step 339: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31
   532  	t28.Mul(t27, t28)
   533  
   534  	// Step 345: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c40
   535  	for s := 0; s < 6; s++ {
   536  		t28.Square(t28)
   537  	}
   538  
   539  	// Step 346: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71
   540  	t27.Mul(t27, t28)
   541  
   542  	// Step 351: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e20
   543  	for s := 0; s < 5; s++ {
   544  		t27.Square(t27)
   545  	}
   546  
   547  	// Step 352: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39
   548  	t27.Mul(t22, t27)
   549  
   550  	// Step 355: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71c8
   551  	for s := 0; s < 3; s++ {
   552  		t27.Square(t27)
   553  	}
   554  
   555  	// Step 356: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb
   556  	t27.Mul(t3, t27)
   557  
   558  	// Step 366: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c00
   559  	for s := 0; s < 10; s++ {
   560  		t27.Square(t27)
   561  	}
   562  
   563  	// Step 367: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c27
   564  	t27.Mul(t6, t27)
   565  
   566  	// Step 372: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e0
   567  	for s := 0; s < 5; s++ {
   568  		t27.Square(t27)
   569  	}
   570  
   571  	// Step 373: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e9
   572  	t27.Mul(t1, t27)
   573  
   574  	// Step 381: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e900
   575  	for s := 0; s < 8; s++ {
   576  		t27.Square(t27)
   577  	}
   578  
   579  	// Step 382: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e919
   580  	t27.Mul(t22, t27)
   581  
   582  	// Step 392: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a46400
   583  	for s := 0; s < 10; s++ {
   584  		t27.Square(t27)
   585  	}
   586  
   587  	// Step 393: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f
   588  	t27.Mul(t24, t27)
   589  
   590  	// Step 400: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d2320780
   591  	for s := 0; s < 7; s++ {
   592  		t27.Square(t27)
   593  	}
   594  
   595  	// Step 401: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d
   596  	t27.Mul(t0, t27)
   597  
   598  	// Step 407: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e740
   599  	for s := 0; s < 6; s++ {
   600  		t27.Square(t27)
   601  	}
   602  
   603  	// Step 408: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d
   604  	t27.Mul(t0, t27)
   605  
   606  	// Step 417: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903ceba00
   607  	for s := 0; s < 9; s++ {
   608  		t27.Square(t27)
   609  	}
   610  
   611  	// Step 418: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff
   612  	t27.Mul(t20, t27)
   613  
   614  	// Step 426: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff00
   615  	for s := 0; s < 8; s++ {
   616  		t27.Square(t27)
   617  	}
   618  
   619  	// Step 427: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25
   620  	t27.Mul(t15, t27)
   621  
   622  	// Step 433: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc940
   623  	for s := 0; s < 6; s++ {
   624  		t27.Square(t27)
   625  	}
   626  
   627  	// Step 434: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d
   628  	t27.Mul(t25, t27)
   629  
   630  	// Step 444: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b400
   631  	for s := 0; s < 10; s++ {
   632  		t27.Square(t27)
   633  	}
   634  
   635  	// Step 445: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423
   636  	t27.Mul(z, t27)
   637  
   638  	// Step 454: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684600
   639  	for s := 0; s < 9; s++ {
   640  		t27.Square(t27)
   641  	}
   642  
   643  	// Step 455: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684609
   644  	t27.Mul(t1, t27)
   645  
   646  	// Step 463: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b68460900
   647  	for s := 0; s < 8; s++ {
   648  		t27.Square(t27)
   649  	}
   650  
   651  	// Step 464: t26 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d
   652  	t26.Mul(t26, t27)
   653  
   654  	// Step 473: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a00
   655  	for s := 0; s < 9; s++ {
   656  		t26.Square(t26)
   657  	}
   658  
   659  	// Step 474: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a27
   660  	t26.Mul(t6, t26)
   661  
   662  	// Step 482: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2700
   663  	for s := 0; s < 8; s++ {
   664  		t26.Square(t26)
   665  	}
   666  
   667  	// Step 483: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723
   668  	t26.Mul(z, t26)
   669  
   670  	// Step 489: t26 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8c0
   671  	for s := 0; s < 6; s++ {
   672  		t26.Square(t26)
   673  	}
   674  
   675  	// Step 490: t25 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed
   676  	t25.Mul(t25, t26)
   677  
   678  	// Step 499: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da00
   679  	for s := 0; s < 9; s++ {
   680  		t25.Square(t25)
   681  	}
   682  
   683  	// Step 500: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25
   684  	t25.Mul(t15, t25)
   685  
   686  	// Step 504: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da250
   687  	for s := 0; s < 4; s++ {
   688  		t25.Square(t25)
   689  	}
   690  
   691  	// Step 505: t24 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f
   692  	t24.Mul(t24, t25)
   693  
   694  	// Step 514: t24 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be00
   695  	for s := 0; s < 9; s++ {
   696  		t24.Square(t24)
   697  	}
   698  
   699  	// Step 515: t23 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f
   700  	t23.Mul(t23, t24)
   701  
   702  	// Step 521: t23 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fc0
   703  	for s := 0; s < 6; s++ {
   704  		t23.Square(t23)
   705  	}
   706  
   707  	// Step 522: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9
   708  	t22.Mul(t22, t23)
   709  
   710  	// Step 530: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd900
   711  	for s := 0; s < 8; s++ {
   712  		t22.Square(t22)
   713  	}
   714  
   715  	// Step 531: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd907
   716  	t22.Mul(t12, t22)
   717  
   718  	// Step 540: t22 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e00
   719  	for s := 0; s < 9; s++ {
   720  		t22.Square(t22)
   721  	}
   722  
   723  	// Step 541: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b
   724  	t21.Mul(t21, t22)
   725  
   726  	// Step 546: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c760
   727  	for s := 0; s < 5; s++ {
   728  		t21.Square(t21)
   729  	}
   730  
   731  	// Step 547: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c773
   732  	t21.Mul(t19, t21)
   733  
   734  	// Step 554: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b980
   735  	for s := 0; s < 7; s++ {
   736  		t21.Square(t21)
   737  	}
   738  
   739  	// Step 555: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7
   740  	t21.Mul(t6, t21)
   741  
   742  	// Step 560: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734e0
   743  	for s := 0; s < 5; s++ {
   744  		t21.Square(t21)
   745  	}
   746  
   747  	// Step 561: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f7
   748  	t21.Mul(t11, t21)
   749  
   750  	// Step 570: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee00
   751  	for s := 0; s < 9; s++ {
   752  		t21.Square(t21)
   753  	}
   754  
   755  	// Step 571: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39
   756  	t21.Mul(t8, t21)
   757  
   758  	// Step 577: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e40
   759  	for s := 0; s < 6; s++ {
   760  		t21.Square(t21)
   761  	}
   762  
   763  	// Step 578: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d
   764  	t21.Mul(t14, t21)
   765  
   766  	// Step 587: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfa00
   767  	for s := 0; s < 9; s++ {
   768  		t21.Square(t21)
   769  	}
   770  
   771  	// Step 588: t20 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaff
   772  	t20.Mul(t20, t21)
   773  
   774  	// Step 590: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebfc
   775  	for s := 0; s < 2; s++ {
   776  		t20.Square(t20)
   777  	}
   778  
   779  	// Step 591: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff
   780  	t20.Mul(t3, t20)
   781  
   782  	// Step 598: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff80
   783  	for s := 0; s < 7; s++ {
   784  		t20.Square(t20)
   785  	}
   786  
   787  	// Step 599: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff97
   788  	t20.Mul(t11, t20)
   789  
   790  	// Step 605: t20 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5c0
   791  	for s := 0; s < 6; s++ {
   792  		t20.Square(t20)
   793  	}
   794  
   795  	// Step 606: t19 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d3
   796  	t19.Mul(t19, t20)
   797  
   798  	// Step 612: t19 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c0
   799  	for s := 0; s < 6; s++ {
   800  		t19.Square(t19)
   801  	}
   802  
   803  	// Step 613: t18 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c5
   804  	t18.Mul(t18, t19)
   805  
   806  	// Step 622: t18 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a00
   807  	for s := 0; s < 9; s++ {
   808  		t18.Square(t18)
   809  	}
   810  
   811  	// Step 623: t17 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a11
   812  	t17.Mul(t17, t18)
   813  
   814  	// Step 629: t17 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba628440
   815  	for s := 0; s < 6; s++ {
   816  		t17.Square(t17)
   817  	}
   818  
   819  	// Step 630: t16 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b
   820  	t16.Mul(t16, t17)
   821  
   822  	// Step 640: t16 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c00
   823  	for s := 0; s < 10; s++ {
   824  		t16.Square(t16)
   825  	}
   826  
   827  	// Step 641: t15 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25
   828  	t15.Mul(t15, t16)
   829  
   830  	// Step 648: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b61280
   831  	for s := 0; s < 7; s++ {
   832  		t15.Square(t15)
   833  	}
   834  
   835  	// Step 649: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b3
   836  	t15.Mul(t5, t15)
   837  
   838  	// Step 657: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b300
   839  	for s := 0; s < 8; s++ {
   840  		t15.Square(t15)
   841  	}
   842  
   843  	// Step 658: t14 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d
   844  	t14.Mul(t14, t15)
   845  
   846  	// Step 665: t14 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599e80
   847  	for s := 0; s < 7; s++ {
   848  		t14.Square(t14)
   849  	}
   850  
   851  	// Step 666: t14 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3
   852  	t14.Mul(z, t14)
   853  
   854  	// Step 669: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf518
   855  	for s := 0; s < 3; s++ {
   856  		t14.Square(t14)
   857  	}
   858  
   859  	// Step 670: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f
   860  	t14.Mul(t12, t14)
   861  
   862  	// Step 680: t14 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c00
   863  	for s := 0; s < 10; s++ {
   864  		t14.Square(t14)
   865  	}
   866  
   867  	// Step 681: t13 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b
   868  	t13.Mul(t13, t14)
   869  
   870  	// Step 692: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05800
   871  	for s := 0; s < 11; s++ {
   872  		t13.Square(t13)
   873  	}
   874  
   875  	// Step 693: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833
   876  	t13.Mul(t5, t13)
   877  
   878  	// Step 696: t13 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c198
   879  	for s := 0; s < 3; s++ {
   880  		t13.Square(t13)
   881  	}
   882  
   883  	// Step 697: t12 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f
   884  	t12.Mul(t12, t13)
   885  
   886  	// Step 706: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e00
   887  	for s := 0; s < 9; s++ {
   888  		t12.Square(t12)
   889  	}
   890  
   891  	// Step 707: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2b
   892  	t12.Mul(t10, t12)
   893  
   894  	// Step 712: t12 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c560
   895  	for s := 0; s < 5; s++ {
   896  		t12.Square(t12)
   897  	}
   898  
   899  	// Step 713: t11 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577
   900  	t11.Mul(t11, t12)
   901  
   902  	// Step 720: t11 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bb80
   903  	for s := 0; s < 7; s++ {
   904  		t11.Square(t11)
   905  	}
   906  
   907  	// Step 721: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbab
   908  	t10.Mul(t10, t11)
   909  
   910  	// Step 723: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeac
   911  	for s := 0; s < 2; s++ {
   912  		t10.Square(t10)
   913  	}
   914  
   915  	// Step 724: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf
   916  	t10.Mul(t3, t10)
   917  
   918  	// Step 734: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc00
   919  	for s := 0; s < 10; s++ {
   920  		t10.Square(t10)
   921  	}
   922  
   923  	// Step 735: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc29
   924  	t10.Mul(t7, t10)
   925  
   926  	// Step 745: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a400
   927  	for s := 0; s < 10; s++ {
   928  		t10.Square(t10)
   929  	}
   930  
   931  	// Step 746: t9 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437
   932  	t9.Mul(t9, t10)
   933  
   934  	// Step 752: t9 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290dc0
   935  	for s := 0; s < 6; s++ {
   936  		t9.Square(t9)
   937  	}
   938  
   939  	// Step 753: t8 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9
   940  	t8.Mul(t8, t9)
   941  
   942  	// Step 759: t8 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e40
   943  	for s := 0; s < 6; s++ {
   944  		t8.Square(t8)
   945  	}
   946  
   947  	// Step 760: t7 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e69
   948  	t7.Mul(t7, t8)
   949  
   950  	// Step 769: t7 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd200
   951  	for s := 0; s < 9; s++ {
   952  		t7.Square(t7)
   953  	}
   954  
   955  	// Step 770: t6 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227
   956  	t6.Mul(t6, t7)
   957  
   958  	// Step 776: t6 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489c0
   959  	for s := 0; s < 6; s++ {
   960  		t6.Square(t6)
   961  	}
   962  
   963  	// Step 777: t5 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f3
   964  	t5.Mul(t5, t6)
   965  
   966  	// Step 784: t5 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f980
   967  	for s := 0; s < 7; s++ {
   968  		t5.Square(t5)
   969  	}
   970  
   971  	// Step 785: t4 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1
   972  	t4.Mul(t4, t5)
   973  
   974  	// Step 787: t4 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e684
   975  	for s := 0; s < 2; s++ {
   976  		t4.Square(t4)
   977  	}
   978  
   979  	// Step 788: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e687
   980  	t3.Mul(t3, t4)
   981  
   982  	// Step 809: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00000
   983  	for s := 0; s < 21; s++ {
   984  		t3.Square(t3)
   985  	}
   986  
   987  	// Step 810: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00001
   988  	t3.Mul(&x, t3)
   989  
   990  	// Step 821: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e68700000800
   991  	for s := 0; s < 11; s++ {
   992  		t3.Square(t3)
   993  	}
   994  
   995  	// Step 822: t2 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f
   996  	t2.Mul(t2, t3)
   997  
   998  	// Step 827: t2 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e0
   999  	for s := 0; s < 5; s++ {
  1000  		t2.Square(t2)
  1001  	}
  1002  
  1003  	// Step 828: t1 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e9
  1004  	t1.Mul(t1, t2)
  1005  
  1006  	// Step 835: t1 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f480
  1007  	for s := 0; s < 7; s++ {
  1008  		t1.Square(t1)
  1009  	}
  1010  
  1011  	// Step 836: t0 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f49d
  1012  	t0.Mul(t0, t1)
  1013  
  1014  	// Step 882: t0 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1c000020bd27400000000000
  1015  	for s := 0; s < 46; s++ {
  1016  		t0.Square(t0)
  1017  	}
  1018  
  1019  	// Step 883: z = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1c000020bd27400000000023
  1020  	z.Mul(z, t0)
  1021  
  1022  	return z
  1023  }
  1024  
  1025  // expByLegendreExp is equivalent to z.Exp(x, 9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f34380000417a4e800000000045)
  1026  //
  1027  // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain
  1028  func (z *Element) expByLegendreExp(x Element) *Element {
  1029  	// addition chain:
  1030  	//
  1031  	//	_10       = 2*1
  1032  	//	_11       = 1 + _10
  1033  	//	_101      = _10 + _11
  1034  	//	_111      = _10 + _101
  1035  	//	_1001     = _10 + _111
  1036  	//	_1011     = _10 + _1001
  1037  	//	_1101     = _10 + _1011
  1038  	//	_1111     = _10 + _1101
  1039  	//	_10001    = _10 + _1111
  1040  	//	_10010    = 1 + _10001
  1041  	//	_10011    = 1 + _10010
  1042  	//	_10111    = _101 + _10010
  1043  	//	_11001    = _10 + _10111
  1044  	//	_11011    = _10 + _11001
  1045  	//	_11101    = _10 + _11011
  1046  	//	_11111    = _10 + _11101
  1047  	//	_100001   = _10 + _11111
  1048  	//	_100011   = _10 + _100001
  1049  	//	_100101   = _10 + _100011
  1050  	//	_100111   = _10 + _100101
  1051  	//	_101001   = _10 + _100111
  1052  	//	_101011   = _10 + _101001
  1053  	//	_101101   = _10 + _101011
  1054  	//	_101111   = _10 + _101101
  1055  	//	_110001   = _10 + _101111
  1056  	//	_110011   = _10 + _110001
  1057  	//	_110101   = _10 + _110011
  1058  	//	_110111   = _10 + _110101
  1059  	//	_111001   = _10 + _110111
  1060  	//	_111011   = _10 + _111001
  1061  	//	_111101   = _10 + _111011
  1062  	//	_1111010  = 2*_111101
  1063  	//	_1111111  = _101 + _1111010
  1064  	//	_11111110 = 2*_1111111
  1065  	//	_11111111 = 1 + _11111110
  1066  	//	i43       = ((_100001 + _11111111) << 3 + _10111) << 2 + 1
  1067  	//	i65       = ((i43 << 9 + _1001) << 7 + _11111) << 4
  1068  	//	i82       = ((_111 + i65) << 9 + _1111) << 5 + _111
  1069  	//	i111      = ((i82 << 11 + _101011) << 7 + _100011) << 9
  1070  	//	i139      = ((_11111 + i111) << 8 + _100101) << 17 + _100111
  1071  	//	i161      = ((i139 << 4 + _1101) << 9 + _11111111) << 7
  1072  	//	i176      = ((_11111 + i161) << 6 + _10111) << 6 + _1001
  1073  	//	i198      = ((i176 << 4 + _11) << 6 + _11) << 10
  1074  	//	i214      = ((_110101 + i198) << 2 + 1) << 11 + _11101
  1075  	//	i238      = ((i214 << 6 + _101) << 7 + _1101) << 9
  1076  	//	i259      = ((_100001 + i238) << 7 + _100101) << 11 + _100111
  1077  	//	i287      = ((i259 << 7 + _101111) << 6 + _11111) << 13
  1078  	//	i302      = ((_100001 + i287) << 6 + _111011) << 6 + _111001
  1079  	//	i329      = ((i302 << 10 + _10111) << 11 + _111101) << 4
  1080  	//	i346      = ((_1101 + i329) << 8 + _110001) << 6 + _110001
  1081  	//	i366      = ((i346 << 5 + _11001) << 3 + _11) << 10
  1082  	//	i382      = ((_100111 + i366) << 5 + _1001) << 8 + _11001
  1083  	//	i407      = ((i382 << 10 + _1111) << 7 + _11101) << 6
  1084  	//	i427      = ((_11101 + i407) << 9 + _11111111) << 8 + _100101
  1085  	//	i454      = ((i427 << 6 + _101101) << 10 + _100011) << 9
  1086  	//	i474      = ((_1001 + i454) << 8 + _1101) << 9 + _100111
  1087  	//	i499      = ((i474 << 8 + _100011) << 6 + _101101) << 9
  1088  	//	i515      = ((_100101 + i499) << 4 + _1111) << 9 + _1111111
  1089  	//	i540      = ((i515 << 6 + _11001) << 8 + _111) << 9
  1090  	//	i555      = ((_111011 + i540) << 5 + _10011) << 7 + _100111
  1091  	//	i577      = ((i555 << 5 + _10111) << 9 + _111001) << 6
  1092  	//	i591      = ((_111101 + i577) << 9 + _11111111) << 2 + _11
  1093  	//	i612      = ((i591 << 7 + _10111) << 6 + _10011) << 6
  1094  	//	i630      = ((_101 + i612) << 9 + _10001) << 6 + _11011
  1095  	//	i657      = ((i630 << 10 + _100101) << 7 + _110011) << 8
  1096  	//	i670      = ((_111101 + i657) << 7 + _100011) << 3 + _111
  1097  	//	i696      = ((i670 << 10 + _1011) << 11 + _110011) << 3
  1098  	//	i713      = ((_111 + i696) << 9 + _101011) << 5 + _10111
  1099  	//	i734      = ((i713 << 7 + _101011) << 2 + _11) << 10
  1100  	//	i753      = ((_101001 + i734) << 10 + _110111) << 6 + _111001
  1101  	//	i776      = ((i753 << 6 + _101001) << 9 + _100111) << 6
  1102  	//	i788      = ((_110011 + i776) << 7 + _100001) << 2 + _11
  1103  	//	i827      = ((i788 << 21 + 1) << 11 + _101111) << 5
  1104  	//	i882      = ((_1001 + i827) << 7 + _11101) << 45 + _10001
  1105  	//	return      i882 << 2 + 1
  1106  	//
  1107  	// Operations: 754 squares 131 multiplies
  1108  
  1109  	// Allocate Temporaries.
  1110  	var (
  1111  		t0  = new(Element)
  1112  		t1  = new(Element)
  1113  		t2  = new(Element)
  1114  		t3  = new(Element)
  1115  		t4  = new(Element)
  1116  		t5  = new(Element)
  1117  		t6  = new(Element)
  1118  		t7  = new(Element)
  1119  		t8  = new(Element)
  1120  		t9  = new(Element)
  1121  		t10 = new(Element)
  1122  		t11 = new(Element)
  1123  		t12 = new(Element)
  1124  		t13 = new(Element)
  1125  		t14 = new(Element)
  1126  		t15 = new(Element)
  1127  		t16 = new(Element)
  1128  		t17 = new(Element)
  1129  		t18 = new(Element)
  1130  		t19 = new(Element)
  1131  		t20 = new(Element)
  1132  		t21 = new(Element)
  1133  		t22 = new(Element)
  1134  		t23 = new(Element)
  1135  		t24 = new(Element)
  1136  		t25 = new(Element)
  1137  		t26 = new(Element)
  1138  		t27 = new(Element)
  1139  		t28 = new(Element)
  1140  		t29 = new(Element)
  1141  		t30 = new(Element)
  1142  	)
  1143  
  1144  	// var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30 Element
  1145  	// Step 1: t15 = x^0x2
  1146  	t15.Square(&x)
  1147  
  1148  	// Step 2: t3 = x^0x3
  1149  	t3.Mul(&x, t15)
  1150  
  1151  	// Step 3: t18 = x^0x5
  1152  	t18.Mul(t15, t3)
  1153  
  1154  	// Step 4: t12 = x^0x7
  1155  	t12.Mul(t15, t18)
  1156  
  1157  	// Step 5: t1 = x^0x9
  1158  	t1.Mul(t15, t12)
  1159  
  1160  	// Step 6: t13 = x^0xb
  1161  	t13.Mul(t15, t1)
  1162  
  1163  	// Step 7: t26 = x^0xd
  1164  	t26.Mul(t15, t13)
  1165  
  1166  	// Step 8: t24 = x^0xf
  1167  	t24.Mul(t15, t26)
  1168  
  1169  	// Step 9: z = x^0x11
  1170  	z.Mul(t15, t24)
  1171  
  1172  	// Step 10: t0 = x^0x12
  1173  	t0.Mul(&x, z)
  1174  
  1175  	// Step 11: t19 = x^0x13
  1176  	t19.Mul(&x, t0)
  1177  
  1178  	// Step 12: t11 = x^0x17
  1179  	t11.Mul(t18, t0)
  1180  
  1181  	// Step 13: t22 = x^0x19
  1182  	t22.Mul(t15, t11)
  1183  
  1184  	// Step 14: t17 = x^0x1b
  1185  	t17.Mul(t15, t22)
  1186  
  1187  	// Step 15: t0 = x^0x1d
  1188  	t0.Mul(t15, t17)
  1189  
  1190  	// Step 16: t28 = x^0x1f
  1191  	t28.Mul(t15, t0)
  1192  
  1193  	// Step 17: t4 = x^0x21
  1194  	t4.Mul(t15, t28)
  1195  
  1196  	// Step 18: t14 = x^0x23
  1197  	t14.Mul(t15, t4)
  1198  
  1199  	// Step 19: t16 = x^0x25
  1200  	t16.Mul(t15, t14)
  1201  
  1202  	// Step 20: t6 = x^0x27
  1203  	t6.Mul(t15, t16)
  1204  
  1205  	// Step 21: t7 = x^0x29
  1206  	t7.Mul(t15, t6)
  1207  
  1208  	// Step 22: t10 = x^0x2b
  1209  	t10.Mul(t15, t7)
  1210  
  1211  	// Step 23: t25 = x^0x2d
  1212  	t25.Mul(t15, t10)
  1213  
  1214  	// Step 24: t2 = x^0x2f
  1215  	t2.Mul(t15, t25)
  1216  
  1217  	// Step 25: t27 = x^0x31
  1218  	t27.Mul(t15, t2)
  1219  
  1220  	// Step 26: t5 = x^0x33
  1221  	t5.Mul(t15, t27)
  1222  
  1223  	// Step 27: t29 = x^0x35
  1224  	t29.Mul(t15, t5)
  1225  
  1226  	// Step 28: t9 = x^0x37
  1227  	t9.Mul(t15, t29)
  1228  
  1229  	// Step 29: t8 = x^0x39
  1230  	t8.Mul(t15, t9)
  1231  
  1232  	// Step 30: t21 = x^0x3b
  1233  	t21.Mul(t15, t8)
  1234  
  1235  	// Step 31: t15 = x^0x3d
  1236  	t15.Mul(t15, t21)
  1237  
  1238  	// Step 32: t20 = x^0x7a
  1239  	t20.Square(t15)
  1240  
  1241  	// Step 33: t23 = x^0x7f
  1242  	t23.Mul(t18, t20)
  1243  
  1244  	// Step 34: t20 = x^0xfe
  1245  	t20.Square(t23)
  1246  
  1247  	// Step 35: t20 = x^0xff
  1248  	t20.Mul(&x, t20)
  1249  
  1250  	// Step 36: t30 = x^0x120
  1251  	t30.Mul(t4, t20)
  1252  
  1253  	// Step 39: t30 = x^0x900
  1254  	for s := 0; s < 3; s++ {
  1255  		t30.Square(t30)
  1256  	}
  1257  
  1258  	// Step 40: t30 = x^0x917
  1259  	t30.Mul(t11, t30)
  1260  
  1261  	// Step 42: t30 = x^0x245c
  1262  	for s := 0; s < 2; s++ {
  1263  		t30.Square(t30)
  1264  	}
  1265  
  1266  	// Step 43: t30 = x^0x245d
  1267  	t30.Mul(&x, t30)
  1268  
  1269  	// Step 52: t30 = x^0x48ba00
  1270  	for s := 0; s < 9; s++ {
  1271  		t30.Square(t30)
  1272  	}
  1273  
  1274  	// Step 53: t30 = x^0x48ba09
  1275  	t30.Mul(t1, t30)
  1276  
  1277  	// Step 60: t30 = x^0x245d0480
  1278  	for s := 0; s < 7; s++ {
  1279  		t30.Square(t30)
  1280  	}
  1281  
  1282  	// Step 61: t30 = x^0x245d049f
  1283  	t30.Mul(t28, t30)
  1284  
  1285  	// Step 65: t30 = x^0x245d049f0
  1286  	for s := 0; s < 4; s++ {
  1287  		t30.Square(t30)
  1288  	}
  1289  
  1290  	// Step 66: t30 = x^0x245d049f7
  1291  	t30.Mul(t12, t30)
  1292  
  1293  	// Step 75: t30 = x^0x48ba093ee00
  1294  	for s := 0; s < 9; s++ {
  1295  		t30.Square(t30)
  1296  	}
  1297  
  1298  	// Step 76: t30 = x^0x48ba093ee0f
  1299  	t30.Mul(t24, t30)
  1300  
  1301  	// Step 81: t30 = x^0x9174127dc1e0
  1302  	for s := 0; s < 5; s++ {
  1303  		t30.Square(t30)
  1304  	}
  1305  
  1306  	// Step 82: t30 = x^0x9174127dc1e7
  1307  	t30.Mul(t12, t30)
  1308  
  1309  	// Step 93: t30 = x^0x48ba093ee0f3800
  1310  	for s := 0; s < 11; s++ {
  1311  		t30.Square(t30)
  1312  	}
  1313  
  1314  	// Step 94: t30 = x^0x48ba093ee0f382b
  1315  	t30.Mul(t10, t30)
  1316  
  1317  	// Step 101: t30 = x^0x245d049f7079c1580
  1318  	for s := 0; s < 7; s++ {
  1319  		t30.Square(t30)
  1320  	}
  1321  
  1322  	// Step 102: t30 = x^0x245d049f7079c15a3
  1323  	t30.Mul(t14, t30)
  1324  
  1325  	// Step 111: t30 = x^0x48ba093ee0f382b4600
  1326  	for s := 0; s < 9; s++ {
  1327  		t30.Square(t30)
  1328  	}
  1329  
  1330  	// Step 112: t30 = x^0x48ba093ee0f382b461f
  1331  	t30.Mul(t28, t30)
  1332  
  1333  	// Step 120: t30 = x^0x48ba093ee0f382b461f00
  1334  	for s := 0; s < 8; s++ {
  1335  		t30.Square(t30)
  1336  	}
  1337  
  1338  	// Step 121: t30 = x^0x48ba093ee0f382b461f25
  1339  	t30.Mul(t16, t30)
  1340  
  1341  	// Step 138: t30 = x^0x9174127dc1e70568c3e4a0000
  1342  	for s := 0; s < 17; s++ {
  1343  		t30.Square(t30)
  1344  	}
  1345  
  1346  	// Step 139: t30 = x^0x9174127dc1e70568c3e4a0027
  1347  	t30.Mul(t6, t30)
  1348  
  1349  	// Step 143: t30 = x^0x9174127dc1e70568c3e4a00270
  1350  	for s := 0; s < 4; s++ {
  1351  		t30.Square(t30)
  1352  	}
  1353  
  1354  	// Step 144: t30 = x^0x9174127dc1e70568c3e4a0027d
  1355  	t30.Mul(t26, t30)
  1356  
  1357  	// Step 153: t30 = x^0x122e824fb83ce0ad187c94004fa00
  1358  	for s := 0; s < 9; s++ {
  1359  		t30.Square(t30)
  1360  	}
  1361  
  1362  	// Step 154: t30 = x^0x122e824fb83ce0ad187c94004faff
  1363  	t30.Mul(t20, t30)
  1364  
  1365  	// Step 161: t30 = x^0x9174127dc1e70568c3e4a0027d7f80
  1366  	for s := 0; s < 7; s++ {
  1367  		t30.Square(t30)
  1368  	}
  1369  
  1370  	// Step 162: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f
  1371  	t30.Mul(t28, t30)
  1372  
  1373  	// Step 168: t30 = x^0x245d049f7079c15a30f928009f5fe7c0
  1374  	for s := 0; s < 6; s++ {
  1375  		t30.Square(t30)
  1376  	}
  1377  
  1378  	// Step 169: t30 = x^0x245d049f7079c15a30f928009f5fe7d7
  1379  	t30.Mul(t11, t30)
  1380  
  1381  	// Step 175: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c0
  1382  	for s := 0; s < 6; s++ {
  1383  		t30.Square(t30)
  1384  	}
  1385  
  1386  	// Step 176: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c9
  1387  	t30.Mul(t1, t30)
  1388  
  1389  	// Step 180: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c90
  1390  	for s := 0; s < 4; s++ {
  1391  		t30.Square(t30)
  1392  	}
  1393  
  1394  	// Step 181: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c93
  1395  	t30.Mul(t3, t30)
  1396  
  1397  	// Step 187: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c0
  1398  	for s := 0; s < 6; s++ {
  1399  		t30.Square(t30)
  1400  	}
  1401  
  1402  	// Step 188: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c3
  1403  	t30.Mul(t3, t30)
  1404  
  1405  	// Step 198: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c00
  1406  	for s := 0; s < 10; s++ {
  1407  		t30.Square(t30)
  1408  	}
  1409  
  1410  	// Step 199: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c35
  1411  	t29.Mul(t29, t30)
  1412  
  1413  	// Step 201: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d4
  1414  	for s := 0; s < 2; s++ {
  1415  		t29.Square(t29)
  1416  	}
  1417  
  1418  	// Step 202: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d5
  1419  	t29.Mul(&x, t29)
  1420  
  1421  	// Step 213: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a800
  1422  	for s := 0; s < 11; s++ {
  1423  		t29.Square(t29)
  1424  	}
  1425  
  1426  	// Step 214: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d
  1427  	t29.Mul(t0, t29)
  1428  
  1429  	// Step 220: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0740
  1430  	for s := 0; s < 6; s++ {
  1431  		t29.Square(t29)
  1432  	}
  1433  
  1434  	// Step 221: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0745
  1435  	t29.Mul(t18, t29)
  1436  
  1437  	// Step 228: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a280
  1438  	for s := 0; s < 7; s++ {
  1439  		t29.Square(t29)
  1440  	}
  1441  
  1442  	// Step 229: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d
  1443  	t29.Mul(t26, t29)
  1444  
  1445  	// Step 238: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a00
  1446  	for s := 0; s < 9; s++ {
  1447  		t29.Square(t29)
  1448  	}
  1449  
  1450  	// Step 239: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a21
  1451  	t29.Mul(t4, t29)
  1452  
  1453  	// Step 246: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d1080
  1454  	for s := 0; s < 7; s++ {
  1455  		t29.Square(t29)
  1456  	}
  1457  
  1458  	// Step 247: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a5
  1459  	t29.Mul(t16, t29)
  1460  
  1461  	// Step 258: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852800
  1462  	for s := 0; s < 11; s++ {
  1463  		t29.Square(t29)
  1464  	}
  1465  
  1466  	// Step 259: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852827
  1467  	t29.Mul(t6, t29)
  1468  
  1469  	// Step 266: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a3442941380
  1470  	for s := 0; s < 7; s++ {
  1471  		t29.Square(t29)
  1472  	}
  1473  
  1474  	// Step 267: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af
  1475  	t29.Mul(t2, t29)
  1476  
  1477  	// Step 273: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebc0
  1478  	for s := 0; s < 6; s++ {
  1479  		t29.Square(t29)
  1480  	}
  1481  
  1482  	// Step 274: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf
  1483  	t28.Mul(t28, t29)
  1484  
  1485  	// Step 287: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be000
  1486  	for s := 0; s < 13; s++ {
  1487  		t28.Square(t28)
  1488  	}
  1489  
  1490  	// Step 288: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021
  1491  	t28.Mul(t4, t28)
  1492  
  1493  	// Step 294: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef80840
  1494  	for s := 0; s < 6; s++ {
  1495  		t28.Square(t28)
  1496  	}
  1497  
  1498  	// Step 295: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087b
  1499  	t28.Mul(t21, t28)
  1500  
  1501  	// Step 301: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ec0
  1502  	for s := 0; s < 6; s++ {
  1503  		t28.Square(t28)
  1504  	}
  1505  
  1506  	// Step 302: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef9
  1507  	t28.Mul(t8, t28)
  1508  
  1509  	// Step 312: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be400
  1510  	for s := 0; s < 10; s++ {
  1511  		t28.Square(t28)
  1512  	}
  1513  
  1514  	// Step 313: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be417
  1515  	t28.Mul(t11, t28)
  1516  
  1517  	// Step 324: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b800
  1518  	for s := 0; s < 11; s++ {
  1519  		t28.Square(t28)
  1520  	}
  1521  
  1522  	// Step 325: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d
  1523  	t28.Mul(t15, t28)
  1524  
  1525  	// Step 329: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d0
  1526  	for s := 0; s < 4; s++ {
  1527  		t28.Square(t28)
  1528  	}
  1529  
  1530  	// Step 330: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd
  1531  	t28.Mul(t26, t28)
  1532  
  1533  	// Step 338: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd00
  1534  	for s := 0; s < 8; s++ {
  1535  		t28.Square(t28)
  1536  	}
  1537  
  1538  	// Step 339: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31
  1539  	t28.Mul(t27, t28)
  1540  
  1541  	// Step 345: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c40
  1542  	for s := 0; s < 6; s++ {
  1543  		t28.Square(t28)
  1544  	}
  1545  
  1546  	// Step 346: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71
  1547  	t27.Mul(t27, t28)
  1548  
  1549  	// Step 351: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e20
  1550  	for s := 0; s < 5; s++ {
  1551  		t27.Square(t27)
  1552  	}
  1553  
  1554  	// Step 352: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39
  1555  	t27.Mul(t22, t27)
  1556  
  1557  	// Step 355: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71c8
  1558  	for s := 0; s < 3; s++ {
  1559  		t27.Square(t27)
  1560  	}
  1561  
  1562  	// Step 356: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb
  1563  	t27.Mul(t3, t27)
  1564  
  1565  	// Step 366: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c00
  1566  	for s := 0; s < 10; s++ {
  1567  		t27.Square(t27)
  1568  	}
  1569  
  1570  	// Step 367: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c27
  1571  	t27.Mul(t6, t27)
  1572  
  1573  	// Step 372: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e0
  1574  	for s := 0; s < 5; s++ {
  1575  		t27.Square(t27)
  1576  	}
  1577  
  1578  	// Step 373: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e9
  1579  	t27.Mul(t1, t27)
  1580  
  1581  	// Step 381: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e900
  1582  	for s := 0; s < 8; s++ {
  1583  		t27.Square(t27)
  1584  	}
  1585  
  1586  	// Step 382: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e919
  1587  	t27.Mul(t22, t27)
  1588  
  1589  	// Step 392: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a46400
  1590  	for s := 0; s < 10; s++ {
  1591  		t27.Square(t27)
  1592  	}
  1593  
  1594  	// Step 393: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f
  1595  	t27.Mul(t24, t27)
  1596  
  1597  	// Step 400: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d2320780
  1598  	for s := 0; s < 7; s++ {
  1599  		t27.Square(t27)
  1600  	}
  1601  
  1602  	// Step 401: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d
  1603  	t27.Mul(t0, t27)
  1604  
  1605  	// Step 407: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e740
  1606  	for s := 0; s < 6; s++ {
  1607  		t27.Square(t27)
  1608  	}
  1609  
  1610  	// Step 408: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d
  1611  	t27.Mul(t0, t27)
  1612  
  1613  	// Step 417: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903ceba00
  1614  	for s := 0; s < 9; s++ {
  1615  		t27.Square(t27)
  1616  	}
  1617  
  1618  	// Step 418: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff
  1619  	t27.Mul(t20, t27)
  1620  
  1621  	// Step 426: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff00
  1622  	for s := 0; s < 8; s++ {
  1623  		t27.Square(t27)
  1624  	}
  1625  
  1626  	// Step 427: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25
  1627  	t27.Mul(t16, t27)
  1628  
  1629  	// Step 433: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc940
  1630  	for s := 0; s < 6; s++ {
  1631  		t27.Square(t27)
  1632  	}
  1633  
  1634  	// Step 434: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d
  1635  	t27.Mul(t25, t27)
  1636  
  1637  	// Step 444: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b400
  1638  	for s := 0; s < 10; s++ {
  1639  		t27.Square(t27)
  1640  	}
  1641  
  1642  	// Step 445: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423
  1643  	t27.Mul(t14, t27)
  1644  
  1645  	// Step 454: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684600
  1646  	for s := 0; s < 9; s++ {
  1647  		t27.Square(t27)
  1648  	}
  1649  
  1650  	// Step 455: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684609
  1651  	t27.Mul(t1, t27)
  1652  
  1653  	// Step 463: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b68460900
  1654  	for s := 0; s < 8; s++ {
  1655  		t27.Square(t27)
  1656  	}
  1657  
  1658  	// Step 464: t26 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d
  1659  	t26.Mul(t26, t27)
  1660  
  1661  	// Step 473: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a00
  1662  	for s := 0; s < 9; s++ {
  1663  		t26.Square(t26)
  1664  	}
  1665  
  1666  	// Step 474: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a27
  1667  	t26.Mul(t6, t26)
  1668  
  1669  	// Step 482: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2700
  1670  	for s := 0; s < 8; s++ {
  1671  		t26.Square(t26)
  1672  	}
  1673  
  1674  	// Step 483: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723
  1675  	t26.Mul(t14, t26)
  1676  
  1677  	// Step 489: t26 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8c0
  1678  	for s := 0; s < 6; s++ {
  1679  		t26.Square(t26)
  1680  	}
  1681  
  1682  	// Step 490: t25 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed
  1683  	t25.Mul(t25, t26)
  1684  
  1685  	// Step 499: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da00
  1686  	for s := 0; s < 9; s++ {
  1687  		t25.Square(t25)
  1688  	}
  1689  
  1690  	// Step 500: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25
  1691  	t25.Mul(t16, t25)
  1692  
  1693  	// Step 504: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da250
  1694  	for s := 0; s < 4; s++ {
  1695  		t25.Square(t25)
  1696  	}
  1697  
  1698  	// Step 505: t24 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f
  1699  	t24.Mul(t24, t25)
  1700  
  1701  	// Step 514: t24 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be00
  1702  	for s := 0; s < 9; s++ {
  1703  		t24.Square(t24)
  1704  	}
  1705  
  1706  	// Step 515: t23 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f
  1707  	t23.Mul(t23, t24)
  1708  
  1709  	// Step 521: t23 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fc0
  1710  	for s := 0; s < 6; s++ {
  1711  		t23.Square(t23)
  1712  	}
  1713  
  1714  	// Step 522: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9
  1715  	t22.Mul(t22, t23)
  1716  
  1717  	// Step 530: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd900
  1718  	for s := 0; s < 8; s++ {
  1719  		t22.Square(t22)
  1720  	}
  1721  
  1722  	// Step 531: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd907
  1723  	t22.Mul(t12, t22)
  1724  
  1725  	// Step 540: t22 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e00
  1726  	for s := 0; s < 9; s++ {
  1727  		t22.Square(t22)
  1728  	}
  1729  
  1730  	// Step 541: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b
  1731  	t21.Mul(t21, t22)
  1732  
  1733  	// Step 546: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c760
  1734  	for s := 0; s < 5; s++ {
  1735  		t21.Square(t21)
  1736  	}
  1737  
  1738  	// Step 547: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c773
  1739  	t21.Mul(t19, t21)
  1740  
  1741  	// Step 554: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b980
  1742  	for s := 0; s < 7; s++ {
  1743  		t21.Square(t21)
  1744  	}
  1745  
  1746  	// Step 555: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7
  1747  	t21.Mul(t6, t21)
  1748  
  1749  	// Step 560: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734e0
  1750  	for s := 0; s < 5; s++ {
  1751  		t21.Square(t21)
  1752  	}
  1753  
  1754  	// Step 561: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f7
  1755  	t21.Mul(t11, t21)
  1756  
  1757  	// Step 570: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee00
  1758  	for s := 0; s < 9; s++ {
  1759  		t21.Square(t21)
  1760  	}
  1761  
  1762  	// Step 571: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39
  1763  	t21.Mul(t8, t21)
  1764  
  1765  	// Step 577: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e40
  1766  	for s := 0; s < 6; s++ {
  1767  		t21.Square(t21)
  1768  	}
  1769  
  1770  	// Step 578: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d
  1771  	t21.Mul(t15, t21)
  1772  
  1773  	// Step 587: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfa00
  1774  	for s := 0; s < 9; s++ {
  1775  		t21.Square(t21)
  1776  	}
  1777  
  1778  	// Step 588: t20 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaff
  1779  	t20.Mul(t20, t21)
  1780  
  1781  	// Step 590: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebfc
  1782  	for s := 0; s < 2; s++ {
  1783  		t20.Square(t20)
  1784  	}
  1785  
  1786  	// Step 591: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff
  1787  	t20.Mul(t3, t20)
  1788  
  1789  	// Step 598: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff80
  1790  	for s := 0; s < 7; s++ {
  1791  		t20.Square(t20)
  1792  	}
  1793  
  1794  	// Step 599: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff97
  1795  	t20.Mul(t11, t20)
  1796  
  1797  	// Step 605: t20 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5c0
  1798  	for s := 0; s < 6; s++ {
  1799  		t20.Square(t20)
  1800  	}
  1801  
  1802  	// Step 606: t19 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d3
  1803  	t19.Mul(t19, t20)
  1804  
  1805  	// Step 612: t19 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c0
  1806  	for s := 0; s < 6; s++ {
  1807  		t19.Square(t19)
  1808  	}
  1809  
  1810  	// Step 613: t18 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c5
  1811  	t18.Mul(t18, t19)
  1812  
  1813  	// Step 622: t18 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a00
  1814  	for s := 0; s < 9; s++ {
  1815  		t18.Square(t18)
  1816  	}
  1817  
  1818  	// Step 623: t18 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a11
  1819  	t18.Mul(z, t18)
  1820  
  1821  	// Step 629: t18 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba628440
  1822  	for s := 0; s < 6; s++ {
  1823  		t18.Square(t18)
  1824  	}
  1825  
  1826  	// Step 630: t17 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b
  1827  	t17.Mul(t17, t18)
  1828  
  1829  	// Step 640: t17 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c00
  1830  	for s := 0; s < 10; s++ {
  1831  		t17.Square(t17)
  1832  	}
  1833  
  1834  	// Step 641: t16 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25
  1835  	t16.Mul(t16, t17)
  1836  
  1837  	// Step 648: t16 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b61280
  1838  	for s := 0; s < 7; s++ {
  1839  		t16.Square(t16)
  1840  	}
  1841  
  1842  	// Step 649: t16 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b3
  1843  	t16.Mul(t5, t16)
  1844  
  1845  	// Step 657: t16 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b300
  1846  	for s := 0; s < 8; s++ {
  1847  		t16.Square(t16)
  1848  	}
  1849  
  1850  	// Step 658: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d
  1851  	t15.Mul(t15, t16)
  1852  
  1853  	// Step 665: t15 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599e80
  1854  	for s := 0; s < 7; s++ {
  1855  		t15.Square(t15)
  1856  	}
  1857  
  1858  	// Step 666: t14 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3
  1859  	t14.Mul(t14, t15)
  1860  
  1861  	// Step 669: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf518
  1862  	for s := 0; s < 3; s++ {
  1863  		t14.Square(t14)
  1864  	}
  1865  
  1866  	// Step 670: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f
  1867  	t14.Mul(t12, t14)
  1868  
  1869  	// Step 680: t14 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c00
  1870  	for s := 0; s < 10; s++ {
  1871  		t14.Square(t14)
  1872  	}
  1873  
  1874  	// Step 681: t13 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b
  1875  	t13.Mul(t13, t14)
  1876  
  1877  	// Step 692: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05800
  1878  	for s := 0; s < 11; s++ {
  1879  		t13.Square(t13)
  1880  	}
  1881  
  1882  	// Step 693: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833
  1883  	t13.Mul(t5, t13)
  1884  
  1885  	// Step 696: t13 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c198
  1886  	for s := 0; s < 3; s++ {
  1887  		t13.Square(t13)
  1888  	}
  1889  
  1890  	// Step 697: t12 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f
  1891  	t12.Mul(t12, t13)
  1892  
  1893  	// Step 706: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e00
  1894  	for s := 0; s < 9; s++ {
  1895  		t12.Square(t12)
  1896  	}
  1897  
  1898  	// Step 707: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2b
  1899  	t12.Mul(t10, t12)
  1900  
  1901  	// Step 712: t12 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c560
  1902  	for s := 0; s < 5; s++ {
  1903  		t12.Square(t12)
  1904  	}
  1905  
  1906  	// Step 713: t11 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577
  1907  	t11.Mul(t11, t12)
  1908  
  1909  	// Step 720: t11 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bb80
  1910  	for s := 0; s < 7; s++ {
  1911  		t11.Square(t11)
  1912  	}
  1913  
  1914  	// Step 721: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbab
  1915  	t10.Mul(t10, t11)
  1916  
  1917  	// Step 723: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeac
  1918  	for s := 0; s < 2; s++ {
  1919  		t10.Square(t10)
  1920  	}
  1921  
  1922  	// Step 724: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf
  1923  	t10.Mul(t3, t10)
  1924  
  1925  	// Step 734: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc00
  1926  	for s := 0; s < 10; s++ {
  1927  		t10.Square(t10)
  1928  	}
  1929  
  1930  	// Step 735: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc29
  1931  	t10.Mul(t7, t10)
  1932  
  1933  	// Step 745: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a400
  1934  	for s := 0; s < 10; s++ {
  1935  		t10.Square(t10)
  1936  	}
  1937  
  1938  	// Step 746: t9 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437
  1939  	t9.Mul(t9, t10)
  1940  
  1941  	// Step 752: t9 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290dc0
  1942  	for s := 0; s < 6; s++ {
  1943  		t9.Square(t9)
  1944  	}
  1945  
  1946  	// Step 753: t8 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9
  1947  	t8.Mul(t8, t9)
  1948  
  1949  	// Step 759: t8 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e40
  1950  	for s := 0; s < 6; s++ {
  1951  		t8.Square(t8)
  1952  	}
  1953  
  1954  	// Step 760: t7 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e69
  1955  	t7.Mul(t7, t8)
  1956  
  1957  	// Step 769: t7 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd200
  1958  	for s := 0; s < 9; s++ {
  1959  		t7.Square(t7)
  1960  	}
  1961  
  1962  	// Step 770: t6 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227
  1963  	t6.Mul(t6, t7)
  1964  
  1965  	// Step 776: t6 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489c0
  1966  	for s := 0; s < 6; s++ {
  1967  		t6.Square(t6)
  1968  	}
  1969  
  1970  	// Step 777: t5 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f3
  1971  	t5.Mul(t5, t6)
  1972  
  1973  	// Step 784: t5 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f980
  1974  	for s := 0; s < 7; s++ {
  1975  		t5.Square(t5)
  1976  	}
  1977  
  1978  	// Step 785: t4 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1
  1979  	t4.Mul(t4, t5)
  1980  
  1981  	// Step 787: t4 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e684
  1982  	for s := 0; s < 2; s++ {
  1983  		t4.Square(t4)
  1984  	}
  1985  
  1986  	// Step 788: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e687
  1987  	t3.Mul(t3, t4)
  1988  
  1989  	// Step 809: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00000
  1990  	for s := 0; s < 21; s++ {
  1991  		t3.Square(t3)
  1992  	}
  1993  
  1994  	// Step 810: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00001
  1995  	t3.Mul(&x, t3)
  1996  
  1997  	// Step 821: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e68700000800
  1998  	for s := 0; s < 11; s++ {
  1999  		t3.Square(t3)
  2000  	}
  2001  
  2002  	// Step 822: t2 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f
  2003  	t2.Mul(t2, t3)
  2004  
  2005  	// Step 827: t2 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e0
  2006  	for s := 0; s < 5; s++ {
  2007  		t2.Square(t2)
  2008  	}
  2009  
  2010  	// Step 828: t1 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e9
  2011  	t1.Mul(t1, t2)
  2012  
  2013  	// Step 835: t1 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f480
  2014  	for s := 0; s < 7; s++ {
  2015  		t1.Square(t1)
  2016  	}
  2017  
  2018  	// Step 836: t0 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f49d
  2019  	t0.Mul(t0, t1)
  2020  
  2021  	// Step 881: t0 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e93a00000000000
  2022  	for s := 0; s < 45; s++ {
  2023  		t0.Square(t0)
  2024  	}
  2025  
  2026  	// Step 882: z = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e93a00000000011
  2027  	z.Mul(z, t0)
  2028  
  2029  	// Step 884: z = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f34380000417a4e800000000044
  2030  	for s := 0; s < 2; s++ {
  2031  		z.Square(z)
  2032  	}
  2033  
  2034  	// Step 885: z = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f34380000417a4e800000000045
  2035  	z.Mul(&x, z)
  2036  
  2037  	return z
  2038  }