docs: public FieldElement pow22523() {
      FieldElement t0, t1, t2;
  
      // 2 == 2 * 1
      t0 = square();
  
      // 4 == 2 * 2
      t1 = t0.square();
  
      // 8 == 2 * 4
      t1 = t1.square();
  
      // z9 = z1*z8
      t1 = multiply(t1);
  
      // 11 == 9 + 2
      t0 = t0.multiply(t1);
  
      // 22 == 2 * 11
      t0 = t0.square();
  
      // 31 == 22 + 9
      t0 = t1.multiply(t0);
  
      // 2^6 - 2^1
      t1 = t0.square();
  
      // 2^10 - 2^5
      for (int i = 1; i < 5; ++i) {
        t1 = t1.square();
      }
  
      // 2^10 - 2^0
      t0 = t1.multiply(t0);
  
      // 2^11 - 2^1
      t1 = t0.square();
  
      // 2^20 - 2^10
      for (int i = 1; i < 10; ++i) {
        t1 = t1.square();
      }
  
      // 2^20 - 2^0
      t1 = t1.multiply(t0);
  
      // 2^21 - 2^1
      t2 = t1.square();
  
      // 2^40 - 2^20
      for (int i = 1; i < 20; ++i) {
        t2 = t2.square();
      }
  
      // 2^40 - 2^0
      t1 = t2.multiply(t1);
  
      // 2^41 - 2^1
      t1 = t1.square();
  
      // 2^50 - 2^10
      for (int i = 1; i < 10; ++i) {
        t1 = t1.square();
      }
  
      // 2^50 - 2^0
      t0 = t1.multiply(t0);
  
      // 2^51 - 2^1
      t1 = t0.square();
  
      // 2^100 - 2^50
      for (int i = 1; i < 50; ++i) {
        t1 = t1.square();
      }
  
      // 2^100 - 2^0
      t1 = t1.multiply(t0);
  
      // 2^101 - 2^1
      t2 = t1.square();
  
      // 2^200 - 2^100
      for (int i = 1; i < 100; ++i) {
        t2 = t2.square();
      }
  
      // 2^200 - 2^0
      t1 = t2.multiply(t1);
  
      // 2^201 - 2^1
      t1 = t1.square();
  
      // 2^250 - 2^50
      for (int i = 1; i < 50; ++i) {
        t1 = t1.square();
      }
  
      // 2^250 - 2^0
      t0 = t1.multiply(t0);
  
      // 2^251 - 2^1
      t0 = t0.square();
  
      // 2^252 - 2^2
      t0 = t0.square();
  
      // 2^252 - 3
      return multiply(t0);
    }