diff --git a/core/crypto/_fiat/field_p384r1/field.odin b/core/crypto/_fiat/field_p384r1/field.odin new file mode 100644 index 000000000..65affc38c --- /dev/null +++ b/core/crypto/_fiat/field_p384r1/field.odin @@ -0,0 +1,436 @@ +package field_p384r1 + +import subtle "core:crypto/_subtle" +import "core:encoding/endian" +import "core:math/bits" +import "core:mem" + +fe_clear :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) { + mem.zero_explicit(arg1, size_of(Montgomery_Domain_Field_Element)) +} + +fe_clear_vec :: proc "contextless" ( + arg1: []^Montgomery_Domain_Field_Element, +) { + for fe in arg1 { + fe_clear(fe) + } +} + +fe_from_bytes :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: []byte, + unsafe_assume_canonical := false, +) -> bool { + ensure_contextless(len(arg1) == 48, "p384r1: invalid fe input buffer") + + // Note: We assume the input is in big-endian. + tmp := Non_Montgomery_Domain_Field_Element { + endian.unchecked_get_u64be(arg1[40:]), + endian.unchecked_get_u64be(arg1[32:]), + endian.unchecked_get_u64be(arg1[24:]), + endian.unchecked_get_u64be(arg1[16:]), + endian.unchecked_get_u64be(arg1[8:]), + endian.unchecked_get_u64be(arg1[0:]), + } + defer mem.zero_explicit(&tmp, size_of(tmp)) + + // Check that tmp is in the the range [0, ELL). + if !unsafe_assume_canonical { + _, borrow := bits.sub_u64(ELL[0] - 1, tmp[0], 0) + _, borrow = bits.sub_u64(ELL[1], tmp[1], borrow) + _, borrow = bits.sub_u64(ELL[2], tmp[2], borrow) + _, borrow = bits.sub_u64(ELL[3], tmp[3], borrow) + _, borrow = bits.sub_u64(ELL[4], tmp[4], borrow) + _, borrow = bits.sub_u64(ELL[5], tmp[5], borrow) + if borrow != 0 { + return false + } + } + + fe_to_montgomery(out1, &tmp) + + return true +} + +fe_to_bytes :: proc "contextless" (out1: []byte, arg1: ^Montgomery_Domain_Field_Element) { + ensure_contextless(len(out1) == 48, "p384r1: invalid fe output buffer") + + tmp: Non_Montgomery_Domain_Field_Element = --- + fe_from_montgomery(&tmp, arg1) + + // Note: Likewise, output in big-endian. + endian.unchecked_put_u64be(out1[40:], tmp[0]) + endian.unchecked_put_u64be(out1[32:], tmp[1]) + endian.unchecked_put_u64be(out1[24:], tmp[2]) + endian.unchecked_put_u64be(out1[16:], tmp[3]) + endian.unchecked_put_u64be(out1[8:], tmp[4]) + endian.unchecked_put_u64be(out1[0:], tmp[5]) + + mem.zero_explicit(&tmp, size_of(tmp)) +} + +@(require_results) +fe_equal :: proc "contextless" (arg1, arg2: ^Montgomery_Domain_Field_Element) -> int { + tmp: Montgomery_Domain_Field_Element = --- + fe_sub(&tmp, arg1, arg2) + + // This will only underflow iff arg1 == arg2, and we return the borrow, + // which will be 1. + is_eq := subtle.u64_is_zero(fe_non_zero(&tmp)) + + fe_clear(&tmp) + + return int(is_eq) +} + +@(require_results) +fe_is_odd :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> int { + tmp: Non_Montgomery_Domain_Field_Element = --- + defer mem.zero_explicit(&tmp, size_of(tmp)) + + fe_from_montgomery(&tmp, arg1) + return int(tmp[0] & 1) +} + +fe_pow2k :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: ^Montgomery_Domain_Field_Element, + arg2: uint, +) { + // Special case: `arg1^(2 * 0) = 1`, though this should never happen. + if arg2 == 0 { + fe_one(out1) + return + } + + fe_square(out1, arg1) + for _ in 1 ..< arg2 { + fe_square(out1, out1) + } +} + +fe_inv :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + // Inversion computation is derived from the addition chain: + // + // _10 = 2*1 + // _11 = 1 + _10 + // _110 = 2*_11 + // _111 = 1 + _110 + // _111000 = _111 << 3 + // _111111 = _111 + _111000 + // x12 = _111111 << 6 + _111111 + // x24 = x12 << 12 + x12 + // x30 = x24 << 6 + _111111 + // x31 = 2*x30 + 1 + // x32 = 2*x31 + 1 + // x63 = x32 << 31 + x31 + // x126 = x63 << 63 + x63 + // x252 = x126 << 126 + x126 + // x255 = x252 << 3 + _111 + // return ((x255 << 33 + x32) << 94 + x30) << 2 + // + // Operations: 383 squares 14 multiplies + // + // Generated by github.com/mmcloughlin/addchain v0.4.0. + + // Note: Need to stash `arg1` (`xx`) in the case that `out1`/`arg1` alias, + // as `arg1` is used after `out1` has been altered. + t0, t1, t2, t3, xx: Montgomery_Domain_Field_Element = ---, ---, ---, ---, arg1^ + + // Step 1: z = x^0x2 + fe_square(out1, arg1) + + // Step 2: z = x^0x3 + fe_mul(out1, &xx, out1) + + // Step 3: z = x^0x6 + fe_square(out1, out1) + + // Step 4: t1 = x^0x7 + fe_mul(&t1, &xx, out1) + + // Step 7: z = x^0x38 + fe_pow2k(out1, &t1, 3) + + // Step 8: z = x^0x3f + fe_mul(out1, &t1, out1) + + // Step 14: t0 = x^0xfc0 + fe_pow2k(&t0, out1, 6) + + // Step 15: t0 = x^0xfff + fe_mul(&t0, out1, &t0) + + // Step 27: t2 = x^0xfff000 + fe_pow2k(&t2, &t0, 12) + + // Step 28: t0 = x^0xffffff + fe_mul(&t0, &t0, &t2) + + // Step 34: t0 = x^0x3fffffc0 + fe_pow2k(&t0, &t0, 6) + + // Step 35: z = x^0x3fffffff + fe_mul(out1, out1, &t0) + + // Step 36: t0 = x^0x7ffffffe + fe_square(&t0, out1) + + // Step 37: t2 = x^0x7fffffff + fe_mul(&t2, &xx, &t0) + + // Step 38: t0 = x^0xfffffffe + fe_square(&t0, &t2) + + // Step 39: t0 = x^0xffffffff + fe_mul(&t0, &xx, &t0) + + // Step 70: t3 = x^0x7fffffff80000000 + fe_pow2k(&t3, &t0, 31) + + // Step 71: t2 = x^0x7fffffffffffffff + fe_mul(&t2, &t2, &t3) + + // Step 134: t3 = x^0x3fffffffffffffff8000000000000000 + fe_pow2k(&t3, &t2, 63) + + // Step 135: t2 = x^0x3fffffffffffffffffffffffffffffff + fe_mul(&t2, &t2, &t3) + + // Step 261: t3 = x^0xfffffffffffffffffffffffffffffffc0000000000000000000000000000000 + fe_pow2k(&t3, &t2, 126) + + // Step 262: t2 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + fe_mul(&t2, &t2, &t3) + + // Step 265: t2 = x^0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 + fe_pow2k(&t2, &t2, 3) + + // Step 266: t1 = x^0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + fe_mul(&t1, &t1, &t2) + + // Step 299: t1 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000 + fe_pow2k(&t1, &t1, 33) + + // Step 300: t0 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff + fe_mul(&t0, &t0, &t1) + + // Step 394: t0 = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000000000000 + fe_pow2k(&t0, &t0, 94) + + // Step 395: z = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc0000000000000003fffffff + fe_mul(out1, out1, &t0) + + // Step 397: z = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc + fe_pow2k(out1, out1, 2) + + fe_mul(out1, out1, &xx) + + fe_clear_vec([]^Montgomery_Domain_Field_Element{&t0, &t1, &t2, &t3, &xx}) +} + +@(require_results) +fe_sqrt :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) -> int { + // Square root candidate can be derived via exponentiation by `(p + 1) / 4` + // From sage: 9850501549098619803069760025035903451269934817616361666987073351061430442874217582261816522064734500465401743278080 + // + // Inversion computation is derived from the addition chain: + // + // _10 = 2*1 + // _11 = 1 + _10 + // _110 = 2*_11 + // _111 = 1 + _110 + // _111000 = _111 << 3 + // _111111 = _111 + _111000 + // x12 = _111111 << 6 + _111111 + // x24 = x12 << 12 + x12 + // x30 = x24 << 6 + _111111 + // x31 = 2*x30 + 1 + // x32 = 2*x31 + 1 + // x63 = x32 << 31 + x31 + // x126 = x63 << 63 + x63 + // x252 = x126 << 126 + x126 + // x255 = x252 << 3 + _111 + // return ((x255 << 33 + x32) << 94 + x30) << 2 + // + // Operations: 383 squares 14 multiplies + // + // Generated by github.com/mmcloughlin/addchain v0.4.0. + + // Likewise this tramples over arg1, so stash another copy. + t0, t1, t2, t3, xx: Montgomery_Domain_Field_Element = ---, ---, ---, ---, arg1^ + + // Step 1: z = x^0x2 + fe_square(out1, arg1) + + // Step 2: z = x^0x3 + fe_mul(out1, &xx, out1) + + // Step 3: z = x^0x6 + fe_square(out1, out1) + + // Step 4: t1 = x^0x7 + fe_mul(&t1, &xx, out1) + + // Step 7: z = x^0x38 + fe_pow2k(out1, &t1, 3) + + // Step 8: z = x^0x3f + fe_mul(out1, &t1, out1) + + // Step 14: t0 = x^0xfc0 + fe_pow2k(&t0, out1, 6) + + // Step 15: t0 = x^0xfff + fe_mul(&t0, out1, &t0) + + // Step 27: t2 = x^0xfff000 + fe_pow2k(&t2, &t0, 12) + + // Step 28: t0 = x^0xffffff + fe_mul(&t0, &t0, &t2) + + // Step 34: t0 = x^0x3fffffc0 + fe_pow2k(&t0, &t0, 6) + + // Step 35: z = x^0x3fffffff + fe_mul(out1, out1, &t0) + + // Step 36: t0 = x^0x7ffffffe + fe_square(&t0, out1) + + // Step 37: t2 = x^0x7fffffff + fe_mul(&t2, &xx, &t0) + + // Step 38: t0 = x^0xfffffffe + fe_square(&t0, &t2) + + // Step 39: t0 = x^0xffffffff + fe_mul(&t0, &xx, &t0) + + // Step 70: t3 = x^0x7fffffff80000000 + fe_pow2k(&t3, &t0, 31) + + // Step 71: t2 = x^0x7fffffffffffffff + fe_mul(&t2, &t2, &t3) + + // Step 134: t3 = x^0x3fffffffffffffff8000000000000000 + fe_pow2k(&t3, &t2, 63) + + // Step 135: t2 = x^0x3fffffffffffffffffffffffffffffff + fe_mul(&t2, &t2, &t3) + + // Step 261: t3 = x^0xfffffffffffffffffffffffffffffffc0000000000000000000000000000000 + fe_pow2k(&t3, &t2, 126) + + // Step 262: t2 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + fe_mul(&t2, &t2, &t3) + + // Step 265: t2 = x^0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 + fe_pow2k(&t2, &t2, 3) + + // Step 266: t1 = x^0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + fe_mul(&t1, &t1, &t2) + + // Step 299: t1 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000 + fe_pow2k(&t1, &t1, 33) + + // Step 300: t0 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff + fe_mul(&t0, &t0, &t1) + + // Step 394: t0 = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000000000000 + fe_pow2k(&t0, &t0, 94) + + // Step 395: z = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc0000000000000003fffffff + fe_mul(out1, out1, &t0) + + // Step 397: z = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc + fe_pow2k(out1, out1, 2) + + // Ensure that our candidate is actually the square root. + check, zero: Montgomery_Domain_Field_Element + fe_square(&check, out1) + + is_valid := fe_equal(&check, &xx) + fe_cond_select(out1, &zero, out1, is_valid) + + fe_clear_vec([]^Montgomery_Domain_Field_Element{&t0, &t1, &t2, &t3, &xx, &check}) + + return is_valid +} + +fe_zero :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0 + out1[1] = 0 + out1[2] = 0 + out1[3] = 0 + out1[4] = 0 + out1[5] = 0 +} + +fe_set :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[0] + x2 := arg1[1] + x3 := arg1[2] + x4 := arg1[3] + x5 := arg1[4] + x6 := arg1[5] + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 + out1[4] = x5 + out1[5] = x6 +} + +@(optimization_mode = "none") +fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Montgomery_Domain_Field_Element, arg1: int) { + mask := (u64(arg1) * 0xffffffffffffffff) + x := (out1[0] ~ out2[0]) & mask + x1, y1 := out1[0] ~ x, out2[0] ~ x + x = (out1[1] ~ out2[1]) & mask + x2, y2 := out1[1] ~ x, out2[1] ~ x + x = (out1[2] ~ out2[2]) & mask + x3, y3 := out1[2] ~ x, out2[2] ~ x + x = (out1[3] ~ out2[3]) & mask + x4, y4 := out1[3] ~ x, out2[3] ~ x + x = (out1[4] ~ out2[4]) & mask + x5, y5 := out1[4] ~ x, out2[4] ~ x + x = (out1[5] ~ out2[5]) & mask + x6, y6 := out1[5] ~ x, out2[5] ~ x + out1[0], out2[0] = x1, y1 + out1[1], out2[1] = x2, y2 + out1[2], out2[2] = x3, y3 + out1[3], out2[3] = x4, y4 + out1[4], out2[4] = x5, y5 + out1[5], out2[5] = x6, y6 +} + +@(optimization_mode = "none") +fe_cond_select :: #force_no_inline proc "contextless" ( + out1, arg1, arg2: ^Montgomery_Domain_Field_Element, + arg3: int, +) { + mask := (u64(arg3) * 0xffffffffffffffff) + x1 := ((mask & arg2[0]) | ((~mask) & arg1[0])) + x2 := ((mask & arg2[1]) | ((~mask) & arg1[1])) + x3 := ((mask & arg2[2]) | ((~mask) & arg1[2])) + x4 := ((mask & arg2[3]) | ((~mask) & arg1[3])) + x5 := ((mask & arg2[4]) | ((~mask) & arg1[4])) + x6 := ((mask & arg2[5]) | ((~mask) & arg1[5])) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 + out1[4] = x5 + out1[5] = x6 +} + +fe_cond_negate :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element, ctrl: int) { + tmp1: Montgomery_Domain_Field_Element = --- + fe_opp(&tmp1, arg1) + fe_cond_select(out1, arg1, &tmp1, ctrl) + + fe_clear(&tmp1) +} diff --git a/core/crypto/_fiat/field_p384r1/field64.odin b/core/crypto/_fiat/field_p384r1/field64.odin new file mode 100644 index 000000000..493f24b17 --- /dev/null +++ b/core/crypto/_fiat/field_p384r1/field64.odin @@ -0,0 +1,1063 @@ +// The BSD 1-Clause License (BSD-1-Clause) +// +// Copyright (c) 2015-2020 the fiat-crypto authors (see the AUTHORS file) +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// THIS SOFTWARE IS PROVIDED BY the fiat-crypto authors "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, +// Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package field_p384r1 + +// The file provides arithmetic on the field Z/(2^384 - 2^128 - 2^96 + 2^32 - 1) +// using a 64-bit Montgomery form internal representation. It is derived +// primarily from the machine generated Golang output from the fiat-crypto +// project. +// +// While the base implementation is provably correct, this implementation +// makes no such claims as the port and optimizations were done by hand. +// +// WARNING: While big-endian is the common representation used for this +// curve, the fiat output uses least-significant-limb first. + +import fiat "core:crypto/_fiat" +import "core:math/bits" + +// ELL is the saturated representation of the field order, least-significant +// limb first. +ELL :: [6]u64{0xffffffff, 0xffffffff00000000, 0xfffffffffffffffe, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff} + +Montgomery_Domain_Field_Element :: distinct [6]u64 +Non_Montgomery_Domain_Field_Element :: distinct [6]u64 + +fe_mul :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[4] + x5 := arg1[5] + x6 := arg1[0] + x8, x7 := bits.mul_u64(x6, arg2[5]) + x10, x9 := bits.mul_u64(x6, arg2[4]) + x12, x11 := bits.mul_u64(x6, arg2[3]) + x14, x13 := bits.mul_u64(x6, arg2[2]) + x16, x15 := bits.mul_u64(x6, arg2[1]) + x18, x17 := bits.mul_u64(x6, arg2[0]) + x19, x20 := bits.add_u64(x18, x15, u64(0x0)) + x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20))) + x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22))) + x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24))) + x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26))) + x29 := (u64(fiat.u1(x28)) + x8) + _, x30 := bits.mul_u64(x17, 0x100000001) + x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff) + x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff) + x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff) + x39, x38 := bits.mul_u64(x30, 0xfffffffffffffffe) + x41, x40 := bits.mul_u64(x30, 0xffffffff00000000) + x43, x42 := bits.mul_u64(x30, 0xffffffff) + x44, x45 := bits.add_u64(x43, x40, u64(0x0)) + x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45))) + x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47))) + x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49))) + x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51))) + x54 := (u64(fiat.u1(x53)) + x33) + _, x56 := bits.add_u64(x17, x42, u64(0x0)) + x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58))) + x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60))) + x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62))) + x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64))) + x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66))) + x70, x69 := bits.mul_u64(x1, arg2[5]) + x72, x71 := bits.mul_u64(x1, arg2[4]) + x74, x73 := bits.mul_u64(x1, arg2[3]) + x76, x75 := bits.mul_u64(x1, arg2[2]) + x78, x77 := bits.mul_u64(x1, arg2[1]) + x80, x79 := bits.mul_u64(x1, arg2[0]) + x81, x82 := bits.add_u64(x80, x77, u64(0x0)) + x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82))) + x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84))) + x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86))) + x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88))) + x91 := (u64(fiat.u1(x90)) + x70) + x92, x93 := bits.add_u64(x57, x79, u64(0x0)) + x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95))) + x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97))) + x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99))) + x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101))) + x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103))) + _, x106 := bits.mul_u64(x92, 0x100000001) + x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff) + x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff) + x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff) + x115, x114 := bits.mul_u64(x106, 0xfffffffffffffffe) + x117, x116 := bits.mul_u64(x106, 0xffffffff00000000) + x119, x118 := bits.mul_u64(x106, 0xffffffff) + x120, x121 := bits.add_u64(x119, x116, u64(0x0)) + x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123))) + x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125))) + x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127))) + x130 := (u64(fiat.u1(x129)) + x109) + _, x132 := bits.add_u64(x92, x118, u64(0x0)) + x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132))) + x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134))) + x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138))) + x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140))) + x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142))) + x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105))) + x147, x146 := bits.mul_u64(x2, arg2[5]) + x149, x148 := bits.mul_u64(x2, arg2[4]) + x151, x150 := bits.mul_u64(x2, arg2[3]) + x153, x152 := bits.mul_u64(x2, arg2[2]) + x155, x154 := bits.mul_u64(x2, arg2[1]) + x157, x156 := bits.mul_u64(x2, arg2[0]) + x158, x159 := bits.add_u64(x157, x154, u64(0x0)) + x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159))) + x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161))) + x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163))) + x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165))) + x168 := (u64(fiat.u1(x167)) + x147) + x169, x170 := bits.add_u64(x133, x156, u64(0x0)) + x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170))) + x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172))) + x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174))) + x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176))) + x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178))) + x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180))) + _, x183 := bits.mul_u64(x169, 0x100000001) + x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff) + x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff) + x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff) + x192, x191 := bits.mul_u64(x183, 0xfffffffffffffffe) + x194, x193 := bits.mul_u64(x183, 0xffffffff00000000) + x196, x195 := bits.mul_u64(x183, 0xffffffff) + x197, x198 := bits.add_u64(x196, x193, u64(0x0)) + x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198))) + x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200))) + x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202))) + x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204))) + x207 := (u64(fiat.u1(x206)) + x186) + _, x209 := bits.add_u64(x169, x195, u64(0x0)) + x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209))) + x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211))) + x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213))) + x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215))) + x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217))) + x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219))) + x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182))) + x224, x223 := bits.mul_u64(x3, arg2[5]) + x226, x225 := bits.mul_u64(x3, arg2[4]) + x228, x227 := bits.mul_u64(x3, arg2[3]) + x230, x229 := bits.mul_u64(x3, arg2[2]) + x232, x231 := bits.mul_u64(x3, arg2[1]) + x234, x233 := bits.mul_u64(x3, arg2[0]) + x235, x236 := bits.add_u64(x234, x231, u64(0x0)) + x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236))) + x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238))) + x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240))) + x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242))) + x245 := (u64(fiat.u1(x244)) + x224) + x246, x247 := bits.add_u64(x210, x233, u64(0x0)) + x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247))) + x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249))) + x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251))) + x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253))) + x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255))) + x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257))) + _, x260 := bits.mul_u64(x246, 0x100000001) + x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff) + x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff) + x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff) + x269, x268 := bits.mul_u64(x260, 0xfffffffffffffffe) + x271, x270 := bits.mul_u64(x260, 0xffffffff00000000) + x273, x272 := bits.mul_u64(x260, 0xffffffff) + x274, x275 := bits.add_u64(x273, x270, u64(0x0)) + x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275))) + x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277))) + x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279))) + x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281))) + x284 := (u64(fiat.u1(x283)) + x263) + _, x286 := bits.add_u64(x246, x272, u64(0x0)) + x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286))) + x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288))) + x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290))) + x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292))) + x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294))) + x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296))) + x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259))) + x301, x300 := bits.mul_u64(x4, arg2[5]) + x303, x302 := bits.mul_u64(x4, arg2[4]) + x305, x304 := bits.mul_u64(x4, arg2[3]) + x307, x306 := bits.mul_u64(x4, arg2[2]) + x309, x308 := bits.mul_u64(x4, arg2[1]) + x311, x310 := bits.mul_u64(x4, arg2[0]) + x312, x313 := bits.add_u64(x311, x308, u64(0x0)) + x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313))) + x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315))) + x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317))) + x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319))) + x322 := (u64(fiat.u1(x321)) + x301) + x323, x324 := bits.add_u64(x287, x310, u64(0x0)) + x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324))) + x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326))) + x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328))) + x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330))) + x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332))) + x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334))) + _, x337 := bits.mul_u64(x323, 0x100000001) + x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff) + x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff) + x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff) + x346, x345 := bits.mul_u64(x337, 0xfffffffffffffffe) + x348, x347 := bits.mul_u64(x337, 0xffffffff00000000) + x350, x349 := bits.mul_u64(x337, 0xffffffff) + x351, x352 := bits.add_u64(x350, x347, u64(0x0)) + x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352))) + x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354))) + x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356))) + x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358))) + x361 := (u64(fiat.u1(x360)) + x340) + _, x363 := bits.add_u64(x323, x349, u64(0x0)) + x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363))) + x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365))) + x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367))) + x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369))) + x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371))) + x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373))) + x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336))) + x378, x377 := bits.mul_u64(x5, arg2[5]) + x380, x379 := bits.mul_u64(x5, arg2[4]) + x382, x381 := bits.mul_u64(x5, arg2[3]) + x384, x383 := bits.mul_u64(x5, arg2[2]) + x386, x385 := bits.mul_u64(x5, arg2[1]) + x388, x387 := bits.mul_u64(x5, arg2[0]) + x389, x390 := bits.add_u64(x388, x385, u64(0x0)) + x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390))) + x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392))) + x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394))) + x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396))) + x399 := (u64(fiat.u1(x398)) + x378) + x400, x401 := bits.add_u64(x364, x387, u64(0x0)) + x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401))) + x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403))) + x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405))) + x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407))) + x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409))) + x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411))) + _, x414 := bits.mul_u64(x400, 0x100000001) + x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff) + x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff) + x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff) + x423, x422 := bits.mul_u64(x414, 0xfffffffffffffffe) + x425, x424 := bits.mul_u64(x414, 0xffffffff00000000) + x427, x426 := bits.mul_u64(x414, 0xffffffff) + x428, x429 := bits.add_u64(x427, x424, u64(0x0)) + x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429))) + x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431))) + x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433))) + x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435))) + x438 := (u64(fiat.u1(x437)) + x417) + _, x440 := bits.add_u64(x400, x426, u64(0x0)) + x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440))) + x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442))) + x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444))) + x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446))) + x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448))) + x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450))) + x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413))) + x454, x455 := bits.sub_u64(x441, 0xffffffff, u64(0x0)) + x456, x457 := bits.sub_u64(x443, 0xffffffff00000000, u64(fiat.u1(x455))) + x458, x459 := bits.sub_u64(x445, 0xfffffffffffffffe, u64(fiat.u1(x457))) + x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459))) + x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461))) + x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463))) + _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465))) + x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441) + x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443) + x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445) + x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447) + x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449) + x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451) + out1[0] = x468 + out1[1] = x469 + out1[2] = x470 + out1[3] = x471 + out1[4] = x472 + out1[5] = x473 +} + +fe_square :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[4] + x5 := arg1[5] + x6 := arg1[0] + x8, x7 := bits.mul_u64(x6, arg1[5]) + x10, x9 := bits.mul_u64(x6, arg1[4]) + x12, x11 := bits.mul_u64(x6, arg1[3]) + x14, x13 := bits.mul_u64(x6, arg1[2]) + x16, x15 := bits.mul_u64(x6, arg1[1]) + x18, x17 := bits.mul_u64(x6, arg1[0]) + x19, x20 := bits.add_u64(x18, x15, u64(0x0)) + x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20))) + x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22))) + x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24))) + x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26))) + x29 := (u64(fiat.u1(x28)) + x8) + _, x30 := bits.mul_u64(x17, 0x100000001) + x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff) + x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff) + x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff) + x39, x38 := bits.mul_u64(x30, 0xfffffffffffffffe) + x41, x40 := bits.mul_u64(x30, 0xffffffff00000000) + x43, x42 := bits.mul_u64(x30, 0xffffffff) + x44, x45 := bits.add_u64(x43, x40, u64(0x0)) + x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45))) + x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47))) + x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49))) + x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51))) + x54 := (u64(fiat.u1(x53)) + x33) + _, x56 := bits.add_u64(x17, x42, u64(0x0)) + x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58))) + x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60))) + x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62))) + x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64))) + x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66))) + x70, x69 := bits.mul_u64(x1, arg1[5]) + x72, x71 := bits.mul_u64(x1, arg1[4]) + x74, x73 := bits.mul_u64(x1, arg1[3]) + x76, x75 := bits.mul_u64(x1, arg1[2]) + x78, x77 := bits.mul_u64(x1, arg1[1]) + x80, x79 := bits.mul_u64(x1, arg1[0]) + x81, x82 := bits.add_u64(x80, x77, u64(0x0)) + x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82))) + x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84))) + x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86))) + x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88))) + x91 := (u64(fiat.u1(x90)) + x70) + x92, x93 := bits.add_u64(x57, x79, u64(0x0)) + x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95))) + x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97))) + x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99))) + x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101))) + x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103))) + _, x106 := bits.mul_u64(x92, 0x100000001) + x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff) + x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff) + x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff) + x115, x114 := bits.mul_u64(x106, 0xfffffffffffffffe) + x117, x116 := bits.mul_u64(x106, 0xffffffff00000000) + x119, x118 := bits.mul_u64(x106, 0xffffffff) + x120, x121 := bits.add_u64(x119, x116, u64(0x0)) + x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123))) + x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125))) + x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127))) + x130 := (u64(fiat.u1(x129)) + x109) + _, x132 := bits.add_u64(x92, x118, u64(0x0)) + x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132))) + x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134))) + x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138))) + x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140))) + x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142))) + x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105))) + x147, x146 := bits.mul_u64(x2, arg1[5]) + x149, x148 := bits.mul_u64(x2, arg1[4]) + x151, x150 := bits.mul_u64(x2, arg1[3]) + x153, x152 := bits.mul_u64(x2, arg1[2]) + x155, x154 := bits.mul_u64(x2, arg1[1]) + x157, x156 := bits.mul_u64(x2, arg1[0]) + x158, x159 := bits.add_u64(x157, x154, u64(0x0)) + x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159))) + x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161))) + x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163))) + x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165))) + x168 := (u64(fiat.u1(x167)) + x147) + x169, x170 := bits.add_u64(x133, x156, u64(0x0)) + x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170))) + x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172))) + x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174))) + x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176))) + x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178))) + x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180))) + _, x183 := bits.mul_u64(x169, 0x100000001) + x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff) + x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff) + x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff) + x192, x191 := bits.mul_u64(x183, 0xfffffffffffffffe) + x194, x193 := bits.mul_u64(x183, 0xffffffff00000000) + x196, x195 := bits.mul_u64(x183, 0xffffffff) + x197, x198 := bits.add_u64(x196, x193, u64(0x0)) + x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198))) + x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200))) + x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202))) + x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204))) + x207 := (u64(fiat.u1(x206)) + x186) + _, x209 := bits.add_u64(x169, x195, u64(0x0)) + x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209))) + x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211))) + x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213))) + x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215))) + x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217))) + x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219))) + x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182))) + x224, x223 := bits.mul_u64(x3, arg1[5]) + x226, x225 := bits.mul_u64(x3, arg1[4]) + x228, x227 := bits.mul_u64(x3, arg1[3]) + x230, x229 := bits.mul_u64(x3, arg1[2]) + x232, x231 := bits.mul_u64(x3, arg1[1]) + x234, x233 := bits.mul_u64(x3, arg1[0]) + x235, x236 := bits.add_u64(x234, x231, u64(0x0)) + x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236))) + x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238))) + x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240))) + x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242))) + x245 := (u64(fiat.u1(x244)) + x224) + x246, x247 := bits.add_u64(x210, x233, u64(0x0)) + x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247))) + x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249))) + x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251))) + x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253))) + x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255))) + x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257))) + _, x260 := bits.mul_u64(x246, 0x100000001) + x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff) + x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff) + x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff) + x269, x268 := bits.mul_u64(x260, 0xfffffffffffffffe) + x271, x270 := bits.mul_u64(x260, 0xffffffff00000000) + x273, x272 := bits.mul_u64(x260, 0xffffffff) + x274, x275 := bits.add_u64(x273, x270, u64(0x0)) + x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275))) + x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277))) + x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279))) + x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281))) + x284 := (u64(fiat.u1(x283)) + x263) + _, x286 := bits.add_u64(x246, x272, u64(0x0)) + x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286))) + x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288))) + x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290))) + x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292))) + x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294))) + x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296))) + x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259))) + x301, x300 := bits.mul_u64(x4, arg1[5]) + x303, x302 := bits.mul_u64(x4, arg1[4]) + x305, x304 := bits.mul_u64(x4, arg1[3]) + x307, x306 := bits.mul_u64(x4, arg1[2]) + x309, x308 := bits.mul_u64(x4, arg1[1]) + x311, x310 := bits.mul_u64(x4, arg1[0]) + x312, x313 := bits.add_u64(x311, x308, u64(0x0)) + x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313))) + x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315))) + x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317))) + x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319))) + x322 := (u64(fiat.u1(x321)) + x301) + x323, x324 := bits.add_u64(x287, x310, u64(0x0)) + x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324))) + x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326))) + x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328))) + x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330))) + x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332))) + x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334))) + _, x337 := bits.mul_u64(x323, 0x100000001) + x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff) + x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff) + x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff) + x346, x345 := bits.mul_u64(x337, 0xfffffffffffffffe) + x348, x347 := bits.mul_u64(x337, 0xffffffff00000000) + x350, x349 := bits.mul_u64(x337, 0xffffffff) + x351, x352 := bits.add_u64(x350, x347, u64(0x0)) + x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352))) + x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354))) + x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356))) + x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358))) + x361 := (u64(fiat.u1(x360)) + x340) + _, x363 := bits.add_u64(x323, x349, u64(0x0)) + x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363))) + x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365))) + x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367))) + x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369))) + x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371))) + x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373))) + x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336))) + x378, x377 := bits.mul_u64(x5, arg1[5]) + x380, x379 := bits.mul_u64(x5, arg1[4]) + x382, x381 := bits.mul_u64(x5, arg1[3]) + x384, x383 := bits.mul_u64(x5, arg1[2]) + x386, x385 := bits.mul_u64(x5, arg1[1]) + x388, x387 := bits.mul_u64(x5, arg1[0]) + x389, x390 := bits.add_u64(x388, x385, u64(0x0)) + x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390))) + x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392))) + x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394))) + x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396))) + x399 := (u64(fiat.u1(x398)) + x378) + x400, x401 := bits.add_u64(x364, x387, u64(0x0)) + x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401))) + x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403))) + x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405))) + x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407))) + x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409))) + x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411))) + _, x414 := bits.mul_u64(x400, 0x100000001) + x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff) + x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff) + x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff) + x423, x422 := bits.mul_u64(x414, 0xfffffffffffffffe) + x425, x424 := bits.mul_u64(x414, 0xffffffff00000000) + x427, x426 := bits.mul_u64(x414, 0xffffffff) + x428, x429 := bits.add_u64(x427, x424, u64(0x0)) + x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429))) + x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431))) + x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433))) + x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435))) + x438 := (u64(fiat.u1(x437)) + x417) + _, x440 := bits.add_u64(x400, x426, u64(0x0)) + x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440))) + x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442))) + x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444))) + x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446))) + x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448))) + x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450))) + x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413))) + x454, x455 := bits.sub_u64(x441, 0xffffffff, u64(0x0)) + x456, x457 := bits.sub_u64(x443, 0xffffffff00000000, u64(fiat.u1(x455))) + x458, x459 := bits.sub_u64(x445, 0xfffffffffffffffe, u64(fiat.u1(x457))) + x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459))) + x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461))) + x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463))) + _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465))) + x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441) + x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443) + x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445) + x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447) + x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449) + x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451) + out1[0] = x468 + out1[1] = x469 + out1[2] = x470 + out1[3] = x471 + out1[4] = x472 + out1[5] = x473 +} + +fe_add :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.add_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.add_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.add_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.add_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9, x10 := bits.add_u64(arg1[4], arg2[4], u64(fiat.u1(x8))) + x11, x12 := bits.add_u64(arg1[5], arg2[5], u64(fiat.u1(x10))) + x13, x14 := bits.sub_u64(x1, 0xffffffff, u64(0x0)) + x15, x16 := bits.sub_u64(x3, 0xffffffff00000000, u64(fiat.u1(x14))) + x17, x18 := bits.sub_u64(x5, 0xfffffffffffffffe, u64(fiat.u1(x16))) + x19, x20 := bits.sub_u64(x7, 0xffffffffffffffff, u64(fiat.u1(x18))) + x21, x22 := bits.sub_u64(x9, 0xffffffffffffffff, u64(fiat.u1(x20))) + x23, x24 := bits.sub_u64(x11, 0xffffffffffffffff, u64(fiat.u1(x22))) + _, x26 := bits.sub_u64(u64(fiat.u1(x12)), u64(0x0), u64(fiat.u1(x24))) + x27 := fiat.cmovznz_u64(fiat.u1(x26), x13, x1) + x28 := fiat.cmovznz_u64(fiat.u1(x26), x15, x3) + x29 := fiat.cmovznz_u64(fiat.u1(x26), x17, x5) + x30 := fiat.cmovznz_u64(fiat.u1(x26), x19, x7) + x31 := fiat.cmovznz_u64(fiat.u1(x26), x21, x9) + x32 := fiat.cmovznz_u64(fiat.u1(x26), x23, x11) + out1[0] = x27 + out1[1] = x28 + out1[2] = x29 + out1[3] = x30 + out1[4] = x31 + out1[5] = x32 +} + +fe_sub :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.sub_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9, x10 := bits.sub_u64(arg1[4], arg2[4], u64(fiat.u1(x8))) + x11, x12 := bits.sub_u64(arg1[5], arg2[5], u64(fiat.u1(x10))) + x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff) + x14, x15 := bits.add_u64(x1, (x13 & 0xffffffff), u64(0x0)) + x16, x17 := bits.add_u64(x3, (x13 & 0xffffffff00000000), u64(fiat.u1(x15))) + x18, x19 := bits.add_u64(x5, (x13 & 0xfffffffffffffffe), u64(fiat.u1(x17))) + x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19))) + x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21))) + x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23))) + out1[0] = x14 + out1[1] = x16 + out1[2] = x18 + out1[3] = x20 + out1[4] = x22 + out1[5] = x24 +} + +fe_opp :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(u64(0x0), arg1[0], u64(0x0)) + x3, x4 := bits.sub_u64(u64(0x0), arg1[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(u64(0x0), arg1[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(u64(0x0), arg1[3], u64(fiat.u1(x6))) + x9, x10 := bits.sub_u64(u64(0x0), arg1[4], u64(fiat.u1(x8))) + x11, x12 := bits.sub_u64(u64(0x0), arg1[5], u64(fiat.u1(x10))) + x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff) + x14, x15 := bits.add_u64(x1, (x13 & 0xffffffff), u64(0x0)) + x16, x17 := bits.add_u64(x3, (x13 & 0xffffffff00000000), u64(fiat.u1(x15))) + x18, x19 := bits.add_u64(x5, (x13 & 0xfffffffffffffffe), u64(fiat.u1(x17))) + x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19))) + x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21))) + x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23))) + out1[0] = x14 + out1[1] = x16 + out1[2] = x18 + out1[3] = x20 + out1[4] = x22 + out1[5] = x24 +} + +fe_one :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0xffffffff00000001 + out1[1] = 0xffffffff + out1[2] = 0x1 + out1[3] = 0x0 + out1[4] = 0x0 + out1[5] = 0x0 +} + +fe_non_zero :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> u64 { + return (arg1[0] | (arg1[1] | (arg1[2] | (arg1[3] | (arg1[4] | arg1[5]))))) +} + +@(optimization_mode = "none") +fe_cond_assign :: #force_no_inline proc "contextless" ( + out1, arg1: ^Montgomery_Domain_Field_Element, + arg2: int, +) { + x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0]) + x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1]) + x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2]) + x4 := fiat.cmovznz_u64(fiat.u1(arg2), out1[3], arg1[3]) + x5 := fiat.cmovznz_u64(fiat.u1(arg2), out1[4], arg1[4]) + x6 := fiat.cmovznz_u64(fiat.u1(arg2), out1[5], arg1[5]) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 + out1[4] = x5 + out1[5] = x6 +} + +fe_from_montgomery :: proc "contextless" ( + out1: ^Non_Montgomery_Domain_Field_Element, + arg1: ^Montgomery_Domain_Field_Element, +) { + x1 := arg1[0] + _, x2 := bits.mul_u64(x1, 0x100000001) + x5, x4 := bits.mul_u64(x2, 0xffffffffffffffff) + x7, x6 := bits.mul_u64(x2, 0xffffffffffffffff) + x9, x8 := bits.mul_u64(x2, 0xffffffffffffffff) + x11, x10 := bits.mul_u64(x2, 0xfffffffffffffffe) + x13, x12 := bits.mul_u64(x2, 0xffffffff00000000) + x15, x14 := bits.mul_u64(x2, 0xffffffff) + x16, x17 := bits.add_u64(x15, x12, u64(0x0)) + x18, x19 := bits.add_u64(x13, x10, u64(fiat.u1(x17))) + x20, x21 := bits.add_u64(x11, x8, u64(fiat.u1(x19))) + x22, x23 := bits.add_u64(x9, x6, u64(fiat.u1(x21))) + x24, x25 := bits.add_u64(x7, x4, u64(fiat.u1(x23))) + _, x27 := bits.add_u64(x1, x14, u64(0x0)) + x28, x29 := bits.add_u64(u64(0x0), x16, u64(fiat.u1(x27))) + x30, x31 := bits.add_u64(u64(0x0), x18, u64(fiat.u1(x29))) + x32, x33 := bits.add_u64(u64(0x0), x20, u64(fiat.u1(x31))) + x34, x35 := bits.add_u64(u64(0x0), x22, u64(fiat.u1(x33))) + x36, x37 := bits.add_u64(u64(0x0), x24, u64(fiat.u1(x35))) + x38, x39 := bits.add_u64(u64(0x0), (u64(fiat.u1(x25)) + x5), u64(fiat.u1(x37))) + x40, x41 := bits.add_u64(x28, arg1[1], u64(0x0)) + x42, x43 := bits.add_u64(x30, u64(0x0), u64(fiat.u1(x41))) + x44, x45 := bits.add_u64(x32, u64(0x0), u64(fiat.u1(x43))) + x46, x47 := bits.add_u64(x34, u64(0x0), u64(fiat.u1(x45))) + x48, x49 := bits.add_u64(x36, u64(0x0), u64(fiat.u1(x47))) + x50, x51 := bits.add_u64(x38, u64(0x0), u64(fiat.u1(x49))) + _, x52 := bits.mul_u64(x40, 0x100000001) + x55, x54 := bits.mul_u64(x52, 0xffffffffffffffff) + x57, x56 := bits.mul_u64(x52, 0xffffffffffffffff) + x59, x58 := bits.mul_u64(x52, 0xffffffffffffffff) + x61, x60 := bits.mul_u64(x52, 0xfffffffffffffffe) + x63, x62 := bits.mul_u64(x52, 0xffffffff00000000) + x65, x64 := bits.mul_u64(x52, 0xffffffff) + x66, x67 := bits.add_u64(x65, x62, u64(0x0)) + x68, x69 := bits.add_u64(x63, x60, u64(fiat.u1(x67))) + x70, x71 := bits.add_u64(x61, x58, u64(fiat.u1(x69))) + x72, x73 := bits.add_u64(x59, x56, u64(fiat.u1(x71))) + x74, x75 := bits.add_u64(x57, x54, u64(fiat.u1(x73))) + _, x77 := bits.add_u64(x40, x64, u64(0x0)) + x78, x79 := bits.add_u64(x42, x66, u64(fiat.u1(x77))) + x80, x81 := bits.add_u64(x44, x68, u64(fiat.u1(x79))) + x82, x83 := bits.add_u64(x46, x70, u64(fiat.u1(x81))) + x84, x85 := bits.add_u64(x48, x72, u64(fiat.u1(x83))) + x86, x87 := bits.add_u64(x50, x74, u64(fiat.u1(x85))) + x88, x89 := bits.add_u64((u64(fiat.u1(x51)) + u64(fiat.u1(x39))), (u64(fiat.u1(x75)) + x55), u64(fiat.u1(x87))) + x90, x91 := bits.add_u64(x78, arg1[2], u64(0x0)) + x92, x93 := bits.add_u64(x80, u64(0x0), u64(fiat.u1(x91))) + x94, x95 := bits.add_u64(x82, u64(0x0), u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x84, u64(0x0), u64(fiat.u1(x95))) + x98, x99 := bits.add_u64(x86, u64(0x0), u64(fiat.u1(x97))) + x100, x101 := bits.add_u64(x88, u64(0x0), u64(fiat.u1(x99))) + _, x102 := bits.mul_u64(x90, 0x100000001) + x105, x104 := bits.mul_u64(x102, 0xffffffffffffffff) + x107, x106 := bits.mul_u64(x102, 0xffffffffffffffff) + x109, x108 := bits.mul_u64(x102, 0xffffffffffffffff) + x111, x110 := bits.mul_u64(x102, 0xfffffffffffffffe) + x113, x112 := bits.mul_u64(x102, 0xffffffff00000000) + x115, x114 := bits.mul_u64(x102, 0xffffffff) + x116, x117 := bits.add_u64(x115, x112, u64(0x0)) + x118, x119 := bits.add_u64(x113, x110, u64(fiat.u1(x117))) + x120, x121 := bits.add_u64(x111, x108, u64(fiat.u1(x119))) + x122, x123 := bits.add_u64(x109, x106, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x107, x104, u64(fiat.u1(x123))) + _, x127 := bits.add_u64(x90, x114, u64(0x0)) + x128, x129 := bits.add_u64(x92, x116, u64(fiat.u1(x127))) + x130, x131 := bits.add_u64(x94, x118, u64(fiat.u1(x129))) + x132, x133 := bits.add_u64(x96, x120, u64(fiat.u1(x131))) + x134, x135 := bits.add_u64(x98, x122, u64(fiat.u1(x133))) + x136, x137 := bits.add_u64(x100, x124, u64(fiat.u1(x135))) + x138, x139 := bits.add_u64((u64(fiat.u1(x101)) + u64(fiat.u1(x89))), (u64(fiat.u1(x125)) + x105), u64(fiat.u1(x137))) + x140, x141 := bits.add_u64(x128, arg1[3], u64(0x0)) + x142, x143 := bits.add_u64(x130, u64(0x0), u64(fiat.u1(x141))) + x144, x145 := bits.add_u64(x132, u64(0x0), u64(fiat.u1(x143))) + x146, x147 := bits.add_u64(x134, u64(0x0), u64(fiat.u1(x145))) + x148, x149 := bits.add_u64(x136, u64(0x0), u64(fiat.u1(x147))) + x150, x151 := bits.add_u64(x138, u64(0x0), u64(fiat.u1(x149))) + _, x152 := bits.mul_u64(x140, 0x100000001) + x155, x154 := bits.mul_u64(x152, 0xffffffffffffffff) + x157, x156 := bits.mul_u64(x152, 0xffffffffffffffff) + x159, x158 := bits.mul_u64(x152, 0xffffffffffffffff) + x161, x160 := bits.mul_u64(x152, 0xfffffffffffffffe) + x163, x162 := bits.mul_u64(x152, 0xffffffff00000000) + x165, x164 := bits.mul_u64(x152, 0xffffffff) + x166, x167 := bits.add_u64(x165, x162, u64(0x0)) + x168, x169 := bits.add_u64(x163, x160, u64(fiat.u1(x167))) + x170, x171 := bits.add_u64(x161, x158, u64(fiat.u1(x169))) + x172, x173 := bits.add_u64(x159, x156, u64(fiat.u1(x171))) + x174, x175 := bits.add_u64(x157, x154, u64(fiat.u1(x173))) + _, x177 := bits.add_u64(x140, x164, u64(0x0)) + x178, x179 := bits.add_u64(x142, x166, u64(fiat.u1(x177))) + x180, x181 := bits.add_u64(x144, x168, u64(fiat.u1(x179))) + x182, x183 := bits.add_u64(x146, x170, u64(fiat.u1(x181))) + x184, x185 := bits.add_u64(x148, x172, u64(fiat.u1(x183))) + x186, x187 := bits.add_u64(x150, x174, u64(fiat.u1(x185))) + x188, x189 := bits.add_u64((u64(fiat.u1(x151)) + u64(fiat.u1(x139))), (u64(fiat.u1(x175)) + x155), u64(fiat.u1(x187))) + x190, x191 := bits.add_u64(x178, arg1[4], u64(0x0)) + x192, x193 := bits.add_u64(x180, u64(0x0), u64(fiat.u1(x191))) + x194, x195 := bits.add_u64(x182, u64(0x0), u64(fiat.u1(x193))) + x196, x197 := bits.add_u64(x184, u64(0x0), u64(fiat.u1(x195))) + x198, x199 := bits.add_u64(x186, u64(0x0), u64(fiat.u1(x197))) + x200, x201 := bits.add_u64(x188, u64(0x0), u64(fiat.u1(x199))) + _, x202 := bits.mul_u64(x190, 0x100000001) + x205, x204 := bits.mul_u64(x202, 0xffffffffffffffff) + x207, x206 := bits.mul_u64(x202, 0xffffffffffffffff) + x209, x208 := bits.mul_u64(x202, 0xffffffffffffffff) + x211, x210 := bits.mul_u64(x202, 0xfffffffffffffffe) + x213, x212 := bits.mul_u64(x202, 0xffffffff00000000) + x215, x214 := bits.mul_u64(x202, 0xffffffff) + x216, x217 := bits.add_u64(x215, x212, u64(0x0)) + x218, x219 := bits.add_u64(x213, x210, u64(fiat.u1(x217))) + x220, x221 := bits.add_u64(x211, x208, u64(fiat.u1(x219))) + x222, x223 := bits.add_u64(x209, x206, u64(fiat.u1(x221))) + x224, x225 := bits.add_u64(x207, x204, u64(fiat.u1(x223))) + _, x227 := bits.add_u64(x190, x214, u64(0x0)) + x228, x229 := bits.add_u64(x192, x216, u64(fiat.u1(x227))) + x230, x231 := bits.add_u64(x194, x218, u64(fiat.u1(x229))) + x232, x233 := bits.add_u64(x196, x220, u64(fiat.u1(x231))) + x234, x235 := bits.add_u64(x198, x222, u64(fiat.u1(x233))) + x236, x237 := bits.add_u64(x200, x224, u64(fiat.u1(x235))) + x238, x239 := bits.add_u64((u64(fiat.u1(x201)) + u64(fiat.u1(x189))), (u64(fiat.u1(x225)) + x205), u64(fiat.u1(x237))) + x240, x241 := bits.add_u64(x228, arg1[5], u64(0x0)) + x242, x243 := bits.add_u64(x230, u64(0x0), u64(fiat.u1(x241))) + x244, x245 := bits.add_u64(x232, u64(0x0), u64(fiat.u1(x243))) + x246, x247 := bits.add_u64(x234, u64(0x0), u64(fiat.u1(x245))) + x248, x249 := bits.add_u64(x236, u64(0x0), u64(fiat.u1(x247))) + x250, x251 := bits.add_u64(x238, u64(0x0), u64(fiat.u1(x249))) + _, x252 := bits.mul_u64(x240, 0x100000001) + x255, x254 := bits.mul_u64(x252, 0xffffffffffffffff) + x257, x256 := bits.mul_u64(x252, 0xffffffffffffffff) + x259, x258 := bits.mul_u64(x252, 0xffffffffffffffff) + x261, x260 := bits.mul_u64(x252, 0xfffffffffffffffe) + x263, x262 := bits.mul_u64(x252, 0xffffffff00000000) + x265, x264 := bits.mul_u64(x252, 0xffffffff) + x266, x267 := bits.add_u64(x265, x262, u64(0x0)) + x268, x269 := bits.add_u64(x263, x260, u64(fiat.u1(x267))) + x270, x271 := bits.add_u64(x261, x258, u64(fiat.u1(x269))) + x272, x273 := bits.add_u64(x259, x256, u64(fiat.u1(x271))) + x274, x275 := bits.add_u64(x257, x254, u64(fiat.u1(x273))) + _, x277 := bits.add_u64(x240, x264, u64(0x0)) + x278, x279 := bits.add_u64(x242, x266, u64(fiat.u1(x277))) + x280, x281 := bits.add_u64(x244, x268, u64(fiat.u1(x279))) + x282, x283 := bits.add_u64(x246, x270, u64(fiat.u1(x281))) + x284, x285 := bits.add_u64(x248, x272, u64(fiat.u1(x283))) + x286, x287 := bits.add_u64(x250, x274, u64(fiat.u1(x285))) + x288, x289 := bits.add_u64((u64(fiat.u1(x251)) + u64(fiat.u1(x239))), (u64(fiat.u1(x275)) + x255), u64(fiat.u1(x287))) + x290, x291 := bits.sub_u64(x278, 0xffffffff, u64(0x0)) + x292, x293 := bits.sub_u64(x280, 0xffffffff00000000, u64(fiat.u1(x291))) + x294, x295 := bits.sub_u64(x282, 0xfffffffffffffffe, u64(fiat.u1(x293))) + x296, x297 := bits.sub_u64(x284, 0xffffffffffffffff, u64(fiat.u1(x295))) + x298, x299 := bits.sub_u64(x286, 0xffffffffffffffff, u64(fiat.u1(x297))) + x300, x301 := bits.sub_u64(x288, 0xffffffffffffffff, u64(fiat.u1(x299))) + _, x303 := bits.sub_u64(u64(fiat.u1(x289)), u64(0x0), u64(fiat.u1(x301))) + x304 := fiat.cmovznz_u64(fiat.u1(x303), x290, x278) + x305 := fiat.cmovznz_u64(fiat.u1(x303), x292, x280) + x306 := fiat.cmovznz_u64(fiat.u1(x303), x294, x282) + x307 := fiat.cmovznz_u64(fiat.u1(x303), x296, x284) + x308 := fiat.cmovznz_u64(fiat.u1(x303), x298, x286) + x309 := fiat.cmovznz_u64(fiat.u1(x303), x300, x288) + out1[0] = x304 + out1[1] = x305 + out1[2] = x306 + out1[3] = x307 + out1[4] = x308 + out1[5] = x309 +} + +fe_to_montgomery :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: ^Non_Montgomery_Domain_Field_Element, +) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[4] + x5 := arg1[5] + x6 := arg1[0] + x8, x7 := bits.mul_u64(x6, 0x200000000) + x10, x9 := bits.mul_u64(x6, 0xfffffffe00000000) + x12, x11 := bits.mul_u64(x6, 0x200000000) + x14, x13 := bits.mul_u64(x6, 0xfffffffe00000001) + x15, x16 := bits.add_u64(x14, x11, u64(0x0)) + x17, x18 := bits.add_u64(x12, x9, u64(fiat.u1(x16))) + x19, x20 := bits.add_u64(x10, x7, u64(fiat.u1(x18))) + x21, x22 := bits.add_u64(x8, x6, u64(fiat.u1(x20))) + _, x23 := bits.mul_u64(x13, 0x100000001) + x26, x25 := bits.mul_u64(x23, 0xffffffffffffffff) + x28, x27 := bits.mul_u64(x23, 0xffffffffffffffff) + x30, x29 := bits.mul_u64(x23, 0xffffffffffffffff) + x32, x31 := bits.mul_u64(x23, 0xfffffffffffffffe) + x34, x33 := bits.mul_u64(x23, 0xffffffff00000000) + x36, x35 := bits.mul_u64(x23, 0xffffffff) + x37, x38 := bits.add_u64(x36, x33, u64(0x0)) + x39, x40 := bits.add_u64(x34, x31, u64(fiat.u1(x38))) + x41, x42 := bits.add_u64(x32, x29, u64(fiat.u1(x40))) + x43, x44 := bits.add_u64(x30, x27, u64(fiat.u1(x42))) + x45, x46 := bits.add_u64(x28, x25, u64(fiat.u1(x44))) + _, x48 := bits.add_u64(x13, x35, u64(0x0)) + x49, x50 := bits.add_u64(x15, x37, u64(fiat.u1(x48))) + x51, x52 := bits.add_u64(x17, x39, u64(fiat.u1(x50))) + x53, x54 := bits.add_u64(x19, x41, u64(fiat.u1(x52))) + x55, x56 := bits.add_u64(x21, x43, u64(fiat.u1(x54))) + x57, x58 := bits.add_u64(u64(fiat.u1(x22)), x45, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(u64(0x0), (u64(fiat.u1(x46)) + x26), u64(fiat.u1(x58))) + x62, x61 := bits.mul_u64(x1, 0x200000000) + x64, x63 := bits.mul_u64(x1, 0xfffffffe00000000) + x66, x65 := bits.mul_u64(x1, 0x200000000) + x68, x67 := bits.mul_u64(x1, 0xfffffffe00000001) + x69, x70 := bits.add_u64(x68, x65, u64(0x0)) + x71, x72 := bits.add_u64(x66, x63, u64(fiat.u1(x70))) + x73, x74 := bits.add_u64(x64, x61, u64(fiat.u1(x72))) + x75, x76 := bits.add_u64(x62, x1, u64(fiat.u1(x74))) + x77, x78 := bits.add_u64(x49, x67, u64(0x0)) + x79, x80 := bits.add_u64(x51, x69, u64(fiat.u1(x78))) + x81, x82 := bits.add_u64(x53, x71, u64(fiat.u1(x80))) + x83, x84 := bits.add_u64(x55, x73, u64(fiat.u1(x82))) + x85, x86 := bits.add_u64(x57, x75, u64(fiat.u1(x84))) + x87, x88 := bits.add_u64(x59, u64(fiat.u1(x76)), u64(fiat.u1(x86))) + _, x89 := bits.mul_u64(x77, 0x100000001) + x92, x91 := bits.mul_u64(x89, 0xffffffffffffffff) + x94, x93 := bits.mul_u64(x89, 0xffffffffffffffff) + x96, x95 := bits.mul_u64(x89, 0xffffffffffffffff) + x98, x97 := bits.mul_u64(x89, 0xfffffffffffffffe) + x100, x99 := bits.mul_u64(x89, 0xffffffff00000000) + x102, x101 := bits.mul_u64(x89, 0xffffffff) + x103, x104 := bits.add_u64(x102, x99, u64(0x0)) + x105, x106 := bits.add_u64(x100, x97, u64(fiat.u1(x104))) + x107, x108 := bits.add_u64(x98, x95, u64(fiat.u1(x106))) + x109, x110 := bits.add_u64(x96, x93, u64(fiat.u1(x108))) + x111, x112 := bits.add_u64(x94, x91, u64(fiat.u1(x110))) + _, x114 := bits.add_u64(x77, x101, u64(0x0)) + x115, x116 := bits.add_u64(x79, x103, u64(fiat.u1(x114))) + x117, x118 := bits.add_u64(x81, x105, u64(fiat.u1(x116))) + x119, x120 := bits.add_u64(x83, x107, u64(fiat.u1(x118))) + x121, x122 := bits.add_u64(x85, x109, u64(fiat.u1(x120))) + x123, x124 := bits.add_u64(x87, x111, u64(fiat.u1(x122))) + x125, x126 := bits.add_u64((u64(fiat.u1(x88)) + u64(fiat.u1(x60))), (u64(fiat.u1(x112)) + x92), u64(fiat.u1(x124))) + x128, x127 := bits.mul_u64(x2, 0x200000000) + x130, x129 := bits.mul_u64(x2, 0xfffffffe00000000) + x132, x131 := bits.mul_u64(x2, 0x200000000) + x134, x133 := bits.mul_u64(x2, 0xfffffffe00000001) + x135, x136 := bits.add_u64(x134, x131, u64(0x0)) + x137, x138 := bits.add_u64(x132, x129, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(x130, x127, u64(fiat.u1(x138))) + x141, x142 := bits.add_u64(x128, x2, u64(fiat.u1(x140))) + x143, x144 := bits.add_u64(x115, x133, u64(0x0)) + x145, x146 := bits.add_u64(x117, x135, u64(fiat.u1(x144))) + x147, x148 := bits.add_u64(x119, x137, u64(fiat.u1(x146))) + x149, x150 := bits.add_u64(x121, x139, u64(fiat.u1(x148))) + x151, x152 := bits.add_u64(x123, x141, u64(fiat.u1(x150))) + x153, x154 := bits.add_u64(x125, u64(fiat.u1(x142)), u64(fiat.u1(x152))) + _, x155 := bits.mul_u64(x143, 0x100000001) + x158, x157 := bits.mul_u64(x155, 0xffffffffffffffff) + x160, x159 := bits.mul_u64(x155, 0xffffffffffffffff) + x162, x161 := bits.mul_u64(x155, 0xffffffffffffffff) + x164, x163 := bits.mul_u64(x155, 0xfffffffffffffffe) + x166, x165 := bits.mul_u64(x155, 0xffffffff00000000) + x168, x167 := bits.mul_u64(x155, 0xffffffff) + x169, x170 := bits.add_u64(x168, x165, u64(0x0)) + x171, x172 := bits.add_u64(x166, x163, u64(fiat.u1(x170))) + x173, x174 := bits.add_u64(x164, x161, u64(fiat.u1(x172))) + x175, x176 := bits.add_u64(x162, x159, u64(fiat.u1(x174))) + x177, x178 := bits.add_u64(x160, x157, u64(fiat.u1(x176))) + _, x180 := bits.add_u64(x143, x167, u64(0x0)) + x181, x182 := bits.add_u64(x145, x169, u64(fiat.u1(x180))) + x183, x184 := bits.add_u64(x147, x171, u64(fiat.u1(x182))) + x185, x186 := bits.add_u64(x149, x173, u64(fiat.u1(x184))) + x187, x188 := bits.add_u64(x151, x175, u64(fiat.u1(x186))) + x189, x190 := bits.add_u64(x153, x177, u64(fiat.u1(x188))) + x191, x192 := bits.add_u64((u64(fiat.u1(x154)) + u64(fiat.u1(x126))), (u64(fiat.u1(x178)) + x158), u64(fiat.u1(x190))) + x194, x193 := bits.mul_u64(x3, 0x200000000) + x196, x195 := bits.mul_u64(x3, 0xfffffffe00000000) + x198, x197 := bits.mul_u64(x3, 0x200000000) + x200, x199 := bits.mul_u64(x3, 0xfffffffe00000001) + x201, x202 := bits.add_u64(x200, x197, u64(0x0)) + x203, x204 := bits.add_u64(x198, x195, u64(fiat.u1(x202))) + x205, x206 := bits.add_u64(x196, x193, u64(fiat.u1(x204))) + x207, x208 := bits.add_u64(x194, x3, u64(fiat.u1(x206))) + x209, x210 := bits.add_u64(x181, x199, u64(0x0)) + x211, x212 := bits.add_u64(x183, x201, u64(fiat.u1(x210))) + x213, x214 := bits.add_u64(x185, x203, u64(fiat.u1(x212))) + x215, x216 := bits.add_u64(x187, x205, u64(fiat.u1(x214))) + x217, x218 := bits.add_u64(x189, x207, u64(fiat.u1(x216))) + x219, x220 := bits.add_u64(x191, u64(fiat.u1(x208)), u64(fiat.u1(x218))) + _, x221 := bits.mul_u64(x209, 0x100000001) + x224, x223 := bits.mul_u64(x221, 0xffffffffffffffff) + x226, x225 := bits.mul_u64(x221, 0xffffffffffffffff) + x228, x227 := bits.mul_u64(x221, 0xffffffffffffffff) + x230, x229 := bits.mul_u64(x221, 0xfffffffffffffffe) + x232, x231 := bits.mul_u64(x221, 0xffffffff00000000) + x234, x233 := bits.mul_u64(x221, 0xffffffff) + x235, x236 := bits.add_u64(x234, x231, u64(0x0)) + x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236))) + x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238))) + x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240))) + x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242))) + _, x246 := bits.add_u64(x209, x233, u64(0x0)) + x247, x248 := bits.add_u64(x211, x235, u64(fiat.u1(x246))) + x249, x250 := bits.add_u64(x213, x237, u64(fiat.u1(x248))) + x251, x252 := bits.add_u64(x215, x239, u64(fiat.u1(x250))) + x253, x254 := bits.add_u64(x217, x241, u64(fiat.u1(x252))) + x255, x256 := bits.add_u64(x219, x243, u64(fiat.u1(x254))) + x257, x258 := bits.add_u64((u64(fiat.u1(x220)) + u64(fiat.u1(x192))), (u64(fiat.u1(x244)) + x224), u64(fiat.u1(x256))) + x260, x259 := bits.mul_u64(x4, 0x200000000) + x262, x261 := bits.mul_u64(x4, 0xfffffffe00000000) + x264, x263 := bits.mul_u64(x4, 0x200000000) + x266, x265 := bits.mul_u64(x4, 0xfffffffe00000001) + x267, x268 := bits.add_u64(x266, x263, u64(0x0)) + x269, x270 := bits.add_u64(x264, x261, u64(fiat.u1(x268))) + x271, x272 := bits.add_u64(x262, x259, u64(fiat.u1(x270))) + x273, x274 := bits.add_u64(x260, x4, u64(fiat.u1(x272))) + x275, x276 := bits.add_u64(x247, x265, u64(0x0)) + x277, x278 := bits.add_u64(x249, x267, u64(fiat.u1(x276))) + x279, x280 := bits.add_u64(x251, x269, u64(fiat.u1(x278))) + x281, x282 := bits.add_u64(x253, x271, u64(fiat.u1(x280))) + x283, x284 := bits.add_u64(x255, x273, u64(fiat.u1(x282))) + x285, x286 := bits.add_u64(x257, u64(fiat.u1(x274)), u64(fiat.u1(x284))) + _, x287 := bits.mul_u64(x275, 0x100000001) + x290, x289 := bits.mul_u64(x287, 0xffffffffffffffff) + x292, x291 := bits.mul_u64(x287, 0xffffffffffffffff) + x294, x293 := bits.mul_u64(x287, 0xffffffffffffffff) + x296, x295 := bits.mul_u64(x287, 0xfffffffffffffffe) + x298, x297 := bits.mul_u64(x287, 0xffffffff00000000) + x300, x299 := bits.mul_u64(x287, 0xffffffff) + x301, x302 := bits.add_u64(x300, x297, u64(0x0)) + x303, x304 := bits.add_u64(x298, x295, u64(fiat.u1(x302))) + x305, x306 := bits.add_u64(x296, x293, u64(fiat.u1(x304))) + x307, x308 := bits.add_u64(x294, x291, u64(fiat.u1(x306))) + x309, x310 := bits.add_u64(x292, x289, u64(fiat.u1(x308))) + _, x312 := bits.add_u64(x275, x299, u64(0x0)) + x313, x314 := bits.add_u64(x277, x301, u64(fiat.u1(x312))) + x315, x316 := bits.add_u64(x279, x303, u64(fiat.u1(x314))) + x317, x318 := bits.add_u64(x281, x305, u64(fiat.u1(x316))) + x319, x320 := bits.add_u64(x283, x307, u64(fiat.u1(x318))) + x321, x322 := bits.add_u64(x285, x309, u64(fiat.u1(x320))) + x323, x324 := bits.add_u64((u64(fiat.u1(x286)) + u64(fiat.u1(x258))), (u64(fiat.u1(x310)) + x290), u64(fiat.u1(x322))) + x326, x325 := bits.mul_u64(x5, 0x200000000) + x328, x327 := bits.mul_u64(x5, 0xfffffffe00000000) + x330, x329 := bits.mul_u64(x5, 0x200000000) + x332, x331 := bits.mul_u64(x5, 0xfffffffe00000001) + x333, x334 := bits.add_u64(x332, x329, u64(0x0)) + x335, x336 := bits.add_u64(x330, x327, u64(fiat.u1(x334))) + x337, x338 := bits.add_u64(x328, x325, u64(fiat.u1(x336))) + x339, x340 := bits.add_u64(x326, x5, u64(fiat.u1(x338))) + x341, x342 := bits.add_u64(x313, x331, u64(0x0)) + x343, x344 := bits.add_u64(x315, x333, u64(fiat.u1(x342))) + x345, x346 := bits.add_u64(x317, x335, u64(fiat.u1(x344))) + x347, x348 := bits.add_u64(x319, x337, u64(fiat.u1(x346))) + x349, x350 := bits.add_u64(x321, x339, u64(fiat.u1(x348))) + x351, x352 := bits.add_u64(x323, u64(fiat.u1(x340)), u64(fiat.u1(x350))) + _, x353 := bits.mul_u64(x341, 0x100000001) + x356, x355 := bits.mul_u64(x353, 0xffffffffffffffff) + x358, x357 := bits.mul_u64(x353, 0xffffffffffffffff) + x360, x359 := bits.mul_u64(x353, 0xffffffffffffffff) + x362, x361 := bits.mul_u64(x353, 0xfffffffffffffffe) + x364, x363 := bits.mul_u64(x353, 0xffffffff00000000) + x366, x365 := bits.mul_u64(x353, 0xffffffff) + x367, x368 := bits.add_u64(x366, x363, u64(0x0)) + x369, x370 := bits.add_u64(x364, x361, u64(fiat.u1(x368))) + x371, x372 := bits.add_u64(x362, x359, u64(fiat.u1(x370))) + x373, x374 := bits.add_u64(x360, x357, u64(fiat.u1(x372))) + x375, x376 := bits.add_u64(x358, x355, u64(fiat.u1(x374))) + _, x378 := bits.add_u64(x341, x365, u64(0x0)) + x379, x380 := bits.add_u64(x343, x367, u64(fiat.u1(x378))) + x381, x382 := bits.add_u64(x345, x369, u64(fiat.u1(x380))) + x383, x384 := bits.add_u64(x347, x371, u64(fiat.u1(x382))) + x385, x386 := bits.add_u64(x349, x373, u64(fiat.u1(x384))) + x387, x388 := bits.add_u64(x351, x375, u64(fiat.u1(x386))) + x389, x390 := bits.add_u64((u64(fiat.u1(x352)) + u64(fiat.u1(x324))), (u64(fiat.u1(x376)) + x356), u64(fiat.u1(x388))) + x391, x392 := bits.sub_u64(x379, 0xffffffff, u64(0x0)) + x393, x394 := bits.sub_u64(x381, 0xffffffff00000000, u64(fiat.u1(x392))) + x395, x396 := bits.sub_u64(x383, 0xfffffffffffffffe, u64(fiat.u1(x394))) + x397, x398 := bits.sub_u64(x385, 0xffffffffffffffff, u64(fiat.u1(x396))) + x399, x400 := bits.sub_u64(x387, 0xffffffffffffffff, u64(fiat.u1(x398))) + x401, x402 := bits.sub_u64(x389, 0xffffffffffffffff, u64(fiat.u1(x400))) + _, x404 := bits.sub_u64(u64(fiat.u1(x390)), u64(0x0), u64(fiat.u1(x402))) + x405 := fiat.cmovznz_u64(fiat.u1(x404), x391, x379) + x406 := fiat.cmovznz_u64(fiat.u1(x404), x393, x381) + x407 := fiat.cmovznz_u64(fiat.u1(x404), x395, x383) + x408 := fiat.cmovznz_u64(fiat.u1(x404), x397, x385) + x409 := fiat.cmovznz_u64(fiat.u1(x404), x399, x387) + x410 := fiat.cmovznz_u64(fiat.u1(x404), x401, x389) + out1[0] = x405 + out1[1] = x406 + out1[2] = x407 + out1[3] = x408 + out1[4] = x409 + out1[5] = x410 +} diff --git a/core/crypto/_fiat/field_scalarp384r1/field.odin b/core/crypto/_fiat/field_scalarp384r1/field.odin new file mode 100644 index 000000000..f8af5e0f5 --- /dev/null +++ b/core/crypto/_fiat/field_scalarp384r1/field.odin @@ -0,0 +1,239 @@ +package field_scalarp384r1 + +import subtle "core:crypto/_subtle" +import "core:encoding/endian" +import "core:math/bits" +import "core:mem" + +@(private, rodata) +TWO_256 := Montgomery_Domain_Field_Element{ + 17975668497346362272, + 12895982994901192340, + 1913828944324294218, + 902107514168524577, + 1374695839762142861, + 12098342389602539653, +} + +fe_clear :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) { + mem.zero_explicit(arg1, size_of(Montgomery_Domain_Field_Element)) +} + +fe_clear_vec :: proc "contextless" ( + arg1: []^Montgomery_Domain_Field_Element, +) { + for fe in arg1 { + fe_clear(fe) + } +} + +fe_from_bytes :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: []byte, +) -> bool { + ensure_contextless(len(out1) <= 64, "p384r1: invalid scalar input buffer") + + is_canonical := false + s_len := len(arg1) + switch { + case s_len < 48: + // No way this can be greater than the order. + fe_unchecked_set(out1, arg1) + is_canonical = true + case s_len == 48: + // There is no way for any 384-bit value to be >= 2n, so + // the reduction can be done by `src - n` and a conditional + // select based on the underflow. + // + // It is *extremely* unlikely that the reduction is actually + // needed. + tmp: Non_Montgomery_Domain_Field_Element = --- + fe_unchecked_set_saturated(&tmp, arg1) + reduced := tmp + defer mem.zero_explicit(&tmp, size_of(tmp)) + defer mem.zero_explicit(&reduced, size_of(reduced)) + + borrow: u64 + reduced[0], borrow = bits.sub_u64(tmp[0], ELL[0], borrow) + reduced[1], borrow = bits.sub_u64(tmp[1], ELL[1], borrow) + reduced[2], borrow = bits.sub_u64(tmp[2], ELL[2], borrow) + reduced[3], borrow = bits.sub_u64(tmp[3], ELL[3], borrow) + reduced[4], borrow = bits.sub_u64(tmp[4], ELL[4], borrow) + reduced[5], borrow = bits.sub_u64(tmp[5], ELL[5], borrow) + need_reduced := subtle.u64_is_zero(borrow) + + fe_cond_select(&tmp, &tmp, &reduced, int(need_reduced)) + fe_to_montgomery(out1, &tmp) + + is_canonical = need_reduced == 0 + case: + // Use Frank Denis' trick, as documented by Filippo Valsorda + // at https://words.filippo.io/dispatches/wide-reduction/ + // + // "I represent the value as a+b*2^192+c*2^384" + // + // Since digests beyond 512-bits are unrealistic, we do + // "a+b*2^256" + + // Zero extend to 512-bits. + src_512: [64]byte + copy(src_512[64-s_len:], arg1) + defer mem.zero_explicit(&src_512, size_of(src_512)) + + fe_unchecked_set(out1, src_512[32:]) // a + b: Montgomery_Domain_Field_Element + fe_unchecked_set(&b, src_512[:32]) // b + + fe_mul(&b, &b, &TWO_256) + fe_add(out1, out1, &b) + + fe_clear(&b) + } + + return !is_canonical +} + +@(private) +fe_is_canonical :: proc "contextless" (arg1: []byte) -> bool { + _, borrow := bits.sub_u64(ELL[0] - 1, endian.unchecked_get_u64be(arg1[40:]), 0) + _, borrow = bits.sub_u64(ELL[1], endian.unchecked_get_u64be(arg1[32:]), borrow) + _, borrow = bits.sub_u64(ELL[2], endian.unchecked_get_u64be(arg1[24:]), borrow) + _, borrow = bits.sub_u64(ELL[3], endian.unchecked_get_u64be(arg1[16:]), borrow) + _, borrow = bits.sub_u64(ELL[4], endian.unchecked_get_u64be(arg1[8:]), borrow) + _, borrow = bits.sub_u64(ELL[5], endian.unchecked_get_u64be(arg1[0:]), borrow) + return borrow == 0 +} + +@(private="file") +fe_unchecked_set_saturated :: proc "contextless" (out1: ^Non_Montgomery_Domain_Field_Element, arg1: []byte) { + out1[0] = endian.unchecked_get_u64be(arg1[40:]) + out1[1] = endian.unchecked_get_u64be(arg1[32:]) + out1[2] = endian.unchecked_get_u64be(arg1[24:]) + out1[3] = endian.unchecked_get_u64be(arg1[16:]) + out1[4] = endian.unchecked_get_u64be(arg1[8:]) + out1[5] = endian.unchecked_get_u64be(arg1[0:]) +} + +@(private) +fe_unchecked_set :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element, arg1: []byte) { + arg1_384: [48]byte + defer mem.zero_explicit(&arg1_384, size_of(arg1_384)) + copy(arg1_384[48-len(arg1):], arg1) + + tmp: Non_Montgomery_Domain_Field_Element = --- + fe_unchecked_set_saturated(&tmp, arg1_384[:]) + defer mem.zero_explicit(&tmp, size_of(tmp)) + + fe_to_montgomery(out1, &tmp) +} + +fe_to_bytes :: proc "contextless" (out1: []byte, arg1: ^Montgomery_Domain_Field_Element) { + ensure_contextless(len(out1) == 48, "p384r1: invalid scalar output buffer") + + tmp: Non_Montgomery_Domain_Field_Element = --- + fe_from_montgomery(&tmp, arg1) + + // Note: Likewise, output in big-endian. + endian.unchecked_put_u64be(out1[40:], tmp[0]) + endian.unchecked_put_u64be(out1[32:], tmp[1]) + endian.unchecked_put_u64be(out1[24:], tmp[2]) + endian.unchecked_put_u64be(out1[16:], tmp[3]) + endian.unchecked_put_u64be(out1[8:], tmp[4]) + endian.unchecked_put_u64be(out1[0:], tmp[5]) + + mem.zero_explicit(&tmp, size_of(tmp)) +} + +fe_equal :: proc "contextless" (arg1, arg2: ^Montgomery_Domain_Field_Element) -> int { + tmp: Montgomery_Domain_Field_Element = --- + fe_sub(&tmp, arg1, arg2) + + is_eq := subtle.u64_is_zero(fe_non_zero(&tmp)) + + fe_clear(&tmp) + + return int(is_eq) +} + +fe_is_odd :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> int { + tmp: Non_Montgomery_Domain_Field_Element = --- + defer mem.zero_explicit(&tmp, size_of(tmp)) + + fe_from_montgomery(&tmp, arg1) + return int(tmp[0] & 1) +} + +fe_zero :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0 + out1[1] = 0 + out1[2] = 0 + out1[3] = 0 + out1[4] = 0 + out1[5] = 0 +} + +fe_set :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[0] + x2 := arg1[1] + x3 := arg1[2] + x4 := arg1[3] + x5 := arg1[4] + x6 := arg1[5] + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 + out1[4] = x5 + out1[5] = x6 +} + +@(optimization_mode = "none") +fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Montgomery_Domain_Field_Element, arg1: int) { + mask := (u64(arg1) * 0xffffffffffffffff) + x := (out1[0] ~ out2[0]) & mask + x1, y1 := out1[0] ~ x, out2[0] ~ x + x = (out1[1] ~ out2[1]) & mask + x2, y2 := out1[1] ~ x, out2[1] ~ x + x = (out1[2] ~ out2[2]) & mask + x3, y3 := out1[2] ~ x, out2[2] ~ x + x = (out1[3] ~ out2[3]) & mask + x4, y4 := out1[3] ~ x, out2[3] ~ x + x = (out1[4] ~ out2[4]) & mask + x5, y5 := out1[4] ~ x, out2[4] ~ x + x = (out1[5] ~ out2[5]) & mask + x6, y6 := out1[5] ~ x, out2[5] ~ x + out1[0], out2[0] = x1, y1 + out1[1], out2[1] = x2, y2 + out1[2], out2[2] = x3, y3 + out1[3], out2[3] = x4, y4 + out1[4], out2[4] = x5, y5 + out1[5], out2[5] = x6, y6 +} + +@(optimization_mode = "none") +fe_cond_select :: #force_no_inline proc "contextless" ( + out1, arg1, arg2: ^$T, + arg3: int, +) where T == Montgomery_Domain_Field_Element || T == Non_Montgomery_Domain_Field_Element { + mask := (u64(arg3) * 0xffffffffffffffff) + x1 := ((mask & arg2[0]) | ((~mask) & arg1[0])) + x2 := ((mask & arg2[1]) | ((~mask) & arg1[1])) + x3 := ((mask & arg2[2]) | ((~mask) & arg1[2])) + x4 := ((mask & arg2[3]) | ((~mask) & arg1[3])) + x5 := ((mask & arg2[4]) | ((~mask) & arg1[4])) + x6 := ((mask & arg2[5]) | ((~mask) & arg1[5])) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 + out1[4] = x5 + out1[5] = x6 +} + +fe_cond_negate :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element, ctrl: int) { + tmp1: Montgomery_Domain_Field_Element = --- + fe_opp(&tmp1, arg1) + fe_cond_select(out1, arg1, &tmp1, ctrl) + + fe_clear(&tmp1) +} diff --git a/core/crypto/_fiat/field_scalarp384r1/field64.odin b/core/crypto/_fiat/field_scalarp384r1/field64.odin new file mode 100644 index 000000000..ce29060e8 --- /dev/null +++ b/core/crypto/_fiat/field_scalarp384r1/field64.odin @@ -0,0 +1,1081 @@ +// The BSD 1-Clause License (BSD-1-Clause) +// +// Copyright (c) 2015-2020 the fiat-crypto authors (see the AUTHORS file) +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// THIS SOFTWARE IS PROVIDED BY the fiat-crypto authors "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, +// Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package field_scalarp384r1 + +// The file provides arithmetic on the field Z/(2^384 - 1388124618062372383947042015309946732620727252194336364173) +// using a 64-bit Montgomery form internal representation. It is derived +// primarily from the machine generated Golang output from the fiat-crypto +// project. +// +// While the base implementation is provably correct, this implementation +// makes no such claims as the port and optimizations were done by hand. +// +// WARNING: While big-endian is the common representation used for this +// curve, the fiat output uses least-significant-limb first. + +import fiat "core:crypto/_fiat" +import "core:math/bits" + +// ELL is the saturated representation of the field order, least-significant +// limb first. +ELL :: [6]u64{0xecec196accc52973, 0x581a0db248b0a77a, 0xc7634d81f4372ddf, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff} + +Montgomery_Domain_Field_Element :: distinct [6]u64 +Non_Montgomery_Domain_Field_Element :: distinct [6]u64 + +fe_mul :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[4] + x5 := arg1[5] + x6 := arg1[0] + x8, x7 := bits.mul_u64(x6, arg2[5]) + x10, x9 := bits.mul_u64(x6, arg2[4]) + x12, x11 := bits.mul_u64(x6, arg2[3]) + x14, x13 := bits.mul_u64(x6, arg2[2]) + x16, x15 := bits.mul_u64(x6, arg2[1]) + x18, x17 := bits.mul_u64(x6, arg2[0]) + x19, x20 := bits.add_u64(x18, x15, u64(0x0)) + x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20))) + x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22))) + x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24))) + x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26))) + x29 := (u64(fiat.u1(x28)) + x8) + _, x30 := bits.mul_u64(x17, 0x6ed46089e88fdc45) + x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff) + x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff) + x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff) + x39, x38 := bits.mul_u64(x30, 0xc7634d81f4372ddf) + x41, x40 := bits.mul_u64(x30, 0x581a0db248b0a77a) + x43, x42 := bits.mul_u64(x30, 0xecec196accc52973) + x44, x45 := bits.add_u64(x43, x40, u64(0x0)) + x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45))) + x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47))) + x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49))) + x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51))) + x54 := (u64(fiat.u1(x53)) + x33) + _, x56 := bits.add_u64(x17, x42, u64(0x0)) + x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58))) + x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60))) + x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62))) + x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64))) + x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66))) + x70, x69 := bits.mul_u64(x1, arg2[5]) + x72, x71 := bits.mul_u64(x1, arg2[4]) + x74, x73 := bits.mul_u64(x1, arg2[3]) + x76, x75 := bits.mul_u64(x1, arg2[2]) + x78, x77 := bits.mul_u64(x1, arg2[1]) + x80, x79 := bits.mul_u64(x1, arg2[0]) + x81, x82 := bits.add_u64(x80, x77, u64(0x0)) + x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82))) + x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84))) + x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86))) + x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88))) + x91 := (u64(fiat.u1(x90)) + x70) + x92, x93 := bits.add_u64(x57, x79, u64(0x0)) + x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95))) + x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97))) + x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99))) + x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101))) + x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103))) + _, x106 := bits.mul_u64(x92, 0x6ed46089e88fdc45) + x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff) + x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff) + x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff) + x115, x114 := bits.mul_u64(x106, 0xc7634d81f4372ddf) + x117, x116 := bits.mul_u64(x106, 0x581a0db248b0a77a) + x119, x118 := bits.mul_u64(x106, 0xecec196accc52973) + x120, x121 := bits.add_u64(x119, x116, u64(0x0)) + x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123))) + x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125))) + x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127))) + x130 := (u64(fiat.u1(x129)) + x109) + _, x132 := bits.add_u64(x92, x118, u64(0x0)) + x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132))) + x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134))) + x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138))) + x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140))) + x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142))) + x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105))) + x147, x146 := bits.mul_u64(x2, arg2[5]) + x149, x148 := bits.mul_u64(x2, arg2[4]) + x151, x150 := bits.mul_u64(x2, arg2[3]) + x153, x152 := bits.mul_u64(x2, arg2[2]) + x155, x154 := bits.mul_u64(x2, arg2[1]) + x157, x156 := bits.mul_u64(x2, arg2[0]) + x158, x159 := bits.add_u64(x157, x154, u64(0x0)) + x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159))) + x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161))) + x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163))) + x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165))) + x168 := (u64(fiat.u1(x167)) + x147) + x169, x170 := bits.add_u64(x133, x156, u64(0x0)) + x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170))) + x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172))) + x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174))) + x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176))) + x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178))) + x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180))) + _, x183 := bits.mul_u64(x169, 0x6ed46089e88fdc45) + x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff) + x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff) + x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff) + x192, x191 := bits.mul_u64(x183, 0xc7634d81f4372ddf) + x194, x193 := bits.mul_u64(x183, 0x581a0db248b0a77a) + x196, x195 := bits.mul_u64(x183, 0xecec196accc52973) + x197, x198 := bits.add_u64(x196, x193, u64(0x0)) + x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198))) + x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200))) + x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202))) + x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204))) + x207 := (u64(fiat.u1(x206)) + x186) + _, x209 := bits.add_u64(x169, x195, u64(0x0)) + x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209))) + x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211))) + x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213))) + x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215))) + x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217))) + x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219))) + x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182))) + x224, x223 := bits.mul_u64(x3, arg2[5]) + x226, x225 := bits.mul_u64(x3, arg2[4]) + x228, x227 := bits.mul_u64(x3, arg2[3]) + x230, x229 := bits.mul_u64(x3, arg2[2]) + x232, x231 := bits.mul_u64(x3, arg2[1]) + x234, x233 := bits.mul_u64(x3, arg2[0]) + x235, x236 := bits.add_u64(x234, x231, u64(0x0)) + x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236))) + x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238))) + x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240))) + x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242))) + x245 := (u64(fiat.u1(x244)) + x224) + x246, x247 := bits.add_u64(x210, x233, u64(0x0)) + x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247))) + x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249))) + x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251))) + x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253))) + x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255))) + x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257))) + _, x260 := bits.mul_u64(x246, 0x6ed46089e88fdc45) + x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff) + x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff) + x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff) + x269, x268 := bits.mul_u64(x260, 0xc7634d81f4372ddf) + x271, x270 := bits.mul_u64(x260, 0x581a0db248b0a77a) + x273, x272 := bits.mul_u64(x260, 0xecec196accc52973) + x274, x275 := bits.add_u64(x273, x270, u64(0x0)) + x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275))) + x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277))) + x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279))) + x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281))) + x284 := (u64(fiat.u1(x283)) + x263) + _, x286 := bits.add_u64(x246, x272, u64(0x0)) + x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286))) + x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288))) + x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290))) + x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292))) + x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294))) + x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296))) + x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259))) + x301, x300 := bits.mul_u64(x4, arg2[5]) + x303, x302 := bits.mul_u64(x4, arg2[4]) + x305, x304 := bits.mul_u64(x4, arg2[3]) + x307, x306 := bits.mul_u64(x4, arg2[2]) + x309, x308 := bits.mul_u64(x4, arg2[1]) + x311, x310 := bits.mul_u64(x4, arg2[0]) + x312, x313 := bits.add_u64(x311, x308, u64(0x0)) + x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313))) + x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315))) + x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317))) + x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319))) + x322 := (u64(fiat.u1(x321)) + x301) + x323, x324 := bits.add_u64(x287, x310, u64(0x0)) + x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324))) + x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326))) + x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328))) + x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330))) + x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332))) + x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334))) + _, x337 := bits.mul_u64(x323, 0x6ed46089e88fdc45) + x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff) + x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff) + x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff) + x346, x345 := bits.mul_u64(x337, 0xc7634d81f4372ddf) + x348, x347 := bits.mul_u64(x337, 0x581a0db248b0a77a) + x350, x349 := bits.mul_u64(x337, 0xecec196accc52973) + x351, x352 := bits.add_u64(x350, x347, u64(0x0)) + x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352))) + x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354))) + x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356))) + x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358))) + x361 := (u64(fiat.u1(x360)) + x340) + _, x363 := bits.add_u64(x323, x349, u64(0x0)) + x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363))) + x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365))) + x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367))) + x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369))) + x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371))) + x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373))) + x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336))) + x378, x377 := bits.mul_u64(x5, arg2[5]) + x380, x379 := bits.mul_u64(x5, arg2[4]) + x382, x381 := bits.mul_u64(x5, arg2[3]) + x384, x383 := bits.mul_u64(x5, arg2[2]) + x386, x385 := bits.mul_u64(x5, arg2[1]) + x388, x387 := bits.mul_u64(x5, arg2[0]) + x389, x390 := bits.add_u64(x388, x385, u64(0x0)) + x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390))) + x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392))) + x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394))) + x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396))) + x399 := (u64(fiat.u1(x398)) + x378) + x400, x401 := bits.add_u64(x364, x387, u64(0x0)) + x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401))) + x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403))) + x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405))) + x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407))) + x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409))) + x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411))) + _, x414 := bits.mul_u64(x400, 0x6ed46089e88fdc45) + x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff) + x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff) + x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff) + x423, x422 := bits.mul_u64(x414, 0xc7634d81f4372ddf) + x425, x424 := bits.mul_u64(x414, 0x581a0db248b0a77a) + x427, x426 := bits.mul_u64(x414, 0xecec196accc52973) + x428, x429 := bits.add_u64(x427, x424, u64(0x0)) + x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429))) + x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431))) + x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433))) + x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435))) + x438 := (u64(fiat.u1(x437)) + x417) + _, x440 := bits.add_u64(x400, x426, u64(0x0)) + x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440))) + x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442))) + x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444))) + x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446))) + x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448))) + x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450))) + x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413))) + x454, x455 := bits.sub_u64(x441, 0xecec196accc52973, u64(0x0)) + x456, x457 := bits.sub_u64(x443, 0x581a0db248b0a77a, u64(fiat.u1(x455))) + x458, x459 := bits.sub_u64(x445, 0xc7634d81f4372ddf, u64(fiat.u1(x457))) + x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459))) + x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461))) + x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463))) + _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465))) + x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441) + x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443) + x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445) + x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447) + x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449) + x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451) + out1[0] = x468 + out1[1] = x469 + out1[2] = x470 + out1[3] = x471 + out1[4] = x472 + out1[5] = x473 +} + +fe_square :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[4] + x5 := arg1[5] + x6 := arg1[0] + x8, x7 := bits.mul_u64(x6, arg1[5]) + x10, x9 := bits.mul_u64(x6, arg1[4]) + x12, x11 := bits.mul_u64(x6, arg1[3]) + x14, x13 := bits.mul_u64(x6, arg1[2]) + x16, x15 := bits.mul_u64(x6, arg1[1]) + x18, x17 := bits.mul_u64(x6, arg1[0]) + x19, x20 := bits.add_u64(x18, x15, u64(0x0)) + x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20))) + x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22))) + x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24))) + x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26))) + x29 := (u64(fiat.u1(x28)) + x8) + _, x30 := bits.mul_u64(x17, 0x6ed46089e88fdc45) + x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff) + x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff) + x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff) + x39, x38 := bits.mul_u64(x30, 0xc7634d81f4372ddf) + x41, x40 := bits.mul_u64(x30, 0x581a0db248b0a77a) + x43, x42 := bits.mul_u64(x30, 0xecec196accc52973) + x44, x45 := bits.add_u64(x43, x40, u64(0x0)) + x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45))) + x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47))) + x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49))) + x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51))) + x54 := (u64(fiat.u1(x53)) + x33) + _, x56 := bits.add_u64(x17, x42, u64(0x0)) + x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58))) + x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60))) + x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62))) + x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64))) + x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66))) + x70, x69 := bits.mul_u64(x1, arg1[5]) + x72, x71 := bits.mul_u64(x1, arg1[4]) + x74, x73 := bits.mul_u64(x1, arg1[3]) + x76, x75 := bits.mul_u64(x1, arg1[2]) + x78, x77 := bits.mul_u64(x1, arg1[1]) + x80, x79 := bits.mul_u64(x1, arg1[0]) + x81, x82 := bits.add_u64(x80, x77, u64(0x0)) + x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82))) + x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84))) + x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86))) + x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88))) + x91 := (u64(fiat.u1(x90)) + x70) + x92, x93 := bits.add_u64(x57, x79, u64(0x0)) + x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95))) + x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97))) + x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99))) + x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101))) + x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103))) + _, x106 := bits.mul_u64(x92, 0x6ed46089e88fdc45) + x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff) + x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff) + x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff) + x115, x114 := bits.mul_u64(x106, 0xc7634d81f4372ddf) + x117, x116 := bits.mul_u64(x106, 0x581a0db248b0a77a) + x119, x118 := bits.mul_u64(x106, 0xecec196accc52973) + x120, x121 := bits.add_u64(x119, x116, u64(0x0)) + x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123))) + x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125))) + x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127))) + x130 := (u64(fiat.u1(x129)) + x109) + _, x132 := bits.add_u64(x92, x118, u64(0x0)) + x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132))) + x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134))) + x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138))) + x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140))) + x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142))) + x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105))) + x147, x146 := bits.mul_u64(x2, arg1[5]) + x149, x148 := bits.mul_u64(x2, arg1[4]) + x151, x150 := bits.mul_u64(x2, arg1[3]) + x153, x152 := bits.mul_u64(x2, arg1[2]) + x155, x154 := bits.mul_u64(x2, arg1[1]) + x157, x156 := bits.mul_u64(x2, arg1[0]) + x158, x159 := bits.add_u64(x157, x154, u64(0x0)) + x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159))) + x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161))) + x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163))) + x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165))) + x168 := (u64(fiat.u1(x167)) + x147) + x169, x170 := bits.add_u64(x133, x156, u64(0x0)) + x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170))) + x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172))) + x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174))) + x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176))) + x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178))) + x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180))) + _, x183 := bits.mul_u64(x169, 0x6ed46089e88fdc45) + x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff) + x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff) + x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff) + x192, x191 := bits.mul_u64(x183, 0xc7634d81f4372ddf) + x194, x193 := bits.mul_u64(x183, 0x581a0db248b0a77a) + x196, x195 := bits.mul_u64(x183, 0xecec196accc52973) + x197, x198 := bits.add_u64(x196, x193, u64(0x0)) + x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198))) + x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200))) + x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202))) + x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204))) + x207 := (u64(fiat.u1(x206)) + x186) + _, x209 := bits.add_u64(x169, x195, u64(0x0)) + x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209))) + x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211))) + x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213))) + x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215))) + x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217))) + x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219))) + x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182))) + x224, x223 := bits.mul_u64(x3, arg1[5]) + x226, x225 := bits.mul_u64(x3, arg1[4]) + x228, x227 := bits.mul_u64(x3, arg1[3]) + x230, x229 := bits.mul_u64(x3, arg1[2]) + x232, x231 := bits.mul_u64(x3, arg1[1]) + x234, x233 := bits.mul_u64(x3, arg1[0]) + x235, x236 := bits.add_u64(x234, x231, u64(0x0)) + x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236))) + x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238))) + x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240))) + x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242))) + x245 := (u64(fiat.u1(x244)) + x224) + x246, x247 := bits.add_u64(x210, x233, u64(0x0)) + x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247))) + x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249))) + x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251))) + x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253))) + x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255))) + x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257))) + _, x260 := bits.mul_u64(x246, 0x6ed46089e88fdc45) + x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff) + x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff) + x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff) + x269, x268 := bits.mul_u64(x260, 0xc7634d81f4372ddf) + x271, x270 := bits.mul_u64(x260, 0x581a0db248b0a77a) + x273, x272 := bits.mul_u64(x260, 0xecec196accc52973) + x274, x275 := bits.add_u64(x273, x270, u64(0x0)) + x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275))) + x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277))) + x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279))) + x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281))) + x284 := (u64(fiat.u1(x283)) + x263) + _, x286 := bits.add_u64(x246, x272, u64(0x0)) + x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286))) + x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288))) + x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290))) + x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292))) + x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294))) + x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296))) + x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259))) + x301, x300 := bits.mul_u64(x4, arg1[5]) + x303, x302 := bits.mul_u64(x4, arg1[4]) + x305, x304 := bits.mul_u64(x4, arg1[3]) + x307, x306 := bits.mul_u64(x4, arg1[2]) + x309, x308 := bits.mul_u64(x4, arg1[1]) + x311, x310 := bits.mul_u64(x4, arg1[0]) + x312, x313 := bits.add_u64(x311, x308, u64(0x0)) + x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313))) + x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315))) + x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317))) + x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319))) + x322 := (u64(fiat.u1(x321)) + x301) + x323, x324 := bits.add_u64(x287, x310, u64(0x0)) + x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324))) + x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326))) + x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328))) + x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330))) + x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332))) + x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334))) + _, x337 := bits.mul_u64(x323, 0x6ed46089e88fdc45) + x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff) + x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff) + x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff) + x346, x345 := bits.mul_u64(x337, 0xc7634d81f4372ddf) + x348, x347 := bits.mul_u64(x337, 0x581a0db248b0a77a) + x350, x349 := bits.mul_u64(x337, 0xecec196accc52973) + x351, x352 := bits.add_u64(x350, x347, u64(0x0)) + x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352))) + x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354))) + x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356))) + x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358))) + x361 := (u64(fiat.u1(x360)) + x340) + _, x363 := bits.add_u64(x323, x349, u64(0x0)) + x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363))) + x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365))) + x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367))) + x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369))) + x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371))) + x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373))) + x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336))) + x378, x377 := bits.mul_u64(x5, arg1[5]) + x380, x379 := bits.mul_u64(x5, arg1[4]) + x382, x381 := bits.mul_u64(x5, arg1[3]) + x384, x383 := bits.mul_u64(x5, arg1[2]) + x386, x385 := bits.mul_u64(x5, arg1[1]) + x388, x387 := bits.mul_u64(x5, arg1[0]) + x389, x390 := bits.add_u64(x388, x385, u64(0x0)) + x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390))) + x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392))) + x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394))) + x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396))) + x399 := (u64(fiat.u1(x398)) + x378) + x400, x401 := bits.add_u64(x364, x387, u64(0x0)) + x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401))) + x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403))) + x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405))) + x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407))) + x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409))) + x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411))) + _, x414 := bits.mul_u64(x400, 0x6ed46089e88fdc45) + x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff) + x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff) + x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff) + x423, x422 := bits.mul_u64(x414, 0xc7634d81f4372ddf) + x425, x424 := bits.mul_u64(x414, 0x581a0db248b0a77a) + x427, x426 := bits.mul_u64(x414, 0xecec196accc52973) + x428, x429 := bits.add_u64(x427, x424, u64(0x0)) + x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429))) + x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431))) + x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433))) + x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435))) + x438 := (u64(fiat.u1(x437)) + x417) + _, x440 := bits.add_u64(x400, x426, u64(0x0)) + x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440))) + x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442))) + x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444))) + x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446))) + x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448))) + x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450))) + x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413))) + x454, x455 := bits.sub_u64(x441, 0xecec196accc52973, u64(0x0)) + x456, x457 := bits.sub_u64(x443, 0x581a0db248b0a77a, u64(fiat.u1(x455))) + x458, x459 := bits.sub_u64(x445, 0xc7634d81f4372ddf, u64(fiat.u1(x457))) + x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459))) + x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461))) + x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463))) + _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465))) + x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441) + x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443) + x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445) + x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447) + x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449) + x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451) + out1[0] = x468 + out1[1] = x469 + out1[2] = x470 + out1[3] = x471 + out1[4] = x472 + out1[5] = x473 +} + +fe_add :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.add_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.add_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.add_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.add_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9, x10 := bits.add_u64(arg1[4], arg2[4], u64(fiat.u1(x8))) + x11, x12 := bits.add_u64(arg1[5], arg2[5], u64(fiat.u1(x10))) + x13, x14 := bits.sub_u64(x1, 0xecec196accc52973, u64(0x0)) + x15, x16 := bits.sub_u64(x3, 0x581a0db248b0a77a, u64(fiat.u1(x14))) + x17, x18 := bits.sub_u64(x5, 0xc7634d81f4372ddf, u64(fiat.u1(x16))) + x19, x20 := bits.sub_u64(x7, 0xffffffffffffffff, u64(fiat.u1(x18))) + x21, x22 := bits.sub_u64(x9, 0xffffffffffffffff, u64(fiat.u1(x20))) + x23, x24 := bits.sub_u64(x11, 0xffffffffffffffff, u64(fiat.u1(x22))) + _, x26 := bits.sub_u64(u64(fiat.u1(x12)), u64(0x0), u64(fiat.u1(x24))) + x27 := fiat.cmovznz_u64(fiat.u1(x26), x13, x1) + x28 := fiat.cmovznz_u64(fiat.u1(x26), x15, x3) + x29 := fiat.cmovznz_u64(fiat.u1(x26), x17, x5) + x30 := fiat.cmovznz_u64(fiat.u1(x26), x19, x7) + x31 := fiat.cmovznz_u64(fiat.u1(x26), x21, x9) + x32 := fiat.cmovznz_u64(fiat.u1(x26), x23, x11) + out1[0] = x27 + out1[1] = x28 + out1[2] = x29 + out1[3] = x30 + out1[4] = x31 + out1[5] = x32 +} + +fe_sub :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.sub_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9, x10 := bits.sub_u64(arg1[4], arg2[4], u64(fiat.u1(x8))) + x11, x12 := bits.sub_u64(arg1[5], arg2[5], u64(fiat.u1(x10))) + x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff) + x14, x15 := bits.add_u64(x1, (x13 & 0xecec196accc52973), u64(0x0)) + x16, x17 := bits.add_u64(x3, (x13 & 0x581a0db248b0a77a), u64(fiat.u1(x15))) + x18, x19 := bits.add_u64(x5, (x13 & 0xc7634d81f4372ddf), u64(fiat.u1(x17))) + x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19))) + x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21))) + x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23))) + out1[0] = x14 + out1[1] = x16 + out1[2] = x18 + out1[3] = x20 + out1[4] = x22 + out1[5] = x24 +} + +fe_opp :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(u64(0x0), arg1[0], u64(0x0)) + x3, x4 := bits.sub_u64(u64(0x0), arg1[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(u64(0x0), arg1[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(u64(0x0), arg1[3], u64(fiat.u1(x6))) + x9, x10 := bits.sub_u64(u64(0x0), arg1[4], u64(fiat.u1(x8))) + x11, x12 := bits.sub_u64(u64(0x0), arg1[5], u64(fiat.u1(x10))) + x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff) + x14, x15 := bits.add_u64(x1, (x13 & 0xecec196accc52973), u64(0x0)) + x16, x17 := bits.add_u64(x3, (x13 & 0x581a0db248b0a77a), u64(fiat.u1(x15))) + x18, x19 := bits.add_u64(x5, (x13 & 0xc7634d81f4372ddf), u64(fiat.u1(x17))) + x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19))) + x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21))) + x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23))) + out1[0] = x14 + out1[1] = x16 + out1[2] = x18 + out1[3] = x20 + out1[4] = x22 + out1[5] = x24 +} + +fe_one :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0x1313e695333ad68d + out1[1] = 0xa7e5f24db74f5885 + out1[2] = 0x389cb27e0bc8d220 + out1[3] = 0x0 + out1[4] = 0x0 + out1[5] = 0x0 +} + +fe_non_zero :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> u64 { + return (arg1[0] | (arg1[1] | (arg1[2] | (arg1[3] | (arg1[4] | arg1[5]))))) +} + +@(optimization_mode = "none") +fe_cond_assign :: #force_no_inline proc "contextless" ( + out1, arg1: ^Montgomery_Domain_Field_Element, + arg2: int, +) { + x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0]) + x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1]) + x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2]) + x4 := fiat.cmovznz_u64(fiat.u1(arg2), out1[3], arg1[3]) + x5 := fiat.cmovznz_u64(fiat.u1(arg2), out1[4], arg1[4]) + x6 := fiat.cmovznz_u64(fiat.u1(arg2), out1[5], arg1[5]) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 + out1[4] = x5 + out1[5] = x6 +} + +fe_from_montgomery :: proc "contextless" ( + out1: ^Non_Montgomery_Domain_Field_Element, + arg1: ^Montgomery_Domain_Field_Element, +) { + x1 := arg1[0] + _, x2 := bits.mul_u64(x1, 0x6ed46089e88fdc45) + x5, x4 := bits.mul_u64(x2, 0xffffffffffffffff) + x7, x6 := bits.mul_u64(x2, 0xffffffffffffffff) + x9, x8 := bits.mul_u64(x2, 0xffffffffffffffff) + x11, x10 := bits.mul_u64(x2, 0xc7634d81f4372ddf) + x13, x12 := bits.mul_u64(x2, 0x581a0db248b0a77a) + x15, x14 := bits.mul_u64(x2, 0xecec196accc52973) + x16, x17 := bits.add_u64(x15, x12, u64(0x0)) + x18, x19 := bits.add_u64(x13, x10, u64(fiat.u1(x17))) + x20, x21 := bits.add_u64(x11, x8, u64(fiat.u1(x19))) + x22, x23 := bits.add_u64(x9, x6, u64(fiat.u1(x21))) + x24, x25 := bits.add_u64(x7, x4, u64(fiat.u1(x23))) + _, x27 := bits.add_u64(x1, x14, u64(0x0)) + x28, x29 := bits.add_u64(u64(0x0), x16, u64(fiat.u1(x27))) + x30, x31 := bits.add_u64(u64(0x0), x18, u64(fiat.u1(x29))) + x32, x33 := bits.add_u64(u64(0x0), x20, u64(fiat.u1(x31))) + x34, x35 := bits.add_u64(u64(0x0), x22, u64(fiat.u1(x33))) + x36, x37 := bits.add_u64(u64(0x0), x24, u64(fiat.u1(x35))) + x38, x39 := bits.add_u64(u64(0x0), (u64(fiat.u1(x25)) + x5), u64(fiat.u1(x37))) + x40, x41 := bits.add_u64(x28, arg1[1], u64(0x0)) + x42, x43 := bits.add_u64(x30, u64(0x0), u64(fiat.u1(x41))) + x44, x45 := bits.add_u64(x32, u64(0x0), u64(fiat.u1(x43))) + x46, x47 := bits.add_u64(x34, u64(0x0), u64(fiat.u1(x45))) + x48, x49 := bits.add_u64(x36, u64(0x0), u64(fiat.u1(x47))) + x50, x51 := bits.add_u64(x38, u64(0x0), u64(fiat.u1(x49))) + _, x52 := bits.mul_u64(x40, 0x6ed46089e88fdc45) + x55, x54 := bits.mul_u64(x52, 0xffffffffffffffff) + x57, x56 := bits.mul_u64(x52, 0xffffffffffffffff) + x59, x58 := bits.mul_u64(x52, 0xffffffffffffffff) + x61, x60 := bits.mul_u64(x52, 0xc7634d81f4372ddf) + x63, x62 := bits.mul_u64(x52, 0x581a0db248b0a77a) + x65, x64 := bits.mul_u64(x52, 0xecec196accc52973) + x66, x67 := bits.add_u64(x65, x62, u64(0x0)) + x68, x69 := bits.add_u64(x63, x60, u64(fiat.u1(x67))) + x70, x71 := bits.add_u64(x61, x58, u64(fiat.u1(x69))) + x72, x73 := bits.add_u64(x59, x56, u64(fiat.u1(x71))) + x74, x75 := bits.add_u64(x57, x54, u64(fiat.u1(x73))) + _, x77 := bits.add_u64(x40, x64, u64(0x0)) + x78, x79 := bits.add_u64(x42, x66, u64(fiat.u1(x77))) + x80, x81 := bits.add_u64(x44, x68, u64(fiat.u1(x79))) + x82, x83 := bits.add_u64(x46, x70, u64(fiat.u1(x81))) + x84, x85 := bits.add_u64(x48, x72, u64(fiat.u1(x83))) + x86, x87 := bits.add_u64(x50, x74, u64(fiat.u1(x85))) + x88, x89 := bits.add_u64((u64(fiat.u1(x51)) + u64(fiat.u1(x39))), (u64(fiat.u1(x75)) + x55), u64(fiat.u1(x87))) + x90, x91 := bits.add_u64(x78, arg1[2], u64(0x0)) + x92, x93 := bits.add_u64(x80, u64(0x0), u64(fiat.u1(x91))) + x94, x95 := bits.add_u64(x82, u64(0x0), u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x84, u64(0x0), u64(fiat.u1(x95))) + x98, x99 := bits.add_u64(x86, u64(0x0), u64(fiat.u1(x97))) + x100, x101 := bits.add_u64(x88, u64(0x0), u64(fiat.u1(x99))) + _, x102 := bits.mul_u64(x90, 0x6ed46089e88fdc45) + x105, x104 := bits.mul_u64(x102, 0xffffffffffffffff) + x107, x106 := bits.mul_u64(x102, 0xffffffffffffffff) + x109, x108 := bits.mul_u64(x102, 0xffffffffffffffff) + x111, x110 := bits.mul_u64(x102, 0xc7634d81f4372ddf) + x113, x112 := bits.mul_u64(x102, 0x581a0db248b0a77a) + x115, x114 := bits.mul_u64(x102, 0xecec196accc52973) + x116, x117 := bits.add_u64(x115, x112, u64(0x0)) + x118, x119 := bits.add_u64(x113, x110, u64(fiat.u1(x117))) + x120, x121 := bits.add_u64(x111, x108, u64(fiat.u1(x119))) + x122, x123 := bits.add_u64(x109, x106, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x107, x104, u64(fiat.u1(x123))) + _, x127 := bits.add_u64(x90, x114, u64(0x0)) + x128, x129 := bits.add_u64(x92, x116, u64(fiat.u1(x127))) + x130, x131 := bits.add_u64(x94, x118, u64(fiat.u1(x129))) + x132, x133 := bits.add_u64(x96, x120, u64(fiat.u1(x131))) + x134, x135 := bits.add_u64(x98, x122, u64(fiat.u1(x133))) + x136, x137 := bits.add_u64(x100, x124, u64(fiat.u1(x135))) + x138, x139 := bits.add_u64((u64(fiat.u1(x101)) + u64(fiat.u1(x89))), (u64(fiat.u1(x125)) + x105), u64(fiat.u1(x137))) + x140, x141 := bits.add_u64(x128, arg1[3], u64(0x0)) + x142, x143 := bits.add_u64(x130, u64(0x0), u64(fiat.u1(x141))) + x144, x145 := bits.add_u64(x132, u64(0x0), u64(fiat.u1(x143))) + x146, x147 := bits.add_u64(x134, u64(0x0), u64(fiat.u1(x145))) + x148, x149 := bits.add_u64(x136, u64(0x0), u64(fiat.u1(x147))) + x150, x151 := bits.add_u64(x138, u64(0x0), u64(fiat.u1(x149))) + _, x152 := bits.mul_u64(x140, 0x6ed46089e88fdc45) + x155, x154 := bits.mul_u64(x152, 0xffffffffffffffff) + x157, x156 := bits.mul_u64(x152, 0xffffffffffffffff) + x159, x158 := bits.mul_u64(x152, 0xffffffffffffffff) + x161, x160 := bits.mul_u64(x152, 0xc7634d81f4372ddf) + x163, x162 := bits.mul_u64(x152, 0x581a0db248b0a77a) + x165, x164 := bits.mul_u64(x152, 0xecec196accc52973) + x166, x167 := bits.add_u64(x165, x162, u64(0x0)) + x168, x169 := bits.add_u64(x163, x160, u64(fiat.u1(x167))) + x170, x171 := bits.add_u64(x161, x158, u64(fiat.u1(x169))) + x172, x173 := bits.add_u64(x159, x156, u64(fiat.u1(x171))) + x174, x175 := bits.add_u64(x157, x154, u64(fiat.u1(x173))) + _, x177 := bits.add_u64(x140, x164, u64(0x0)) + x178, x179 := bits.add_u64(x142, x166, u64(fiat.u1(x177))) + x180, x181 := bits.add_u64(x144, x168, u64(fiat.u1(x179))) + x182, x183 := bits.add_u64(x146, x170, u64(fiat.u1(x181))) + x184, x185 := bits.add_u64(x148, x172, u64(fiat.u1(x183))) + x186, x187 := bits.add_u64(x150, x174, u64(fiat.u1(x185))) + x188, x189 := bits.add_u64((u64(fiat.u1(x151)) + u64(fiat.u1(x139))), (u64(fiat.u1(x175)) + x155), u64(fiat.u1(x187))) + x190, x191 := bits.add_u64(x178, arg1[4], u64(0x0)) + x192, x193 := bits.add_u64(x180, u64(0x0), u64(fiat.u1(x191))) + x194, x195 := bits.add_u64(x182, u64(0x0), u64(fiat.u1(x193))) + x196, x197 := bits.add_u64(x184, u64(0x0), u64(fiat.u1(x195))) + x198, x199 := bits.add_u64(x186, u64(0x0), u64(fiat.u1(x197))) + x200, x201 := bits.add_u64(x188, u64(0x0), u64(fiat.u1(x199))) + _, x202 := bits.mul_u64(x190, 0x6ed46089e88fdc45) + x205, x204 := bits.mul_u64(x202, 0xffffffffffffffff) + x207, x206 := bits.mul_u64(x202, 0xffffffffffffffff) + x209, x208 := bits.mul_u64(x202, 0xffffffffffffffff) + x211, x210 := bits.mul_u64(x202, 0xc7634d81f4372ddf) + x213, x212 := bits.mul_u64(x202, 0x581a0db248b0a77a) + x215, x214 := bits.mul_u64(x202, 0xecec196accc52973) + x216, x217 := bits.add_u64(x215, x212, u64(0x0)) + x218, x219 := bits.add_u64(x213, x210, u64(fiat.u1(x217))) + x220, x221 := bits.add_u64(x211, x208, u64(fiat.u1(x219))) + x222, x223 := bits.add_u64(x209, x206, u64(fiat.u1(x221))) + x224, x225 := bits.add_u64(x207, x204, u64(fiat.u1(x223))) + _, x227 := bits.add_u64(x190, x214, u64(0x0)) + x228, x229 := bits.add_u64(x192, x216, u64(fiat.u1(x227))) + x230, x231 := bits.add_u64(x194, x218, u64(fiat.u1(x229))) + x232, x233 := bits.add_u64(x196, x220, u64(fiat.u1(x231))) + x234, x235 := bits.add_u64(x198, x222, u64(fiat.u1(x233))) + x236, x237 := bits.add_u64(x200, x224, u64(fiat.u1(x235))) + x238, x239 := bits.add_u64((u64(fiat.u1(x201)) + u64(fiat.u1(x189))), (u64(fiat.u1(x225)) + x205), u64(fiat.u1(x237))) + x240, x241 := bits.add_u64(x228, arg1[5], u64(0x0)) + x242, x243 := bits.add_u64(x230, u64(0x0), u64(fiat.u1(x241))) + x244, x245 := bits.add_u64(x232, u64(0x0), u64(fiat.u1(x243))) + x246, x247 := bits.add_u64(x234, u64(0x0), u64(fiat.u1(x245))) + x248, x249 := bits.add_u64(x236, u64(0x0), u64(fiat.u1(x247))) + x250, x251 := bits.add_u64(x238, u64(0x0), u64(fiat.u1(x249))) + _, x252 := bits.mul_u64(x240, 0x6ed46089e88fdc45) + x255, x254 := bits.mul_u64(x252, 0xffffffffffffffff) + x257, x256 := bits.mul_u64(x252, 0xffffffffffffffff) + x259, x258 := bits.mul_u64(x252, 0xffffffffffffffff) + x261, x260 := bits.mul_u64(x252, 0xc7634d81f4372ddf) + x263, x262 := bits.mul_u64(x252, 0x581a0db248b0a77a) + x265, x264 := bits.mul_u64(x252, 0xecec196accc52973) + x266, x267 := bits.add_u64(x265, x262, u64(0x0)) + x268, x269 := bits.add_u64(x263, x260, u64(fiat.u1(x267))) + x270, x271 := bits.add_u64(x261, x258, u64(fiat.u1(x269))) + x272, x273 := bits.add_u64(x259, x256, u64(fiat.u1(x271))) + x274, x275 := bits.add_u64(x257, x254, u64(fiat.u1(x273))) + _, x277 := bits.add_u64(x240, x264, u64(0x0)) + x278, x279 := bits.add_u64(x242, x266, u64(fiat.u1(x277))) + x280, x281 := bits.add_u64(x244, x268, u64(fiat.u1(x279))) + x282, x283 := bits.add_u64(x246, x270, u64(fiat.u1(x281))) + x284, x285 := bits.add_u64(x248, x272, u64(fiat.u1(x283))) + x286, x287 := bits.add_u64(x250, x274, u64(fiat.u1(x285))) + x288, x289 := bits.add_u64((u64(fiat.u1(x251)) + u64(fiat.u1(x239))), (u64(fiat.u1(x275)) + x255), u64(fiat.u1(x287))) + x290, x291 := bits.sub_u64(x278, 0xecec196accc52973, u64(0x0)) + x292, x293 := bits.sub_u64(x280, 0x581a0db248b0a77a, u64(fiat.u1(x291))) + x294, x295 := bits.sub_u64(x282, 0xc7634d81f4372ddf, u64(fiat.u1(x293))) + x296, x297 := bits.sub_u64(x284, 0xffffffffffffffff, u64(fiat.u1(x295))) + x298, x299 := bits.sub_u64(x286, 0xffffffffffffffff, u64(fiat.u1(x297))) + x300, x301 := bits.sub_u64(x288, 0xffffffffffffffff, u64(fiat.u1(x299))) + _, x303 := bits.sub_u64(u64(fiat.u1(x289)), u64(0x0), u64(fiat.u1(x301))) + x304 := fiat.cmovznz_u64(fiat.u1(x303), x290, x278) + x305 := fiat.cmovznz_u64(fiat.u1(x303), x292, x280) + x306 := fiat.cmovznz_u64(fiat.u1(x303), x294, x282) + x307 := fiat.cmovznz_u64(fiat.u1(x303), x296, x284) + x308 := fiat.cmovznz_u64(fiat.u1(x303), x298, x286) + x309 := fiat.cmovznz_u64(fiat.u1(x303), x300, x288) + out1[0] = x304 + out1[1] = x305 + out1[2] = x306 + out1[3] = x307 + out1[4] = x308 + out1[5] = x309 +} + +fe_to_montgomery :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: ^Non_Montgomery_Domain_Field_Element, +) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[4] + x5 := arg1[5] + x6 := arg1[0] + x8, x7 := bits.mul_u64(x6, 0xc84ee012b39bf21) + x10, x9 := bits.mul_u64(x6, 0x3fb05b7a28266895) + x12, x11 := bits.mul_u64(x6, 0xd40d49174aab1cc5) + x14, x13 := bits.mul_u64(x6, 0xbc3e483afcb82947) + x16, x15 := bits.mul_u64(x6, 0xff3d81e5df1aa419) + x18, x17 := bits.mul_u64(x6, 0x2d319b2419b409a9) + x19, x20 := bits.add_u64(x18, x15, u64(0x0)) + x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20))) + x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22))) + x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24))) + x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26))) + _, x29 := bits.mul_u64(x17, 0x6ed46089e88fdc45) + x32, x31 := bits.mul_u64(x29, 0xffffffffffffffff) + x34, x33 := bits.mul_u64(x29, 0xffffffffffffffff) + x36, x35 := bits.mul_u64(x29, 0xffffffffffffffff) + x38, x37 := bits.mul_u64(x29, 0xc7634d81f4372ddf) + x40, x39 := bits.mul_u64(x29, 0x581a0db248b0a77a) + x42, x41 := bits.mul_u64(x29, 0xecec196accc52973) + x43, x44 := bits.add_u64(x42, x39, u64(0x0)) + x45, x46 := bits.add_u64(x40, x37, u64(fiat.u1(x44))) + x47, x48 := bits.add_u64(x38, x35, u64(fiat.u1(x46))) + x49, x50 := bits.add_u64(x36, x33, u64(fiat.u1(x48))) + x51, x52 := bits.add_u64(x34, x31, u64(fiat.u1(x50))) + _, x54 := bits.add_u64(x17, x41, u64(0x0)) + x55, x56 := bits.add_u64(x19, x43, u64(fiat.u1(x54))) + x57, x58 := bits.add_u64(x21, x45, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x23, x47, u64(fiat.u1(x58))) + x61, x62 := bits.add_u64(x25, x49, u64(fiat.u1(x60))) + x63, x64 := bits.add_u64(x27, x51, u64(fiat.u1(x62))) + x65, x66 := bits.add_u64((u64(fiat.u1(x28)) + x8), (u64(fiat.u1(x52)) + x32), u64(fiat.u1(x64))) + x68, x67 := bits.mul_u64(x1, 0xc84ee012b39bf21) + x70, x69 := bits.mul_u64(x1, 0x3fb05b7a28266895) + x72, x71 := bits.mul_u64(x1, 0xd40d49174aab1cc5) + x74, x73 := bits.mul_u64(x1, 0xbc3e483afcb82947) + x76, x75 := bits.mul_u64(x1, 0xff3d81e5df1aa419) + x78, x77 := bits.mul_u64(x1, 0x2d319b2419b409a9) + x79, x80 := bits.add_u64(x78, x75, u64(0x0)) + x81, x82 := bits.add_u64(x76, x73, u64(fiat.u1(x80))) + x83, x84 := bits.add_u64(x74, x71, u64(fiat.u1(x82))) + x85, x86 := bits.add_u64(x72, x69, u64(fiat.u1(x84))) + x87, x88 := bits.add_u64(x70, x67, u64(fiat.u1(x86))) + x89, x90 := bits.add_u64(x55, x77, u64(0x0)) + x91, x92 := bits.add_u64(x57, x79, u64(fiat.u1(x90))) + x93, x94 := bits.add_u64(x59, x81, u64(fiat.u1(x92))) + x95, x96 := bits.add_u64(x61, x83, u64(fiat.u1(x94))) + x97, x98 := bits.add_u64(x63, x85, u64(fiat.u1(x96))) + x99, x100 := bits.add_u64(x65, x87, u64(fiat.u1(x98))) + _, x101 := bits.mul_u64(x89, 0x6ed46089e88fdc45) + x104, x103 := bits.mul_u64(x101, 0xffffffffffffffff) + x106, x105 := bits.mul_u64(x101, 0xffffffffffffffff) + x108, x107 := bits.mul_u64(x101, 0xffffffffffffffff) + x110, x109 := bits.mul_u64(x101, 0xc7634d81f4372ddf) + x112, x111 := bits.mul_u64(x101, 0x581a0db248b0a77a) + x114, x113 := bits.mul_u64(x101, 0xecec196accc52973) + x115, x116 := bits.add_u64(x114, x111, u64(0x0)) + x117, x118 := bits.add_u64(x112, x109, u64(fiat.u1(x116))) + x119, x120 := bits.add_u64(x110, x107, u64(fiat.u1(x118))) + x121, x122 := bits.add_u64(x108, x105, u64(fiat.u1(x120))) + x123, x124 := bits.add_u64(x106, x103, u64(fiat.u1(x122))) + _, x126 := bits.add_u64(x89, x113, u64(0x0)) + x127, x128 := bits.add_u64(x91, x115, u64(fiat.u1(x126))) + x129, x130 := bits.add_u64(x93, x117, u64(fiat.u1(x128))) + x131, x132 := bits.add_u64(x95, x119, u64(fiat.u1(x130))) + x133, x134 := bits.add_u64(x97, x121, u64(fiat.u1(x132))) + x135, x136 := bits.add_u64(x99, x123, u64(fiat.u1(x134))) + x137, x138 := bits.add_u64(((u64(fiat.u1(x100)) + u64(fiat.u1(x66))) + (u64(fiat.u1(x88)) + x68)), (u64(fiat.u1(x124)) + x104), u64(fiat.u1(x136))) + x140, x139 := bits.mul_u64(x2, 0xc84ee012b39bf21) + x142, x141 := bits.mul_u64(x2, 0x3fb05b7a28266895) + x144, x143 := bits.mul_u64(x2, 0xd40d49174aab1cc5) + x146, x145 := bits.mul_u64(x2, 0xbc3e483afcb82947) + x148, x147 := bits.mul_u64(x2, 0xff3d81e5df1aa419) + x150, x149 := bits.mul_u64(x2, 0x2d319b2419b409a9) + x151, x152 := bits.add_u64(x150, x147, u64(0x0)) + x153, x154 := bits.add_u64(x148, x145, u64(fiat.u1(x152))) + x155, x156 := bits.add_u64(x146, x143, u64(fiat.u1(x154))) + x157, x158 := bits.add_u64(x144, x141, u64(fiat.u1(x156))) + x159, x160 := bits.add_u64(x142, x139, u64(fiat.u1(x158))) + x161, x162 := bits.add_u64(x127, x149, u64(0x0)) + x163, x164 := bits.add_u64(x129, x151, u64(fiat.u1(x162))) + x165, x166 := bits.add_u64(x131, x153, u64(fiat.u1(x164))) + x167, x168 := bits.add_u64(x133, x155, u64(fiat.u1(x166))) + x169, x170 := bits.add_u64(x135, x157, u64(fiat.u1(x168))) + x171, x172 := bits.add_u64(x137, x159, u64(fiat.u1(x170))) + _, x173 := bits.mul_u64(x161, 0x6ed46089e88fdc45) + x176, x175 := bits.mul_u64(x173, 0xffffffffffffffff) + x178, x177 := bits.mul_u64(x173, 0xffffffffffffffff) + x180, x179 := bits.mul_u64(x173, 0xffffffffffffffff) + x182, x181 := bits.mul_u64(x173, 0xc7634d81f4372ddf) + x184, x183 := bits.mul_u64(x173, 0x581a0db248b0a77a) + x186, x185 := bits.mul_u64(x173, 0xecec196accc52973) + x187, x188 := bits.add_u64(x186, x183, u64(0x0)) + x189, x190 := bits.add_u64(x184, x181, u64(fiat.u1(x188))) + x191, x192 := bits.add_u64(x182, x179, u64(fiat.u1(x190))) + x193, x194 := bits.add_u64(x180, x177, u64(fiat.u1(x192))) + x195, x196 := bits.add_u64(x178, x175, u64(fiat.u1(x194))) + _, x198 := bits.add_u64(x161, x185, u64(0x0)) + x199, x200 := bits.add_u64(x163, x187, u64(fiat.u1(x198))) + x201, x202 := bits.add_u64(x165, x189, u64(fiat.u1(x200))) + x203, x204 := bits.add_u64(x167, x191, u64(fiat.u1(x202))) + x205, x206 := bits.add_u64(x169, x193, u64(fiat.u1(x204))) + x207, x208 := bits.add_u64(x171, x195, u64(fiat.u1(x206))) + x209, x210 := bits.add_u64(((u64(fiat.u1(x172)) + u64(fiat.u1(x138))) + (u64(fiat.u1(x160)) + x140)), (u64(fiat.u1(x196)) + x176), u64(fiat.u1(x208))) + x212, x211 := bits.mul_u64(x3, 0xc84ee012b39bf21) + x214, x213 := bits.mul_u64(x3, 0x3fb05b7a28266895) + x216, x215 := bits.mul_u64(x3, 0xd40d49174aab1cc5) + x218, x217 := bits.mul_u64(x3, 0xbc3e483afcb82947) + x220, x219 := bits.mul_u64(x3, 0xff3d81e5df1aa419) + x222, x221 := bits.mul_u64(x3, 0x2d319b2419b409a9) + x223, x224 := bits.add_u64(x222, x219, u64(0x0)) + x225, x226 := bits.add_u64(x220, x217, u64(fiat.u1(x224))) + x227, x228 := bits.add_u64(x218, x215, u64(fiat.u1(x226))) + x229, x230 := bits.add_u64(x216, x213, u64(fiat.u1(x228))) + x231, x232 := bits.add_u64(x214, x211, u64(fiat.u1(x230))) + x233, x234 := bits.add_u64(x199, x221, u64(0x0)) + x235, x236 := bits.add_u64(x201, x223, u64(fiat.u1(x234))) + x237, x238 := bits.add_u64(x203, x225, u64(fiat.u1(x236))) + x239, x240 := bits.add_u64(x205, x227, u64(fiat.u1(x238))) + x241, x242 := bits.add_u64(x207, x229, u64(fiat.u1(x240))) + x243, x244 := bits.add_u64(x209, x231, u64(fiat.u1(x242))) + _, x245 := bits.mul_u64(x233, 0x6ed46089e88fdc45) + x248, x247 := bits.mul_u64(x245, 0xffffffffffffffff) + x250, x249 := bits.mul_u64(x245, 0xffffffffffffffff) + x252, x251 := bits.mul_u64(x245, 0xffffffffffffffff) + x254, x253 := bits.mul_u64(x245, 0xc7634d81f4372ddf) + x256, x255 := bits.mul_u64(x245, 0x581a0db248b0a77a) + x258, x257 := bits.mul_u64(x245, 0xecec196accc52973) + x259, x260 := bits.add_u64(x258, x255, u64(0x0)) + x261, x262 := bits.add_u64(x256, x253, u64(fiat.u1(x260))) + x263, x264 := bits.add_u64(x254, x251, u64(fiat.u1(x262))) + x265, x266 := bits.add_u64(x252, x249, u64(fiat.u1(x264))) + x267, x268 := bits.add_u64(x250, x247, u64(fiat.u1(x266))) + _, x270 := bits.add_u64(x233, x257, u64(0x0)) + x271, x272 := bits.add_u64(x235, x259, u64(fiat.u1(x270))) + x273, x274 := bits.add_u64(x237, x261, u64(fiat.u1(x272))) + x275, x276 := bits.add_u64(x239, x263, u64(fiat.u1(x274))) + x277, x278 := bits.add_u64(x241, x265, u64(fiat.u1(x276))) + x279, x280 := bits.add_u64(x243, x267, u64(fiat.u1(x278))) + x281, x282 := bits.add_u64(((u64(fiat.u1(x244)) + u64(fiat.u1(x210))) + (u64(fiat.u1(x232)) + x212)), (u64(fiat.u1(x268)) + x248), u64(fiat.u1(x280))) + x284, x283 := bits.mul_u64(x4, 0xc84ee012b39bf21) + x286, x285 := bits.mul_u64(x4, 0x3fb05b7a28266895) + x288, x287 := bits.mul_u64(x4, 0xd40d49174aab1cc5) + x290, x289 := bits.mul_u64(x4, 0xbc3e483afcb82947) + x292, x291 := bits.mul_u64(x4, 0xff3d81e5df1aa419) + x294, x293 := bits.mul_u64(x4, 0x2d319b2419b409a9) + x295, x296 := bits.add_u64(x294, x291, u64(0x0)) + x297, x298 := bits.add_u64(x292, x289, u64(fiat.u1(x296))) + x299, x300 := bits.add_u64(x290, x287, u64(fiat.u1(x298))) + x301, x302 := bits.add_u64(x288, x285, u64(fiat.u1(x300))) + x303, x304 := bits.add_u64(x286, x283, u64(fiat.u1(x302))) + x305, x306 := bits.add_u64(x271, x293, u64(0x0)) + x307, x308 := bits.add_u64(x273, x295, u64(fiat.u1(x306))) + x309, x310 := bits.add_u64(x275, x297, u64(fiat.u1(x308))) + x311, x312 := bits.add_u64(x277, x299, u64(fiat.u1(x310))) + x313, x314 := bits.add_u64(x279, x301, u64(fiat.u1(x312))) + x315, x316 := bits.add_u64(x281, x303, u64(fiat.u1(x314))) + _, x317 := bits.mul_u64(x305, 0x6ed46089e88fdc45) + x320, x319 := bits.mul_u64(x317, 0xffffffffffffffff) + x322, x321 := bits.mul_u64(x317, 0xffffffffffffffff) + x324, x323 := bits.mul_u64(x317, 0xffffffffffffffff) + x326, x325 := bits.mul_u64(x317, 0xc7634d81f4372ddf) + x328, x327 := bits.mul_u64(x317, 0x581a0db248b0a77a) + x330, x329 := bits.mul_u64(x317, 0xecec196accc52973) + x331, x332 := bits.add_u64(x330, x327, u64(0x0)) + x333, x334 := bits.add_u64(x328, x325, u64(fiat.u1(x332))) + x335, x336 := bits.add_u64(x326, x323, u64(fiat.u1(x334))) + x337, x338 := bits.add_u64(x324, x321, u64(fiat.u1(x336))) + x339, x340 := bits.add_u64(x322, x319, u64(fiat.u1(x338))) + _, x342 := bits.add_u64(x305, x329, u64(0x0)) + x343, x344 := bits.add_u64(x307, x331, u64(fiat.u1(x342))) + x345, x346 := bits.add_u64(x309, x333, u64(fiat.u1(x344))) + x347, x348 := bits.add_u64(x311, x335, u64(fiat.u1(x346))) + x349, x350 := bits.add_u64(x313, x337, u64(fiat.u1(x348))) + x351, x352 := bits.add_u64(x315, x339, u64(fiat.u1(x350))) + x353, x354 := bits.add_u64(((u64(fiat.u1(x316)) + u64(fiat.u1(x282))) + (u64(fiat.u1(x304)) + x284)), (u64(fiat.u1(x340)) + x320), u64(fiat.u1(x352))) + x356, x355 := bits.mul_u64(x5, 0xc84ee012b39bf21) + x358, x357 := bits.mul_u64(x5, 0x3fb05b7a28266895) + x360, x359 := bits.mul_u64(x5, 0xd40d49174aab1cc5) + x362, x361 := bits.mul_u64(x5, 0xbc3e483afcb82947) + x364, x363 := bits.mul_u64(x5, 0xff3d81e5df1aa419) + x366, x365 := bits.mul_u64(x5, 0x2d319b2419b409a9) + x367, x368 := bits.add_u64(x366, x363, u64(0x0)) + x369, x370 := bits.add_u64(x364, x361, u64(fiat.u1(x368))) + x371, x372 := bits.add_u64(x362, x359, u64(fiat.u1(x370))) + x373, x374 := bits.add_u64(x360, x357, u64(fiat.u1(x372))) + x375, x376 := bits.add_u64(x358, x355, u64(fiat.u1(x374))) + x377, x378 := bits.add_u64(x343, x365, u64(0x0)) + x379, x380 := bits.add_u64(x345, x367, u64(fiat.u1(x378))) + x381, x382 := bits.add_u64(x347, x369, u64(fiat.u1(x380))) + x383, x384 := bits.add_u64(x349, x371, u64(fiat.u1(x382))) + x385, x386 := bits.add_u64(x351, x373, u64(fiat.u1(x384))) + x387, x388 := bits.add_u64(x353, x375, u64(fiat.u1(x386))) + _, x389 := bits.mul_u64(x377, 0x6ed46089e88fdc45) + x392, x391 := bits.mul_u64(x389, 0xffffffffffffffff) + x394, x393 := bits.mul_u64(x389, 0xffffffffffffffff) + x396, x395 := bits.mul_u64(x389, 0xffffffffffffffff) + x398, x397 := bits.mul_u64(x389, 0xc7634d81f4372ddf) + x400, x399 := bits.mul_u64(x389, 0x581a0db248b0a77a) + x402, x401 := bits.mul_u64(x389, 0xecec196accc52973) + x403, x404 := bits.add_u64(x402, x399, u64(0x0)) + x405, x406 := bits.add_u64(x400, x397, u64(fiat.u1(x404))) + x407, x408 := bits.add_u64(x398, x395, u64(fiat.u1(x406))) + x409, x410 := bits.add_u64(x396, x393, u64(fiat.u1(x408))) + x411, x412 := bits.add_u64(x394, x391, u64(fiat.u1(x410))) + _, x414 := bits.add_u64(x377, x401, u64(0x0)) + x415, x416 := bits.add_u64(x379, x403, u64(fiat.u1(x414))) + x417, x418 := bits.add_u64(x381, x405, u64(fiat.u1(x416))) + x419, x420 := bits.add_u64(x383, x407, u64(fiat.u1(x418))) + x421, x422 := bits.add_u64(x385, x409, u64(fiat.u1(x420))) + x423, x424 := bits.add_u64(x387, x411, u64(fiat.u1(x422))) + x425, x426 := bits.add_u64(((u64(fiat.u1(x388)) + u64(fiat.u1(x354))) + (u64(fiat.u1(x376)) + x356)), (u64(fiat.u1(x412)) + x392), u64(fiat.u1(x424))) + x427, x428 := bits.sub_u64(x415, 0xecec196accc52973, u64(0x0)) + x429, x430 := bits.sub_u64(x417, 0x581a0db248b0a77a, u64(fiat.u1(x428))) + x431, x432 := bits.sub_u64(x419, 0xc7634d81f4372ddf, u64(fiat.u1(x430))) + x433, x434 := bits.sub_u64(x421, 0xffffffffffffffff, u64(fiat.u1(x432))) + x435, x436 := bits.sub_u64(x423, 0xffffffffffffffff, u64(fiat.u1(x434))) + x437, x438 := bits.sub_u64(x425, 0xffffffffffffffff, u64(fiat.u1(x436))) + _, x440 := bits.sub_u64(u64(fiat.u1(x426)), u64(0x0), u64(fiat.u1(x438))) + x441 := fiat.cmovznz_u64(fiat.u1(x440), x427, x415) + x442 := fiat.cmovznz_u64(fiat.u1(x440), x429, x417) + x443 := fiat.cmovznz_u64(fiat.u1(x440), x431, x419) + x444 := fiat.cmovznz_u64(fiat.u1(x440), x433, x421) + x445 := fiat.cmovznz_u64(fiat.u1(x440), x435, x423) + x446 := fiat.cmovznz_u64(fiat.u1(x440), x437, x425) + out1[0] = x441 + out1[1] = x442 + out1[2] = x443 + out1[3] = x444 + out1[4] = x445 + out1[5] = x446 +} diff --git a/core/crypto/_weierstrass/fe.odin b/core/crypto/_weierstrass/fe.odin index 1a160a03c..8ff6fe346 100644 --- a/core/crypto/_weierstrass/fe.odin +++ b/core/crypto/_weierstrass/fe.odin @@ -1,97 +1,123 @@ package _weierstrass import p256r1 "core:crypto/_fiat/field_p256r1" -import "core:math/bits" +import p384r1 "core:crypto/_fiat/field_p384r1" +import subtle "core:crypto/_subtle" Field_Element_p256r1 :: p256r1.Montgomery_Domain_Field_Element +Field_Element_p384r1 :: p384r1.Montgomery_Domain_Field_Element FE_SIZE_P256R1 :: 32 +FE_SIZE_P384R1 :: 48 fe_clear :: proc { p256r1.fe_clear, + p384r1.fe_clear, } fe_clear_vec :: proc { p256r1.fe_clear_vec, + p384r1.fe_clear_vec, } fe_set_bytes :: proc { p256r1.fe_from_bytes, + p384r1.fe_from_bytes, } + fe_bytes :: proc { p256r1.fe_to_bytes, + p384r1.fe_to_bytes, } fe_set :: proc { p256r1.fe_set, + p384r1.fe_set, } fe_zero :: proc { p256r1.fe_zero, + p384r1.fe_zero, } fe_a :: proc { fe_a_p256r1, + fe_a_p384r1, } fe_b :: proc { fe_b_p256r1, + fe_b_p384r1, } fe_gen_x :: proc { fe_gen_x_p256r1, + fe_gen_x_p384r1, } fe_gen_y :: proc { fe_gen_y_p256r1, + fe_gen_y_p384r1, } fe_one :: proc { p256r1.fe_one, + p384r1.fe_one, } fe_add :: proc { p256r1.fe_add, + p384r1.fe_add, } fe_sub :: proc { p256r1.fe_sub, + p384r1.fe_sub, } fe_negate :: proc { p256r1.fe_opp, + p384r1.fe_opp, } fe_mul :: proc { p256r1.fe_mul, + p384r1.fe_mul, } fe_square :: proc { p256r1.fe_square, + p384r1.fe_square, } fe_inv :: proc { p256r1.fe_inv, + p384r1.fe_inv, } fe_sqrt :: proc { p256r1.fe_sqrt, + p384r1.fe_sqrt, } fe_equal :: proc { p256r1.fe_equal, + p384r1.fe_equal, } fe_is_odd :: proc { p256r1.fe_is_odd, + p384r1.fe_is_odd, } fe_is_zero :: proc { fe_is_zero_p256r1, + fe_is_zero_p384r1, } fe_cond_select :: proc { p256r1.fe_cond_select, + p384r1.fe_cond_select, } fe_a_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) { @@ -127,9 +153,53 @@ fe_gen_y_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) { fe[3] = 9615747158586711429 } +fe_a_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) { + // a = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc + // = -3 mod p + fe[0] = 17179869180 + fe[1] = 18446744056529682432 + fe[2] = 18446744073709551611 + fe[3] = 18446744073709551615 + fe[4] = 18446744073709551615 + fe[5] = 18446744073709551615 +} + +fe_b_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) { + // b = 0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef + fe[0] = 581395848458481100 + fe[1] = 17809957346689692396 + fe[2] = 8643006485390950958 + fe[3] = 16372638458395724514 + fe[4] = 13126622871277412500 + fe[5] = 14774077593024970745 +} + +fe_gen_x_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) { + // G_x = 0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7 + fe[0] = 4454189113653900584 + fe[1] = 2369870743683386936 + fe[2] = 9771750146904378734 + fe[3] = 7229551204834152191 + fe[4] = 9308930686126579243 + fe[5] = 5564951339003155731 +} + +fe_gen_y_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) { + // G_y = 0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f + fe[0] = 2523209505731486974 + fe[1] = 11655219901025790380 + fe[2] = 10064955099576512592 + fe[3] = 14322381509056856025 + fe[4] = 15960759442596276288 + fe[5] = 3132442392059561449 +} + @(require_results) fe_is_zero_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) -> int { - ctrl := p256r1.fe_non_zero(fe) - _, borrow := bits.sub_u64(ctrl, 1, 0) - return int(borrow) + return int(subtle.u64_is_zero(p256r1.fe_non_zero(fe))) +} + +@(require_results) +fe_is_zero_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) -> int { + return int(subtle.u64_is_zero(p384r1.fe_non_zero(fe))) } diff --git a/core/crypto/_weierstrass/point.odin b/core/crypto/_weierstrass/point.odin index cde82ebb2..0e6e48678 100644 --- a/core/crypto/_weierstrass/point.odin +++ b/core/crypto/_weierstrass/point.odin @@ -26,12 +26,22 @@ Point_p256r1 :: struct { z: Field_Element_p256r1, } +Point_p384r1 :: struct { + x: Field_Element_p384r1, + y: Field_Element_p384r1, + z: Field_Element_p384r1, +} + @(require_results) pt_set_xy_bytes :: proc "contextless" (p: ^$T, x_raw, y_raw: []byte) -> bool { when T == Point_p256r1 { FE_SZ :: FE_SIZE_P256R1 x, y: Field_Element_p256r1 defer fe_clear_vec([]^Field_Element_p256r1{&x, &y}) + } else when T == Point_p384r1 { + FE_SZ :: FE_SIZE_P384R1 + x, y: Field_Element_p384r1 + defer fe_clear_vec([]^Field_Element_p384r1{&x, &y}) } else { #panic("weierstrass: invalid curve") } @@ -63,6 +73,10 @@ pt_set_x_bytes :: proc "contextless" (p: ^$T, x_raw: []byte, y_is_odd: int) -> b FE_SZ :: FE_SIZE_P256R1 x, y, yy, y_neg: Field_Element_p256r1 defer fe_clear_vec([]^Field_Element_p256r1{&x, &y, &yy, &y_neg}) + } else when T == Point_p384r1 { + FE_SZ :: FE_SIZE_P384R1 + x, y, yy, y_neg: Field_Element_p384r1 + defer fe_clear_vec([]^Field_Element_p384r1{&x, &y, &yy, &y_neg}) } else { #panic("weierstrass: invalid curve") } @@ -94,6 +108,8 @@ pt_set_x_bytes :: proc "contextless" (p: ^$T, x_raw: []byte, y_is_odd: int) -> b pt_bytes :: proc "contextless" (x, y: []byte, p: ^$T) -> bool { when T == Point_p256r1 { FE_SZ :: FE_SIZE_P256R1 + } else when T == Point_p384r1 { + FE_SZ :: FE_SIZE_P384R1 } else { #panic("weierstrass: invalid curve") } @@ -166,6 +182,10 @@ pt_add :: proc "contextless" (p, a, b: ^$T) { t0, t1, t2, t3, t4, b_fe: Field_Element_p256r1 x3, y3, z3: Field_Element_p256r1 defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3}) + } else when T == Point_p384r1 { + t0, t1, t2, t3, t4, b_fe: Field_Element_p384r1 + x3, y3, z3: Field_Element_p384r1 + defer fe_clear_vec([]^Field_Element_p384r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3}) } else { #panic("weierstrass: invalid curve") } @@ -270,6 +290,10 @@ pt_add_mixed :: proc "contextless" (p, a: ^$T, x2, y2: ^$U) { t0, t1, t2, t3, t4, b_fe: Field_Element_p256r1 x3, y3, z3: Field_Element_p256r1 defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3}) + } else when T == Point_p384r1 { + t0, t1, t2, t3, t4, b_fe: Field_Element_p384r1 + x3, y3, z3: Field_Element_p384r1 + defer fe_clear_vec([]^Field_Element_p384r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3}) } else { #panic("weierstrass: invalid curve") } @@ -357,6 +381,10 @@ pt_double :: proc "contextless" (p, a: ^$T) { t0, t1, t2, t3, b_fe: Field_Element_p256r1 x3, y3, z3: Field_Element_p256r1 defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &x3, &y3, &z3}) + } else when T == Point_p384r1 { + t0, t1, t2, t3, b_fe: Field_Element_p384r1 + x3, y3, z3: Field_Element_p384r1 + defer fe_clear_vec([]^Field_Element_p384r1{&t0, &t1, &t2, &t3, &x3, &y3, &z3}) } else { #panic("weierstrass: invalid curve") } @@ -459,6 +487,8 @@ pt_rescale :: proc "contextless" (p, a: ^$T) { when T == Point_p256r1 { z_inv: Field_Element_p256r1 + } else when T == Point_p384r1 { + z_inv: Field_Element_p384r1 } else { #panic("weierstrass: invalid curve") } @@ -485,6 +515,8 @@ pt_cond_select :: proc "contextless" (p, a, b: ^$T, ctrl: int) { pt_equal :: proc "contextless" (a, b: ^$T) -> int { when T == Point_p256r1 { x1z2, x2z1, y1z2, y2z1: Field_Element_p256r1 + } else when T == Point_p384r1 { + x1z2, x2z1, y1z2, y2z1: Field_Element_p384r1 } else { #panic("weierstrass: invalid curve") } diff --git a/core/crypto/_weierstrass/point_s11n_sec.odin b/core/crypto/_weierstrass/point_s11n_sec.odin index ae009edb0..53dd4002f 100644 --- a/core/crypto/_weierstrass/point_s11n_sec.odin +++ b/core/crypto/_weierstrass/point_s11n_sec.odin @@ -14,6 +14,8 @@ SEC_PREFIX_UNCOMPRESSED :: 0x04 pt_set_sec_bytes :: proc "contextless" (p: ^$T, b: []byte) -> bool { when T == Point_p256r1 { FE_SZ :: FE_SIZE_P256R1 + } else when T == Point_p384r1 { + FE_SZ :: FE_SIZE_P384R1 } else { #panic("weierstrass: invalid curve") } @@ -51,6 +53,8 @@ pt_set_sec_bytes :: proc "contextless" (p: ^$T, b: []byte) -> bool { pt_sec_bytes :: proc "contextless" (b: []byte, p: ^$T, compressed: bool) -> bool { when T == Point_p256r1 { FE_SZ :: FE_SIZE_P256R1 + } else when T == Point_p384r1 { + FE_SZ :: FE_SIZE_P384R1 } else { #panic("weierstrass: invalid curve") } diff --git a/core/crypto/_weierstrass/sc.odin b/core/crypto/_weierstrass/sc.odin index 2ed9459bc..e119eec2e 100644 --- a/core/crypto/_weierstrass/sc.odin +++ b/core/crypto/_weierstrass/sc.odin @@ -1,76 +1,101 @@ package _weierstrass import p256r1 "core:crypto/_fiat/field_scalarp256r1" +import p384r1 "core:crypto/_fiat/field_scalarp384r1" import subtle "core:crypto/_subtle" Scalar_p256r1 :: p256r1.Montgomery_Domain_Field_Element +Scalar_p384r1 :: p384r1.Montgomery_Domain_Field_Element SC_SIZE_P256R1 :: 32 +SC_SIZE_P384R1 :: 48 sc_clear :: proc { p256r1.fe_clear, + p384r1.fe_clear, } sc_clear_vec :: proc { p256r1.fe_clear_vec, + p384r1.fe_clear_vec, } sc_set_bytes :: proc { p256r1.fe_from_bytes, + p384r1.fe_from_bytes, } + sc_bytes :: proc { p256r1.fe_to_bytes, + p384r1.fe_to_bytes, } sc_set :: proc { p256r1.fe_set, + p384r1.fe_set, } sc_zero :: proc { p256r1.fe_zero, + p384r1.fe_zero, } sc_one_p256r1 :: proc { p256r1.fe_one, + p384r1.fe_one, } sc_add :: proc { p256r1.fe_add, + p384r1.fe_add, } sc_sub :: proc { p256r1.fe_sub, + p384r1.fe_sub, } sc_negate :: proc { p256r1.fe_opp, + p384r1.fe_opp, } sc_mul :: proc { p256r1.fe_mul, + p384r1.fe_mul, } sc_square :: proc { p256r1.fe_square, + p384r1.fe_square, } sc_cond_assign :: proc { p256r1.fe_cond_assign, + p384r1.fe_cond_assign, } sc_equal :: proc { p256r1.fe_equal, + p384r1.fe_equal, } sc_is_odd :: proc { p256r1.fe_is_odd, + p384r1.fe_is_odd, } sc_is_zero :: proc { sc_is_zero_p256r1, + sc_is_zero_p384r1, } @(require_results) sc_is_zero_p256r1 :: proc "contextless" (fe: ^Scalar_p256r1) -> int { return int(subtle.u64_is_zero(p256r1.fe_non_zero(fe))) } + +@(require_results) +sc_is_zero_p384r1 :: proc "contextless" (fe: ^Scalar_p384r1) -> int { + return int(subtle.u64_is_zero(p384r1.fe_non_zero(fe))) +} diff --git a/core/crypto/_weierstrass/scalar_mul.odin b/core/crypto/_weierstrass/scalar_mul.odin index 1781ac3b6..108dc5d74 100644 --- a/core/crypto/_weierstrass/scalar_mul.odin +++ b/core/crypto/_weierstrass/scalar_mul.odin @@ -1,8 +1,8 @@ package _weierstrass import "core:crypto" -import subtle "core:crypto/_subtle" -import "core:mem" +@(require) import subtle "core:crypto/_subtle" +@(require) import "core:mem" pt_scalar_mul :: proc "contextless" ( p, a: ^$T, @@ -11,6 +11,8 @@ pt_scalar_mul :: proc "contextless" ( ) { when T == Point_p256r1 && S == Scalar_p256r1 { SC_SZ :: SC_SIZE_P256R1 + } else when T == Point_p384r1 && S == Scalar_p384r1 { + SC_SZ :: SC_SIZE_P384R1 } else { #panic("weierstrass: invalid curve") } @@ -34,6 +36,10 @@ pt_scalar_mul_bytes :: proc "contextless" ( p_tbl: Multiply_Table_p256r1 = --- q, tmp: Point_p256r1 = ---, --- SC_SZ :: SC_SIZE_P256R1 + } else when T == Point_p384r1 { + p_tbl: Multiply_Table_p384r1 = --- + q, tmp: Point_p384r1 = ---, --- + SC_SZ :: SC_SIZE_P384R1 } else { #panic("weierstrass: invalid curve") } @@ -90,6 +96,11 @@ when crypto.COMPACT_IMPLS == true { p_tbl_lo := &Gen_Multiply_Table_p256r1_lo tmp: Point_p256r1 = --- SC_SZ :: SC_SIZE_P256R1 + } else when T == Point_p384r1 && S == Scalar_p384r1 { + p_tbl_hi := &Gen_Multiply_Table_p384r1_hi + p_tbl_lo := &Gen_Multiply_Table_p384r1_lo + tmp: Point_p384r1 = --- + SC_SZ :: SC_SIZE_P384R1 } else { #panic("weierstrass: invalid curve") } @@ -113,6 +124,8 @@ when crypto.COMPACT_IMPLS == true { @(private="file") Multiply_Table_p256r1 :: [15]Point_p256r1 +@(private="file") +Multiply_Table_p384r1 :: [15]Point_p384r1 @(private="file") mul_tbl_set :: proc "contextless"( @@ -122,11 +135,13 @@ mul_tbl_set :: proc "contextless"( ) { when T == Multiply_Table_p256r1 && U == Point_p256r1{ tmp: Point_p256r1 - pt_set(&tmp, point) + } else when T == Multiply_Table_p384r1 && U == Point_p384r1{ + tmp: Point_p384r1 } else { #panic("weierstrass: invalid curve") } + pt_set(&tmp, point) pt_set(&tbl[0], &tmp) for i in 1 ..<15 { pt_add(&tmp, &tmp, point) @@ -170,6 +185,12 @@ when crypto.COMPACT_IMPLS == false { y: Field_Element_p256r1, } + @(private) + Affine_Point_p384r1 :: struct { + x: Field_Element_p384r1, + y: Field_Element_p384r1, + } + @(private="file") mul_affine_tbl_lookup_add :: proc "contextless" ( point, tmp: ^$T, diff --git a/core/crypto/_weierstrass/secp384r1_table.odin b/core/crypto/_weierstrass/secp384r1_table.odin new file mode 100644 index 000000000..338e7b9b9 --- /dev/null +++ b/core/crypto/_weierstrass/secp384r1_table.odin @@ -0,0 +1,5969 @@ +package _weierstrass + +/* + ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ +*/ + +import "core:crypto" + +when crypto.COMPACT_IMPLS == false { + @(private,rodata) + Gen_Multiply_Table_p384r1_hi := [48][15]Affine_Point_p384r1 { + { + { + {3349844787980918824, 5700721700487043153, 1581288787708942329, 17304888540980539863, 3234495129650039747, 11694852976059594522}, + {11454526365474276483, 17280055605583648274, 11483041770187710052, 15064860306174908787, 9425940298043390756, 7831029453110477537}, + }, + { + {10854210904801992286, 8255439613636595718, 1316348857406525596, 2282633625581246438, 14438173431932387987, 5673747503677604393}, + {8960903665589529841, 14030078906563026478, 466971755747792240, 16909751879911376491, 8261483486653352128, 12597935804442306524}, + }, + { + {6447508696227153408, 2759028665179735381, 794515856920409590, 14869397668262921446, 10588017418631076914, 12633095840797167228}, + {6607496461698970477, 6359006165521880122, 16663268705047656412, 18219762716186036953, 13315075775889493847, 6546871415552527515}, + }, + { + {4250815476678138550, 17073439466111852958, 3750529698426925825, 1904641224225602431, 7274009899457528107, 9209596034767199086}, + {6863361867383511223, 4099555040981761624, 16013520265914987211, 17330863835225155437, 15236683723773407531, 9886066912739647523}, + }, + { + {6548020115141006009, 2051287398488083721, 18013217855858620214, 17512108880758082211, 9657257807517110121, 13349423389223700059}, + {11448378503671870177, 16607356707891652776, 17986139470446831883, 2256897346286898360, 7779521166731257394, 14734261666263853530}, + }, + { + {16451156334851086799, 10433346012762661878, 1154088382826340721, 13920053107889463035, 12824812460638933002, 5771020232226448223}, + {10182053156369870491, 9953188423679889138, 3623574174398550414, 6539131418856354537, 4739863922718165110, 13968548469751179186}, + }, + { + {5057596744164756370, 12108644536263189339, 15628783732405749711, 9182850460131890127, 7755150145219327164, 12512487145101794871}, + {9783765255428637296, 17231411912625418137, 3031503376230558613, 3001321323125863884, 3711029936425287900, 18364899108493632271}, + }, + { + {4364170143483158168, 3837420327812895040, 11153877356291905762, 8627127623255240713, 10258093926722597263, 6966392554053872709}, + {13838494481389844004, 12447754423026187562, 14673290292701904554, 6888547195036401202, 3349351868797716527, 6817319933710697746}, + }, + { + {18016384373848540113, 7565820187757705205, 16185660972256070888, 2502822820839506307, 3880408517672548187, 4194119666426113160}, + {15694892319489811154, 4832422690840974597, 900725859486443418, 10265913502031862890, 1864821221915885738, 3700988259937570428}, + }, + { + {8488064655818993057, 13159008538953946469, 11028809874392449897, 11486244481861659915, 8569628704299090359, 2892252873674546430}, + {2941671072611665985, 9930810186813308033, 10852463932839803129, 6122756170654615426, 13303416592882569572, 6113713156059966484}, + }, + { + {10029451401870245184, 17181275891609445610, 1563464611048571891, 9249056941485261951, 15488363863106956591, 17426032626929358463}, + {3624362630716884995, 17733027703464349615, 12615837230382222165, 2899993379581625588, 10641197672343453466, 6876651786059986401}, + }, + { + {12941176093218387209, 18012784992688854716, 17630514364742901970, 7489207242388660276, 3300101790738216151, 165750267447677843}, + {17420203378203929547, 18429168937941287247, 12685766409811315467, 17062737254687688913, 11583537930945240085, 374101281300528640}, + }, + { + {16294845494152982505, 7182435875615992692, 3318017447157242087, 6087688366366383495, 328984259793137604, 14904070120287703952}, + {565244652741101966, 4951466181341698004, 11866318921579101416, 6194578547220221350, 15631557042652121752, 10545898140965819968}, + }, + { + {15745305462398415447, 6816971438675772065, 1075554629877262698, 8234899837982726223, 3512560196005219004, 17693290669008338152}, + {14638482525770633011, 15865918008670368297, 11359271142073926365, 17074664191994857570, 15613938350520725613, 17352596771318223922}, + }, + { + {6627628274763979245, 6430867977390741183, 16640991507592485950, 13915161472308593069, 9005635619537074355, 17136188005588780957}, + {6349032855227933129, 13790585653547635104, 6107878840283566203, 17101678754123509440, 4589529453987745844, 8778990861876837520}, + }, + }, + { + { + {8752339740764879889, 17204670892025727113, 13948917001537480663, 6015237120129105404, 12568825630768815527, 17098885903057916524}, + {3196947359408104404, 10557260209896054933, 15941743809901771731, 11319635393284889026, 15404036538896402776, 1823888675766330133}, + }, + { + {469276640564380241, 10942708362323945260, 5172129155405724574, 17521202989307779782, 285237824018528197, 14755519896084931015}, + {13450199151338167480, 4987469637889591012, 11072253743028383225, 4126494248833488207, 10403393469323319433, 14468451395906602570}, + }, + { + {10409556101848104492, 2312052479304391304, 8367833927637255749, 12718782815503837000, 12586549663603169139, 10099896633356211470}, + {7897182246145608734, 6279866437607856313, 15077509973591020067, 1920596236429885894, 8944171611482738124, 468560753431799278}, + }, + { + {14398196793687807397, 8276491336766244001, 16962771698246445022, 8043838882426521864, 3609036178188456346, 17961572587511875610}, + {10659300691638275682, 12905326140192521229, 651286293824175704, 6550291910155090287, 10359196978363721745, 8054349679302352396}, + }, + { + {14267646986135279321, 8023233762563366251, 3277224320191152598, 2431726775717059350, 3733051418604042579, 11078740418949781682}, + {4641466211631370887, 5972034612476576125, 11061332758238937654, 565694857032650296, 15196808723752961845, 5493285531974069465}, + }, + { + {18369275680877034088, 3644498253900435800, 5207654447363684810, 15054017021149325074, 13441959779061156291, 10801557030657187731}, + {5488228865522937525, 10042916063344664944, 16628991126352116102, 13399733271269739520, 7919096844168308660, 12224871956968387142}, + }, + { + {9406504212815497730, 6315084170282838751, 1538052392585176449, 3287788394884246045, 11684015502339439334, 774607932742351547}, + {13523687029812911694, 8970259436187285903, 516344689739437046, 8879385705799553570, 15472954217075584115, 17165612419994903190}, + }, + { + {6153906285028789904, 4881581827835548877, 9088581243877761387, 8673828452274153145, 3729691157199039232, 14763971970770720159}, + {11125946843031387253, 16893034180060177406, 11028878025260215404, 13414446456552306577, 15673952559920934625, 8227747155230402213}, + }, + { + {4019194246965870655, 15651844969361453739, 14943903262285431608, 16531569415823118894, 12811244602177600058, 13239818034282515750}, + {5449698701210370930, 10791866857788139766, 5646650868879525525, 13293667095645494023, 12241262662724597658, 13853472368070253083}, + }, + { + {4116627791673898568, 5326753363832360760, 11600148105162668652, 16022425070120634880, 12379564163937803418, 18403278989519500037}, + {3838756056494870539, 9746510470453080454, 15196381880087604041, 1324266274153753608, 1934910704818180248, 16192237923261768598}, + }, + { + {5766511464995673783, 8244831189622490542, 8170343088439188103, 6232835306175447562, 5263728916489688559, 11717533286834875}, + {12241226361813518908, 13563045206906982275, 6620157279318203022, 5949784687776791647, 2638510331637305823, 8202404349400972534}, + }, + { + {17137086209956005801, 204428026461370733, 3234178205969960017, 1143006718786815780, 7294365920988646447, 3430748893910901229}, + {15644744495324135074, 6526193849034702994, 15311692696436479485, 100536624425234142, 2072137864950345134, 2838362248079960254}, + }, + { + {3864766173433820636, 1971303109201164903, 5674191275610292510, 1729560487462795155, 10192657450724834454, 13552365051012392948}, + {6029200215919341904, 15607499798945720199, 9235384391078164863, 13115797159041968899, 11473304030559673981, 6717143313334294198}, + }, + { + {16073198989296538507, 1260522085794207919, 2484833084695527559, 16663233906141730979, 16370173418105654173, 15941588275532048355}, + {15264482454100651294, 1530324904307833661, 5346522558909751820, 168718846601743143, 12733323453851106540, 15054596367649585566}, + }, + { + {8779244963536382258, 14774177152181331880, 4385874624061025062, 1164231020920773885, 18441595039555055892, 10628161864427821209}, + {314776300789919008, 15953928246882392341, 11239013102079015593, 12105564780074077722, 14167815415915669462, 1359490032240618238}, + }, + }, + { + { + {17495831655399754328, 5174414647671185898, 11318938235462267547, 10600238109237010238, 3808662780947456733, 9982761271652922419}, + {9825065447185105695, 17201221608158777066, 8386702419239390647, 6669452484318451541, 9948181677775458542, 10854356442296663251}, + }, + { + {9814807791324751977, 12296930083946621987, 10307437404349332723, 9109385710605983143, 14812805821653280276, 9073050103164402930}, + {13867323253290964163, 4560904001274587374, 8320427990736234822, 16081927245724423233, 5738004521721590874, 6293359268685952360}, + }, + { + {1102440177859885328, 6433584039832869723, 5220624537358960047, 13680706619037828486, 8111463461178477715, 8222960733395115842}, + {17599283693164557341, 15090346558134489779, 4538679599583135375, 15042688490235051776, 13835441515025117083, 16073809881077304026}, + }, + { + {10047787296578964584, 2965381022962740423, 16294614689730458159, 9190282415235004744, 2690723303600845570, 2433913875956636400}, + {314860987985756378, 17256734903814295206, 15934782378906162714, 430963730343504134, 11136098731840913906, 17571316264889158941}, + }, + { + {13751698910353501324, 13510591610088790493, 7296230476386677951, 15771194764882310216, 7071348632181406726, 4016223392586971068}, + {5697427461676860171, 8233597763060359382, 11010267185618729313, 3415981542645755022, 5457294468077244468, 225392490383371832}, + }, + { + {15646693844663402255, 3326571016557891145, 11654470234122088961, 15157961803112063987, 2993882145665175656, 8636467418941461771}, + {6779513489978476950, 5971261203840109208, 12247590628659552873, 17305918993021939273, 16119245356860371088, 1321130712911895728}, + }, + { + {11483973417069062031, 6037224851072625784, 15557951376706404252, 2470679358159540669, 12238331311548942969, 8726725576681513552}, + {9571412658072452963, 13081411829441971381, 11182177874732199472, 4596163123987649855, 2508633440203353096, 13386883764628321276}, + }, + { + {13238425823862395570, 9364555424927625812, 13036757456625831933, 17258175170914518289, 10977661896195155237, 2108108449570745277}, + {9531888381573748695, 871050091524626285, 5415169211299494043, 12856340691567607896, 13004810147483829082, 16238406080182275763}, + }, + { + {15371919503521995592, 1023245974044194281, 7465441369206311123, 1659176121116069520, 14352885355523706915, 12313186690485283196}, + {16829625273347829325, 14329982894690398353, 13430769608769996200, 14433580840835616212, 1575399656250103267, 5631450320997959585}, + }, + { + {1308927832832721864, 7645300720509257753, 394821027033666361, 1405179974140973893, 9998561471841590974, 740549317055684310}, + {9206896584584034779, 14330288277576019540, 5482705534907018177, 1134228745870193564, 14319406255178735919, 6723548280696025825}, + }, + { + {7488031393132578836, 4827301471138388705, 13879957958516433613, 8914235600795497221, 9625930790436045227, 14346277439968844011}, + {8799754665963613196, 17445816559731029471, 1345966680255046785, 2291437085360476682, 17887362986581489890, 11089873753828852787}, + }, + { + {2786087897073892568, 3104846214576331224, 16466749382591438860, 18025871964671977774, 11073207410569350939, 15738740251530786465}, + {13634745416070217585, 5695916567870375377, 3278890813204002656, 436738283047315052, 7668575393144640681, 4923414004094995102}, + }, + { + {14851753411270223421, 2820295503131879793, 17134510985746317750, 6635507126737913572, 2826933808807957093, 14392615754844885363}, + {2507906658398669588, 10780876428782550273, 10380620345441284945, 7886790170905380501, 10231944265771711398, 16476655346301721654}, + }, + { + {13070800538562112677, 9974973058199179811, 17174935952981795715, 11396839698540407513, 6936502055882250851, 14166262455025754064}, + {8364117452854843552, 6706032581969460855, 18006192088730697620, 14578422357554768654, 8987670312607011721, 12637025718236942994}, + }, + { + {3558937619125289797, 5542434901402954033, 5561316942068979218, 3053265417595846608, 17622647805733278772, 13078656474266295183}, + {4792933921067825163, 12438312561223885381, 4069107248810180056, 14562883583229266197, 15526204878824637024, 13971448521721856329}, + }, + }, + { + { + {13881233885713608853, 18310267182505878203, 9666283410481579841, 7622892083109029242, 7627364883537502737, 7711280318302167400}, + {2653916418723521679, 2132538432068103232, 7384809380579857215, 3976377314823384782, 6302545514324279629, 4766374634552375286}, + }, + { + {14275770317741623555, 13472206961963184891, 14882629621446810331, 4745461955502981496, 13430642232042183996, 18385303470562194476}, + {3828360326258537309, 5628323622401545900, 10617176218500988509, 3376138133187194596, 1896232731466588191, 4015792813110298739}, + }, + { + {17520011058000060892, 13282870058194119308, 2970088605549251468, 559824469192815928, 13074959133117617173, 13965335622649006598}, + {14278086476506718074, 15679496005431490447, 7405358540117832269, 11499896947138894959, 6967445910717609773, 2473509465854660680}, + }, + { + {14218645527427232303, 16094073974715081351, 14550346839806249740, 17359042213091334869, 8243736883827664451, 19411709369106904}, + {17360637257722902309, 13524203219993551359, 17248055348998851403, 818508604090109170, 17862494632117412800, 7597397595500206950}, + }, + { + {355637953695091928, 13365105901469090585, 11160916490622410120, 2871346391173754292, 6750400526492046394, 211127482213137910}, + {549443043401466743, 11744212739472559234, 4600076762405256377, 12166210043154281415, 11432931513593152138, 17057353378977209047}, + }, + { + {11045556636417587304, 15797122882916606544, 9857941873608458027, 15587445337518508161, 16747134094270843369, 1942895756873835958}, + {16926974666046519651, 17530543788685554725, 1482855329287158678, 4473134732938867843, 16205916098480860897, 14394504722885977211}, + }, + { + {11278672676047883003, 3127364840791393317, 14661695642506572763, 11327535520461364742, 16295126143649156464, 9195965710616161195}, + {2883629345650458713, 1172057357528370502, 3611546183472157852, 13774548359392334165, 13259339647748906816, 629600286834219016}, + }, + { + {7869123316056211366, 8912948800190134731, 7048222560394935760, 5384815822636674013, 8276041929283508860, 10387125700457001021}, + {5152418287465476363, 10375890927386960077, 17017201689085708686, 17352090541805918837, 12744013506722056115, 16512473688480987896}, + }, + { + {13274024037452373469, 13088421719716579977, 6488831580186260168, 12167840477765829729, 4048926237756853262, 10042315437016580210}, + {16990037843046932062, 11650375436582455716, 336515426783093448, 5621387034989961497, 16227625293517574482, 1675664794019173789}, + }, + { + {8998700262199537435, 3948126232667015745, 6110307257346779364, 1830671386111562275, 17929406846170452655, 6510115356319508860}, + {11701924621820907518, 624276597106916110, 7769841773667732717, 12604366378926560515, 8005398115052195134, 293463208231752797}, + }, + { + {3901247269240974390, 8083958895346723402, 13047079326090925018, 10022566546990307546, 16068843007491877327, 10422873494559390104}, + {6431582432115208832, 7003752929540397423, 751812828597354449, 13448257234944313700, 17160453016917581253, 224281597487448015}, + }, + { + {15505836579778927831, 12536765066489116061, 7911004464200661773, 4589459948731631618, 1352286392773861838, 6489162408280759760}, + {6654011263605559897, 8851080956163569570, 14795264073060462823, 14859036427142293159, 7090935575643363067, 15615386349502020600}, + }, + { + {13497550669973445610, 776655080972150030, 3491366472103751840, 16846118274841047081, 13565352443717216734, 16762453283994907024}, + {12654927015632301198, 15345461380888405279, 4403814052111981055, 17852880245807884583, 14115340613623856930, 4860085117378061039}, + }, + { + {6433917609890801577, 10685400209354089382, 10418542423521959747, 3946310041240688418, 9635492151118952286, 9917954643840099262}, + {15291273590135926152, 4720885519447161005, 17166594277722852696, 3334399947768089986, 17999815131740278301, 8130038528325353891}, + }, + { + {6629307447971988422, 5335548022504527311, 12146427842799104389, 8972801394900876948, 14555534637545481678, 1004424158638645771}, + {6032457518228329693, 15568108340121417066, 8949689274415917695, 4542026629771725374, 7740306014723477514, 16661552339503449836}, + }, + }, + { + { + {9224203646647229025, 12662711716512669786, 12163889523034683189, 2867493967382851716, 8230710800753936196, 207192902851491327}, + {9006096280315984413, 10727939396825569390, 7414333640665166734, 8831661749780045475, 10577657048648935168, 7340987637726578721}, + }, + { + {16819901085357815109, 1200308257500709808, 17900351623796430109, 421922693020621282, 4799108745080418673, 2867647093297445986}, + {4820563775913927012, 5975941317603369967, 14072742165336817571, 2287502568922658853, 9587001235227187358, 4290334145148904430}, + }, + { + {3832022561932601686, 7513971564898549429, 7265952414186567449, 5571401045684531851, 5917838096882845075, 9020054854027355230}, + {17666670175994672478, 14849859059336890140, 16575133114891581747, 18181109587632733552, 9353137766555932790, 14224517063829047201}, + }, + { + {11379736539869871663, 14064395773240508269, 15376587550927055762, 12366734842807406024, 7399730532330594511, 16291653033248048665}, + {17533123140589700114, 16874629705534527689, 2772413922918237986, 17100246637189895662, 12295986277440111980, 9880401782043035390}, + }, + { + {4600239529793568865, 13314440057685353765, 5513099208751614902, 10672101316916498735, 7845480375626361331, 13210044038654501689}, + {9289518081528298195, 11080913979513349207, 17396978866245763032, 6250395789173560880, 16771707236585087336, 2590734212198297899}, + }, + { + {930462897994518978, 9217181672387315942, 17307812439812166569, 3609084933939549829, 16131501236725989478, 8757759376648884060}, + {16339503747609931114, 17221587404154414579, 7488052216073421601, 4518526255668709375, 16947062963375159993, 18380636145787033322}, + }, + { + {3629310135461852726, 14261574859150072195, 12180309193984885578, 10259672401517896031, 6494810599317794988, 17046762876694577034}, + {12098574628862673469, 10378154311416559487, 12750606156573867456, 8663374335352934709, 4693992916394743961, 357493171015036757}, + }, + { + {11833317211185183313, 10488624928285281625, 3077329497649896790, 8470872799795652062, 18163548998316849229, 7886285029156450668}, + {18270578357826845759, 15548792140868659315, 193286806456843076, 16001981975120132135, 5119039709260849665, 9668247383740756817}, + }, + { + {9031752377320763641, 242818397681257852, 18241906657254956110, 13839428244885956520, 9537688327632448482, 2680760180422680034}, + {1140834959571490287, 9218649627789651517, 5215286326434684525, 9085211375997438966, 14681078397199707995, 6543087453410959651}, + }, + { + {12771546520335765761, 8608812848025739593, 11046738517958961200, 2102753437152423641, 14544186608765681553, 17802705546689279874}, + {16807367192212923198, 5264409545529952952, 18278421807570260973, 5724995243518092238, 1214809321092318114, 10853502413658374973}, + }, + { + {16212300912408911066, 1517529852090653420, 4886194125638679873, 1212252738684378336, 11831701727622714538, 7716816927665980895}, + {17295498200608277293, 13425634643770440583, 15749163629045239603, 7303838501526289106, 14498496375761955339, 6454509847858940644}, + }, + { + {18202283120945286395, 2039362142522516476, 18347665142857106533, 17305114143802821185, 11943785292295778029, 2743738074951986737}, + {4994513738578570266, 6348689099302941658, 15173738691317246698, 11558529557606048315, 4106465899018522358, 8424813643021743657}, + }, + { + {10424551593037483425, 17413812589282410500, 705854651896543614, 6898508513214864618, 145837834970548303, 2863236542933854914}, + {12835826729643090586, 1958115997725533394, 280738023943547097, 6087206023074646703, 4265323126954195996, 8619647725472919222}, + }, + { + {5732596994419719701, 9319740642492016182, 8478607680989525873, 17406976540323360541, 14044433736883338890, 5843487408713771306}, + {17866336923428882759, 6507956087423256715, 9144061297371615776, 3240732467142651847, 5257579294906270467, 13872281309975586392}, + }, + { + {12720761491485366396, 6776966272901501581, 11463518450782265334, 17251569553757868971, 6624504318270596406, 11185165932902536570}, + {12227483127918029728, 6324632225240663892, 9478714313429082812, 12835053263906838560, 6450777494445586817, 5700121989629794103}, + }, + }, + { + { + {15147392016261929612, 2592171191975946442, 7902428577086443761, 18094018070971638928, 17125131301575142676, 10403369618039505987}, + {7782580376688466610, 4703006815182908293, 5606766158256046999, 9775555907755921362, 18306579346372695468, 18162177355143222738}, + }, + { + {12724835834640470632, 9147221313705790092, 7170406708748588612, 4886504410000298099, 17202448621988755776, 13271672497061292325}, + {17599074313590505725, 3164548778567106464, 14831945487181112151, 10047709902632560980, 80312838214623996, 4488377331349129562}, + }, + { + {16935158672435590850, 3414074563213825020, 14976003461413697269, 16596700862409772375, 1410879114739726020, 1257343276542464557}, + {12595581628483328246, 18321480388540739538, 16111335550040023466, 18371700889666820459, 5114856790954063486, 12702332139456970834}, + }, + { + {9865043235042057824, 6029147174750169487, 4293853667229843866, 9112439374197776924, 14635415243831213657, 16684692725807653987}, + {6007944397888869536, 10548392254307770404, 7913056855243428884, 6568756587625967278, 595480320951638110, 15988239687909198680}, + }, + { + {6682713213932946292, 7716189363132191471, 6386782149539319850, 9799679847346926198, 12768758919818342081, 12149412740097346866}, + {15963729003660447748, 9187947812534491537, 15358865564388966319, 17453292715073688659, 6185316189136789449, 12625900424403229246}, + }, + { + {1176014715697049427, 10940632468289921525, 1316897139158742923, 4659486690798028078, 6789215229361554544, 6689879531142462158}, + {9044301377244887283, 3631078536826367378, 7428358043384314342, 1014081592875127196, 9053433738331035978, 8688971663426964781}, + }, + { + {13620164954367910528, 9966976914653058965, 4659720763711269903, 6933780758465588457, 8151676732205446269, 8752412244536117943}, + {2214917853338768919, 12945088371494225060, 4601901579622551791, 15942583889923574471, 7281044701092345103, 17030848736008966572}, + }, + { + {7835462182282043081, 6752736874837396136, 1692977477997399163, 6932537288585414532, 14477842662688910095, 15049850015849067234}, + {6173531860463995642, 15846342177339735029, 1597137878407950850, 5502938210031734458, 7415040766859401533, 1338338807883996623}, + }, + { + {140753466411001702, 2297914471247852879, 1028738292103309951, 17823758766646087018, 15769363817186087193, 4910055743319677712}, + {15419773815255457739, 12240682779047476716, 18282251230655960630, 16713544303549254380, 13083613671678892706, 3210908138315425474}, + }, + { + {3793265829253063392, 417218602524327002, 4908064786314635338, 1898100452518531755, 2568510715793833230, 14120149645664052105}, + {18146362507954308672, 2545351352320443286, 5008353042150968046, 10916578200202739329, 13715068559100727645, 17156509812140536028}, + }, + { + {9838244599212892470, 12509523685653687922, 10577600670943532011, 15106554186241242699, 12631690473512788728, 9169152683892800174}, + {729650498691277361, 12159677075966957800, 1876936289057209821, 253712351947999722, 194325639412533985, 9244721047496417443}, + }, + { + {2482116316041585169, 2104186195194786493, 7202193418181832678, 15057368806550291031, 8766969826300985526, 14582594738267145235}, + {16362045180297581158, 14472742906561159645, 14204095959602911743, 12991159482136232910, 5359117497638310078, 17218381012207861896}, + }, + { + {1272816448120968979, 9359442561097893921, 3623593162723332560, 8905232475783332533, 5169888391258441059, 8811080810485397684}, + {653572848361898632, 16110636390338543963, 13671121912701413366, 4560998650645223117, 10962017893531637465, 12770222065189975065}, + }, + { + {3116586205508178734, 2050508606805777592, 675566623125517728, 5812215637185565400, 16747763503048114993, 979095159683344417}, + {4422968182455831938, 2371155931114840425, 4264880153383139392, 2245458832441390704, 4962056465731516764, 13785630336035383669}, + }, + { + {11608620191053318010, 3148547465913113704, 4334059326127053351, 3242751952971024244, 15779619493269214681, 16028659557022656525}, + {10258993644149710167, 6956689905416847195, 1219361474591302664, 15358800427564853076, 18412522508913131917, 11320199778311670341}, + }, + }, + { + { + {1763123866941591327, 16900027656783472578, 11315458126277126494, 14678873114899664069, 16385889875309589997, 9608350753469446028}, + {8365156417390395208, 9518773903920392233, 15517769310656023055, 15557612401839384612, 6818638793384298196, 4689490629614769647}, + }, + { + {7029169502144566380, 15357026717875887823, 10958228541568110205, 12991311448110316375, 18163413024255486907, 4423132467880086538}, + {14329574318939096952, 15986250779104246749, 5149023581841912567, 857692231877427831, 6766579494828030413, 13297528373249043274}, + }, + { + {8833286985133922820, 1422352152750949632, 17916971651207587120, 9852959168575954132, 720074577693725724, 16992164406778833274}, + {13658912852753184715, 15995732835663412588, 109169432375935263, 7153134127152350339, 1740708231718983481, 10096352175613178615}, + }, + { + {8898444536197899229, 7363197234870550392, 13859502656863853529, 16353929722932824154, 3563926877908575789, 7083332022656946846}, + {1192602583272042541, 11691701210306654678, 17768977285493519026, 1325595029028298323, 6083154463528028942, 9420136318321879646}, + }, + { + {9357643633468667166, 9777626262221569724, 13091931063589755125, 7867107412773768943, 15020623651884666147, 12089257806028258277}, + {10848050713527447877, 5954793401847436243, 11016251893792937739, 3094692726578056666, 13335998362365960105, 4456549853200134134}, + }, + { + {6615550875184532162, 17802299024252154693, 9829209431047041336, 12066910166505767332, 9658085204117106784, 628187108833105552}, + {4704248642052554113, 6397156614024370344, 11345180222991965460, 6233845157183108927, 9777374421972523308, 5874678333002996612}, + }, + { + {7822288722540972332, 7952138195439261347, 11169290659098881849, 3042519944988229158, 5405508523428790131, 17939670977762776799}, + {2939158258373740623, 12697341633646165676, 13062397760872702525, 17176707327834230530, 15615175546165608557, 8494997402872669401}, + }, + { + {15755839765779794871, 4360301701503507242, 18156570609668386254, 5119543763469609383, 16128603506838286124, 8332918297114938687}, + {2581195955267651639, 4444333459878089434, 14369377281187161259, 8296332340199089840, 16659639448818898530, 18345037457345897147}, + }, + { + {4758277028832022225, 11683847788382241419, 515925726413885095, 3693914633629232851, 1334049558186740102, 9903363943316486178}, + {6186305948183309326, 9076841023132049489, 2269793805693240470, 5838292741631995685, 15624692348115370947, 5174016497034202999}, + }, + { + {13050258405219282279, 16752510433331299519, 16577830848329560188, 14788323970814757487, 3531220681642194883, 10450279241367329525}, + {2241246527454921768, 5961237379972381806, 17018546346619625080, 4693825024640504146, 1766972201817885924, 12382031514930570953}, + }, + { + {14186663977554217418, 15921452897246352532, 1670746882987574783, 10569214187154214751, 8735916617091829853, 4778008137059793493}, + {12230336867909671050, 4713018484448365389, 17202143122302469643, 709747344404349977, 11975499930396914498, 17122512072780824252}, + }, + { + {18302357690866390301, 7110969485339785348, 13942032347351245328, 5693499076189202693, 12668677863581132895, 12259773033298583409}, + {9466495933006422543, 11511978512020081294, 2926450004721272470, 13153116633565406229, 11631506386728977206, 16476012745611483528}, + }, + { + {3807014191641283110, 18120911889946646293, 6904037019088813739, 8534576748083079369, 7162583560481993923, 8819640486580967436}, + {440118242100524191, 6463206891372223528, 547302312933082159, 16377841440620731411, 13653804506016223223, 11521845620308131867}, + }, + { + {5885835281685587260, 14732488327182469839, 9123122330185964050, 7188708702276480952, 11527895050614825468, 16851231088680010599}, + {16816057606689618333, 11155368217836023835, 12624177727172231086, 16592926329340617105, 15223575869568336594, 7273522873166632571}, + }, + { + {5641683582398435967, 4216323241605386457, 3341345023369259125, 5445036994137252291, 5739257813022814747, 14500775521438222305}, + {11851051397499831538, 8952633600654017343, 16150283802430207733, 14278765209911766161, 10318996485999417200, 17994297809574684578}, + }, + }, + { + { + {12250833825141170631, 8405485792690252918, 12864232748520003516, 10788258468673581522, 11856270866800692413, 17612133403939424877}, + {6699634647130975491, 3731182997054981008, 3644858741145969783, 15278087383684100287, 12254545970866866689, 15919262562293099205}, + }, + { + {8514722413728667145, 18324970319650698111, 1140876005394585162, 14935735778864688897, 13574593964511010162, 5249313883818330346}, + {7116828599638239878, 15508924984182297327, 4202376624751087766, 17328701599850278205, 3030575546715635832, 10545614704608166749}, + }, + { + {1712884901460314968, 9844020979159339847, 6421369648072212416, 15296006715190099259, 14597799127028308590, 14859929927669149364}, + {6921131700509172807, 2364609551036929704, 6856710389833844455, 12969257838905572572, 15852094516432192950, 18132001333910704096}, + }, + { + {17180792802575253493, 12600911473819356885, 3979738952931545371, 897682737326728136, 3061890262390512969, 15521523824750041606}, + {332654518124076169, 10307766275571297144, 15915817537662916802, 8907165492937349795, 7857497823831313277, 691902339344201455}, + }, + { + {18398586274195528059, 15773719058798786758, 12837048689216171565, 11953182511721889201, 5401493090861388884, 18440361993747252486}, + {5508661908202617743, 12788348494283175173, 12802197537676893221, 13389178143916130308, 538230151218415613, 16302560609031790145}, + }, + { + {8617925644825956245, 4355127854548976134, 14887476132899231451, 18298212220260618556, 373812720990200546, 18003600147222108981}, + {9609711738554496849, 14532030487725870587, 7449281719849717093, 8469200687346562573, 10559473347725150336, 12054655914827657608}, + }, + { + {3996011418975128202, 6210410771156724227, 16016243241151657273, 17559838693774705198, 18254204752477848622, 5017013903626038628}, + {11728280652213039591, 18003698909909675482, 5616545407832730442, 3102086566055618083, 5927895418024958106, 18268521772846570919}, + }, + { + {4353949603957647042, 9085101501655849465, 12908896052138981424, 17855767860621714692, 9492202381046329533, 6493982940855119418}, + {920636089493927515, 7492445422033208514, 15300073048779302285, 14892838342609729650, 7806275110911940261, 18060719008911082625}, + }, + { + {11178478997628375018, 2538869944843427535, 1225616675740174641, 262785678366031569, 7237556322327894647, 9013462934359109785}, + {13984952488792193847, 11393155007624702919, 7707447211005168284, 9473882403030139097, 3744543934645693007, 552942797664059813}, + }, + { + {8830021259611276202, 14238468777507748310, 8084636387556533453, 16267493202640556542, 11525587568835060457, 10481188297824139279}, + {1115271124367336174, 311879893672637356, 9462111876944106068, 13040825816840411547, 2701770737309674052, 1508687001335391359}, + }, + { + {18280457447310560954, 1268638543685594562, 17105501920321557826, 8343192844895939858, 10103219901911409344, 5772380144868336032}, + {3999072919154635477, 16332682335690661625, 17160109792742439915, 5532275933255506759, 11912464980270406151, 15340700818574378247}, + }, + { + {7968741417565336095, 4204348514802527406, 10647577904042939816, 18088419244287416759, 17463728543868140844, 8457835342186140450}, + {8996396783317142351, 11593744928362394165, 1118739296758409498, 14422226999371433227, 12625902505025381474, 3115381790871861597}, + }, + { + {13500267717482823695, 12826999588757664414, 9339382239162750836, 8128243301916864690, 12056736855957358028, 8196723657625083381}, + {13279394920737824036, 2958586812346659937, 17330699213847682717, 16087607133092967162, 16401864758434998681, 10039877192861155006}, + }, + { + {671802191804153328, 4139782484917432247, 2458696726707986631, 13509154007102964993, 17371423440074958223, 1797826281916833787}, + {11733261849393823747, 4590492414496687225, 11885892654308987107, 10686151607542826668, 1505341691600550175, 14056863349008723570}, + }, + { + {15792482088894033762, 5480086515083249209, 11855064859109876087, 17787767953015637343, 12667533478417710162, 7387754975679279919}, + {1207308571340156947, 16667444176920164891, 15975281376773688805, 12572215559198527609, 14287924549904848354, 15022984237456793014}, + }, + }, + { + { + {44405927858177408, 5350377411887964085, 14455423006632940030, 5051888284479827915, 18289264027550181045, 8742179469806049698}, + {1965293239814067675, 6296618101654059964, 3622639221300896262, 13683273513375487727, 4967193303260329462, 11081296004911608832}, + }, + { + {9099612492305855642, 13667366445618114651, 2368345502115408891, 355808025346965495, 6486699240755468623, 17662463045646732595}, + {13873320631421175736, 5934257143872775779, 5746672378903457427, 3704713689249420299, 12753304704606405263, 3217678872185309915}, + }, + { + {16414774628626628182, 32433971592372646, 4545225813507032103, 6836784835149171090, 5605550610705879937, 5548109210523028334}, + {15540467984433628639, 2461569588551261176, 7976753374299459545, 7581883501804398076, 4495381352011398463, 14281052217405746417}, + }, + { + {11076024185715957092, 3756765523882542942, 16665914572503891748, 14424567262466352621, 3717953767462280879, 16707839638391689758}, + {16892433804273414193, 8340332951294898930, 16313859462232353177, 13057798224010923708, 2523399837778976306, 12671960932364471005}, + }, + { + {17680998608405488653, 16454370296773597713, 13745267107063112083, 17812400946273208067, 6537239167722644731, 18154061302206627196}, + {14732093356815809073, 5178617476103754703, 13809803262147327548, 8824415336739118563, 17720661792494399232, 332116945344768606}, + }, + { + {5904671783816032987, 12111663325909606562, 6880618626717651658, 15875709066691863243, 11314665215817792920, 17321877266325783037}, + {15530273438553475601, 13979895649836346625, 9161871406971555955, 8903894066085514940, 6153387203496648040, 12571794686069326995}, + }, + { + {13016093613163620702, 11300489640845417680, 12781125362901831503, 801538149314788550, 2606593691508046519, 3163799746260716745}, + {7990809893160984636, 14408985047470077797, 347123455262478363, 13992131173035179306, 11786974102048305024, 11698441235974567349}, + }, + { + {11403599927368253583, 3279567955763272667, 7486403755075843180, 14522524358510212243, 14041846160447403772, 6435799871106467417}, + {14030691594486470451, 7790983720309604281, 6582028046670807563, 2822694964154013291, 16463582068215434850, 15072905663834443911}, + }, + { + {3407741673335114913, 11737534300849159723, 6401636175760439089, 12664954507386771017, 9946081910621171804, 5351127802521315559}, + {3173915260803124860, 10290055371665382209, 1714775078878069738, 10809651193197592847, 7937909731024783757, 10117809777580180877}, + }, + { + {16234864712073389023, 5314806349780370870, 4543488410858487687, 16873514203217580096, 10926710397504298767, 9299654171185615615}, + {15666939264737647752, 631855467695092014, 12193734327123054559, 17500404761181864020, 5421672177931299996, 3181351099583887620}, + }, + { + {9865914660144246756, 679604583562241462, 12921501903321601694, 13643679714879784509, 9802439286503205145, 3566349991748818559}, + {3712245593303086298, 13460846416004687749, 9489981526591301543, 3123337991328400667, 4486301121585605289, 8667920552833478113}, + }, + { + {11007825084924597849, 3874134660444866478, 7483283914474628520, 2947665680662261000, 18206338370303112208, 6893224180612988447}, + {15534747185067764117, 14985089178434671491, 3753309356845273643, 15570826499824234809, 4279214973488175555, 9593222558729075908}, + }, + { + {8602395341968076463, 15871701026135700965, 3712441164876432259, 7899892413623964244, 2712639600130105811, 12974295924845123944}, + {12399828322355686123, 18332014219357823799, 16863123510502888446, 771187562270410330, 8994686144476825705, 8686520534353888933}, + }, + { + {5941138557129179410, 16597018407758618077, 11490599640002981607, 3438708541253264112, 2003804289091704123, 16058751440908460062}, + {12804590885840718391, 1477090995170106511, 6149788628468626331, 1665866219994921367, 674399758826895796, 3022438717214642932}, + }, + { + {12649661972779445664, 4013263712261539431, 14554669017811351896, 13226091073296320692, 15697669929212159615, 10884886018241841834}, + {7538090638724339870, 17307058199744561660, 10160210242875571595, 18329720837322489027, 6424491245976098107, 11439659459774047524}, + }, + }, + { + { + {7518960189446694562, 6993197482502760102, 3624948335487031629, 3298603013801970257, 4557303586291885385, 513965581431450258}, + {15631936952275006776, 17646865581595831452, 356541621832294767, 13550122502020347389, 14318884666702203958, 10960356269253451077}, + }, + { + {18088774058581706331, 13144474494348168686, 7944684987556043669, 14803417489453188919, 9523674128757303753, 11078534252464233827}, + {12388996124243602932, 7847055437820113788, 8655700446678160057, 8000087902999810104, 6845432560166828222, 12293660227730163310}, + }, + { + {4121836826461176490, 6993311364897236225, 5980001915532870045, 9191387104629167574, 610736785956912723, 16369608744481332444}, + {8192853368245745564, 7830351299822135372, 7708271704384679284, 8692236521179851966, 4729288028381163761, 15087261038869840952}, + }, + { + {12359675760240320823, 5017343929380605284, 13074869016670236859, 15189571864632066092, 16437432446366423946, 10450373967097078613}, + {6473521102572105839, 10479204864703445101, 9531740430353536824, 16747435491821370083, 13590492053866597783, 13972781732492559558}, + }, + { + {13526124267573528663, 8270416783887521310, 12350520572663083733, 8457342880502864923, 9576612715781561966, 15585819794980473675}, + {12920791615644428441, 14682599939111671380, 4336061001815369200, 12825352708863745934, 13689910154205327554, 1285753843825672638}, + }, + { + {16260954862601212942, 15141701739798325327, 3469367818986501585, 12433553164601433194, 13397654412997304037, 9513462516209648688}, + {8806424456394813714, 3283666376713533561, 12560245143465260449, 17855428090864138328, 9493604162795122493, 12112034994090758518}, + }, + { + {7529184601583900565, 11129864964563043004, 7211397676801058227, 1363637554105090981, 17895272493932277282, 3646615785541938193}, + {5125329656455924528, 4567149614941497190, 11074336456476606030, 15476194487447194466, 7180704409380789299, 13835694922459390849}, + }, + { + {6367771991991911192, 8601334531593085019, 4312076039860441887, 3349991553201651706, 9823362064268535912, 13889910441974079325}, + {15204812249791097149, 6041265790239125946, 12691543265160543238, 10306665514263435988, 14767325902815340861, 10379404251573981879}, + }, + { + {5287451048506707013, 4348959316051807494, 2195731310084877410, 10147908105969953285, 6603704322303743751, 945595692043651424}, + {8176294556983740459, 3760024494015990869, 1596032494450454490, 9532812003368449590, 11266525576652515928, 17675618372058806611}, + }, + { + {13713835993913486801, 7766578236545921171, 14534805690298336184, 5666909695385346186, 8839507885361423259, 4694981751780603071}, + {17723407317459630378, 4443283331360111884, 15519272406098385785, 17520713768065915126, 5696872215251363099, 17703348601524604831}, + }, + { + {2164215638320833038, 17121084597475879972, 953559170830523874, 9824463983667276307, 14122056531227172478, 17378911366973403187}, + {11224042629539202120, 9891688504526640813, 17195883541507550243, 6329564008856258694, 10930601382660244797, 7336662048169067742}, + }, + { + {995921546101717569, 5828224904318233156, 8250787968679150139, 18216596344319934990, 11999487189021985197, 12415115477515701118}, + {15186145702255030700, 2113607545324837959, 15288422804320951323, 6325938775505173826, 10420910094419414217, 1927106976056222556}, + }, + { + {168373835175327962, 5954547085671796454, 17463611069868415386, 225394552152764446, 2307768634143069290, 8042600063379354713}, + {8117902579268801666, 10832127345976105061, 13664993000566573485, 16355061628853536029, 11258951867911128064, 13533986249738933070}, + }, + { + {2256466623088827889, 11490136642947524148, 10955178908605173832, 370819964681409304, 10493984649757869556, 5132627896758472655}, + {6336091067505438921, 10780074837814789259, 16645850939014586085, 8079913953781307235, 4062116077218792165, 9366190569985953070}, + }, + { + {7040462669310098393, 5297122089825027264, 17836763057295674752, 8661859425168585511, 4207236964581867607, 16977003945502762190}, + {13639729604193903699, 3075230971516641826, 12603679116623626959, 17929390171247529438, 4340045624055496198, 12958507460470817783}, + }, + }, + { + { + {13603267959306598193, 8693043305222262466, 8385036129731204785, 17301749092100773230, 17293119319290412054, 7997938435970033452}, + {17626685223448488356, 12525034788314564340, 14661668164222586257, 3322104272345643135, 1609592810955141849, 2549513802617457284}, + }, + { + {8798435167269930640, 13070514712052083568, 4736461614042760363, 14206975230185412328, 133298083050190689, 3881702371340834770}, + {9708307132029784886, 1190148038752103456, 6413103290824094803, 13481632314215227255, 13825269422873963023, 10412305108920689107}, + }, + { + {15788775674106557193, 2647031410423879993, 11824234196304518021, 16508012954631132049, 2851858215553102032, 9031676847819265350}, + {17056269066330629533, 16578781453141932588, 12149327146251727097, 5603735625820741662, 6198349307184960758, 15317416179414320750}, + }, + { + {12101899190913284916, 9608769495503265584, 15201140684891239564, 6542484635045229965, 2916993459978592676, 4802334108209352673}, + {1973336680768349386, 12679196129410828967, 13463385388413200455, 9654153036115837558, 16342609945030294957, 13480152702062555703}, + }, + { + {2899711161363462805, 13301605990446182752, 13405176039316030122, 12694240906495353636, 6028874869507943666, 17436011221762298446}, + {3799912876591532513, 3287947124836704136, 5920239729516121972, 4658851572162401105, 16206677545960268727, 11754748256988512736}, + }, + { + {14829746466477852272, 8785495584277675921, 6423194551544767939, 692454830006456519, 231353646984097766, 10478691929706490052}, + {13187510740839857109, 6329453754316993892, 16082691749983710504, 9140500440454110398, 1359919744529707405, 5867635887532143880}, + }, + { + {8283409025155305021, 8326153006408425638, 8192125950875031557, 12491925510388767602, 15318184472466947145, 17174845401039236071}, + {4024628118229282985, 15541859898701908579, 14997151867577432677, 2742910007129941237, 11281936698759777841, 4053513648766184443}, + }, + { + {17504540629335028708, 10934158903032446529, 10440102841886099171, 14945242719790343095, 9216441307898357664, 9638980805394197765}, + {17980359344968817157, 7448102317851383292, 6074361339806645900, 13629660188149307441, 13004652602731784581, 11547813582289855464}, + }, + { + {5835495230485007597, 14350772393378726062, 8747233229858209651, 3317935002292804215, 1073070181947964939, 7460355407911594663}, + {13395345232316724375, 10346078775799124075, 13798478435639795560, 1629058324627559163, 14747763100431935680, 15299073526901740916}, + }, + { + {15651423385292143727, 4846110050285526280, 8366261324209130800, 18348748562705004572, 1191482937147378439, 14318163684990419654}, + {5828426112534678889, 15752453922521080195, 788797916869961805, 1050155050965406592, 16245505178409635417, 4624404334332384586}, + }, + { + {9519649412281579636, 15518026566172043316, 8230071711608174064, 15501328228846578396, 15538051064956598926, 8638696845481203911}, + {6545591773917305375, 5939294308617001483, 5916517198820221821, 2183353220433638210, 6608710467805325002, 6375674496051123629}, + }, + { + {14599741493080584733, 265043095998502009, 15590157843765788733, 16283462652920133690, 127450980034769700, 8101994233918053876}, + {4354404904705327864, 10527772165440476297, 3472213175562207788, 14083669454947716927, 13275423539077686885, 5338095862941712423}, + }, + { + {1235012355674231855, 2090134554838509585, 11863415298782072711, 18023496095060787824, 8410498900143253177, 10594109983238360693}, + {17550081202781797913, 2173651076708559007, 1186671825722566228, 15233030551314777921, 9888771203060958359, 15468843840302879988}, + }, + { + {11461190636282409817, 14308116091595492374, 15509337886967718014, 3305520874657987597, 7626903910031076977, 3082923764612175270}, + {14811303431165168732, 8838542203092895295, 16984937260064502824, 11714999386942378861, 4897363879848520603, 1001099817032265897}, + }, + { + {3637674483014131572, 3117885916559390287, 13017322864107767485, 11567467141438885182, 4996993546175421383, 1767669170792783157}, + {6426400534208188423, 18081501770343787332, 6628088911946069490, 15549150917856099952, 14206743374618728130, 14181348296669151521}, + }, + }, + { + { + {7989198143366045630, 7010829800355578048, 8546053455940578601, 6881887443026808498, 15042102422681491309, 5420645403520488369}, + {10849333199099746435, 12113569487191320877, 3246658105605143184, 6336537385102402345, 4597429228667676601, 5272271520244435977}, + }, + { + {14306638724632781511, 5757106316922152519, 17125373792178988648, 1583100757864258958, 17360083944987639843, 3920600288799646538}, + {3331960036348075865, 16584227479356001542, 17306396376373940447, 14759099067984370905, 5812518892646247762, 15782678322655568927}, + }, + { + {5413193268301814099, 10713883248352187164, 13410675108716405078, 3585734128190446197, 2777085511140743921, 1755162931158100151}, + {14101275991297185856, 1707557804525078570, 1967729659696736336, 4823950423327664451, 862801022254850239, 12435639820717247064}, + }, + { + {306679465712635984, 12152848986799385191, 6883719236152567513, 12305822533289967588, 18402162608409722972, 11108631399674712772}, + {2571321336657345725, 5282906424085283199, 14072199601206037589, 6326969628422378510, 7257345697465293614, 15327414546710657910}, + }, + { + {12201144960808694291, 2266284960898988252, 8424553153700131642, 9167059607375209949, 7355136040026239658, 2541478780035614622}, + {16506463005253913043, 6582690723164939915, 6599951765449856592, 2404559737777750863, 8780347760287852096, 17846128204113467575}, + }, + { + {14860969561074928871, 4809849983665237968, 12242711789150271258, 13843481869678455226, 14175051524655250463, 14334810640036579932}, + {11575444057028938068, 1682341910648266103, 10938858063273491391, 4341242396287801217, 7613196676950010801, 2500752005513253600}, + }, + { + {12440061027889587972, 13927371198268500445, 16154935051556123915, 18096961537601388555, 8424464497516729675, 2313786208528450307}, + {6509771027110309267, 3390162382665127855, 14587068644788920599, 1328169351793106371, 10509868205576387317, 2765759870517196435}, + }, + { + {2900406544253496059, 7303698760912649984, 8691265875763036027, 9197553224083694706, 18352617242438717063, 14750961326114925844}, + {2499601025675361076, 8368427257901887897, 18132146080106643208, 1110936544903604055, 16261680704811161606, 15090938849013897133}, + }, + { + {5870727586880606917, 3817524309119245910, 10695436097727319065, 16784573325267031769, 168386867463964139, 18415971011491165889}, + {13492479568749674699, 15834291406704295009, 15705574100744201096, 2398014061321015822, 12468258805517123137, 13991053711847966585}, + }, + { + {4169557306961711707, 4015219248181969243, 12214392270444620774, 16050078587473704262, 2784750252993704422, 17395896913298686268}, + {12843958296305025565, 369831555843170916, 11677678398942896027, 6641755134933316997, 9109097098896451407, 4781721487698386903}, + }, + { + {1392099397992149225, 6653317869794434155, 8261302057061700743, 17076785984088590530, 12214500026419464516, 8183114113550743923}, + {7219173278975390146, 13854678885102808519, 52819572796104662, 14959508682837821268, 4666245422256363222, 526398188884660107}, + }, + { + {146377064121748072, 11117625842528721265, 16508297934345517505, 13963807611317318780, 15513104757270430459, 9486443679271300608}, + {8499000076286979115, 6314693643347125094, 15660966474005923460, 4849442041573028425, 4417660487771261375, 13534789771025100765}, + }, + { + {14165452728554216170, 13694105377023575661, 12112553140758207627, 13499340770701043478, 10416006904191195926, 3543462727896098709}, + {4066244216336615064, 6569278217794074558, 387967286518318157, 270108989062251217, 16349063922035707389, 12438514695154831396}, + }, + { + {587040577811041823, 6936770533105343364, 16776134995012734224, 10277362302644779257, 14649614714574251627, 15051066325824432588}, + {8291129711414316681, 9551002213274431576, 6676196382269508743, 6874374105452669031, 14751197759974741889, 9029571467065764667}, + }, + { + {14428258617344372219, 9908056332586719435, 3405976719581642508, 11387547871499772614, 2994350212903836640, 16490884790412572450}, + {11355150127282843741, 753093375853717498, 3493937923504423687, 8754398622695613018, 10230143170990690589, 8594587862090207256}, + }, + }, + { + { + {12025065147930696764, 16395321909258498666, 17254275975074883492, 8698446818264119462, 13921708813901601023, 11317527677055938762}, + {8372735897264020153, 3995509821790542114, 17844440857746011127, 7150508535332996970, 7856356095447891107, 18425881274930431587}, + }, + { + {3868179882159761840, 2264438469296879600, 14040732472308090308, 6176899669975159097, 7687708097392128226, 15700212396478219258}, + {14432188665158358139, 14093430104632320380, 6658435239629637912, 16817255952598430533, 4042186219830704930, 5581603010754890001}, + }, + { + {4194420838030196541, 1333911740513429952, 18216514596089176140, 5522562721578975413, 14019454638832409935, 16180950399634304052}, + {7874407470843020638, 16700170713448853543, 13238545221113708433, 17341343942946679971, 2492905945545894244, 6150964092835885281}, + }, + { + {9160207688035903546, 10421934692844981887, 12973343349121023222, 4588457373452478724, 8930230292368920615, 8764471311578947963}, + {2287273259416958217, 7105649602824330442, 18442962768087545765, 6705276737238885061, 577380682084602753, 596787676998246106}, + }, + { + {663478452777260243, 16283602145029174982, 11124685403360893629, 4781563535459832423, 9323851769832103844, 18097969442952761286}, + {7837190984970827968, 6643489635464035580, 17874774866954327612, 16430201046158097201, 12045640219457858446, 6223326808284158866}, + }, + { + {1657492744835373106, 14305521459309102400, 3869067393311496051, 10037235265268002078, 795960391565742762, 15570341341842321230}, + {1416215615272420305, 3844160609182024535, 5420451137511849586, 1949162974936638642, 8451435764323596076, 8788000062158561339}, + }, + { + {13928009376574601896, 7291171400028186761, 16473025605005992076, 16638477947212814985, 12047811767976047467, 6878298473296735831}, + {14902080744924353595, 11030229314796494659, 12098457778174714596, 9424760405850702049, 1497914805837158259, 3249894799792534256}, + }, + { + {3590247938838498240, 8806692635119047359, 1698761057036684647, 6343574101558802001, 3746591523512207350, 16046850941587493893}, + {9375703075091035250, 11484732524515574701, 10605373578002057385, 1718556460448813872, 228246291976542303, 10311368155034743860}, + }, + { + {13497031464860502366, 9397761439599875485, 1318541732049664766, 15374121346380046672, 17717429548790284664, 5159388673283835821}, + {13355298244502234884, 9645381144552778188, 15577838213165745473, 17224721347234155862, 440552977874015809, 3485586753351733297}, + }, + { + {3516261141390918044, 4335927420212454420, 9153235025059865419, 17728981115683781993, 5407851417900531604, 15034043952911725703}, + {8360898999522732095, 14154807375320553311, 12720119837506596047, 17979696399481662488, 1503715168515766653, 5169207090054716326}, + }, + { + {12162980084934091895, 4233957881103578519, 17170356997174783866, 4243094926092018555, 16613894431916307329, 6606193115702532471}, + {11789634164556738593, 996991792386448418, 6962245779712200787, 4974442952401074444, 10897550856395547118, 10995646432875528213}, + }, + { + {17102632525353385033, 4726908628368929907, 4247885372815903947, 1788394963141125417, 15102348628480678182, 15128367306207476457}, + {3972599649912410141, 3921603030106002483, 161288956218192081, 7338348096295758314, 7143236202635983396, 8624888890090620099}, + }, + { + {6331943491044463866, 14228029352154794719, 2947037856011623469, 11772679753184455432, 7465692292318631028, 14289953244793202905}, + {5134250825128073664, 17656488618598423937, 16854119307556681012, 2421796355445999202, 15424387029136720472, 7987182987578392406}, + }, + { + {2608951835161989111, 14588356830133736122, 787581713316032185, 9896238476586952494, 4431066364605451791, 2903280281635265356}, + {8247495622914418748, 11683109383984515972, 11561088616384052872, 1149723125258168883, 14529556212737756877, 8912094569277399627}, + }, + { + {12789135954360228010, 6780075827365568571, 8810224435698828502, 13446476233477343302, 7214376817335187762, 14458570598448093615}, + {15615130062596991276, 17246585199766548683, 6890348740309790991, 2462037107533762815, 14348419451565630896, 5342642686877329738}, + }, + }, + { + { + {2905464083126352106, 15382523776645615659, 4208326436876253066, 18269526693635159971, 5790854390728730522, 10746880826459375258}, + {8662248081050622522, 13826611872785505390, 16436929138283976510, 6326154269244482967, 2880171501306902421, 6678386436918333169}, + }, + { + {4081558640315641247, 1910870639571469881, 6877171221443835842, 14157529767685404063, 7740037116920621887, 14764919955763458331}, + {10267569861886921827, 2529844482184019983, 3259055836051436011, 12721359948163822535, 9659485045930382444, 2682511237837334805}, + }, + { + {6257278162168451228, 14804471928370352903, 17266243102614466221, 1834384770768531640, 1291836003048662370, 6034253395610136614}, + {8743066898222911631, 10312528166509794599, 15491664890314077124, 9459311605542100872, 18188244670802339459, 11837284714306023066}, + }, + { + {7384073074546884058, 13342536901934035362, 1796642291707654196, 14924003300567702780, 17696513874113839739, 2170126944979395945}, + {15655425421070558346, 9046927642313144782, 2539141704545898189, 2313651783662755544, 10988582385563170062, 10708895281446879013}, + }, + { + {8049823402121284107, 1015261354744953141, 11001601026371351857, 5188408555842360927, 238307893716713840, 9306355674483778871}, + {4882696385991861541, 10855316230146219920, 7297309210275934874, 2129929538911047623, 6105877736586220144, 16540174430975243109}, + }, + { + {3846553462991609521, 18287444857448547300, 4860654016674888150, 12102465094571524845, 9665319422122056880, 7341976002114379270}, + {11450690261526312033, 14359620265055539834, 2129613678351742251, 4154310935547659871, 17819794191738178105, 12470777076380361738}, + }, + { + {1820231603330482333, 8197912473886688932, 17564410961062418802, 5547060850511847496, 14784446920715373986, 6744079834192692285}, + {8045763461421446101, 10946745933502697155, 3334195578263537309, 4155813158460651681, 16304254047867190720, 9129755894729457353}, + }, + { + {5858270368901180686, 5650671310031369526, 17358036986724164367, 12272486751450316321, 8118942123504245440, 7605341247988122771}, + {6460053483168551327, 13974980628946427300, 15265461046774765196, 1434115779622874584, 18256968071394468929, 162814016140883808}, + }, + { + {2332162608871511375, 1868148336815015635, 10688622518437469162, 4535570520634779462, 5558414024910369005, 12846608910105978921}, + {10182583164281883737, 10225962215828780864, 6647302228613027609, 13926246345815428275, 16444874778110264906, 12426728125906820495}, + }, + { + {7319356743643981758, 17290801891240533282, 13680538635395325509, 9431898857998460284, 9654052594732493588, 11216128628361019165}, + {5480652586120031716, 12264251589473554648, 629460023613249876, 13888625092415164277, 5982727213326537179, 4575309381338208673}, + }, + { + {9318690217895942273, 3885888063527830607, 9646742812304452818, 18262479706556902502, 3620133047155459299, 18388160719790129736}, + {1914761448944519470, 9758008627466255788, 18418420068679038400, 12896122466120836747, 10890035278343231294, 3646620616965601722}, + }, + { + {7320055252736060853, 1303381685630079106, 1389396534790493913, 2784451395900022634, 12504771187503822515, 4227927385881340861}, + {12071605771892533802, 2754948426319968897, 11085204177816817620, 182697453064193454, 9227505917134720328, 10621984715679088732}, + }, + { + {6220826937720121878, 13229947210201087101, 16420906931171635230, 4228069687275537145, 10649909068460962812, 14974797380841429985}, + {2099387861104913886, 17576472277696906704, 11384913496578412357, 6794363617398915145, 4335808821084623592, 9733284623560895058}, + }, + { + {1755145516295475548, 15247893042361836531, 5738179788894433569, 11279068420917658317, 4290389521159722087, 14365410757465934654}, + {7291605289247002500, 11812770986542211322, 48289046067440439, 1233419001099601995, 13182799439408327769, 3066909062077171440}, + }, + { + {9251396949650789431, 10964669964980210420, 18441875565843264347, 10766527953487419221, 2053504370587058697, 1120548999764652480}, + {13156388621520434359, 9488348829267331096, 471226560476910099, 16729073468825516463, 6843824047113762587, 932518740561235009}, + }, + }, + { + { + {8005022716490156292, 172470276668278570, 12027061491585017361, 12668206184074529368, 2383566891938055597, 15146733507906754355}, + {7778895097740687136, 14251829674046124789, 12738613561581015447, 12051618485845136097, 9897878846738638320, 7907234926402663579}, + }, + { + {10065252555514097915, 6386861198439688962, 2775722427207394938, 17952746237366567827, 16390357373389037601, 13972513434252720715}, + {14700210881752165375, 15185652113659869954, 1923970725644198719, 12211789976130827254, 2585886428464543151, 5288489885799434816}, + }, + { + {10567691911424697649, 16971243382477786521, 10251841113143443125, 1687737920922643646, 3746145726913279586, 4786791138611857452}, + {8476041976560261273, 15570593593290952605, 17648077308436960175, 5839063770228102907, 9706501119134890748, 6475897123160711932}, + }, + { + {16272681470773409672, 18157143820860266346, 6874350001337166182, 13501252460259511743, 17259688624947069488, 17317925810681384843}, + {17458673210103455399, 8293651101654188440, 4287591827563518608, 17477963865483680843, 927677871568183454, 4257762449075391782}, + }, + { + {8076033399227106890, 16533143032280607906, 13521927650080284497, 11510742235496409044, 773074617642472847, 5480268378661415914}, + {10560774877949781007, 1551950937282276704, 699681785268341449, 139399977164437031, 6186795762861491620, 10490971431428917955}, + }, + { + {9190090661907342314, 10353817139393866538, 13722719350565763089, 8086989101739556304, 11831125735426804282, 6527360398769008658}, + {15661687200097987699, 17883372000534567314, 18228449294037686953, 16276062303086046777, 11067473153184484205, 5270793026007762758}, + }, + { + {4644322026860926003, 13840860549436432899, 773219189435319969, 4214545261061108721, 7349178605060789384, 14108663996709041985}, + {15086368808776131018, 5873313287260733157, 10958955294835479142, 1029190239709350397, 16575148148212140239, 548824197340738121}, + }, + { + {10538023507650655080, 6405097420742099168, 3772328850901597675, 13431850381701237922, 17301482879787833065, 10960182504575418989}, + {3458141607490423836, 15983729892825441020, 6674827306666597406, 6998631059837206710, 10452310379665360233, 12442577005422810090}, + }, + { + {6357449289782518654, 5562676255948928403, 4267773668505879348, 17042466998439942315, 15445173922414204273, 5045693191253100284}, + {10888452729312376066, 7286005702779769520, 6310396517254538489, 17973884204765258948, 8552375160420880806, 9676186921102873385}, + }, + { + {5132936755125381856, 13632397944410194731, 1195217251618711717, 14192521157173466766, 7136777102122506464, 4992685048206006386}, + {12758444670751645174, 14211008273195363585, 15176937626622599827, 17548458272828201751, 5057260891126473883, 9952036262648196850}, + }, + { + {16078498188091009803, 1162033447512069931, 10059309132406299500, 8829937177340388978, 14448159399458657941, 374069359661101813}, + {13367213118297441109, 5274140197674632268, 16907854435294080281, 10813040207319437761, 17981016036466195869, 7390729432234187734}, + }, + { + {927041625307275433, 8960709029455529859, 10831922670190955819, 18290821865497267571, 15356340336167722251, 1277117312667074566}, + {11345332917031878869, 14333153309564749909, 4757616462511080414, 15371264136186622670, 16048790410218032652, 6253972033361590906}, + }, + { + {13515732918257273776, 13723630809424897822, 1256040724895856748, 741241381320040022, 4179658714379202158, 7700440732059923700}, + {12620782566472061643, 8647092247759141584, 14556418162370042196, 10398569400923172183, 2942763850561441253, 13510474539740910285}, + }, + { + {9284152513908444951, 13364815009916075834, 4919960874500389956, 11846737451875562809, 6206281447342218811, 16898214858205632546}, + {4777300224767696450, 16738332457351222374, 2425414676554916356, 10738169294712527458, 8592315599382595498, 779347662452931693}, + }, + { + {12657704884116037495, 16629278614392996531, 16644595643705514648, 13083603858484073418, 5531378660228117371, 1072715305930583874}, + {16281698922290258814, 17101495949789370442, 697325071236988515, 6834733894203542328, 16874883980138472052, 13765652846823513818}, + }, + }, + { + { + {1443983809817335050, 5159436179287288748, 8718823893455992642, 13859422481759839054, 16821370532543822004, 11312232963165366867}, + {16799784256686916142, 11063086467296440173, 5409640362054745615, 1744861157419261406, 9159074957446964246, 14640106507936810200}, + }, + { + {2855230597739850155, 13620723665924576268, 15633539828476547165, 12790587404740345825, 14929382470136573230, 11024875668098768390}, + {9757666174600838731, 2232369412498935956, 5843374372613155338, 15919240107279516647, 16925041227711211671, 10150031711225457751}, + }, + { + {167838721727610261, 7541800216831159956, 18111323457358615697, 1375214001809563574, 12793193868391341616, 18288999141676090200}, + {13741005234449322878, 11213622750935649716, 1522802528596667168, 15269019072730025083, 10719991413129377137, 15521380803604598551}, + }, + { + {718529776434363422, 12683359777452057212, 2804554777590895595, 13664120639095226495, 13598640112814221798, 15241444675921322490}, + {8810840946828957504, 7811396362330849266, 9645885245397761208, 679907887946404609, 13039332546165252336, 8209508558765517234}, + }, + { + {4626158970998280523, 17779366207669178780, 14066716967377837836, 5541345249351270224, 71760835438433145, 1781108686838293059}, + {11015261109851457791, 16129646178084531488, 10669691012640045245, 18184224459278962224, 668895765928111620, 18347537117071351865}, + }, + { + {5383950189451203046, 10844133140951324068, 2374979840933487414, 18242105404652163653, 2153887761192573295, 3314974606006034191}, + {13575532204571281217, 2247071187256305144, 448195274692108969, 2053979169079271594, 13812860435287696334, 1732389448089431296}, + }, + { + {4284546519240384782, 18250416328676695864, 6075393821764526355, 6803234443690359332, 2308015705795216965, 14282768041402275649}, + {14692234199015945763, 10982825331872323691, 16257836708673068915, 9290937795903983017, 13215156669957704998, 13581066011281717289}, + }, + { + {726662160657361021, 12794593883926219472, 7861799432245846591, 14620923059626590643, 13564033114045541206, 12056825063290520144}, + {9319654440973526666, 13306574040007137554, 12383704628262510604, 16837061611201648320, 5148924680488916382, 757589831530246899}, + }, + { + {11260142852359901856, 2910994799586619654, 8190175402543023708, 10282746214391918351, 6197128196041568622, 12103744805432714925}, + {2754925794608765953, 7213719752583096226, 12149382823057292581, 6622803011412572659, 1043029140538289242, 2160363121257772533}, + }, + { + {3959688648190130918, 8473581564018232725, 8102575542433283254, 17478136759519300612, 10782499745742339984, 15960018897339834420}, + {16254514834142148732, 7808901449511931787, 18330166307905077063, 10432644456391460073, 12246398526421152951, 16631198455707802675}, + }, + { + {3447922898029507114, 16051230154621670189, 16072905312851388355, 15031563884401549512, 14706198388315798396, 7847298879472932181}, + {14334929624882962482, 4207755459965567091, 2727607546440637589, 11028268195413273994, 65681139350480862, 10388523824998445409}, + }, + { + {13621028160954218188, 9189281248079816548, 6559689192872320191, 12511220059980672697, 15021931978161570527, 14942251476194345708}, + {8032030039336040011, 15968186657808771957, 9377328317206799246, 11373269023340235305, 14864609151221526904, 12259184676083236409}, + }, + { + {4993001240436128010, 14622033823485440043, 1269131542761241152, 3340746980531933825, 7474601841448992000, 6720228020507007935}, + {7637406401737657019, 7627450969186809480, 16514017994864839608, 4814188734303098279, 2484761716517021839, 8799093000399717716}, + }, + { + {12269127574265060145, 9724465093155898416, 15873065313448764429, 8761869776521026054, 13485847957822391857, 2439524426319009706}, + {2196722629873916930, 16606975023104026874, 14395842146577003711, 8980633514374222856, 14337391476390507239, 3245539094489483683}, + }, + { + {4586284023246783172, 2578135446952921534, 16829066520710412866, 703408518185354273, 1484970151848468921, 4187259876483048418}, + {16026918465565392877, 12845800470973132882, 3563015620264375279, 16242852718263860671, 13711297870624837478, 10327260052313469500}, + }, + }, + { + { + {11907264597133981686, 5345484317343243432, 3526298189589605651, 14941494503371346641, 4390348405627321537, 3075441678856402034}, + {9143920156043167932, 1663991502233570797, 11411151526779617123, 6295062208334296723, 11167953874910400669, 2847239470361941655}, + }, + { + {12048307220520866404, 10548739433510366959, 5828937682586289028, 8259138483713638196, 1664521593180101667, 15076565371876670808}, + {9031856040208856894, 7347877633160823775, 2684001693679752997, 1187394758632407893, 2023471202170921576, 11368770613720851227}, + }, + { + {17683555864724676435, 13968533138851757949, 1943437173787895091, 15827749049763045012, 6987423277000309812, 4926724831615296075}, + {17103731276906243966, 10968826448844601259, 16352070254497671124, 16551824619482611318, 10381849412124093967, 9436665416229949512}, + }, + { + {7048379827497088065, 7443977613807482377, 15322620479477551149, 5013135385875340566, 5747364795223736553, 7862606879963470164}, + {12609816404493593258, 88582923555110046, 9264042141620870961, 12622483743145618453, 36832241874005927, 11846454950663675962}, + }, + { + {10498869048482452833, 10139776276152664444, 15056732056726485889, 15099480040493702355, 5399073333783908255, 18182172735172720788}, + {13323470181256898728, 7293540973022589120, 1981283917056275351, 1683846209255518469, 10681059793003383268, 16940960671858675128}, + }, + { + {11079616827562091047, 6298929519625833683, 467167558554168186, 4358762903022032877, 3416306995690695388, 14393771751405339556}, + {8542268838893846242, 13985040364793095543, 15595485032978442778, 13710848327370489861, 12647895656520219232, 18141386123053510590}, + }, + { + {7421011150990207232, 11463423897464684083, 11777398400930295903, 12887147976139911049, 13452389883052007052, 4276539450334756600}, + {17003232901404646154, 5648172435840152002, 9060551298958599769, 9865768386391095478, 2380928329972073322, 16806909077051674163}, + }, + { + {6879794746887651427, 15191659499793488108, 15434300527081888859, 7856295689590209271, 6774603981548851786, 14620245528126721402}, + {17675423419823628072, 5010454868432987998, 9315026554545892356, 15171741100035630176, 13503881861133354654, 13836586572609238772}, + }, + { + {2081093758072482234, 2160302331720847475, 1771001500045437109, 524929417164114132, 948139338327583506, 13116239640907621525}, + {2067558540785058447, 16015346840737264408, 8998465241460291405, 3205597488226039915, 13132850068494171809, 12550638131827261524}, + }, + { + {11487678613186732166, 12226538283374456197, 386046383678908710, 261136384486182248, 6073820936063889754, 338089910147739013}, + {2204520790471760666, 13225443348522804886, 5533826822105659739, 8067241596100405272, 17056747808692642524, 7928554988750665570}, + }, + { + {6926667811451225445, 11361726998764751598, 11858255027279547942, 12874828932074051770, 13844212609147206062, 9229674123496154728}, + {2157148641194346791, 7533189974437599411, 3818533723919763688, 17102113454166535674, 11957918589822377676, 199286897588186765}, + }, + { + {18098297521262853561, 2549150080497419905, 1920476418432176737, 12406241507983538977, 9994324328270480744, 6865216726931218199}, + {10882517499218691272, 3878271624739672851, 2651991057058067418, 8041121093439073066, 2863398953389074916, 14090287437597767123}, + }, + { + {15691539065269187690, 15926915037487623140, 10414347487737173015, 4830265708288246683, 11328595530368816451, 4903535768556567628}, + {12008565653438033332, 1571218720864129835, 1840887482550755461, 6912046034772469524, 3644063824758321256, 2126322707583833546}, + }, + { + {12169143892540109486, 6002799381834121764, 9166177939527749537, 2717071050858554, 14132387690398409212, 9461668085670424152}, + {4615175463679096657, 2777593348175259115, 1086524210167200873, 3727975968832889444, 259602294277541227, 3220284105548094890}, + }, + { + {7567574313834290099, 8145437034220375349, 10888802157352801074, 15444274935766241808, 7033566652389697721, 15084515844524348642}, + {15010111241306351000, 14537704976709260010, 13901878997182787975, 11697236875339079364, 16516786017890903855, 1661580686211855443}, + }, + }, + { + { + {15463648276913935878, 4382144021532630330, 5071136388542935899, 898357497003506891, 6306262877201485580, 7503267895380498351}, + {12209894407081504812, 13537298049306094654, 684729356387257364, 7075405619352396484, 15714299178550944331, 15696888615882072580}, + }, + { + {7477407170849995021, 13555863987096416386, 8646006234528633039, 10219427423139282479, 16098841852404237961, 8497637134921782372}, + {5309688570092265610, 3976413109977205320, 14825158186275338256, 18330027746161861298, 8379597551709481692, 7776375825952465168}, + }, + { + {17368205043853313911, 11366480305058719483, 3986491568217663545, 17776307296855398379, 18166640678790561016, 12400054106979718042}, + {14701884885297130131, 11997630432923609339, 2316884967752005589, 899451448914269587, 12320093108807155483, 13224130717820204708}, + }, + { + {2301120181151250930, 7134427926629173419, 13652391877351066163, 14358476347223217001, 7720954555948039363, 16079187223864015439}, + {16130714394389204488, 15060521357793404892, 6157723303371622460, 388433905262539304, 6397942210441116350, 15870010555361278310}, + }, + { + {8386588512253237744, 12398600073071431889, 15704645810442703641, 13918516392916317159, 4048204874387041555, 14789502552726712590}, + {10953546364075891631, 307391290824075890, 4085950680975341402, 8528936851895154413, 16191803140891684852, 694681636582541066}, + }, + { + {4052072016637665509, 10815871552988988571, 8015406219413895615, 1996664536108251392, 15055672969658133547, 11345388978032390658}, + {3833741327008156172, 8078127745144700769, 18219007769895676040, 12373542083253387973, 10749960526614124693, 5297937097120834946}, + }, + { + {6473608164798697997, 1704324113009551078, 313510886399003784, 7482485442761088384, 3630467062499177474, 17889206319568130728}, + {17813422549220613506, 13365489546100356563, 3642293795923051505, 13366391632389811062, 9309608098424960759, 15583860066261322393}, + }, + { + {3920285757492003115, 969197763731201452, 16178147428848039825, 6611676964264587135, 4670040846705473526, 9965087165592606467}, + {9385067634888736531, 17301457722800757500, 6213258855206728473, 8445301014191943446, 8142518927165972910, 16360532488199989251}, + }, + { + {5265906353635046495, 4989115549924370545, 7716029377102384472, 581999053178428771, 1927216309428257662, 16726029285829946215}, + {13608385105784378405, 16390741907364333262, 2050639151388485496, 11880595111878011177, 11418095767233061977, 6193391483702304675}, + }, + { + {983944277502152387, 17618013366706679742, 13527856424316363938, 17809004578576556920, 16807595463159644124, 12659014490378234561}, + {16660215596018323668, 1845548200977670934, 14981347628825634975, 3292665052105349975, 1255560706381478700, 16841318968187590600}, + }, + { + {2665344548535488753, 10749679950323224770, 14480048826753464948, 8103744201764603054, 4292621633536097205, 17368247036505307539}, + {8629653144199349731, 15713695068648974367, 1391688109689860259, 17209900783908384199, 16396814162862442509, 5977962909365766241}, + }, + { + {1765723133486333001, 13553591410290383834, 17120307789275811780, 5867585200918539797, 10340378507202539704, 10417992971032525897}, + {5521483192544399925, 13339071700237022049, 619482636797119427, 3159013689121603910, 5024096637477394285, 398928734167456668}, + }, + { + {13703486582158429978, 4835870969542931590, 13849753374989811859, 1366566739320000236, 17404228716488772409, 5130516311326930222}, + {6137130478942191139, 17716584582497907230, 16134870936885120581, 12112071202840308227, 7545387975022640244, 13816774847829473152}, + }, + { + {971030984593369643, 3220347373596070794, 13959149202405537534, 15516864884375555266, 12029622495808712626, 6647055389116471320}, + {11132585267709726879, 9838206173776721087, 1787590871969783091, 4539972049341594577, 6034675663835419496, 17293055497219064814}, + }, + { + {17570642940564731459, 8213552062444081653, 15593226808110603739, 3879030828893359677, 13433601001024396878, 4211122738890174635}, + {17934189169765241763, 10790041884906581465, 4207951857220635543, 12628418922625498827, 3341984002885074575, 6259488712494116991}, + }, + }, + { + { + {13403761680618042221, 16536343759299396957, 17972613761828085938, 13333143634871897494, 8217080844173300090, 8327319758336938056}, + {11266549251857186424, 5632462193213183426, 12437134888406006072, 18063700593397823279, 18150635335174302985, 8092211028476756137}, + }, + { + {1207108350681107077, 6429062998832911556, 8673250477723521447, 18170583393512312328, 3550801055781941700, 11719672827257672268}, + {9655111182266878395, 3132327691752397108, 14419687084811747991, 13073348421646940420, 5049344006922558667, 14000517852372127517}, + }, + { + {9716991597801328457, 9345079756027796093, 11200045987212678732, 8772280601358427821, 8639259441726405566, 12571033841874242820}, + {17715089933168590527, 11095491120411888771, 13347464584416454324, 485046159821099087, 571976757247075453, 10200902628607063580}, + }, + { + {8660499117188074779, 14226599538335222514, 8340352780522593400, 1946310520997776236, 6787355814568168885, 5153689776891688054}, + {5667308841323258461, 11049803545816366962, 5483549481076210859, 2650281183298359631, 10767231237699743035, 9742809143935952370}, + }, + { + {9986140370114486237, 7466209585105907907, 1754679179647126464, 17945009041507108637, 12527902125314539776, 6140813986326054524}, + {16393207997039569607, 17870467338953320569, 11842665547915567264, 13006120953816441470, 3548078985168965983, 16007487616892315454}, + }, + { + {988676199292814316, 13795038563960075881, 16898044307644951136, 1804989563201918949, 2415690271309649768, 1403951095677177318}, + {6559788013277581301, 4206972693543414726, 18371258651929788196, 16216427380122603337, 17635684431775122262, 9400941069599463959}, + }, + { + {34276850896178184, 9065645945697227102, 13317573345776592985, 601525926235193053, 9217981927592209636, 12309969749608407478}, + {10546130936371370328, 8868787171248972574, 10889253363563606858, 6066708084552745229, 7944441856950188066, 5353076020090917453}, + }, + { + {14598544504315957518, 7432571723098985759, 10858597307591799424, 10923605445845404997, 13436652897726474200, 13271716260984755076}, + {11746484360997594567, 18260883576159652569, 16536705360207159365, 11555128771579375669, 12265809109975236207, 8710014081931635373}, + }, + { + {9533947271063157362, 3972341891231849936, 9209964459552097719, 7267309578223077779, 13770805495144557607, 14101871822520603545}, + {12718640989104832837, 8947514731845143756, 14070551777157757491, 536892280925814178, 15747030266203480092, 18200278268968621690}, + }, + { + {7077130438749295216, 6779238826822620474, 10474903966971522019, 6820278386136128934, 7255072249237041, 12514067474090301555}, + {7241461786197226059, 6467732564131199867, 3747183394163351948, 16770929168264693834, 17085066469289276480, 9143407880258729982}, + }, + { + {290347547239938735, 15468258237582113955, 660408138412436868, 1302684185031722990, 16641837582246495972, 13735740180315027614}, + {6557401589512433778, 17846464164436659617, 9246161196630668218, 6890950256970483725, 6402204265992443022, 10338073060862145258}, + }, + { + {15430861178767026114, 6156963833198612703, 18365332210313898228, 3325534901104799446, 10271591932915681474, 18275367409906466678}, + {2067293804126060977, 15233366967537526098, 5396097640022364444, 1000014498192944822, 2327452880062984343, 12841411739269464963}, + }, + { + {3385350950958430684, 606441855443472767, 13033776423762098262, 2439357857147383084, 18252952076577877678, 16120810045031173460}, + {15157581942921822634, 4215996528362266156, 6476897491406537975, 5275043577903261598, 17454296124704487863, 17027978976524912289}, + }, + { + {8644752755484142871, 7520506767179250566, 9386137872506045147, 9782131010687153158, 4578495700127020092, 4136883695294906150}, + {11998149667575356581, 11059056827970704042, 12270233192667197003, 2455222920699340298, 9618999184986094275, 6116998915343032425}, + }, + { + {3193697934884363730, 10140335243666665118, 4870491066049398271, 637453714006877933, 14709075847235147331, 13193262757253144996}, + {17938884861655126589, 15835455202328116116, 16378047501426682850, 13063459063154887816, 8093827040207265175, 14470652935631573504}, + }, + }, + { + { + {16034112998441587883, 63845002635443002, 4593001182702153658, 8670578084218703882, 15774651180914872398, 13011991283112025000}, + {15423226930432745692, 4127345328586917270, 1602656434526331459, 3487999218598710668, 1255208198000959867, 10109403147260388638}, + }, + { + {10562160444642241972, 4693105869372484085, 17703834603739267248, 9021680918874890901, 15481929100325334120, 6845602054990892604}, + {16898382896248806202, 5343640296806331476, 6915303502069874700, 12691955589654230714, 13119484603892573302, 444753398747923872}, + }, + { + {17283295680731918382, 10382975592516681859, 10060598265400044655, 1313342669690321024, 15676629915621228473, 14015433292309842706}, + {3722541864418588142, 14316642109988396582, 9534209643602653706, 13980670620545874771, 7954420611695152174, 9814225047068930652}, + }, + { + {248374788036866218, 17964913720605794071, 16982718660501411011, 16539334441772479951, 5999220954131990982, 4565255831754507469}, + {15763389274228509815, 6793638010832842884, 17795140448628569794, 4610627011608977927, 13484317218426525831, 2384269128785251439}, + }, + { + {2064700530864965515, 10923886096271221890, 3965781226482780927, 1349539335778141934, 12283277140753198011, 14288291926557028409}, + {4755291516376942338, 14961944343518391105, 14986331171481011377, 2502562775678124281, 16690683782834868128, 18249446433878083968}, + }, + { + {10500343217363396563, 14604642486751688903, 14821582350585533209, 4360682754333123179, 17373258282956363535, 6560652026876217517}, + {5925790258489013411, 12382625725858582375, 8191985561612267659, 8311548657817207535, 3006895680396725527, 3424975657919705430}, + }, + { + {786181852668121822, 3801037947411321795, 2585057011854260354, 12788225394892184473, 12121545804172165809, 11694085950174284847}, + {1454296081340454152, 12662133117530554350, 15386954396026382518, 12188364006311053755, 14067469636462237943, 6286019250473603394}, + }, + { + {4641661046536668968, 15004063183056394436, 15294276007335774446, 8657963759909427419, 8639015101221632772, 17792395880030705551}, + {11362725454724497258, 14875854967673364453, 16443994946864117237, 16738074345499328534, 11771999957157378351, 14373743150670458553}, + }, + { + {7451471218366369279, 684245731125347196, 15398340817834830921, 11295766022223517867, 13796419334827571161, 2612443196993735753}, + {7266302045333075703, 17867476614955463252, 5444704239473117280, 357656867535988264, 15166074865462198557, 3395143793729939538}, + }, + { + {9509682271313714077, 9145094498501491985, 13014758147649818691, 4392894942493592724, 11373886379849938565, 16136200415791294662}, + {15645599976658644512, 14840712622512041213, 3362514637218698312, 15450726990483884945, 3596435004543257072, 4415992810307073795}, + }, + { + {436726982121698239, 13056502432887055088, 15945046688454709231, 6523495243194823485, 9810653958526702955, 9848069844181259583}, + {16826626473951948582, 231037515307333908, 16194400318485741693, 3341139243875410050, 7198330632933430971, 7499173440340466946}, + }, + { + {7368601478194798007, 12230035070325836486, 3516680325632927852, 3369692206924057126, 3839719055081332823, 12595556495411997471}, + {8654493585319068452, 12397958396131600158, 6963511070567779898, 12454283910184705082, 15562030337854730099, 15142592400258359045}, + }, + { + {8837809708004032486, 13277037412298218780, 16996196458911291717, 15020576394594692202, 7172043530412198673, 8471665740380245865}, + {11048001909658695452, 1722104415157885624, 16816688571596127304, 326278451259665665, 16226792594575388803, 11568977043541034616}, + }, + { + {8456421891774413106, 16587861652105824697, 14920803257030657404, 12140658454692956011, 2890921724026031732, 12248872106995059646}, + {592841531535126012, 9580494709626759695, 6803986786165840954, 3665682418447597915, 8504060701005800264, 12144369197475287665}, + }, + { + {5922269777496758330, 14836479545831353112, 8253590747960613367, 7431627931206560621, 7537389025408568437, 6545197178800609703}, + {4783858952421044028, 8590095805578721626, 1536842665057149294, 8541415499733223192, 314926954266960247, 2029622086554107518}, + }, + }, + { + { + {4552857008992046677, 7742982176237677764, 12614777762761021709, 17623070834843911177, 7352134649339042116, 6424241685372912961}, + {18284550672507410602, 4854060557681920993, 10258397549646077684, 3584018295573283683, 17668477552040944899, 13192004216363332229}, + }, + { + {17395497660961887899, 16009800729326461553, 3265273913749573846, 9525956475609557354, 8008893070464926044, 3999458899476097125}, + {5718380022945515412, 17235833906403176472, 13454747352995042112, 7452239822974730986, 4102392695939993093, 2803000540861803936}, + }, + { + {16618737600557794728, 2033973305346022392, 13031336632325068307, 7832039322814057742, 12529462370460373850, 15738577000088471938}, + {277987228557519899, 2457326519366423538, 4962659838606449004, 6462045821947637749, 14278115896296845634, 5493465508681078002}, + }, + { + {11771918065257941348, 15959999845581824982, 8970191473775898411, 11027278633783758541, 9400158449323034551, 947901598666525928}, + {16512757415387632108, 12706593809124338887, 6988242886781123197, 16531083476591412578, 12943906174817632915, 7656648959205801931}, + }, + { + {9950095340907991327, 18323483036824977356, 8826742511566055218, 17289678119472024221, 16533507249962244789, 15598631885516380765}, + {11278387603777833774, 15536595680256820784, 15785905710436386503, 906326985858832835, 17435036139151677190, 6061369501778984272}, + }, + { + {9936222309360295519, 612751096165259792, 6985140021370817962, 1577482019780095971, 18261512140175647300, 2268925111829825997}, + {8997280151950305277, 15099942588201541647, 11975082702124791135, 10350894913803197836, 3939026946439666522, 15071423278799975648}, + }, + { + {11100833451065161224, 6687431061458662316, 13938739712482703228, 9097524113006971645, 11310108789698970481, 7263803389930912069}, + {7579732541402969223, 4427494314869998923, 17444201060244136886, 16922365472232600409, 4405012916660752532, 12070687041452080974}, + }, + { + {15647519617270108164, 117991711471445854, 6393176877020591891, 12580017776760024469, 5697272146318734492, 6061004989930742460}, + {2473756929649050129, 6642185257675347189, 11657278544254761788, 7595244572280804026, 16987026974396265658, 7603680608840671838}, + }, + { + {4641817200788130074, 11411582570279978213, 14271172827338073307, 983033021155616654, 8960364147838313835, 1083015732588609826}, + {1497200903677486726, 10353458850981831261, 2374066392391409216, 14420375504998989822, 2686838733391603031, 8314093359533890676}, + }, + { + {17496508456763250145, 3725851402903874990, 5215356232054038476, 8626178798561231122, 7346081438096983294, 5668902882044010550}, + {12691479253178408400, 11602632369474788625, 15888416067375784848, 5084998651123071836, 17687638434614023978, 4748093935259778032}, + }, + { + {7012591365105857634, 2874880375540929348, 3220174710965004795, 3059517961108662801, 782775158531417858, 5458085543118651718}, + {1041626186007335450, 1540954764582416518, 9157012689553456216, 6955405647089997424, 5200809672173570153, 11421235046137546582}, + }, + { + {4523124602653947973, 5836966919029851883, 15986368381641127657, 15621634437004074460, 10729890475855047355, 15294257247680785512}, + {11285439807747745101, 11111809578467323610, 14892047086560953694, 11048499802178473817, 2516056791328163076, 16852268565013832233}, + }, + { + {16471199282876861755, 13210632438290224271, 7489191141275166803, 1018062459034819295, 10390278673880097194, 8531679383922148028}, + {10429530876679392022, 16263107527863893420, 16501163786286139551, 13280134735187206873, 1020285771945898492, 9886235265786298880}, + }, + { + {3953361034531375110, 7386122381239091719, 14255034285668453820, 15785522167361485422, 515961023718038653, 15929890586479205538}, + {6439493683049357704, 8056685472536938535, 15913828424728076669, 7849931732449815279, 8828673947015448236, 17381185117791234015}, + }, + { + {6935262837758552669, 7238290685472994963, 12638530517079483671, 1598710569731665524, 980245562699768920, 877454677177454227}, + {13771635882215066620, 16040753974649338826, 7896323269797579290, 788789760541962817, 1510803060770395652, 1869615403943907757}, + }, + }, + { + { + {5531580499851611686, 13083938152796080580, 8093925535259937316, 17200389625360018863, 14842037215178251796, 11988119859109137475}, + {12263909710787132014, 13130916007869632497, 10441881769690738090, 16476642241864490775, 13984242664609457262, 14845292102137925557}, + }, + { + {12517076146320333530, 10291406855889954894, 12064707867419687573, 1502641198165310419, 5109759070771650866, 10320287993169153654}, + {8399783621045104794, 4798114569651528165, 13755067856098540412, 16302764698541317278, 1003238627835525562, 12928911232568933328}, + }, + { + {16493640364904216538, 16952576493628188735, 8338786068864117560, 8893685516440999887, 11383847562341498629, 5266455800998421009}, + {11752729420077323639, 3693269312053900188, 2099384749139572854, 18271582031918815784, 4429897358715577578, 3927504374421523062}, + }, + { + {8698070787678755125, 15703050641810248638, 18420332370057065886, 6522943156759230092, 8207665535041398772, 18112327861657685869}, + {2673396578153201579, 4785641887391457008, 3201343168686834345, 10594426270740968521, 6137975018005068614, 8967572499474389126}, + }, + { + {16980781357310728815, 9400368845185156373, 10978677447297186946, 9679748460996475145, 12732154117709762699, 11885892661392904979}, + {13639001668971925003, 8287641087844004413, 9636673197644968413, 11135961857199331499, 1593345137419156162, 6112607232727638903}, + }, + { + {1618121961524149483, 7125019653217610280, 4135046824878421576, 5280859186376679590, 5657048372118791602, 2933466611636648975}, + {5805664612181580903, 1205209836997769509, 6806945599172222398, 15385614052211122330, 5146598126955318559, 8075018016062999662}, + }, + { + {7764055997887316625, 3096247021063747628, 3855058303686011896, 8368825559451644110, 8834573136185883032, 11962274012645814108}, + {3892254476562240873, 17250665319194659862, 8912259066218683223, 165112253005842692, 7958059294996660528, 2841248137703216850}, + }, + { + {3680472053937419225, 15818262971662536925, 13906534632021415373, 10388162304643816807, 15630768198665438636, 15299740983304379113}, + {15444479968420088661, 4725578511733068322, 6592797451123590955, 12644252808393788891, 3368737811520598812, 2557827868369225502}, + }, + { + {8738552487289663521, 12798020703054253540, 16285176121985392361, 8515295685945774862, 13775150004805130289, 5480066442593566352}, + {1832062561221016724, 11474440365914311748, 12840477284251180526, 9418012590905495131, 10980357385153192796, 11175435945147283367}, + }, + { + {12031563579597435632, 9205196637096882542, 11184135606984465931, 1401305294056001956, 4011048655023979025, 6048353554978805897}, + {9981078758998137503, 2677269315040497841, 8661895209193888174, 2176295311480160014, 1399949325842755013, 1287167020178538381}, + }, + { + {14989416317733195928, 5215645857684328926, 7743823977182561807, 16035950733196346339, 17265966818360956995, 8141738386272537518}, + {15308740448260040102, 4819506016918069818, 10426746682594017119, 792592082078639440, 9734028579320469106, 4168164141775623240}, + }, + { + {15110332316914443547, 2454995031938088056, 8681564356238928114, 8347098831687234549, 7523258191196591151, 3959358611912316605}, + {9351830676079593795, 7428833308286598266, 1416453949629038883, 13547349981311301086, 10428277550264282650, 3606337116602082651}, + }, + { + {5899820503488869883, 11958490906970962079, 16075475723156804884, 9886958163106570293, 2336860573252008348, 13927573664175717710}, + {16197429394630719701, 3637410335075415017, 11999182092087635021, 1303728926256486256, 11862646426072718672, 12350194941729076911}, + }, + { + {11908703473110352895, 2298157340739520546, 12948782415344060130, 3891804988944198780, 11457024627994711505, 9170264692053088570}, + {13049916205169787428, 1232888971483236977, 408187673144451089, 9362353849122321485, 2376369338115959747, 14275353516415817459}, + }, + { + {13799005322110561814, 3601529694367639643, 11106772392590283339, 14056629906511810342, 13572576527799392856, 3487092026537252918}, + {8004945340194339537, 12604327154304882576, 9170501006502176061, 7882459238319530612, 10231971368325328570, 12291029816500597144}, + }, + }, + { + { + {12016493313669998017, 12933290028169404494, 7574629307155081194, 11064769132776585661, 14341813749429263738, 15283735852995564728}, + {5619619958275981377, 4050556776362198952, 3177576231622277940, 8943006541554009372, 7305626035911810624, 2218764583069172594}, + }, + { + {9566598936438275016, 1524065942898634278, 6538402437371981825, 7619146568983786789, 4056320053847575406, 12732024686662415782}, + {17127152314608074825, 15674977896298098134, 17387546565573344457, 5579093677326322780, 12742505204554944005, 9270656236439021505}, + }, + { + {9662754095902029984, 11052177687755266491, 6564855675021815294, 3737820401397024623, 9158763078587705755, 18065064980820239052}, + {1653796274043149373, 8013850902639245573, 10214534956928427486, 9886536041863638379, 436480483045091770, 11299718318113762234}, + }, + { + {967339059085129682, 13104166305190785688, 4270323337549419783, 5748057697199097523, 8577924642091241283, 3581915858994574733}, + {16286952775270696590, 10080909121150901764, 14969905990810770951, 16982777697014839521, 10781115824630384652, 10066879780630943259}, + }, + { + {92896671827781235, 2887243649264806545, 15833385588487728320, 123691791239786979, 11763384358781563166, 2158831843887588802}, + {8596741012506330566, 13826523457635717537, 6540594903680582753, 13793962889582160991, 5269794365508943505, 12066409262788357582}, + }, + { + {14160395515480751096, 4804393992065108318, 5865339760971292592, 16944867750437583884, 12346156586123862268, 13893983071198461568}, + {8669655392775136330, 16391668238375635128, 15081288913073483485, 14651450622111663417, 10940438561578281261, 1459769045883260702}, + }, + { + {4763396496514922336, 11162734181090584219, 6254038965156999258, 7654502220362726613, 2599074756235434712, 4175520862838218020}, + {5532712110222397779, 6663653809301337170, 11279470997460625805, 18326970986868768181, 9974042098100537539, 13917964898357259770}, + }, + { + {15546191471293518390, 2963849438433690733, 1598685141972719458, 8898856010516215467, 8627198789811864809, 18213029019475870781}, + {14333200464642291702, 11308787646021527497, 18050331911988613311, 6162173240162706538, 5132865581846192726, 12525247456279358053}, + }, + { + {11888520648547343281, 494917248976844922, 18138185753471197483, 12035073496965460264, 1674990322514407384, 5436485227695752804}, + {5110912561716495333, 3540271208711945312, 16423892434973715102, 12964671785499501176, 9148547701868918153, 8452102921910430935}, + }, + { + {10550849065095437067, 10753053363341312814, 1074211954227515445, 10020702799800602789, 12864406763293784387, 2698115192684535328}, + {2660806710140858085, 6972138123836745017, 15756537040022601667, 3441297371570217231, 15992662632802735446, 14962954137941778116}, + }, + { + {4348443051639929958, 635118108731535045, 2015655861614690138, 7353522871311274501, 7204918312248323903, 16297291314051374567}, + {819730982198770845, 12608785952359657870, 8576080532289806827, 3009710480834492730, 16107946955600658269, 6618414758853382272}, + }, + { + {3553937582483580592, 748557765063505988, 13881146308285141838, 1352625613370615861, 9547466942139744787, 2062114793498335002}, + {14124993439348982791, 16102858923929790336, 11804652514462156585, 5732609751578720530, 714375047010554356, 6431147290667166077}, + }, + { + {16907430455802407338, 651092243779400541, 5558490953571514703, 421524543072162879, 9495583213289666453, 13989694091243449064}, + {12986952796935468504, 16698463546003412945, 8012703590208385816, 7886765190319975434, 10751493468002030133, 6515081698151754556}, + }, + { + {6087474257130132004, 4181631832640612201, 6923834817653851052, 13172825904549355364, 11686731712296308893, 8288122396407189675}, + {12024088251429940990, 3651003894223587872, 1019304847301994100, 9991022902762889112, 16582922336964107294, 16110644774675481098}, + }, + { + {5498126896868064142, 4836747456186980397, 14439451922445606120, 2540627828887613339, 14545261008261773051, 11467969799607449102}, + {6475133878892579834, 11091521615198288188, 2782411639442406711, 5318254024968417786, 5859257904336594124, 2341590642428951702}, + }, + }, + { + { + {14518481408695687669, 2095771038881695915, 15826157616849474498, 7631060871632259188, 7943802148536381101, 9960658929149574973}, + {14220929306479180052, 6691269956130908121, 11961714924677727754, 9368323637302814513, 7291095832678254036, 1472432228204364122}, + }, + { + {296235288120767705, 15980896506163657127, 9062593919771909466, 16125661299672370182, 9635461578488266018, 1155136620315591386}, + {15542837136824990624, 12143968280527693151, 11763598774950389381, 6763568060848908383, 9078265856423831300, 11111306292226892543}, + }, + { + {3439881221278078059, 14900693561020779474, 5254088415616219888, 6252474065701086141, 9557647970998076314, 16557080478909731651}, + {17984691969139760073, 6920275699694311708, 11586093772939554855, 10567368687255256163, 5080233168822419117, 4328516116216989313}, + }, + { + {4596402599231671431, 18270370190796421118, 2306869450531067189, 14899242618385405087, 5573077655838651504, 14786962047597110553}, + {8824292366761823595, 4280831893742429953, 15856753721134043278, 6520053395038611912, 18021729931870278099, 6369767037287702722}, + }, + { + {2092756234911620351, 12191998366985012384, 7450107522245627844, 13887131358456374402, 8075627236568549243, 2080029865308854734}, + {14564437191532160823, 1248159409055904140, 11241915899684752873, 374881929831255064, 13433377109261039811, 4864742963124465747}, + }, + { + {16241148550837149451, 7822351548402593379, 8309026501457287155, 5103819580434410766, 9108794158669260903, 16488989256917731421}, + {654044319854628751, 4653846517548435917, 17199712750191435016, 4845695359451199828, 8117219445563926224, 12507860620472651305}, + }, + { + {7653070797102301348, 5941550290626705984, 17158569969337658821, 9643823508741141673, 1522997131282064389, 14961110431686131034}, + {11802659136406721500, 12306955104612554951, 9514149419806882461, 14375242488313250733, 5052075298187092512, 7410174133191576572}, + }, + { + {4358758092801908863, 7341423105081917858, 10291109018391718430, 16808750129865208976, 8165688726053843552, 6688211068991597475}, + {17960382836450267765, 4303165753492267405, 7660091042153170442, 3855051391425497455, 10928187542174197484, 13179854521947504240}, + }, + { + {11914960295850256028, 736894971573607460, 12038994816721001602, 15765970801138452754, 4004778617735408471, 13131827739122379797}, + {17423943862970446994, 11783909998933696219, 8224961911959792292, 16132329169568881376, 2487867689899583885, 15018657522918867674}, + }, + { + {8657571447411467172, 14465724378300467677, 7456925156021131657, 10099394822944333635, 1108995305500533003, 14670621046876829893}, + {13859265344673965228, 12642756285805199588, 10618371399223472359, 10368789075142392456, 17024775460445275303, 4836741220623357252}, + }, + { + {13978074604430806636, 18407681732775924476, 8539556435113599518, 12436983718097546564, 12305195225429220776, 14562179379065953930}, + {6423549542556077018, 5040755781466160241, 17482453842942123143, 16447448498858010488, 11479552475069053178, 1277752221540085617}, + }, + { + {920233764095776718, 3319139992705676642, 10862716399636326975, 9064714243076616640, 14300958971895109720, 9740515883782303421}, + {6704838650099908790, 13781706302104941529, 2159164314515365763, 2657942042243527314, 8728543051894613622, 2325932806770059428}, + }, + { + {1967422502593875213, 7041760415173107577, 9050221304247474093, 6387184238732181908, 5042857585504795697, 8540152121523996010}, + {12903368152967462170, 12590063752208819611, 1933648838835739903, 14309714702251501120, 3968656691162699954, 7006655092536063292}, + }, + { + {4234961586345538709, 4555151906871493852, 3232985920750903052, 4244526539796687845, 9377328776465632031, 7060246266590210233}, + {2853784874472922126, 12423531525688330431, 5274221307163072241, 8471968438469831965, 5168569868577424241, 13738202276372145637}, + }, + { + {11027740333858210397, 14805109795564990231, 18001404758531034531, 8113634300017707290, 7136773249584072726, 6460937237419466983}, + {11113010926555478983, 8211408909041649548, 12479292053761376428, 4353008690987758386, 8859777315867880266, 15451653478486520306}, + }, + }, + { + { + {13818182961147912906, 16111231902964497105, 5753266394530009372, 17616272516546069710, 7303352128999517861, 5933646202109354624}, + {5921806076173096907, 13896009253778745778, 11309023928924737855, 4469463255182812436, 11037920326247304138, 1421676035563246889}, + }, + { + {9963872303672903223, 10215244336266366950, 15328675269518615753, 122600537279116424, 7616143723151064557, 10569183306278169313}, + {7031003844724741558, 14407986305911385591, 11788159030526689129, 3609241791309434129, 13905596487394238209, 17665966721516237541}, + }, + { + {2594699758954057096, 11341478545067279123, 17990597733287642429, 15246802590252455327, 8353870017669333748, 12614437615817297240}, + {6394781505133818163, 7425571888170698179, 10395654478962895608, 28575799984957524, 2682124171246326926, 3197867099218106953}, + }, + { + {11244734218150742610, 10723159354785424855, 7484860387130692692, 2467563150354920554, 17551980904639200483, 18441274508899025558}, + {3676988885705600635, 1865990625010728131, 10102149234595216040, 1252552252382716358, 684792256577566866, 6943047702176820428}, + }, + { + {12653542557867698652, 1142433072335098633, 3314552015716235100, 12422430364987401619, 15277043111900184721, 15734019630472200325}, + {15919711988870913647, 10725565601222767370, 11290906213530487192, 4662157581039009933, 11015350972696669275, 8208086286380460938}, + }, + { + {8149565212922680035, 9567944225255802618, 12487131892260634436, 7443172048029929426, 4305538689986215677, 4430546250909191430}, + {10741221950240759364, 16545153560365439267, 6755029137094727228, 81110724808247078, 5717471797282522877, 1486218088878517808}, + }, + { + {9544854622790528047, 10769761497113177908, 1502686769356489564, 11081322603706834961, 13364711539216168883, 5094854373914013146}, + {16200855071998899478, 11725976297239923532, 3061711654331076059, 2493583541459486142, 16389197377130664032, 1243320213701794262}, + }, + { + {8357050367418458359, 5525355159387149167, 17747090324964588952, 15694673113104643586, 7307621991317580676, 1289366645950419281}, + {528742783924328467, 12856892207404403478, 7148581103958210921, 1069895320583652302, 8428983332864385655, 12605554700259997922}, + }, + { + {2487016972575222431, 707675339208452706, 13435953217565346444, 10759388806374516776, 11194720901200530938, 7026549091209652010}, + {9613174021959686236, 4467223759668079541, 1818968857637375440, 13722755860101057871, 7447888855543394914, 11546251567136013168}, + }, + { + {2457098738888001184, 13436425175767521555, 2765094396909275573, 13944016834209830039, 11092919542763411502, 1754742216756443900}, + {3000476756681394440, 9364034762555019549, 6876992788712194394, 3585709061747683458, 14106253519316541506, 5279212076903345269}, + }, + { + {10813235272482429086, 731216775886127646, 15234319760355729449, 9466303362664776229, 13159285075818128580, 5734182119311122400}, + {5552097949831952705, 8072700375309437721, 16694077426905656662, 6836436096351296392, 11231592576240564431, 18047071890971042931}, + }, + { + {1022254770374886277, 9469459507582571128, 2689087779341478977, 10040558278837523393, 83202215085697759, 11389135963216852624}, + {43806665444650760, 10286022177325133470, 12773072940237016578, 10992425690329167747, 4947183945666379415, 13675981203969163591}, + }, + { + {13477598317485536079, 10040066752150433290, 7405123541490280851, 9274383932346246150, 14309192723531202554, 2524700381746668787}, + {3616389453203314756, 13581678150808337225, 14540726193639627397, 3234008850825878308, 15341468248221057383, 3830563877031748372}, + }, + { + {10853619680499782048, 17362724233771660267, 10116273108750733202, 8385992189881504730, 17855585710140315498, 8470682662587365724}, + {8287837611861659551, 10994242426397343384, 7964721658577081933, 4070529224299771220, 9413822451565658120, 12865616140969909319}, + }, + { + {4909175585319342946, 10921727442298570876, 10167667568640009770, 6338375152080033018, 3059470611612240919, 5445884441031512847}, + {2080017510988083324, 994134584813785821, 11859009130969323612, 4838588735676167501, 7193860141357257635, 14012081064531795045}, + }, + }, + { + { + {18027264009080180273, 2475688335442217172, 11495630589568554783, 2044610447313340819, 16211574958831636691, 18082923260238685029}, + {15706469362280984389, 10175042474371958564, 1978937508224725826, 8517309419909857419, 14117179981307010083, 16117021543255946075}, + }, + { + {1511347881429709117, 14331553269818546726, 3174494305719383998, 11632902270807950107, 173546718771105251, 8459530881951500056}, + {9768245664684322698, 16561286001450401034, 8971518231697912000, 10976747460480974856, 5720643303151017754, 10819571526556570257}, + }, + { + {9576152676005768185, 10006989422531598194, 16187127654089665852, 10942929199410456340, 12406093935974963980, 9789646989960898506}, + {1787070800558790010, 15321395745534743079, 10957766159164936872, 8270293817925324519, 6611548955360388519, 811894490473141865}, + }, + { + {1177812967446514471, 1517957963298502615, 11830891177576473426, 13778978023558357649, 5108224327305754122, 14001515739949397207}, + {8456370711154495527, 9224707985240991577, 11975300863666543456, 11628484027954011676, 4106175737255204293, 141089986476922703}, + }, + { + {9131678980253850574, 4479975833350928208, 10129015129452566706, 14596103361459462005, 6870275426489406730, 9740372621433972730}, + {14372377876881420680, 5948925994235262952, 14844830411071630096, 5061939034624460495, 13713851364090957723, 15171884222064254954}, + }, + { + {11883295856694360955, 10292514093729377837, 1018241106247366045, 5734998220934568611, 604293790623280200, 6610275829270273887}, + {12366129529412267868, 18331188876567635410, 5216829119638902498, 8912427667935396786, 9501870605862624528, 12344298042089151792}, + }, + { + {8163932230030769123, 9636016199609023759, 9161423603597683840, 6654511074475296823, 17793619545653824539, 4124609248372213291}, + {11230396913985033299, 16604770927162297627, 15127151935380606658, 17824607882620004762, 10373865240573715539, 16654854491247214292}, + }, + { + {14818683899450679836, 14357841858587947614, 5205003223993289617, 9070636802111036582, 5470773669151086737, 16750045699953367638}, + {14277479053033448070, 16287996706847536112, 15752386157739826785, 17892417758463210493, 15541841791609187377, 4029170486772069449}, + }, + { + {590558285614616488, 10384571122104306912, 5382287961959199743, 1207676815187815333, 13011773384862224953, 532436966815548636}, + {3019650690602626765, 7314252074457497416, 1838949562628498144, 10537471043392597480, 3070353104978729913, 15624376645604971077}, + }, + { + {17115127186232346178, 10621035233663393896, 18371958430819337089, 1193295512905013155, 16614017806526374903, 10388183900788590144}, + {12609314943764198670, 11179941239127206128, 12182679129557646733, 8965475646212860502, 13633585572850681632, 3426380476575326349}, + }, + { + {8276623546443212404, 9482903315384710760, 15538896085254227434, 15790143076571948507, 13143573532148067747, 3184541945442546624}, + {4972549455963732427, 18394646794778833511, 9055568163078599201, 11111002929065765438, 17363710725009368186, 15039897105379313802}, + }, + { + {1298806571453657723, 1042114212262366662, 5680532184394488579, 8926718412388834594, 17803123059561224046, 8663230263216788351}, + {1629533050023872010, 16027578301664521945, 10229699200823727147, 7773663415615911623, 14047718958480228325, 9551563011362116236}, + }, + { + {5989309147210387183, 17849299546447616600, 13296929709722338577, 12659773706196250035, 9857145876253632711, 11836080982965367426}, + {13554494825619368750, 17266926296470690286, 18031413991494048783, 16082997100696095698, 7954101307530025972, 17805255183453764631}, + }, + { + {11764175621326135951, 1791939567018465213, 13029241477144523291, 10840557939557580560, 8381031918646881664, 15423611692748071864}, + {867816783445809673, 6030296688691172286, 5561502310603617073, 15534923164629599800, 1208665840373127315, 12554641657645359528}, + }, + { + {3209670898909179942, 3098303062665745356, 14606274486451097890, 5959844521554290710, 2464075942028132860, 4072466165408271129}, + {4803469398150112461, 13680850164034057508, 11856265931978933824, 13240671495015013351, 15372029486600936548, 16702375458830177711}, + }, + }, + { + { + {18354847664660713402, 9400129736098519180, 1693064830516242847, 8562602303494815916, 13461534639537583386, 12859295804198471696}, + {17914958195244970799, 14970948874889495984, 16335291403269479707, 10631004823344361203, 17176847807154743365, 7714732495833925335}, + }, + { + {14957716628768963046, 17714101461064775895, 14988284950839047625, 16071167094351699344, 13890128763447277457, 4634560608180312269}, + {15209983968927413233, 13604763079237964821, 10947506257796639042, 16898823699351743161, 13294221703899555280, 15072745049022926507}, + }, + { + {3852056161889022327, 2473180673803482388, 3734174223964831443, 18372076238287597117, 12199161160370991577, 5666481007872478146}, + {14306064415346698520, 10330919921159881314, 8823577501055193872, 1854546884403147535, 8350718724062793691, 6987169359640195828}, + }, + { + {6350728622830713728, 5701874018092832478, 1307420847228487387, 12162151629784986353, 9986023597556720981, 7652258640582743122}, + {2186001021201828888, 3639063210548593758, 17939576646917089186, 7727612437620888084, 7790541002958463900, 16125720901743858869}, + }, + { + {7987758804483759886, 15261177063236862551, 14141837944496855895, 12436175571389993349, 8274042047049891014, 17152451709054820788}, + {8637518459734046525, 14044145421979578672, 7087188747750571441, 6313728565256547988, 11986656046293683375, 4860648976415357838}, + }, + { + {9009539789648791006, 17968770175863968085, 7552239675047114070, 2857176040809917182, 17447219567921940196, 7265407823518294105}, + {17146273377976250579, 6793545786177262831, 14702522055640190270, 4115098237661381737, 2503118300874563585, 1557013629291304762}, + }, + { + {11378438312695848589, 6538246237007438137, 17401630259167972224, 3718158584776484875, 4653786582172050367, 8204345231064757942}, + {14333075355191893658, 17490753073467497501, 882454733741447284, 13137676416912827511, 12367922995099391170, 11659416979788208350}, + }, + { + {6506114746421938896, 15057654379054626074, 15301323392829790768, 4198974549026211659, 17765210741443108016, 7132509492152477030}, + {13814681355173788286, 18227429366563277742, 5706529263838269680, 3305860129954779061, 6258038612413033234, 5553019991310521590}, + }, + { + {2740541731000766119, 8596175174200043370, 15268406586850192141, 4422842783758936070, 16124815896970518429, 16832763608196271685}, + {15434766743141189819, 7524954445211264826, 10235492655871568031, 8982274848184708554, 61280556653488570, 2365856772460075321}, + }, + { + {13157569055430348176, 15120480921106359700, 8907221703681745856, 9744220876937878792, 12735259395540542647, 9934004250126983654}, + {16718615067756416460, 410404144349530529, 6127062667806307811, 13658502470838162746, 14801118008320529094, 16148996127797465924}, + }, + { + {15802530345131809115, 17755831194964343760, 17769515049688374693, 7857718956073628784, 210191518703714850, 1746393941813293182}, + {9588189846482137991, 16335835178827943095, 13379307055600165683, 13189771146869278015, 15165452058189091322, 16119082358562095187}, + }, + { + {14291300888450540580, 12179403608989848787, 1574081386467411267, 17634301459964659121, 8878112303286796059, 17677799131162737575}, + {15596184219007084082, 6187497693225343219, 3798717948418717856, 4726638163830739524, 5752064164618039868, 12151699975292370996}, + }, + { + {2566281592983211586, 7556513094797110610, 2450166108042699822, 5117635899811819452, 9378838926483608725, 6536766093196310265}, + {7844966478885204208, 17742733133746826278, 14738531168438873782, 12821429720867364479, 17548355350637387437, 10379676596614787905}, + }, + { + {9312968557225948243, 12012357331777111837, 15378903016229100083, 12000905387706281859, 17061047818694588137, 9595998526695275691}, + {11468745480135275611, 15336669098149774847, 1341152435528764937, 15838536921908481248, 11418408147933255250, 5931142050180490224}, + }, + { + {4126355864148604636, 13615307424696038095, 610122995599041643, 7310843591875371159, 9562945189555198546, 5139192984197086614}, + {16434764370823678107, 8879626425844710867, 10870500519197212704, 10351639341497698657, 2684669702506554173, 12776278319330754082}, + }, + }, + { + { + {2976080374040978112, 15463477607266400944, 18021857121116180535, 12769842468896246932, 3127871016491855528, 16064631537662018368}, + {14779669176601385973, 3776668856093058683, 14901222703045028630, 3232341387704264788, 11524644522032323784, 2840977857469413331}, + }, + { + {5288000162182207268, 6882039810247587375, 8670725030786145343, 5145183205378561959, 5837273482862705559, 12796134768505888809}, + {4538314407891574892, 9060622484855928248, 10762409677748173572, 3978391277049014537, 17437084673881602774, 9597445123068848506}, + }, + { + {9647243303471030171, 14403945224496984264, 13886934807685357620, 17412670052512822239, 5167671672373181761, 11309623208884894891}, + {16223393003006029431, 1419420326439656825, 2369169453814801856, 13061716774043471194, 14634525798681795534, 4751674434384485255}, + }, + { + {4551832817507521552, 2313908657037532903, 5993995178973949921, 12447883782437853955, 2555223230220912865, 15167076377045730267}, + {2005335384595372774, 8714558357337187482, 14553513576888660757, 9344637821077197511, 11470542328000845120, 8444785364767260640}, + }, + { + {4138889373221767098, 12141056423117115293, 14874649331180645388, 1705049756225833969, 7848874201060248948, 5156845906941397672}, + {4861831505262375336, 4347196895421922491, 13681671418165655661, 10985831839263041306, 12731646375130791986, 13097670606652769270}, + }, + { + {13662345490304024129, 2974839373795112820, 12056507699680569779, 11760177245091509243, 1304067584530226034, 5993077591223164847}, + {2387375708577719238, 9626459487654222268, 1955587799597889262, 13097747078399605477, 17202959331606801221, 2329556196948809962}, + }, + { + {17812987452373376709, 93922986227836615, 6326230905711504623, 16126249753219785660, 2455759288569847701, 5953549367496130585}, + {330019371493755212, 3787738706597361027, 6252621554557272655, 725518130284881658, 976894057381550612, 3762034607037675717}, + }, + { + {15030213828999353996, 7537307216693595568, 10906817211901741334, 12978201161486570836, 13688879460912198344, 16875104360403708899}, + {2236812266517027774, 8283440131031015303, 2503310362171705003, 14140140152955857646, 9324835099807979519, 14222655865872085142}, + }, + { + {3744645064193324992, 11767671095853168147, 1146189435518138409, 5628986181810339417, 918940426876816812, 15936037265796453016}, + {6613161822954084270, 11628888581784661943, 10812400261220740733, 18166624472577344261, 5876006248392439801, 16310306694834328246}, + }, + { + {14125633931334589394, 14751339378917740218, 5150510528739010610, 14276625313476908582, 428670252922191956, 2631125662043419149}, + {1617981761951911336, 11583305636829657910, 5101252848640834978, 16667317030245715710, 15236201878077258476, 10871787548070323489}, + }, + { + {7447893961295274471, 232689431551823296, 13869806697620401084, 5330160866804784025, 14865575443350752261, 1679832461395111529}, + {13432840916023326626, 5655812378144376418, 17569608518110186458, 12501129428357124126, 12870492098064776642, 2977413908822477380}, + }, + { + {16051075988752124526, 387294815279188176, 3113985811668805632, 1973998868188061597, 3007935075189940834, 1096206135454331889}, + {5718521169091374159, 14981024399127745789, 12740192428843246945, 16002483798782724245, 646320423819307823, 3798677800777828461}, + }, + { + {3175319352668641931, 16660628462131386552, 6009313219444175330, 7678412375003613097, 9306411708347736279, 9935327299823143180}, + {11559141188091897348, 16810520437389758501, 17490645749839025712, 17259327961568124278, 15274735373631914960, 8983416743854404564}, + }, + { + {11963348162499020986, 5141506614889163229, 17433303046800477704, 8199586499645960554, 11047244048987602943, 6043499675044562520}, + {3566164965696214407, 7496224733250850598, 18368140720280229179, 1567369354656910484, 5448980629729479630, 7863641419129732206}, + }, + { + {2725337558589481703, 2497570082780513054, 8145569365382441623, 16909216290827518100, 2055218062540628228, 2415304909498436767}, + {9493217182909039176, 16224541192418752121, 7654146956830687353, 15910281318968056771, 7566577530597601060, 392195615790859862}, + }, + }, + { + { + {16389181503826270360, 12110241482308603158, 18288412366208628916, 6215500050936591061, 6014488852457703712, 15271085167906108065}, + {14292078858945118972, 14481422217835125511, 7781324865065249448, 1680769593324888263, 10152646427558791174, 11660961480686650731}, + }, + { + {12596615897631832150, 8821755551627965643, 9377179163931081776, 39054669779258365, 16376149550862611797, 14563278930531491140}, + {16172472663040388770, 5190287148139844803, 9110064025691300865, 15647288432646291523, 11591045834006760644, 844689883380316992}, + }, + { + {13548776749212678702, 17662168188358040525, 12032615038574171326, 6080133567086225201, 16938431180779549179, 3443895457286094158}, + {6436317213424755334, 9475881081120747064, 8925950328230980837, 1431876965977827621, 2014835158760914736, 12987015014298314305}, + }, + { + {6414994335254419743, 13126391477045983044, 7334301732865328995, 17814900833709399507, 4626754175182728225, 15638724462213933799}, + {4525732141028097375, 8291242304314061980, 7906228613924545091, 15172916208217647131, 12973611124608613858, 14415032784796747468}, + }, + { + {2941763674782308367, 8542334074892503502, 6518009639926774875, 8175768187727642229, 6810163642801138717, 13000888070357934506}, + {6742587576626772316, 6185408768536176876, 6199936764943605186, 14449234849358571084, 15099106384716206744, 424689763956421079}, + }, + { + {11352046731905647368, 13199556803131515747, 5716134925316732088, 5648788594959551026, 3705999902843684565, 560536953153999361}, + {11871652593424132117, 9835410362049088550, 1151003289591121644, 6319035178000560268, 14320824175339506736, 9395144506212799342}, + }, + { + {15455730684964191688, 10234835525295487673, 13182207266101117103, 6524185547415883508, 3326725631592873861, 15008535546194382452}, + {14902727792883529480, 15934241170433009830, 9499368143445027089, 7932650776206057878, 7397463728482754856, 15064673712954012572}, + }, + { + {10466244619397673266, 15399629207270328335, 17269983148989232532, 11915757566815614941, 10527914924508876394, 14191866475212875708}, + {1195709843044148654, 13844920180243298721, 1913057717019589478, 2076654993296600487, 5771535096432721647, 5276006344600556560}, + }, + { + {11597571737530846199, 15087369689361537037, 1943002093062010773, 14166422307764789509, 9566693410200051474, 5715847907279017779}, + {10365566668051221446, 15849087890611260377, 17862304002596752565, 13346541298411131391, 17741431867034125269, 5459305016755278252}, + }, + { + {11716528930963372212, 5531007692335820969, 16480109661368747208, 4989131671065416736, 1321744169687329693, 14777911526361771830}, + {16382233147918448360, 8261406114108376025, 14558557421269437229, 14834971601402563213, 15317501415447267445, 6664947553397092024}, + }, + { + {5785339725163835826, 6971210823493195704, 16124144681939339987, 3475104212436227942, 6049658499241715622, 16458315540661701699}, + {13323859344989042773, 6912561797063467249, 16800874344261680852, 8282162771440569212, 16369106286531876819, 1170526359132776853}, + }, + { + {9782081741251904701, 157951607661604103, 16926146768919338915, 7973413355284153573, 8362125879537081326, 9862990051212466177}, + {5184297884162915665, 10244746657009000097, 17343337497982107750, 10499903102065327375, 4012731889022182801, 7003219507037376215}, + }, + { + {12814653486444031879, 695131493401594940, 5677983402953066279, 12084690974215027335, 10420441289745630608, 14692497896969958685}, + {10769477264375836410, 17164147105428372995, 2619906011157181849, 1415661898003451303, 9866791318849538593, 11584829697149423292}, + }, + { + {14473501522542709727, 10749304489595316230, 2934355198146439368, 11017927560935119595, 5915324032076206144, 6354575443760924114}, + {8112720200285039304, 3582240290765355039, 4273023256712648103, 18427552816472655644, 12422787084653101783, 1105225281604355429}, + }, + { + {17128222588782702290, 13487368180342466954, 18017424846076363710, 8988322008818510817, 4708906557988367239, 7838727005553267159}, + {9398500148632613444, 2222389518787551320, 9441001728156177075, 11730541176540093429, 2854531586000055239, 9731840308469777308}, + }, + }, + { + { + {12818200022021032544, 18304962199648570900, 13782454312217074924, 15136749185545329918, 6562515245419546737, 15005045681562431971}, + {698694633971573994, 4013566334015448244, 14911595848732456117, 18305955879156015222, 6117212666624617460, 18143980466289027383}, + }, + { + {3502426890414957587, 12060773399876551675, 9782583782804195660, 2856421043271709331, 9172760811796379412, 287598491992287381}, + {3574882806715667454, 1471467928527282465, 18213296168373130112, 14471573043027880442, 9733220931679498558, 18238876809557846346}, + }, + { + {1186541863308497492, 9046950340101487212, 2745706024936898790, 4989009340224862161, 12823642979701239217, 17942139398687727132}, + {285479679301825536, 15862959466038586171, 9521459034208492274, 5591094499772746735, 11556872820220759870, 859478641511045607}, + }, + { + {15238342970318237289, 12057224731033370287, 3456414471220945721, 10398678431367169082, 16329262524936091613, 9810430130271885572}, + {507823287632145607, 13852199732643342659, 6599758124440658421, 6281020241660422787, 7196547321920663751, 10793248012346291609}, + }, + { + {16383444525677044377, 2278315169443859734, 10660119552937534602, 11864735405260308934, 8495438467432993830, 17346877704286895877}, + {3849319409996272322, 15807271853256513609, 1281702280418940250, 2373472013096372228, 13886255586271670807, 9001471337887209400}, + }, + { + {126909537204579598, 9749804666000980109, 16255800152061704810, 16609135318627234518, 17961723534307687333, 11140782709978313514}, + {4136643585846766549, 13601295896682468661, 13257346841610635045, 13497111085366129373, 4536183896151771989, 2489943574182543991}, + }, + { + {17280995436445609182, 7102456830521880903, 11461813376456526486, 9119286224190937602, 1677507200155630395, 6530478943017087729}, + {14611227007048719177, 251469378654353230, 4648274799629731126, 18315451912783545607, 16748007467838496641, 8627030552960679348}, + }, + { + {3196164040344762946, 13715698755805511585, 12458229346805024551, 3656509940452321691, 14877033093641476326, 11337317622750049895}, + {13942131585783347058, 18149827011545790191, 14895656048349000943, 16669534928350175969, 12531447672595399983, 13192103245474624236}, + }, + { + {14145917324940179268, 1801646073880966091, 15389460022241189228, 12374720625988164902, 12743858920585304074, 17607177891983515301}, + {15207272938242753632, 10413323271560975478, 12343096097117660807, 8269383012599149690, 15406849301603489917, 5134788699979908779}, + }, + { + {15888200229957314506, 14831411534621040361, 17970009204612188323, 2343767984014726431, 17841302528539551395, 17397648858980735628}, + {5368978612132943636, 4213367444878083717, 2033768727106228984, 14322131493744692794, 1236700335920101663, 9898949435294220253}, + }, + { + {24758834352404155, 5091013253272577242, 2028941475205281304, 15518967929666839380, 18004005068930730609, 1086684650652446553}, + {3503524165121762927, 16631444510755073447, 11468393061269997145, 11182831309911774750, 14403549322101529071, 13276637040909393512}, + }, + { + {16631857123721916775, 12096833102612622585, 17555483922966042784, 6723532965693736694, 5206953889265807064, 5257296707684647125}, + {9873856732725887735, 2019034753037317738, 12416543296251547862, 11111904680478030156, 7089558964960452193, 18166289056279109058}, + }, + { + {10481925795166053003, 6733183822951411784, 2336616077761967501, 16214291345655367389, 1553615587408951311, 17704541651779617310}, + {15809632617388566423, 7040680416264460118, 13227773672965345020, 5249395959455852855, 3700955432488167579, 5695246660982315902}, + }, + { + {1322177735500321843, 9036238380817454036, 7985514519046855063, 12745778131660207555, 7517032570151312640, 9543215009508727185}, + {15511746435670372720, 1582199859560802198, 16232964063663491032, 18413513284071022892, 878561573889774723, 17999994568313632469}, + }, + { + {51610547936916636, 449080743773055520, 11895942441668539651, 11528163466753867928, 5327778117936222113, 8054693531038673087}, + {2883116022051785418, 10880071210182937273, 16424612420341096868, 12563975202447499768, 17898191392637488032, 4341166004500306028}, + }, + }, + { + { + {13532417727291518966, 15621487234118278211, 11434135490251796442, 12174621814582402377, 11920309846702883069, 2376809786088257319}, + {13790218081512629675, 11886070728329073138, 14026033143551470492, 1787100914236464953, 304006454051884466, 2756779920933373985}, + }, + { + {14557765107140528328, 12355977617261039918, 4747772470536185104, 18066963986056971247, 2652951795222371597, 10786073208769016103}, + {11296024438266601030, 10656113304080611004, 8026365448356501999, 2223277656070704256, 11257682407574091370, 7238909102714165030}, + }, + { + {2791395962931366632, 1203894038483281930, 15578449492227701100, 2119859552714176601, 5772832886191005383, 2752141942254219689}, + {10053647313488524348, 5086479179724027856, 17277990771954143064, 15685827892771379266, 7735502714666745260, 9034852030753288603}, + }, + { + {9516343685613462106, 5255139143590615572, 12557738960870331208, 6702052925707924899, 9793008294868108308, 1711520204119625593}, + {13236841202015067107, 11129785963068370784, 1317992927785313925, 17479451244447802402, 13036816126933313535, 12502011338757112622}, + }, + { + {5480168288956527943, 11042549818448342343, 5915412500172865058, 12999251329017129768, 5808021534739634680, 15104939226808360257}, + {16234634328969043664, 3758395717098249756, 1015491288991804400, 5068251056783778816, 16324558660491861300, 1738698513676655878}, + }, + { + {15946881038575547502, 11116762950959791543, 1297081076272427975, 18245256277091707800, 15100977783223461884, 6017885634508292069}, + {16886823282698854680, 2072463130596047656, 6569088142237167338, 1681498520362575025, 5901004614588673498, 17871763470160973506}, + }, + { + {5104558086478114328, 8971286270876655577, 16470947836284805745, 9037729831080471007, 1965555872583588977, 15433240281955214704}, + {15775227419098203047, 9665258145206729468, 6253192577851256595, 14270940816171443030, 16612589103033695708, 15637879580008007829}, + }, + { + {17904034783907348399, 2626038317331972399, 1873258435072511230, 10005975240297222027, 7533652174638142552, 8419273188570922972}, + {1990391844410141613, 7373216149717011445, 12388874252879150470, 16614842721902772761, 2061105669992609107, 9570836984475646549}, + }, + { + {8491665721135698298, 1799890999791860692, 2389734471340627870, 6270039658247138318, 2463312350149470933, 2217609086834055191}, + {2540364179975154870, 13284898623265362260, 15339373729732261072, 4514279700129226946, 9114575154956391114, 2305724692490304627}, + }, + { + {16530141398463115553, 14748291394528377795, 12303798781899702708, 12438876515281985755, 3858890397627964933, 13323517596969431732}, + {9818536194104432590, 16122491291064677498, 484427543635671756, 14180970696306090632, 9883282120273913918, 1968662552094340067}, + }, + { + {10479341768131470504, 2190791104965238551, 2211152119507925575, 2517772887931981229, 4163883984830586116, 7101754214377757388}, + {1318955625560086134, 10530268190194110, 15248667065937080538, 7939869955605316809, 14313273335008385545, 13762768542953544187}, + }, + { + {690011461657587646, 10912073132311140135, 3674573373985417129, 1597723780107325694, 3549368082234927465, 5785289767244769610}, + {10814725183340498172, 1844706750982331307, 3626691260264165038, 5983040194600768762, 14282060651990538968, 3649897431950147558}, + }, + { + {2301048926250107017, 14317366235953485757, 11632712123230515281, 15595916662388747577, 15711429699151908381, 1305749118231488029}, + {10723669266169674926, 5797826425608678920, 17405218711301982393, 21871232298874801, 15013562554137035037, 9701498342635018022}, + }, + { + {8248839050962163686, 188360563145520954, 16729953975463785867, 3169981816175024043, 7187517706576344210, 9124675384823574083}, + {10262932309387547064, 2404363551953852313, 13372721599356368606, 2531242226775172773, 14257983105055729397, 2642170875421515959}, + }, + { + {13319873663433996292, 13089646428714940315, 10556137876882685421, 11656950941183630010, 12276319669931009991, 9463441716524353939}, + {3370727689367607500, 16018376472071193381, 3301478033055661161, 13190011310690675390, 3229558123256164376, 1583255490085522802}, + }, + }, + { + { + {11928390292426988518, 12638952790538679939, 2608009033823001125, 1242834957664439029, 17797992506731473096, 10340201033905982118}, + {10278753530600088172, 14116327152473508099, 5415842384660027374, 8566401179276240818, 4672386168367646978, 7541801451638385534}, + }, + { + {8566538196049418515, 3197654215985957962, 6355192582145549922, 2489061264757130927, 10197194261710918732, 3715293456694744633}, + {1991945499394841082, 3380660455057193206, 9083458464137174418, 3254176369798763840, 9684490403170591220, 10473571146597457026}, + }, + { + {6457826063520179285, 16268949646546946980, 3097451422505225454, 16453171385247691361, 17481519375542182315, 8112355562842761847}, + {18025352535213545210, 3750835203252893359, 10768297909412467901, 17629461198543052222, 10843179524144693103, 5226721924620138404}, + }, + { + {11631805870497408523, 18340134794831315912, 13311913312275168872, 2845528461275777300, 13173530356238926504, 14929218971024971026}, + {2411139026399661115, 17215217074808016346, 18228531498431262439, 6710245408258710904, 10307545091592698852, 15144971226257950491}, + }, + { + {11109750770824264074, 1088007372340209252, 10263956230079210784, 13896899727089451859, 4559138529870539846, 7777534303712666029}, + {15041017330059266135, 14622601734133247399, 7108706896655204385, 7934590922797237644, 7575713521896250968, 3332437975700014380}, + }, + { + {13801266825487496316, 15263809516575468264, 15419536487874300835, 9072780772100611698, 5969380434932396755, 11198543363610134500}, + {4171408162113015715, 10202388527823988708, 4311928890627114703, 11816249602018388228, 16313146221834083742, 16629955175557153355}, + }, + { + {11660286662603189685, 1207956299008625786, 11363359882526736892, 12477550434520668425, 17179867938403281938, 5655901105940295926}, + {136910678421418920, 2416064355587887290, 4502724777522615718, 17912124462718346700, 1361328791937120561, 12111897685488154046}, + }, + { + {8096344270340363443, 2517756701774451654, 9304005451085866903, 5715847369594509871, 9745892404944266254, 6051292773703160279}, + {15884195349114695334, 9517199133306271549, 1066058705882005165, 8365496980814928779, 7686746440596632791, 13176504626066527022}, + }, + { + {5447100387998907411, 15776278570078464376, 15224157255965180681, 16441839948680600381, 8813248177057271462, 10796641304027905046}, + {15358728422211379791, 6653135625270840458, 18255855576461478753, 9625920573335344034, 6295553526678577130, 12814858875321523185}, + }, + { + {17422403916567477760, 6238259464169695174, 11407009829093777631, 14718862258997290816, 14501697263370095522, 18221436165995139407}, + {6055444735226512775, 6768775017420314875, 7196971579967975624, 16790550980878240131, 16309548149795408433, 13384461631727488380}, + }, + { + {14079161021446380314, 7955905127227850069, 6465999511395878315, 7788108352019910331, 6222197449376487017, 4871252710770322572}, + {16673373722646856051, 13544022498694656238, 7378084945975549635, 6707761833586330039, 12377553912462035692, 17347971251371560420}, + }, + { + {14395815921984889730, 16242663560670555551, 10933265444645517596, 5914394225264036695, 16421696853010989602, 5685552142879689368}, + {12020206507361369768, 11602855627342652015, 5200080540337794980, 15877202861979761300, 16623062677785575198, 4399280632997370270}, + }, + { + {1019528443634077636, 6201939062294227465, 2193674349270074093, 17838059521213356953, 17494214752031608293, 1870623058299198966}, + {11485380789709140498, 6901145761334773250, 9249667932906723287, 9945518497873500003, 2287783742604500536, 15642905768346824183}, + }, + { + {6482332546440863608, 7760091220023803488, 3238194504321395476, 11017818554400598448, 15989612191997623737, 17176177776749389800}, + {9233800304624853063, 15940633772893955963, 1055365280899111788, 17832351193102257533, 3728875607894595859, 11458906737664282937}, + }, + { + {8155436981174747409, 4245212880996209373, 7397768860981266872, 12376011921970823763, 6727814153288120097, 4925255243200109984}, + {12956382084478097801, 7578047214327095169, 14028361267843039054, 12893429039763352989, 15016902170609700113, 3952485452273593863}, + }, + }, + { + { + {10212113970351356092, 7523429041914331341, 7486406457607204412, 3324890123572559980, 3609678540132843360, 2779647883674003080}, + {10785490009290216694, 5512178091962365081, 15405389773555373879, 17119053545814414444, 4550915783680335364, 5243325139730264225}, + }, + { + {15514067016142951342, 6798704670058921365, 15788722941232068928, 11593726264526847078, 2286988197169413876, 14828646074338136439}, + {2215588591344044651, 11994073923064762522, 3627301481345142037, 17167985271749886895, 14022445437114653662, 7923678237890136587}, + }, + { + {6611156704115509785, 18035620512627347750, 12381083171658118986, 270239073191874966, 1473931467604861674, 16752630206679926972}, + {13564215097326132206, 4074525343054815713, 177585984812302656, 10624670211816340622, 10109313618255604651, 14687069652115498251}, + }, + { + {16146132531590710538, 12624070149355925261, 3371340830834921143, 3637666900208692421, 12578993021430103850, 8399914141968916590}, + {701294690134606357, 18348654154222046066, 16080787544185533713, 13729499035821774112, 101002779873624994, 6415359183199533087}, + }, + { + {893065980645567055, 9780512522735000137, 14013587606638438320, 2042146894211661930, 4926876227730145005, 17705997753590203223}, + {403180381605128100, 2168255912491056834, 2400870712237917082, 7361183795795049574, 9566809726615509364, 6303637469757763886}, + }, + { + {17460362964014562908, 15586968786742110252, 8494757460457574325, 15624700433298528101, 17318575918908746254, 12652072085873395255}, + {9835587478950302112, 15548301433729187970, 4835168265500394400, 4967939877357046781, 12172794064315424711, 13503969662963117963}, + }, + { + {10829288067385404126, 18368582702063329154, 7495898914356102398, 6638691277000448994, 12421305448095328104, 12913821326734578178}, + {8084574956986873667, 5701547954903136324, 9827732902307175096, 9844605815961285215, 12681790933515557867, 11120448073083314536}, + }, + { + {16068344822778820192, 8689936877594040165, 8315547524451662260, 3879243152723994807, 4538257327824274009, 14758576181122195171}, + {8434922169634574674, 5728614983829345478, 1650023042553620956, 11308715920844572662, 12984057269003477315, 3325170259493507497}, + }, + { + {2598915533513585113, 14183744977018914294, 181474781586722719, 14637209114370560238, 18213257975009888133, 16601151640440493077}, + {11667415477497099667, 14085199965267867494, 16721473494118951513, 14499309470908758904, 12850701150110062639, 2986900412652523759}, + }, + { + {3221589256444770394, 11214409482440895328, 2728454368684972041, 11241800590680666601, 4667060631816223587, 4054750084181257934}, + {16826694011900430102, 11268855356189298229, 17144797540779468702, 8125742309270210655, 3796632567822982708, 8322624158258003342}, + }, + { + {17852794608451085917, 15586644236280880670, 2638796224141730299, 6571369537216725099, 17238484134695994919, 6584002309074770367}, + {332176389297000027, 13368981597643817994, 9475905376702633, 887026676346074182, 2659944342595076192, 9716495411301164463}, + }, + { + {8760436800248748645, 16559589424441408742, 17728067511446087541, 15979039360791931099, 1186131304518732359, 544669493272271576}, + {11512458030364033194, 4234660342823911330, 13269362908985131848, 6620254276755952341, 2472637252854054812, 2804760878774068057}, + }, + { + {15928091392978072069, 1045418146814199706, 7425379098630386963, 16455708007612906306, 5515953762090790798, 4146738699702553135}, + {5126640753769911542, 15649236295646849030, 8100061362821164710, 5931546784464607243, 10980236595948879217, 6825063281664784010}, + }, + { + {8543951044930873896, 6542715458284226112, 2761529550697027755, 10608334059217377785, 5013963483795824785, 12907134297467450098}, + {980382309389436255, 7808952507916033869, 15275563855873621709, 5310054094388396360, 8349155105071860026, 11043771142323384823}, + }, + { + {10152873500779880984, 8921920392860909449, 14073008766417442634, 7574006587459435649, 8742698680973393947, 3634151658166442700}, + {16215510897853847342, 6313231586526240160, 15374028344552157486, 16025015223144590637, 4962437968942642052, 2389997079243177935}, + }, + }, + { + { + {14281041519735018975, 12922311381137007214, 10232502343768314657, 1134871332686858449, 2406027671397524741, 8211135280367851709}, + {17686015482034995045, 13964987788145667419, 7719837707443653733, 11241849337066564058, 6107424228088781549, 6557866097251668304}, + }, + { + {44745771075211169, 12978700281287734965, 12341083357048397205, 1797820217645587144, 16645470871308398952, 5574272877734914713}, + {17391736056610728361, 16032339083920183657, 3446991150741449782, 10033643099742979783, 14851902199569135753, 1830235897561763723}, + }, + { + {8645411699894411605, 1426585791906124213, 3579550076805920171, 9083173147160007694, 11631776499533913846, 8510913582608227570}, + {1541698565399230466, 17192733751495667997, 1610633544366852348, 14882834591025699164, 3805773893383467941, 18227555101610282617}, + }, + { + {7654469169679738716, 17884541881059058957, 1658182501566786879, 2647862499567454261, 3575230054065121063, 5196577140526681418}, + {12604411569045121957, 13620316591036967083, 18197402841216136733, 16577144861751835196, 1856064252812727669, 18261694871001689672}, + }, + { + {4917344388382226976, 6330884756405843776, 17908872738552769229, 5244919991308831166, 8697595492991011433, 4947226470683672404}, + {8425523832699364501, 7754795213298783206, 8063207615592653394, 3563540304379150938, 15696361418241150720, 6209953025795422024}, + }, + { + {10542961880027073714, 14819776903900712189, 10788823732453390406, 3505823457495732649, 7370161041256253297, 7602319824210592069}, + {15683925906988243629, 4273670365516442517, 3693480665904390884, 16506632164939082014, 15344251801076915117, 9664860330838560631}, + }, + { + {13453231080122146905, 6512465127883837379, 7629388504183246683, 4217401442467660418, 13133301451058498685, 10166079809976017824}, + {7398318211270177803, 8363389463704327290, 10324465568426256419, 4965710503345352609, 2089060017802990689, 13427246861509147536}, + }, + { + {3328996401163396997, 14795923992923049777, 2850129498190588037, 2818567789790091571, 2452485851215886435, 10898789027092665189}, + {14647661412525870291, 3599306402736479964, 3756515659636605976, 12815169094441383661, 15786213320252390618, 6231903730571064302}, + }, + { + {10711642105210749960, 3964832036350312570, 2594869633154010768, 7504273439683990593, 6171834057422616095, 12806635729425016087}, + {6242042828168471440, 11746641890873718074, 16615154546579032279, 95454097875132020, 6393615725707696241, 7618061211687978664}, + }, + { + {9930957720367733639, 1077368814711136367, 2417053219800485985, 10848530230418354055, 7260326287853856173, 14141227535390115151}, + {7830749040726146784, 9016206039825747868, 11290344305602325972, 14750454853595294291, 14714683920601490123, 1432121990527736048}, + }, + { + {17441977106390458994, 8730805915901635226, 5819567079469848168, 6321912429222256985, 837082610639548473, 15410302798534400718}, + {16852273756502231397, 8917666851023000894, 14301029351076598242, 15350040486231497808, 1621413004527249197, 13889481477114808738}, + }, + { + {8916394881822438043, 1646293865051273262, 16633458954488857984, 1971089263341201042, 14055873993496913092, 13954758750729316517}, + {12992583064239709509, 1952701756447682135, 5933085826608622333, 3590325588620993260, 18107021064040771922, 5262440036415899013}, + }, + { + {8672666323143994986, 3432698976158862459, 7932092920769909604, 9350507304052696520, 9950195840741471235, 3384863162662803302}, + {11269793069739340493, 6207863446301189912, 12329276380474262269, 10965144619249951761, 97704029241884757, 10457642244982072945}, + }, + { + {12371754360290866894, 1591074855650384155, 8325409655366518323, 11442314427085611305, 10875405650221560131, 7491900189345980515}, + {17244250783259713081, 9507080483851292003, 9417267023896977595, 4243988893984453349, 11064476576986125131, 17158304321030000154}, + }, + { + {5517940657612757396, 4123868648127756780, 943948557181189068, 6078511197957700447, 13220388742767098964, 3184112381859294304}, + {12392153938824408522, 3168610752876052364, 350018255493345977, 2813965382812065687, 11093319528930675311, 6598131031733576701}, + }, + }, + { + { + {17846260309109160862, 1306797101136445625, 11647460062050134126, 4280254741069645613, 13550506007057592994, 18283679445420746708}, + {14822459580299409390, 16348337099471471523, 14343139876287082865, 16111294748648165111, 6270862100768665567, 5789912213367358682}, + }, + { + {200047379930668220, 3107506412723209866, 12635605344473049868, 6454603385777743125, 3634997813341433192, 7438775972421422847}, + {13638641130311201683, 11030479200470016288, 4711568272785668705, 3373744634232082099, 12735396517885935812, 1666767200715548592}, + }, + { + {1661699022230626915, 7732150026917057818, 6874108361236320794, 1159587009959479866, 7007379701174607195, 9952444100833302939}, + {5965322983127194050, 4366859071433931272, 3231323670368819730, 18362879607830583246, 5646154626466164812, 16999943723339328275}, + }, + { + {18089243736135451887, 15837467602480156595, 4979955351269012725, 12695524654989516016, 15309527870169710145, 9923199650873375699}, + {477633266795650405, 6218407297793375468, 13972928132308654086, 6804584457444043116, 11304504344726657230, 16511473903383869711}, + }, + { + {18035621934283433559, 17683775718600141872, 1200977174684534015, 5313684562476274913, 16332322452774063686, 2145323195208686943}, + {1572586157017613665, 6541397378767315724, 4667619245659807579, 6374201727420350952, 18032000221066592915, 2059105043707958084}, + }, + { + {12166351370380034203, 7102163135877977227, 13332299513090850017, 16122777051352557935, 1102940088487877845, 5212887364114727166}, + {6687171729958891220, 1664933694283032903, 14897359728576714580, 5549891844111603232, 4137590082941305255, 10264069531127198424}, + }, + { + {272620083016298055, 17189778207291663400, 15639379971966818574, 3447379160890980726, 10696794611439970864, 16890999064760725295}, + {9003356812390325490, 166360430953008789, 6721503120622592701, 16752071907266696152, 10459887288559544412, 16460372927471671270}, + }, + { + {15720666782902086695, 2243636647767906075, 14348999864993654614, 16530847832477493511, 13572226349455897926, 10485166353342867630}, + {1701375111884628062, 2188828106789127558, 12645689658478144853, 8016727425888546008, 12431997919751623083, 7136689765653286632}, + }, + { + {3054654888507663517, 3901732615579060999, 11618712726777764967, 10400033150633623763, 11673620844004038101, 5065261890057318586}, + {14496601939391821092, 11531645523028139605, 14474922880926708005, 7706650634046982502, 6570274599504352046, 7642596377689896565}, + }, + { + {7699868198387215867, 13465612880023018168, 6802825825452629152, 17947085319706590740, 399098071367693766, 2227253631387109201}, + {7913744672279207864, 5711722633374904101, 16654422138819448366, 1591238867781947932, 13785062295639206639, 5681650681074277757}, + }, + { + {14302942159889415158, 2510726813191413600, 13501150440879192520, 14000061751928804479, 6039954540724187037, 7505529269867033702}, + {18250665573771576073, 5127325503233443708, 14065731457493758594, 11160674673771208971, 15693171419798520829, 17233795126257791284}, + }, + { + {15622130931527103601, 16901855276484525272, 18102024747919573302, 7726517490109845107, 14147913176577212424, 12842015409583521397}, + {8781643538636513691, 12123988514306098157, 16318265076922410388, 17085813739519115894, 11427890478685706148, 13711950220864410601}, + }, + { + {6680912247635161790, 17580838069043296523, 16777963020027530302, 5469775206057287185, 16990549936692332421, 16432218618617031088}, + {16382011306148463125, 16249390935258095721, 789229423855427321, 5584503286135036603, 14761218594144073940, 14540866621986964431}, + }, + { + {9496858985145256777, 6425875918734527060, 12207380394759736422, 7438079918113743538, 696640929848616795, 4155405326832419357}, + {10690817436861400384, 1479037799171245484, 13853435209996737946, 772955156615502406, 16556804502651134724, 13405497439711762710}, + }, + { + {12180390271623191338, 2554198210777409989, 15828648806466804950, 13386302369804389308, 17877328148870959009, 17063001337418714450}, + {14566511491060416421, 5205063642854029012, 15266492670006985909, 10920630473589926436, 6854610609610056970, 4823212255031433832}, + }, + }, + { + { + {11555239510565564423, 102493428844323960, 11265440475505070062, 6954957201906837447, 11578828270036850246, 5363571767815413948}, + {10687688618938071305, 17560569863417444168, 1763490681657096693, 10285148253700502778, 228169834671249043, 3817223026964299801}, + }, + { + {11869614854023374983, 12616170826516189176, 1249571328192797152, 1152755290640443365, 17679907775602849695, 11345355428207169384}, + {92124442948271692, 15136392605896368971, 7174298541623418149, 3977850961259601135, 15260799075573749863, 419190360224954337}, + }, + { + {12941138664806365009, 78537568941164918, 4499564597238696841, 9259817189360690299, 3875404300171494106, 18031393974005709390}, + {14230220635083072083, 8633088687256087821, 9439675871539484936, 10592074684996303446, 5207584782270069594, 16579180203133498559}, + }, + { + {15911051168603653765, 12912915675404184524, 16445705037168890851, 16740563878098656388, 5961314645410792024, 7476305351043019972}, + {11904755216174892471, 4508187020781349730, 1122261304753504973, 6085882050766589531, 8389757320097382309, 13048473480684052162}, + }, + { + {17680809686224888166, 2880007448785334434, 17671705111659901281, 5357941687184787676, 6416428659886206805, 2539295694241036705}, + {15493556906347117063, 15184359621150444926, 15623522089297218213, 11422112823115234443, 10761632026600704373, 10659378440527931495}, + }, + { + {3820135739709169880, 7261377824800497120, 7489769782834815216, 13165627835187312122, 13110045944249714025, 1304982596015592431}, + {10409327089880860262, 8119523470638259517, 3634401951306540946, 1979100535727127060, 7288813164350284510, 8247925357758448450}, + }, + { + {12278090077201324890, 16864061172993697783, 5587071207462858732, 14536122420710742668, 13859058519726422179, 10645667192932212843}, + {15670105262718068703, 15430134228548786966, 1251089591865195285, 2149683357007094264, 1836398382617121265, 16062290149085488761}, + }, + { + {6401472755905860665, 18251568613645282796, 4758943616732471246, 6655672671851225203, 102549765979647744, 6901551898032346073}, + {10154259747808913943, 13030720662056447919, 2754179948730913899, 214967400224523605, 9208467612937514595, 16909326990814546062}, + }, + { + {6054271246698272853, 14544060829566630707, 8136820029398201235, 953136503654279040, 84568208454785546, 14305961879546400571}, + {1732011551860061479, 11399625830128770326, 10400513758237997842, 3165162339732221581, 9416667999137637971, 17092345029934304618}, + }, + { + {9400098298185420887, 5556041148968335564, 6912036430365340369, 2944702321639771461, 13167226429156120766, 18187144612223747373}, + {7959639088001081413, 4236408582243967575, 14543785681099574184, 11098877575745565163, 14302577285379639548, 10484088530600671912}, + }, + { + {9373483053259607268, 3543313042332813439, 17074705243236711793, 7450654168557338084, 16833050907477987107, 16070783762419210385}, + {540551482092433485, 896422619371514104, 138542949191418634, 18265302404419375371, 16792245401695248275, 12353390887345526565}, + }, + { + {3539472665850408941, 9973857813280052924, 12971804241703503646, 7407990072499301360, 9559955945280406647, 14424568234166047002}, + {11096806861225971603, 6816003284380469282, 1147913720130733539, 13720120058704725060, 1399756058361164073, 983212633898190589}, + }, + { + {10664997543956449171, 454517167775805631, 15856261682659737800, 4154393874169146738, 12268872310704088235, 11262767255104080967}, + {1686376439172079011, 12012369940855624242, 6114883187951156869, 778196593644747678, 2384399524034132671, 15059515630710187014}, + }, + { + {16693905404142293085, 4325377301783117143, 2580347499530969883, 1407527347166788600, 17454091049478095854, 17446410903937548513}, + {12048478360023053515, 756323182854419638, 18183393958679661690, 2276830709283047969, 15484089378884863933, 11532985185158241406}, + }, + { + {962670163839534853, 8108389445709454545, 10885345009931744728, 1709075883125195127, 12639892596513679369, 7994345234505196064}, + {3957358292438775986, 15177501453635460453, 5749874344089288877, 13980629880591955685, 11290207695256566671, 6266738518930986595}, + }, + }, + { + { + {2112471176772812653, 5992610445858141042, 3359824065683384802, 14910744199028914975, 3540279332055051816, 7481318687562895300}, + {3778660497841133917, 7665160960416784403, 18344176739282807989, 6652353946044311969, 10335050395834175287, 829161198718552289}, + }, + { + {987187890721916756, 1180893057043299417, 7997694989088471290, 13943477209509617880, 5789135275803442933, 15003053876978578152}, + {11491981179365890542, 9783628750553484845, 78941951872642943, 413130106196007898, 5965786292528401894, 962843809509488765}, + }, + { + {8077344451961036015, 12071091132773222174, 3465673301214104928, 16928369631937685883, 5355222520769513898, 13361191077839573619}, + {10372078388188800788, 16137701973564428727, 16378364657125535444, 14147781750402923873, 16760187636270495320, 7550201579272756957}, + }, + { + {14084923669266627263, 7553568273380849735, 15691370880642541716, 1999581770825966126, 4575194939013031822, 12495949140700950136}, + {7538580687408334777, 17053011349491117810, 1716759308796398676, 16611187257146498231, 8469759805465235212, 12974300428352030494}, + }, + { + {859955691188282569, 13352606119576189973, 3180693414073792430, 5959867301005659300, 13835947303818547540, 162851927886880075}, + {16769940376654738256, 9939117735531953429, 13149699086290415664, 3305357061162836785, 9009939707511121271, 13981210403713247609}, + }, + { + {15280492422823355766, 15236897741281284068, 16375251899685919662, 2375999612321238009, 6002020302005330277, 4867913810970375080}, + {11372869170822493237, 14166186567360268594, 4761141133604528346, 10183261926525426109, 9349125973207534361, 8199961450165628412}, + }, + { + {11291117276267195299, 14973998728699422778, 16425655270225982283, 15329324944689574083, 7979576976920559153, 14994530807417641960}, + {16703738914238983421, 2834957708878859809, 10020001258433278091, 3066018529077593047, 7903800555273951661, 13033393171964190854}, + }, + { + {1653789232981578275, 952371650849832179, 10927445400776044968, 12157933816885775189, 9290507541884583865, 12826421106361126902}, + {551558165798937217, 1729101615745031644, 4791663141996814522, 16904640700879459114, 12874781959897756061, 3513760684524485070}, + }, + { + {8207357056686195321, 11137222442007015668, 15645132451218915478, 3105709674939731826, 10607257435983024941, 16912916807528355764}, + {6323399773421218599, 2748551999608353527, 8626149829332963214, 3316199943098194703, 6716681752170794378, 2936787212120932946}, + }, + { + {15440834838198080689, 931869522652835594, 7592851540253747298, 5478596926880972349, 6652810167530776258, 4577181343372966932}, + {13801964408907248297, 13739037151947376992, 8697064982745685286, 12401883107738713638, 2448777686813372733, 4016677910779410184}, + }, + { + {930435436459751529, 7291335211208166106, 8662147097774800941, 1754832412907874485, 11716049188393912454, 6088054938180223267}, + {14767636360685531193, 16761369108402789416, 3774240452651006015, 8812730740575156268, 2441588704916651547, 6532572576667981720}, + }, + { + {14520642821078702231, 9152978367661523282, 6377069713671652085, 12296007202473970904, 17767917081512566521, 9137555524675129570}, + {339729066832634027, 13577486648345315707, 8784435346186982538, 11788746341130221385, 17389275735918464762, 1499091028328348784}, + }, + { + {6895056287740805821, 15551414767986485684, 18245567068949911079, 11780461279934853858, 17514165768801962395, 4604945067503181622}, + {17970049594076464754, 5131328972180637912, 14013492191391630748, 13860986326135334440, 17262237096531626622, 15447317764876697344}, + }, + { + {9241932972904406753, 10136261935647290984, 2240671992235812692, 17354651007012787836, 3225243242586300908, 3556466132564431774}, + {15035753318658290895, 17220643029876180698, 5318335111039228183, 4424502322878902841, 2675895669690622325, 1884586557676234029}, + }, + { + {5250110106303814488, 1975207799636297674, 13532036578394208591, 3969043079520697544, 5728723625100363223, 7158702673653973988}, + {16195684125677252996, 4149751094169622529, 11846551373222263809, 13787057146822598191, 16962390587607642862, 7670754904406853980}, + }, + }, + { + { + {158721254439694626, 14016472328785146057, 3215742685919437659, 4283116501421190228, 14416945229571419453, 3260361759779720928}, + {11569905182149055942, 13365945824267994176, 9560316005976549600, 8014152880174667326, 8983248355930398915, 6003107822914970018}, + }, + { + {11769244887375954354, 16734798255146218250, 7450660885486578621, 13241415025693890385, 7585701487764431710, 7068349087572048763}, + {11673574025706412973, 12054573315442038381, 3465595090934871151, 14116150045410515995, 16747453732925727391, 2053788472539252039}, + }, + { + {8254128435175778191, 17961721281775180333, 3465171206067904370, 17786859311178538748, 5750765123994852536, 5373889982583891369}, + {5947994461711601875, 4264969794290341217, 5733140740964071824, 566813084550213227, 3008438020483790267, 9393523034553376074}, + }, + { + {3488992165971683960, 5408858964234561845, 3943860838659448298, 10606370049279338924, 1497444843416374478, 5655792335049791924}, + {991809778400186594, 15331432498205269189, 14409135173658903226, 4844024566576229783, 8437358490135848140, 15238255612948837438}, + }, + { + {3981945260589053255, 5238428271891653292, 17666609270668276737, 5136761226420502964, 8998438003563725182, 2026122825528004680}, + {14800276493572942057, 12172612348684122426, 8309771000688236057, 1565694914599287285, 14726316506042877882, 9150853180590412510}, + }, + { + {17340721586269964714, 217529583853973911, 8591243800256753437, 13887006532271166813, 16938831598502428118, 5372377227102637491}, + {451250041397357076, 4989306166373412675, 13630414847684491708, 3996969106514180362, 2275313485002180685, 2301296218808044149}, + }, + { + {4291242465719312676, 10844339224270608311, 2121832093979610215, 16773046612047697523, 10995952484439012381, 12237539089984856911}, + {11585863874855568916, 13849634900022210805, 12285224492680055214, 5525310790718599719, 4273270766854007820, 14699310461571394996}, + }, + { + {13339800343403240396, 7709432974418657015, 5301385839232292107, 2969538953397180786, 3800860603349698317, 2508772359731689564}, + {14378517458066378354, 8882708296441449226, 8558667663066577082, 17076224488360060086, 16842404219922924015, 17095860696531681717}, + }, + { + {6709186302039351677, 8451434297354584619, 4758927276311396271, 12322849161987713036, 3702550498120081225, 16306272953980522166}, + {1037682183893893480, 14663627147661191968, 11571949542375472706, 5714568058845181963, 15981901038671696988, 11976708367028629004}, + }, + { + {11207839561296012338, 4875894249269467127, 5107711364762712689, 8192718242078932005, 5352423725257079410, 3571810293108102994}, + {5515509758059991725, 7457615682786317799, 4860181546702428200, 8930731253012747041, 5659928076906420302, 7496101079865843064}, + }, + { + {12022229726853822462, 14706436872065443302, 3389725333074082852, 1604903701561777472, 8950817588405763739, 13190244158376540107}, + {14016236309633488294, 8475371081917274175, 9944826967483171109, 18053549564499967546, 7930723406558155263, 4626913441465521473}, + }, + { + {2715165459263721907, 9674001561320555387, 12396221282651500645, 3973238506618524626, 7278954243806937758, 9176131567068265043}, + {2372457887719386534, 5022496686095517029, 16913411979107538659, 11089957791594060315, 3232871551299762533, 10181928965032453240}, + }, + { + {13077103522673276166, 13953006147353067459, 13937321564029460312, 11775289180731898757, 9005718366158380378, 13645760323002406046}, + {10332481686150199318, 5314709245555453273, 14740068464959386027, 39846363329861329, 6936258174745205094, 15346255345000921785}, + }, + { + {11902235556304614325, 9716523013532558935, 6408642420452662970, 10910145013733353424, 10487750635963941672, 3263923993556113887}, + {3979263897601764948, 11489365827974628507, 5295637109315505928, 6972999611880974771, 1108442977000346725, 669149380592427324}, + }, + { + {1157132430713125844, 9939423443740928614, 7186655438202963643, 14372268141018236868, 12646427359638789024, 7392025192496396479}, + {11172990535174193001, 1182082134585836558, 2511299207918210769, 2172910944443379020, 9484470871043901670, 1230325285277248870}, + }, + }, + { + { + {9665579348258363865, 2087918080557695122, 135537599087992531, 15215723868160805464, 278908927488187941, 17503720082240216915}, + {5744927809331053213, 13798298316314029615, 9696283778270547989, 4870358740201919966, 3439882118475813321, 4143783440792496951}, + }, + { + {7769489242957847290, 16684864626270304081, 2879249682816493383, 6265076094334458119, 6886499504502814482, 14195770023097875547}, + {2631387143433279288, 16031347118135873637, 2311344129842860939, 12572114332759228948, 7732595900970909006, 14311355333002206999}, + }, + { + {11228237540890978828, 1079293124827979304, 7487220471408651681, 13548174215752533194, 13320332840506137434, 14014587572505105518}, + {10308451336179922295, 1971803029831470018, 3369232812295268792, 4471651358093175556, 12478347644279240383, 16248645353907765158}, + }, + { + {881896658963638416, 2026615415208131225, 1975014851600144074, 6268313587596276173, 15189049743474081851, 14141869123482614039}, + {4695467916519996154, 12465708679157180870, 11422608049605393187, 16598608052494558909, 3756011221236491774, 8063000249101262382}, + }, + { + {5494197245461486331, 15364625217797987691, 1134233848906038918, 7726911346031918100, 15503554540833122104, 9953446955839429175}, + {719175439330210354, 11993546280891538825, 12098356945782186267, 14761662828882868605, 4054521887535828822, 568836477239613961}, + }, + { + {4895604554173507232, 12377758172579626987, 15401866685509290286, 9150363264406780287, 6123727635885171426, 2013086363637951538}, + {1499537875756117851, 10260341551071830418, 15012297749974575104, 11295782034836939405, 14699384490428880947, 4058564242175274162}, + }, + { + {5697099271842625185, 11897498065292086007, 165253007275908673, 8683995743377403005, 12085865296553972670, 5953667974147175744}, + {824129719356249097, 17390674672020315024, 14600835594781296921, 14157907740151210460, 14620516163389564217, 6402637035301660148}, + }, + { + {6814805391879506821, 13733360575773203028, 14964423068624665929, 2845857522246553444, 4737277078061891938, 14974979150537406091}, + {10199845472834911755, 12457032282300718325, 12509382395143476419, 12723831063072297351, 9804751755261218393, 9738618498716380065}, + }, + { + {12971320806846916743, 6373340119401674163, 14940450957165318789, 6054294310918381610, 16262716106286726308, 11738163287805791020}, + {6651936162381007336, 272251828638977954, 16782812253935098255, 157477203834421822, 9758166039167226447, 3757098019902685001}, + }, + { + {2797914620292272718, 6824445594276636543, 7612944636508242479, 12310914090409404192, 5900414063625470828, 1578574444575760813}, + {1746963247281383230, 8358183515669196030, 114807234762833252, 3434169954702426697, 10754906727586255973, 13248437026834498974}, + }, + { + {10367883878888843605, 13209011820972196415, 4546179109832588353, 10048885285637082041, 13740390940277885181, 3897350217203120410}, + {4420913340021562814, 4575173797445180389, 9128196763097374162, 1507217548372129726, 11871635706539357657, 731457449257913541}, + }, + { + {12327596966828336878, 12044047960030865903, 12590450765463213560, 10493254635328920048, 8651077485178084369, 6371936575607168909}, + {5090312744055455793, 17685482889085467956, 9393295431338315435, 15080146787113774018, 8385657726957576620, 3383348226554775383}, + }, + { + {14588590004163196212, 18274572275841358391, 7651897004994035620, 7427055507937608536, 7778320234184341217, 16916348689537901989}, + {2419944192928809758, 8857445667038434995, 11459028014322971295, 8519876766524924471, 8951414995530421895, 11510037251020037555}, + }, + { + {15790971709064914690, 17551616639212949181, 17685426066530430956, 8470300602731078412, 7440168085597529492, 7627174044502506272}, + {1710862283221741969, 13964871482694027643, 617332758617265162, 3711135961102404485, 4655924078995340065, 2113569679148694735}, + }, + { + {2154983266339619301, 11861362304971063147, 4258182409238841621, 6253453232321750157, 15909672604786711366, 1482606699963487564}, + {10258975978079697240, 4952492506950453020, 5749995703462780308, 9651071132904525497, 14977376759992362124, 14011541847161628118}, + }, + }, + { + { + {11998317121553500299, 2582325766599936510, 10226444194055732720, 6578918458494290458, 16856344663543484552, 8023206593552703223}, + {10896969734623517030, 8965286626042649860, 15869898932136510986, 188758287853374907, 3043553330642597875, 4825743274601412340}, + }, + { + {14811264716270138923, 9172209925012047033, 16222958531492700587, 11130963356286229429, 12646613143129669873, 15325043128670486670}, + {11347507763721459405, 12900058314528881450, 5171017319841793302, 4651322121729076016, 10307557446743606869, 6055886709749279778}, + }, + { + {8183782069332642864, 4400608719297868437, 9887680839598123793, 16997602958862657609, 6307175890874383417, 14450424872255242386}, + {6872546037892456974, 8399143418250687787, 9134623456632335969, 13760709404346799708, 12989741448870036879, 2909960824443156805}, + }, + { + {5430907109181030283, 16527229751480129461, 4626559521361924187, 9923786072582407723, 3599523730508604347, 7403949125284615057}, + {4562148631066323166, 5805336986933520185, 8257255431523708381, 4507203543461357226, 5619824380968497684, 11986819821861980903}, + }, + { + {5319261111797206279, 4857131879138244426, 10148248807556188825, 11267161186123495115, 1870130028222872285, 2706665384656124928}, + {17899120971855949667, 3796430035357845496, 12931652797283355998, 8202504218162242839, 4247443200870022359, 11773865795553695256}, + }, + { + {6197233327569567984, 11863568501944321119, 10309410692812279373, 18064151364176098605, 651644022956656301, 10015612095276572238}, + {3712079372837513925, 12629021524719225747, 14243639867450874095, 17310848059794411658, 5934269651842912614, 7281399930842709350}, + }, + { + {2511581009523899341, 15219471439294737719, 7319331989694981973, 5501409405436918279, 16976076438864148161, 6162909726068177573}, + {16008540889386100268, 4274652746244818627, 12394070200068488667, 263293445411113815, 16742410837666591362, 13337130885835734358}, + }, + { + {3564999479898740369, 187214543496040556, 5760327611422130945, 15928347702080842921, 5118946570680674960, 13188149096923612709}, + {18076374160986186344, 1142074025295083811, 300437958095382782, 16478562199461788278, 15937231598514871133, 6966938597435454129}, + }, + { + {13530583958756622194, 16230919531879218650, 7960208013515434222, 8928487179767185338, 4297154246225352437, 18083693613832338785}, + {9858555096056225549, 10553430097471230871, 12398865197153772201, 2169073753193400460, 15971418942371450367, 1091129085077207635}, + }, + { + {9681282287508526911, 4228346943866017698, 10211475224895899114, 1698892461040930260, 17803383979093774988, 10310416508095123236}, + {14111993390309359036, 2601950955716363720, 6730639879397050736, 916578826304680783, 3894845782969558019, 14122184451458658420}, + }, + { + {311655445282733128, 2366794277731754693, 8447159453573507161, 12862724207019311852, 10879028081424972165, 3930832077575481179}, + {14584836693230155370, 3726981236135324025, 817259866591722463, 134655665446114637, 16268648157415006878, 355268316254117109}, + }, + { + {4860532288606162276, 11004314106081710488, 13906897172384614977, 17082455640344885157, 9775380650399905532, 4859705013148787294}, + {4027669077440695384, 4484628209953599288, 13138896518548468962, 18071971245715712413, 11010957284943999098, 3796309351538330539}, + }, + { + {13949338558872623983, 13999822274187176958, 4733168546809278902, 1627926466897635936, 17007149557493659471, 13788534126928728612}, + {6675844921694720089, 9637011121617213286, 15573984252403764668, 2898513089190539810, 10606052222462092213, 18300597426015463926}, + }, + { + {9020738854941186688, 1697516889381119272, 10894637951430404070, 15457129124942948177, 16383433189144661467, 18047431570429355124}, + {6107850723361208829, 17243425140244995421, 13395554308381924491, 1364807545420052892, 16213716354723238556, 17690236310907832398}, + }, + { + {2522091960819005086, 3742779915092319093, 16499486839317582864, 12740630314665543268, 1980734899856062565, 12849686842043469074}, + {12935833425771077826, 83225990269841200, 15699446177561037505, 11225486016581978415, 2649847060493723129, 911854890207243944}, + }, + }, + { + { + {12424795815234096738, 11929854285805518958, 1614907582435615152, 3243608722624509713, 11618089050999655243, 16450991037761706190}, + {14791827265740380694, 16253295635917069809, 12967661044055669288, 8950779205008902591, 8504639429942410457, 17167078365929060886}, + }, + { + {1313046233449071650, 12998265777408570719, 4977133893460974672, 2561165906571264315, 2564935401972071022, 10644027015828213948}, + {10686048288050006911, 9039002669587247392, 7778186232262317846, 15418338195770720773, 12395635872224741505, 11648627441950590376}, + }, + { + {14681037105441419090, 11154412906553738939, 16558423151175496356, 6285030627926492227, 10290832285247957235, 16522750161805300815}, + {4436228920200714418, 2409858423294994518, 617155725363325676, 14011524653303053004, 5177797359236803245, 8290899194960599185}, + }, + { + {12435263296022000489, 14513062589041133148, 3001590359688622693, 1093106399238867375, 8390630854825882223, 5298071266967498440}, + {9716703994510762833, 139163142171401861, 10954439330188883947, 3997722728391005309, 15245271690519046411, 2686187644733347867}, + }, + { + {11528745980014882011, 6182430424023761381, 3475082923360625607, 3076073459063455076, 10378442361972777951, 1928653322025847242}, + {11275859159200702717, 17732962924665430019, 18439987823449214394, 7064944630179873720, 3304719418024411692, 2153772832250412099}, + }, + { + {243789443148875657, 14348824346423476228, 9830514620004209466, 15033617551094748322, 13287145353793822594, 5879970292069402674}, + {12214538079058326601, 16847679853452995547, 18169365757890727021, 16879879400199284117, 7800932071917017135, 12460054258572695815}, + }, + { + {10090114058748492201, 7363290374561050715, 7843838338279350344, 7920870311130336096, 10170914017871367100, 9865561470166537637}, + {9334256772527683640, 8581897812539458667, 8599471352803027994, 8796183458658268985, 12659201731590700622, 4970311472744086260}, + }, + { + {11601996913454808056, 2966774980339442523, 8806491719792949791, 10028525763203412255, 17850477211982122081, 13173986239201796652}, + {4294659508144450490, 274180317020745003, 4247201611788433227, 5939975532167416714, 7655114550003254785, 18074517862019706540}, + }, + { + {11681890644329677881, 2335615570183618708, 12700694827537854982, 6177201878022338797, 10745204280522885060, 5447698501831385650}, + {13944548355133223332, 13427954271655744372, 1758846050835724655, 4081176162908411954, 143138826110337136, 1333853703322284874}, + }, + { + {2393802334236414897, 13598149804179976864, 3558363201881498809, 10555101826553612932, 4227704841951906537, 100142050362332829}, + {12474424570957807697, 1991825797392445989, 17078870348149694209, 1571893036435136749, 11842302574300496814, 17791109433102614838}, + }, + { + {8550811044062711868, 13733211819722662864, 17711131098892634177, 1540706468250987542, 3800475869236690840, 16871019571035580709}, + {6156757348293294843, 16929121828562583242, 18390632985111796241, 11618787844989532555, 10141372211456532826, 10522160836096579564}, + }, + { + {8165081209334278958, 4318582065069784775, 8081574069194739336, 8837613972613683181, 8266196792698516362, 3864857654878740737}, + {6803499104632318962, 10355487208936010141, 8739779104813710437, 12797187628326760113, 12836259478886858533, 7668861972296903573}, + }, + { + {8680747440971223366, 9209090258749385791, 982535240747476893, 4968038987235564059, 16403151423719561525, 11948841256741010288}, + {12550112619626029423, 12104110998874624802, 7496321954500925035, 17315621249735120555, 15846515502273544800, 12285193498005904194}, + }, + { + {4458184136234141447, 13912288647211446586, 7117356884920961264, 5467268310638154588, 15245220777673729712, 1674280713480622742}, + {11266978702654960956, 8634408824232294194, 14563437357018599132, 12842855704844405513, 1838111782288095759, 6169326332823577777}, + }, + { + {15630121427809305107, 1264840490697624404, 701327106091044566, 4687859862481244801, 4265389202393581678, 5961642557976590205}, + {6203324135029419236, 7455513180678088141, 6200001572379546985, 13701878844691679107, 177549874223488145, 685737752624899694}, + }, + }, + { + { + {17917652049280870568, 15058137289936578634, 13285085763522663208, 9845541049437644680, 11548676527161727192, 1593118089521595216}, + {10864003938379607147, 6682934333876753207, 8053350681795059753, 551995444074003321, 3834039616241196288, 13845962738460690774}, + }, + { + {17541102291453342324, 16435134367897898459, 3939250297619897100, 12831289266484462644, 2672302121940744249, 7983602741649631751}, + {9523831687169710855, 17856472103343426230, 10843947846323217757, 14788689810244029330, 16504581624723904320, 11424882804767220488}, + }, + { + {2900014861634585510, 11023132652887767105, 2781680546817585197, 2476750077618814416, 319701938011681702, 16893912712850804803}, + {17902073833702688977, 7222956556801351179, 17573562467147835250, 12198424156050387872, 7580627929306217147, 13998202371779366768}, + }, + { + {1943983450904780125, 7408346268399740105, 575213954926041679, 1462915584543848271, 2793007152100116392, 14469842559338475936}, + {3871734769136634846, 6700443490968311306, 6647535974540130541, 16864861301170855711, 10601116194391087412, 3578030254148841428}, + }, + { + {17076168913451726474, 12485001555750504145, 14937987845634560457, 16395528327395759722, 5249566901251131187, 14663685647372164951}, + {10098944853248455296, 13972698641100795994, 1737447218715933176, 2714092024085619006, 11856165348735870270, 6799485136302256186}, + }, + { + {5871871142109447713, 3293520181912634558, 7939325551904631466, 10798118573813278311, 13730791012248413123, 10321504720930821065}, + {17809680245543286190, 6650716579366069822, 10928266693125200322, 1399611361785322991, 5452474480776063976, 11884595003144475719}, + }, + { + {1276101160526991692, 1768819204291469464, 6678258399213622671, 10371513950625536782, 13597732847202290270, 16825083293383279230}, + {14168055895026590584, 2774764008800741021, 2309957760746875777, 6610907305570878050, 9706314202777059385, 16449252911102591674}, + }, + { + {14813060919741573474, 7098612088410986625, 966349190955014421, 5030549973018435870, 16698536462268084234, 604473235996320648}, + {10311165654586245785, 6873675636522594928, 14584273072844681489, 14316320659212458696, 1005079606220503069, 15954821355200367890}, + }, + { + {11183652692239073486, 8884116362394548598, 16492077002226140882, 16441016482531564528, 7470807081036429707, 9739141751658800808}, + {10370008242233770052, 680077688048593942, 7591564246708190689, 3645206790017203395, 2343053669027771998, 12572086616810161300}, + }, + { + {7519219331676774985, 3636740765491217067, 5116697285820822168, 13451090039382057704, 1896663396212964754, 5095592986735787153}, + {8207963783074146802, 6043379100202585906, 7652091558617243287, 7757654959377578673, 6081998859385971492, 2348786168616402284}, + }, + { + {7133122685181885176, 18155906669418812507, 8358116164721036434, 1130164626051647366, 2252530757558141869, 53649050676747504}, + {6768458751052378608, 10192709252783071229, 12663625005887863612, 9834336599446253001, 2038072719748979950, 13671585969003086743}, + }, + { + {4173851761541023368, 11613248765669161044, 12438237453144940177, 14553457703654741901, 12124876439154757010, 12300911432501569717}, + {9801691717672785463, 15951088982856589802, 13753872259817625075, 8949450803632947356, 12300776088138489008, 840080730448769108}, + }, + { + {5858476980082527952, 3415994521904095408, 16728629317865207261, 7095110407248715536, 9601602711454432831, 13502772203209999571}, + {8615007365984796321, 6504095591339955518, 5137600816385143072, 13062434456967887391, 4631991737746920809, 14058443721136417450}, + }, + { + {1656883461929285686, 17999602600826473063, 1799632323068877945, 7732508045647761265, 10873882997372651873, 3506525810685866503}, + {15989411289191292639, 16479471154067566511, 2001393974257662209, 843909327062680514, 3242569658964181728, 8478074943121574788}, + }, + { + {8836486505210648494, 10426577898344062793, 15007011756836364324, 313253543022452733, 11238239898276565663, 9629338715516113114}, + {993560883855492779, 15607551791478573230, 15193357750834803730, 13987812869592549277, 8887672059344069418, 5889521823488896936}, + }, + }, + { + { + {3145983761589624622, 17611056211316241576, 7512834765800752414, 18184573603751780835, 242382926403786594, 4397520716964975958}, + {4247119304022133294, 8685419354613982051, 9278503793637334290, 16772431670903233717, 16405977360280723789, 18340424413449720973}, + }, + { + {7278488351594086657, 13741799650370721053, 7077234897085578231, 18054749312950890784, 18263305810183755751, 17993843681498715672}, + {931117702416785030, 5163042803543400584, 7302612788872058407, 3506972565756252769, 13474801549451642960, 12996402258486911171}, + }, + { + {12722582186246792962, 8320877050791714570, 8335877567392598374, 13905858286751392828, 9736409409986876840, 11481277047355207753}, + {10562168749192737373, 14796357906073824644, 5143880557235132223, 1571641856571928949, 2271316785876440591, 3660167720441454348}, + }, + { + {18049602908503252792, 11214422395908641790, 11430824735860140075, 2019476279635404969, 6289777936286416617, 13753051460215424762}, + {11815459366199608802, 12257585796234971843, 8445139535123038318, 18054472803182783544, 7741484337923311202, 8173824012406015686}, + }, + { + {12256197267402510387, 13981324545434438090, 8854870249521577116, 1322567737371616078, 206839117288725323, 7997975760757403170}, + {10936017633135714664, 7366988068807007130, 8063896872358704385, 2137626719657327928, 3857424773492212377, 2719356304578840102}, + }, + { + {301934102174571642, 17806324394288773834, 16260123717658024207, 2047056936294915604, 7772436465589087916, 10948745767775306521}, + {9748882939263142737, 15303318171412953528, 951366600399039153, 11773285376383557606, 973693395285409021, 17741704800677625463}, + }, + { + {17924453454819492958, 11063986742596412626, 3141255180896459304, 6613007634173851965, 8230425337359415489, 9592328879812768331}, + {2074105989750243852, 8292968072994968539, 1989007282115330477, 9773026020534605403, 575143206156426338, 15794135741551054909}, + }, + { + {8693419915948057531, 1857557492170437980, 3828328131632721806, 16028252623001538746, 18359326643571678076, 6797739150028305116}, + {5767011240779324391, 1596344978223521735, 17443341853132737437, 10141092192444507922, 2880787045172334942, 2732830950861490359}, + }, + { + {3720564070329831762, 1116290302908559499, 8937540830788665972, 9131941124777117589, 17948366512937030527, 14685135061941669573}, + {18087232427084058704, 16817803762356804259, 1008977742792474413, 9381957960616185727, 11019890287218060046, 3802083666870379154}, + }, + { + {4862605723300674513, 9575672576917996640, 7558492797250409763, 105451604303370500, 16038157294412882498, 8761291945534568660}, + {3569807536094118073, 12152660506168626366, 15524077973685866450, 12984443099952829222, 14525324946986225232, 846797246005295625}, + }, + { + {16118471591100195500, 15075676621793721135, 16827468519303942764, 15179554880581807399, 17607860075908872130, 4006056291125828527}, + {13532541668080502449, 6554388530128575875, 11492311210085820804, 17407862345050568276, 3079559812598152049, 1961041605272859295}, + }, + { + {11643823884368608148, 13692078871457260347, 12760667246660146798, 14632954658001918449, 8493526038677331601, 11799308386431974644}, + {14675672791238509138, 1711971116872200846, 14683263505637045451, 9945937059533842597, 2533449755114148002, 182889653926968389}, + }, + { + {12117719403043995995, 2911986408429249777, 1810092692597231347, 18376367531841849458, 6595121441567685408, 12086792012295038031}, + {18169524376531427837, 7290300957931658086, 1193279940028308124, 133756179824057793, 3153937764794889756, 949814549860399421}, + }, + { + {484820520924399903, 4326328160527123330, 960211674708882727, 8917024768858500619, 6654526459358471452, 13449950526572072120}, + {9962763721058274024, 15699755065403197794, 16510141891401774591, 4621297269285137763, 9994000521116731271, 18052048126792112397}, + }, + { + {13533215919022444391, 9410324278985615744, 9852634656100194208, 1155971444710515203, 2911320463483837737, 231084108675667411}, + {5261097282088390531, 14003855699351521178, 17744595804999607148, 12877326770237543851, 2381016402869931196, 9246060959671779703}, + }, + }, + { + { + {1480509573599822036, 5087695994006556261, 17552775024242623509, 4908461990210297503, 7162610856648884601, 4093820247209466993}, + {2797950306474546244, 5001803039722689495, 6874955169311742070, 16748306778408052918, 4663084007893308007, 14696281298177607450}, + }, + { + {11992083281415385424, 15003924313644360188, 16060749513147241488, 15017414158265602339, 592682985276747063, 10327384700468822392}, + {12963019048030648384, 9853215583316433375, 5853002447766629843, 3573502149365840495, 7038518580360953609, 6673767391281747746}, + }, + { + {9298643174512728477, 13990767093997540279, 4393323960646334288, 4483648226430512282, 8076224304421767616, 6102759767515536930}, + {3652706241006741637, 3186805786206752554, 13272394214313265857, 8224305150459867349, 741190616027468712, 63238693198034713}, + }, + { + {2449597540862217259, 12351778639332774926, 262991594157788783, 2680188811965411501, 615952274938618918, 11101057916879795178}, + {15843704445146482504, 15768003479919439006, 16910795055422658817, 8210619241519359236, 13238407118245991998, 16212017713818083131}, + }, + { + {14806494457242751533, 3449804849483160156, 16962452567092059192, 9141394773020099337, 8870354660703521024, 3891566159386999852}, + {6146187894824960028, 11953410583785840196, 4404488807426703410, 6773066909874546524, 13716047320419439079, 4345501551123937401}, + }, + { + {11770160881016297977, 912473005790610286, 2745675273862880545, 15571792568792967285, 10677789776282348899, 295569599270057816}, + {6996654843946379963, 3996640705568842675, 12385530671849869858, 7412246026156424081, 8603296241680544804, 642377289008783440}, + }, + { + {11971881963673402517, 5439855382586921512, 16727103775229765963, 919596519199508651, 17937823088055377422, 17176167766106996798}, + {3663817202726401586, 5233288534404927566, 12262379145132434982, 12524678428958655570, 15158879251407581617, 18113402803324294467}, + }, + { + {5911831825147712996, 11728153653307965512, 9638203731413711221, 7948268717672672186, 7633819740372611413, 7035796435141898619}, + {6174193923587781027, 5408370123448680957, 4626366961562317252, 2309742647852990490, 16455916524028211003, 4504573468719265476}, + }, + { + {9058031745280178311, 690568667783443719, 5828783220548918226, 16050974080522553564, 13601922218850425804, 8808996512886455105}, + {5092307204676037523, 2947766400331304188, 7168571072799599807, 18029292030846640494, 15149715177238445188, 7857041415140644235}, + }, + { + {11743616397824348491, 11497771481919230308, 7158569983910845263, 13603604323915554008, 3337542887194115557, 14157633378937758586}, + {370281458279622519, 17762634864406198956, 11337855845757706931, 2929878283715844237, 13865396000587203957, 7059037007931834351}, + }, + { + {6973772658311339209, 791613060143613947, 207740421140774752, 15112398720810035573, 9603899779905889177, 5467205843920466750}, + {14380982275701503993, 12490114314596206995, 6782837922057127896, 8380489751197838412, 8510299632595261617, 4701772950345167165}, + }, + { + {17694086330481919631, 11636328947060876015, 1995706737774084856, 1925297315118813321, 3075862652270344957, 6399044835008845126}, + {3179065217616615921, 1550261549062697917, 6277396572721355536, 17738387466266963038, 8634038426968132537, 10728928687683354197}, + }, + { + {13587993255682028939, 3093746275081235678, 18152806066111947732, 14870862873010104695, 6947641398927171301, 6167792530140134466}, + {15651443704630473260, 6642812576181662272, 17064834710938919444, 7375543199807976966, 14845457653197598647, 11635197020740053176}, + }, + { + {4049527531120095178, 4601134559076758743, 9749942598880804868, 3990727773964515788, 7976713942185951445, 3046031092694896893}, + {15903097778987665452, 9044411259806049413, 1100762861888218692, 9340935249673778045, 13483058690067148645, 1545265903606923858}, + }, + { + {2035047113284776118, 14270860440293482779, 8925762303886288983, 14305197949489621718, 10202635115093639414, 10612436012257691297}, + {4441413877178186113, 5982857664255490920, 2491752418622962596, 9740828623410492538, 16822026648654939159, 13367270937584463190}, + }, + }, + { + { + {753467293193578188, 14319628483702379607, 9902332266754012588, 10961250711959848420, 14561592831116999990, 5289034957582773903}, + {16878255390347501753, 6614600699964682579, 15224133068199077460, 8845898800353928686, 13501508557386903079, 12790515894544276936}, + }, + { + {11011452278678065531, 11497839782101232733, 7285443384376562651, 3269734604421310040, 13431092833461803889, 3947360924216217744}, + {3251034893487035800, 12202372175578593549, 1928365734042402305, 13907315815562159932, 4942146767537177575, 9208365212678422011}, + }, + { + {12195725836685438469, 858993920875325442, 13838230858435487279, 3353504415316812969, 7929957941866392419, 14225218649971283983}, + {18163292212490608521, 5208475779203961411, 18277468513758427896, 5137327622216988361, 14819617095799940577, 16354307604702819275}, + }, + { + {16781294408245827650, 10125764934688471810, 17386045350799928761, 7875599535676923213, 11646654052414081972, 13301057675984901743}, + {12871815118558604397, 730917248827024292, 9514315608146867033, 513190696593073824, 15098974280120040377, 16196294686650511719}, + }, + { + {16909596444779110671, 10723968674526571591, 10996553782910854129, 16341969708695486761, 8635318916065362596, 6184764740785536711}, + {4510923062913139004, 2099379644008359301, 12406019366618763142, 11660159720716101851, 9002817464305502564, 15689479522617312827}, + }, + { + {9012015558077211452, 12527300838564203164, 5537302239069624297, 4367370042010266898, 15289441745247695580, 4593879093246181819}, + {7147970286091237416, 7287559954909509597, 4624960348890895434, 4403301422292173682, 7585442950983589875, 7325469891518486313}, + }, + { + {11624314814028789299, 4829320234443117094, 10699140943317911265, 14108042008131265164, 14865288068464758045, 10370004463666457157}, + {5805719613941872131, 5896198105631611038, 1844096097102433842, 1338882622497873479, 2882306796959123998, 15679394935542538300}, + }, + { + {11839803958974077427, 12283042318798607896, 14631718929239598705, 3167303738550719650, 8387688327413311466, 16263982689936295493}, + {4641171021165489505, 15063549369667052490, 4114993861532264470, 17514729201584918440, 11567986488283330737, 11751214862996904663}, + }, + { + {7533651708740465644, 3241255842488644864, 6743080020393835585, 9662587303565932915, 14065041846648071011, 12865213763613806318}, + {3077902115599738788, 3561402121178551657, 14611443992052777610, 8057658460840092305, 3326179385599463412, 10159717164443540788}, + }, + { + {700570683660150445, 16431145398710913934, 14168612051358907826, 13260960614387819370, 12988684119093007748, 1867024934246155048}, + {6311188673107170040, 3547825519151270185, 7128858853100723527, 4250551126633259556, 32233820825017096, 544635653753539727}, + }, + { + {8186226847711890094, 120861651635567506, 15214391831057401822, 9554237535615944181, 10075996254396042981, 14008290848782906398}, + {16525833259001997344, 10952578407797544068, 9567631957420742761, 4694819969357735839, 7767798136118541848, 18127622189992993176}, + }, + { + {7372375356062107488, 14109154833185040894, 4602775210887940742, 13468454637087016746, 5719482738764538175, 4919648522641500969}, + {14001774924525738221, 1330372407151555180, 3428768277669749657, 2816692670087351763, 9277450502900005529, 13715847643179616093}, + }, + { + {6794725365200966305, 9338913627946190988, 6477518264556505079, 5413655651412570539, 3966748832123982834, 17431753968516942256}, + {2369756878476639122, 3529105775992784064, 8846093841954577079, 16453616771411600591, 4485347503114816232, 6730810021701621332}, + }, + { + {1450226730593401111, 2904272681147253326, 11091003663793942841, 12036368148456428561, 11936601964184969530, 16312603396316459043}, + {4136271589497610048, 14294570804106047765, 15555359403853426727, 10264827714357589573, 9810665706497301464, 1311018743132753054}, + }, + { + {18271820402515351558, 8762537564155822450, 6068223146661937849, 5461403608011964107, 4988573958931158097, 10363771067980560783}, + {1663617762306194365, 15095271556849436192, 3047795323021630415, 15887201493595197850, 7868923572436975277, 14683359131088610248}, + }, + }, + { + { + {3584219355111975656, 16371250505380188607, 1783498323461654093, 994193781588257676, 9344084148092131914, 15250514640734155003}, + {5059260913356645611, 15865386190442670448, 17548757651739284710, 8085895309926420946, 4682964998668660167, 5020215203959826643}, + }, + { + {14253762630740826994, 3822111194856117434, 9311588183436895562, 14738024658650371287, 10441316960341346644, 14194770708525922705}, + {10501198799087781964, 6776195770649012397, 2069471581290353759, 16296715215024806431, 4534980656861543696, 6047881007434832794}, + }, + { + {2576612335437377594, 1899682712651141430, 11887300270792449021, 11804472993069758206, 10830999119719313280, 1741753179884488861}, + {16286699122731099873, 3643516247376722163, 3682273255591068565, 6392728837720629214, 11901348706175159921, 16143485051395996208}, + }, + { + {16501275346405437273, 14761564517561445391, 4638515002973003639, 17077550066034272812, 3698823236196638906, 124739081757270004}, + {15651979540537047037, 4985552038876265035, 13897675410836153797, 6701001687129639509, 16001679255576062512, 15935676633572097252}, + }, + { + {6152665130156855097, 9705469503204567708, 13951924545067113356, 2434138635056070528, 16591230788773292318, 4426260001178290949}, + {6390121195308333473, 8700572060668754242, 4812036275221797020, 13956720073248299438, 1902555843966298265, 5202141163826482301}, + }, + { + {2205395724283622824, 14105060019721358203, 15333631923716583964, 15403277868996709611, 16053651221022177038, 4784915253302323097}, + {971368063439244399, 827094312859966805, 1289222939864657176, 6606646522754926560, 17884747739152229998, 2668818780560918135}, + }, + { + {8525645166886970196, 3134143460247871741, 15116115167560752933, 3078800960701409856, 13059504075862532550, 9108153517754978547}, + {8250610785324912755, 9363672325956190127, 1495074847941437905, 10404043508726832050, 3904454763323616406, 12813791572599100929}, + }, + { + {16231508947971999600, 13363198726931461200, 5108997208952476742, 313182511761731319, 13219320773345255384, 17738895122530321495}, + {13811613026355251284, 8104379475524665186, 11192626091005940452, 12269372147510686296, 14390816163307043004, 12548485382177679293}, + }, + { + {8324780214689809449, 12924270761990727384, 15667753985117360698, 2943366707006427041, 10732039278085105434, 187369508428043393}, + {13244759855456178980, 13648213682810990274, 2660837912365849198, 11976770768362504658, 9693934687975961239, 13497908482787476774}, + }, + { + {14274386677405027725, 5124210746189478907, 13406608799629323494, 6405757996539000551, 14833312365952984384, 17785392529319073280}, + {7012330673098190805, 4918207845691492471, 14569574826272718621, 14168881522510616264, 14543438332068119070, 4326878510849999806}, + }, + { + {3341517100128815958, 2243420303688401610, 7153321666640309374, 10525543547452580816, 15776339624494341946, 7695076598671462598}, + {17732536140683547636, 3592810100391824473, 8413963613597435501, 6287395742336969309, 17465824153452860115, 6235174426722257030}, + }, + { + {5115445260875459050, 16200730294025276633, 6547940770886449207, 14513875339087588525, 2198135911102420364, 5169696006198573197}, + {11212158904251814892, 12437547968034770636, 11358243474088174481, 15452137528587726940, 4669136461455404974, 16320538143089060251}, + }, + { + {535242441654234443, 17036092933883802967, 11600759291125000719, 8050420965161709260, 17428526452419188659, 16458791281477337579}, + {6849931777343444339, 8512792140518036559, 7343733992893241199, 600235943839786928, 12840987592523793156, 9723169304965060621}, + }, + { + {16910417058622635394, 13917679375324377616, 17959562963138340920, 13359247597962361445, 636821169073744083, 11256621821635909669}, + {7096901051607551014, 2253054364079345329, 10215298864674526475, 8119225351234426800, 6541463265042612592, 12031138687814031665}, + }, + { + {5533765953345363299, 3666831701473191637, 14428123488067625678, 10208783684904868326, 4235254303243099550, 1152270923153823119}, + {7789988973198825144, 6281293996379084253, 11378132145663703106, 3044105183226657672, 15306186828154649523, 15118610766364934343}, + }, + }, + { + { + {16935319226801225402, 17479248115784925404, 11638874181787898404, 10204689344548103047, 5117503946912602321, 12798676317624404688}, + {9505799912502843544, 8138377038334669868, 12720954262725413506, 15335292261188744188, 15038060543229285980, 8787225712640151227}, + }, + { + {15287318513745980942, 15744943637312052287, 7712210611206194812, 2217808902952441036, 2880866790953980192, 7667233076242231085}, + {13340980843800511721, 1457443910895561494, 5659029865434015148, 9961325920271003974, 15801510722608035636, 12796727676398023612}, + }, + { + {15122689851130277466, 2795800145719527903, 13568032512724822791, 11462146579021072831, 4492622156197866593, 2389375563422758140}, + {12865430000561425758, 6876703980342191229, 6462758017056646394, 8138171318212409116, 4936990990444974691, 5220248005727829595}, + }, + { + {8222368087744136131, 12347516717036849679, 11297745347969103984, 8698144848560622671, 15235738417459308488, 11458307232141527973}, + {3156981165764697119, 3057909217286827485, 12707579681957851551, 14845444651771540740, 80043930456510931, 1427289826580350896}, + }, + { + {7271145335703081483, 8550379746366065405, 13222245170616935372, 1540183103607345547, 2206602728696862159, 2058073362893523092}, + {5459388607478785206, 13539611642074024292, 14402323904633266753, 11367015657725980988, 17537636140146252991, 14350125041234662967}, + }, + { + {15616429048255216098, 9646593367959435050, 10000076172445964456, 6887507833360734784, 9214691284865468772, 13407989755707318537}, + {23319057005728778, 5445755128474749921, 13782721823710291190, 4306629918002434911, 15715349716986824199, 6251943698106742954}, + }, + { + {198559125451872098, 8385427235747237692, 4233027135118542510, 12503554726860108589, 11105115177544924331, 10775185446004113820}, + {18212911447748408345, 13178565926755254085, 11114640510577499, 13843735599818615925, 18381258674287597192, 4756672869046810150}, + }, + { + {17538496477622964185, 1433183888673756786, 9984974491682898090, 4517808169349623741, 11986465564270089848, 8951472393424828879}, + {18196670723256299192, 535472157380722178, 693981884244746078, 15216522065428143733, 17726679260273203578, 9642969849409448024}, + }, + { + {5160114191168942061, 16463297770925271772, 10584792713261988719, 171850540846180989, 11579918515133959672, 10396694913224588816}, + {1922695067497914227, 3714397082557422085, 14915689713324864917, 3021901216294169148, 8451082446819513089, 2760044106111795702}, + }, + { + {2097173236089378814, 1814647054859784608, 10170299954366323333, 15955393059406664485, 4430370743633462938, 14617134597845327698}, + {6936197719765052068, 2035967928833128806, 10470936468275213989, 4552370931749195957, 7631626755294792165, 6995299789974072943}, + }, + { + {12192685447194213477, 16243788027426389138, 3307221830229366704, 4572373691827105584, 1147991015406820584, 7590972120066359889}, + {734169818930149130, 13046977851131733697, 18326449449602619156, 6629039284529698715, 7271937928914886253, 6619823517983792967}, + }, + { + {3491881131560177144, 7135322509001495847, 7718439954155088601, 939390052225540969, 10510098057025374009, 1036897112091468594}, + {16801210479572678348, 15364620159660153125, 9689801136876260321, 8466379544537007598, 4580285922100315708, 14754066353072462775}, + }, + { + {14236937969687093384, 11875131250768543855, 9199326778448473576, 17010296519672747261, 1432191715295448820, 7240396672478525409}, + {9282856696818793150, 8929298554101654038, 11691758527810395698, 13529214720842330904, 11364130274429289404, 16330417304431446315}, + }, + { + {15048936394544601723, 9976495942367902744, 5091911528724055948, 11917276080086885230, 18264141168509742890, 8988005100166523392}, + {13433041019916296924, 81537940451447058, 7905632599843138323, 7403634956612254316, 9471327080643618410, 14680725036927871901}, + }, + { + {2480592968060069230, 10676679272536823217, 15243200241275199686, 4240286848559333728, 12603956967014393016, 7473015364599570554}, + {2693765916823593525, 17572693658548274653, 13118888526718862906, 7144820876393735119, 17370196132870621301, 15051190136387242039}, + }, + }, + { + { + {15739670027855719825, 11036910205333787352, 4021544392863474986, 3565553387347367423, 3964961332364428282, 11603690097938709153}, + {11178322814781082150, 16935748921430175757, 10468742523886846223, 12912873445700591944, 5891559088297154919, 7322207037498008851}, + }, + { + {12503447801634120868, 970610322114574805, 1771807998727008733, 13441366741769313415, 4222236502986444720, 6760646999389453689}, + {1245452496533201083, 11777722003914828797, 8588751099069529352, 5461466601148872630, 8337331853046009840, 14200040474835462559}, + }, + { + {4381862158218819279, 3257946724717759531, 5715153718741221113, 4670267951691935548, 7126319499291794377, 7414184252515644416}, + {4409132192672707346, 5008109015870660081, 6646364227378002309, 2739818052318307018, 5254205492507002412, 2818763676677612931}, + }, + { + {17099575116390052440, 10771651599651215927, 16162078968288139277, 11747949268467955645, 18198632468383550806, 5718826843079118428}, + {12831818154622136923, 1139908981801729025, 18325634788038344414, 7897003381227512409, 4530946171065941992, 9839081555707087441}, + }, + { + {1822027882663919965, 2586692059104727545, 5262003340562216457, 15937894742226805212, 2377491755233029350, 2199279221179036230}, + {54627843603070570, 11018477725217416055, 13581326215347987485, 2599428256427468431, 13357876536889150180, 5983800947159377657}, + }, + { + {15875913836362316711, 10364504788586479828, 17159094454348286198, 2800760017120758514, 14648701318118632258, 10084646760313097110}, + {7413441597539522638, 5800112976104553529, 9603144930153129200, 18001343598967203147, 14907060105560621240, 12851016504514458788}, + }, + { + {3323767885881860783, 945816439403988314, 3122694203407892777, 18097120801908111115, 9507940132379519570, 13017216324377796046}, + {12112635426215062124, 1632305052635647076, 4503287615961131543, 5133655488959366792, 13376146870575309121, 17882590448286769229}, + }, + { + {16466564999101809423, 1103282883706681354, 13897339472612964740, 17515405571613479317, 231560140111353554, 11990302689318760970}, + {7461824051127758032, 2488635053784032130, 6738969321229436836, 12690895278364961387, 2762939532146449635, 2566430231249792091}, + }, + { + {7209658814720595696, 6910205524542965175, 16895432611633764341, 1110904616599822555, 768894652460082360, 5179276470661463666}, + {15046305975780485616, 12488826026249142249, 8883750914202815334, 7813886526674522093, 17626611286752587237, 14173740877250861014}, + }, + { + {9184078983275066527, 171829382296912269, 1767211109057348846, 3838810139883956938, 2892177352325525577, 587540104068323612}, + {16438018710111896232, 13071494062615911086, 9382254240153787479, 17837390153984245022, 9337352294335969384, 18306549772652293379}, + }, + { + {14206472070300656666, 15149876885322007535, 3058976565256742606, 7554155984973508676, 848860206737153803, 17384966138802851783}, + {6071585659381516479, 14599727484496636530, 14181631841630691241, 13597791031715947870, 787248750081521448, 8147947928967221166}, + }, + { + {7004817083098459682, 16726689782184453232, 3213280543725383668, 14046342544758604883, 16080740219683260927, 6076899979239474997}, + {14309002016238865418, 10488447184497156801, 10347316099979186191, 11941243369619909359, 11458632538231428835, 16102685462015086321}, + }, + { + {5487055055828671823, 4943171312842343470, 2928579838198416229, 11795723672039180426, 15618595864800120544, 11464055884874039484}, + {13454571326567663312, 12358687232096370990, 7938409714147002954, 8608381810067054636, 372913087078823561, 864501330934225576}, + }, + { + {635797081607123489, 1104369599182677226, 12483036179234706450, 17056128228042647500, 10009312675611681732, 12059669643105161762}, + {11477626132980303816, 5618063553013787498, 166943516871328425, 14701206874730673486, 9058640949987144681, 14563869860860339278}, + }, + { + {5395965497092106349, 3612539035634205771, 17681237127506582399, 3439193647142441652, 13780614753565633276, 235023041725887347}, + {3033179449351627440, 2044311760483059251, 2065568607574809846, 17974731450209330886, 14177489327434055447, 3961147821444060613}, + }, + }, + } + + @(private,rodata) + Gen_Multiply_Table_p384r1_lo := [48][15]Affine_Point_p384r1 { + { + { + {16703670340392818579, 1286760518886852636, 11248394403413918835, 4151901610420793306, 7970266049123896154, 17445779790134370107}, + {4329645970348976719, 16042142634338562513, 4537215703931505808, 6697447871083152280, 5793772036565999466, 5422118019001268159}, + }, + { + {14433915249620809430, 14971215887698628099, 14827104772163660010, 11634958463871186927, 828474226872480842, 5684743366783276110}, + {1331356080952535699, 5841511589364898644, 16990208903097464526, 13569226881169318218, 14248664498875166094, 17077506676755919754}, + }, + { + {5595676609776115867, 14618789080398559922, 2201134414120099102, 470895016097834742, 4102274241195483625, 2844568561456831518}, + {9494102924637200590, 7204580187252836546, 7742575358791209801, 5793245187166312694, 7454323588778133219, 7806095107071672157}, + }, + { + {18441227226710925557, 4630553211990364563, 3567153708366150805, 3858385788220258018, 2078907395053339838, 13453284031779612583}, + {16169419783227686582, 17856966316888004876, 9896590068038479498, 14513417153433374062, 5670844902446917335, 9309033883650068756}, + }, + { + {8174394611136832104, 13491946505368383532, 12716018224795668623, 15943834453938385647, 3311092385060995418, 10887239960276233526}, + {15318725704412058702, 13116557402644158788, 14528201448082359539, 9228826301082322952, 17581754887086264468, 4047041475027063331}, + }, + { + {18438599215442843313, 4015537097131987576, 1561321091994153296, 9662659929380603540, 5578281112816876342, 3480911564464745823}, + {858348351556501620, 17689640268312640141, 6959330516163154977, 6424518012595766799, 9187284181582831648, 6293794091600054382}, + }, + { + {13045229387657188208, 13690085938659083295, 9600974199166858024, 526884655886879619, 9290237641803195661, 7044646765166233376}, + {16602070129307025076, 15849288967186609035, 9092091796131291387, 10381155581334810487, 4911799803962481643, 914336345096302600}, + }, + { + {13490991706206957717, 8927032385078017633, 7775090801253487746, 17974570142754513596, 464854089971106110, 13646019468240342346}, + {13801477758808282478, 13267721605400745615, 8832595569781960770, 9823421671556846000, 11348861522513112089, 6704673626616438154}, + }, + { + {8798162395637210450, 2683284686000899615, 4296198105208970139, 7947505075124182900, 13030877569967081055, 7202635434125543310}, + {13802611418940267507, 17744356624256633959, 8515974827567262278, 16069780865789899366, 10235134369297564617, 15382730249140051729}, + }, + { + {10693928681786088231, 1868325427202955038, 2891972363284809610, 6677373020746038340, 14105047344690585066, 17441979056936361876}, + {2686563440401097160, 8335702271416969845, 3158278451667439105, 5195564280130047356, 13312870524821286691, 15037483265391344728}, + }, + { + {3961559481920028500, 898644078007715818, 14752617534552494351, 10654851227350209338, 6258212134755923496, 17327451745924835018}, + {5507497779295982340, 843987163524714857, 14881898850445300947, 16441634412065732426, 11312619178008978797, 3479463508901782856}, + }, + { + {17561502496821949095, 17726839616498802252, 13796139019518438084, 17300206272420033420, 10454206928587256948, 15885557324996538691}, + {16041928347765771195, 2239441821804334412, 6135738566013018613, 4043665170586576566, 10115109045930619727, 6594457533842211310}, + }, + { + {14756924596072248000, 4565075227644918341, 9793935188935462586, 9388712027596954480, 8006957541468583297, 8242831277630235578}, + {15798273981155867752, 6668583424992018829, 16434344268720351774, 3606110602406722084, 15561842144076827952, 2349656254358783019}, + }, + { + {3253443540806261442, 12555698908805436602, 6007490220897601617, 5307008481266272767, 13393830130502009899, 8899654776078387782}, + {4245028374464324749, 15297078807106399119, 16491046288077512347, 4048243407351607495, 13370129289324274804, 9876476920885673812}, + }, + { + {5390721684048918729, 16937659987125372309, 7680342595364868670, 12142253496635306986, 14233066834308424598, 671988498495879468}, + {2704194713182753691, 8912885238785332267, 15078054313953845804, 4795992794995133067, 11649755685481317418, 11930012365952944103}, + }, + }, + { + { + {8103759701478546490, 6028420157132162257, 3067900158853996905, 11583772150650265, 13094984669461418774, 6924985893407600465}, + {54958071128185219, 5021622351003191237, 11654157968548247126, 16247401174679100696, 16385802195540251172, 1031107974518303989}, + }, + { + {6428454722497658491, 10574271313549116822, 6743635881957160769, 16913635330376244749, 9681507818909145851, 4876529861171491293}, + {1814394652136903734, 4968086053144023329, 8920542953983370742, 210240699625540355, 8955586987380900266, 2164268895419701767}, + }, + { + {5608034336248364138, 5067877992472687888, 1933286244725713046, 13242405536880737213, 17263293185510756261, 1983344179233384988}, + {4237886563426459300, 9362799971325551733, 6786753397135169332, 5328115443562703638, 13654670013742588183, 3496580653988254115}, + }, + { + {16071914267185072355, 1315031918944783309, 16012293156990256785, 873056734499530638, 182560274640457158, 7405766622048342074}, + {16511661555914077662, 16795211140914816975, 1916902833101131312, 1130623122713241497, 3989275369171052712, 8501563225308840504}, + }, + { + {13149817102019880631, 10613889292284716178, 14010209428095701112, 1069882031932704860, 2775529095131230131, 9347998569909840066}, + {4409541671614199253, 17197365123077983458, 15652322139676023536, 7678148401641840335, 6034482384901310542, 9413989696720117446}, + }, + { + {11107110071047359159, 16288145590887699966, 2478598181863120847, 15571111403485190543, 10919164510183037186, 14098221725957317118}, + {3061511168275528853, 11371457453448805883, 8189313039485832750, 6940285322230600293, 14956213158219260245, 10799498050375169041}, + }, + { + {5031907698608444539, 18023991803445814565, 8556321431341137752, 8726888316311726846, 15478462387049033552, 10223636290028566398}, + {1905780687053743980, 6821165281886008665, 7646114077486165623, 3026148831014052877, 5536359622022292613, 18100746543211803131}, + }, + { + {11288497443759020267, 4363091778301392226, 8219453406085589946, 10369445991132585411, 5649747494026709400, 18114667371941410725}, + {5194421950530684100, 4023001639787678110, 13257830134828579022, 11041975949961923389, 15908375997592753284, 6836247357428864861}, + }, + { + {8547337202213930412, 6990159258245634878, 17883445208299166982, 4330231136088960102, 6472431629071074290, 8131668855043775727}, + {1615633974804093366, 17702421785830517013, 9040817873428455213, 7253431082049880663, 2580856565062595255, 957305604392189103}, + }, + { + {12550147352209098659, 16706353701874781568, 700985739649075400, 4991698549871850585, 14639605956467764796, 3990548737524847695}, + {2159031565346056390, 14297287012776021245, 4068789221096394891, 11837860404566828450, 1306127140860623184, 8582603028558393539}, + }, + { + {8572221175486824716, 7382610452565148879, 3798240777531515882, 7720424940498032163, 7955672733623916913, 10400992857478606514}, + {12536704118238452711, 1197472667002221920, 7958112946414946287, 7516882332626933011, 6786534214144691859, 10528818884598336300}, + }, + { + {4533011924393772581, 16478214876471299994, 2870575348476289509, 8319688882646555414, 7938557478377595810, 17061203640304685056}, + {6044136899841184844, 17176981934203875292, 14440091607628557291, 9556569541816694726, 12283955757179373500, 1728837458486823533}, + }, + { + {5856710237476933835, 18180055770541353170, 13666756016638015302, 9964122442248888293, 10568196656880286198, 10795529097021501365}, + {10291893071934944227, 1707329095509852784, 10774246437350578760, 8243808578767563702, 9842723530450682815, 10188532762574071159}, + }, + { + {12927366458992235142, 12160026958988547745, 16049652135447450561, 11154205822470049879, 2553582547365345640, 1479077593723189613}, + {6276822011775852642, 1807019718136820449, 5338003307650859330, 13548512004292529114, 274283195318475252, 4262254754558484551}, + }, + { + {2472529054687466938, 17137589090954053016, 13215293749622035568, 14627962367947576303, 10928297195163569905, 7813265877078949706}, + {13456308939723513800, 13108147281933977161, 5072676724153339749, 13630316084050530379, 10412807778936469738, 15061325193703102493}, + }, + }, + { + { + {14062262138187338878, 14826409911427014159, 3147169237468764230, 5040482455529903325, 15961102847332276086, 13076348733721508834}, + {15710048825425827881, 4711284320020833684, 5495111936001513123, 3975264090403135121, 18277552338555821101, 4982873089438865894}, + }, + { + {5881757900577935727, 3082203099603789340, 10587626589676775022, 9790887005834760478, 9753637089164583050, 17530540992010733452}, + {5906674355300253726, 14153899797650168477, 3203393482568874434, 7159946211415711208, 7770493192583170243, 6644035929201092924}, + }, + { + {7565543376250635378, 4894026024316289281, 1064629363627018549, 2229266393711567405, 13431836127556156122, 12345166870816475249}, + {5683094813130145113, 14460568816529669593, 16208596146346015783, 2251060002020925256, 6312100574995421868, 14142863082990548960}, + }, + { + {1701333505386754372, 18113825521491950532, 15971836848310645636, 10666804696553863930, 13339073901359549963, 9016082484725164613}, + {524595420371030344, 15193894147408008715, 11249116561046537456, 1416362693818654170, 8646200124849404878, 14789125286420214299}, + }, + { + {4448219040529062825, 16518108651741681163, 3867577730929059843, 12855944907169975887, 16383070643186103984, 3819970029429236068}, + {12270348593365308353, 3228624969622433424, 17746128033189004516, 15514466691444838563, 16922017859272304090, 10873928830553796343}, + }, + { + {6961979079470599534, 16442399973939705101, 5377070573932785756, 17366295333623521118, 1494760113702996405, 429566900985508037}, + {14596353036230607150, 18306968147291386069, 1956159373957339528, 13362661793127394768, 11047915751588023609, 15562772745602654490}, + }, + { + {12121783799905148744, 3210361347813891304, 15601117831098401384, 11374300947166969030, 14495343294857431451, 16887049363902653749}, + {2806824323484143617, 5891762208520246921, 10519788632722533851, 12406881532231465105, 12476596345610166775, 2929326634009750346}, + }, + { + {11619033824779825453, 6336011282085668010, 66441947656791796, 12634397924162340700, 16056962418493926156, 11181515142520561407}, + {228191213136585541, 10830330953744400264, 2487877016763970308, 943175580952184167, 46830635233029711, 6767691008612241467}, + }, + { + {10533215390069074161, 4240175145555423422, 927926585809726275, 5478507036975461437, 7372848586643865635, 9188187990850719132}, + {8456896957742765, 13507092707706845733, 4249106212594536568, 9711299350266342220, 13631286176123080117, 4243238077447546989}, + }, + { + {18238242856411579816, 7012871932937161633, 5224050476172253536, 12408721251948601788, 10429115795365006677, 3477371341824366834}, + {15692232122888670788, 7069484297055312625, 1511660220915668033, 13645274720004713009, 11371041276648404641, 3227460690876065865}, + }, + { + {9499451334789564187, 9807725712319466421, 17195273970347031491, 6512007407498606377, 825966736514514068, 7114432455006537628}, + {10929611578313393309, 3516227960140039809, 12431877805751955166, 4016269285378947058, 8308345904367589503, 479384259777781962}, + }, + { + {14823174488388431791, 10564122197066740052, 6359884666645689361, 3305490714663935161, 6956926106723106036, 1757044025346810681}, + {9218490684456903330, 17894538754746428292, 3686852509050441380, 11911436761000976094, 11281044983406290132, 4794870267149123419}, + }, + { + {6169315169310965043, 5050462902740654046, 4420119860349968507, 5900509286663583281, 6291948542666637974, 3502179279509591327}, + {13414573911064604645, 8561174987712176835, 15147203171479718083, 8916929729860280634, 465692852423696059, 3241796192189938737}, + }, + { + {4805037083483896463, 15749560291366181979, 3006668833558996338, 12746633991383561533, 2093748724448476449, 9143995667421057397}, + {862280791886494713, 158031676650943923, 9973152260325767561, 5540147634920097817, 18166813436129848595, 8728770860976175253}, + }, + { + {4780823618183778549, 14061468507515826456, 7924000550603741539, 16510436260807392542, 17111673152849580261, 1234594638075874309}, + {16418687934646105232, 3635175728906499987, 17864341637460241578, 49761007765188774, 5595562975249122128, 5917189370132161288}, + }, + }, + { + { + {2891150813386726224, 13575952774970790164, 16329951209698470872, 18208247565458407151, 795211506291706468, 3446245218498235605}, + {14887832502310695652, 7581320984927408991, 15304466638902159963, 12725650577835381689, 2109861799774686052, 14818469767057813718}, + }, + { + {8520307348850101682, 7147166939641194797, 7109795853315555561, 442556286123685640, 16703274587824683126, 11297170023439632439}, + {10777125051934595230, 8742602774458406457, 4568334189916483142, 9580614388736516768, 2144947800046381092, 11233838117038064428}, + }, + { + {14724535093102438262, 1097342397055114606, 9684252469138587855, 10770495648038995593, 4782115196813486405, 13108894563021474936}, + {6186407145212796523, 13044986185014550590, 14287812581901877630, 2228056593434999714, 2377539634072584064, 11484070981184438199}, + }, + { + {2372261882030647536, 17006732445240006818, 102465582613597482, 2306438222867094987, 7030387201499219717, 5620507683182655462}, + {7426675944447602092, 17517494666366669692, 1813907813072832665, 1664846168154029277, 8169354358603845783, 1009146886505697517}, + }, + { + {5359889361557595171, 18332881320680903217, 12992372967564983467, 3235336283246928496, 1918122366598530872, 9672910778717714037}, + {10998109349782570051, 13802180944593323119, 9243457800738211841, 14095366958484090980, 16875322389911718389, 11796767024296942452}, + }, + { + {4154159147515201722, 1273058311504047038, 14930295376923149691, 3541538910606543693, 14677828445112984159, 5652606725362693691}, + {12587781688969918075, 5762437720521018878, 8791631222951065564, 18036051705319852103, 6505939774259762064, 7898749725936014100}, + }, + { + {6073232427180312380, 2682532781858699359, 12899347092203445153, 3460025242522313749, 4187053964557337310, 14007867821755778993}, + {18308269875959593333, 17332777355331823582, 7827095597708416078, 17863450250717363140, 18143218844291088501, 10900355318411639865}, + }, + { + {15193822661262360443, 5913328606143520006, 4932960895618406335, 15675963329264670252, 786659723967404702, 15232212664900441010}, + {15668180363894430003, 10607216776267006109, 5301637052223037456, 6083790571087095778, 10053342033687645838, 11423643886760792179}, + }, + { + {13508339220661185864, 7911953729259324588, 18173014631200309538, 270516748480480779, 674907878659291397, 3314126255600287460}, + {11240909876624153823, 14246305828355338213, 16826984562886383731, 13091972868382905056, 16310998494569268055, 13182051848225269981}, + }, + { + {14790615268961369640, 10646825950331407644, 10001662541750174959, 4485562084633894157, 4694132461615297692, 12672440127863843193}, + {14852450733356045921, 12752269371731614662, 1290625671287973161, 2039070529850743039, 8986721707197477570, 7630558459824216971}, + }, + { + {3913192058752964309, 374802346376725418, 7620720531723602129, 7342095966104858310, 10538685091773236584, 16209362234668385483}, + {12484799568540253613, 12923921033391389174, 5685298310721897238, 8993584320789077055, 6359972113055748935, 3898751772482394271}, + }, + { + {1075126414131149860, 16702551730100501572, 16055620698555862254, 12278885216348953795, 3548642758697723931, 15071720148450568818}, + {12280024271646974211, 4447996993562488799, 14555333424853785642, 1510116618615803509, 3964481213568291913, 4155814256055970508}, + }, + { + {10647300335660095520, 18204591302040110305, 16964359131090101117, 11243541948462109820, 8583754773070458282, 5855117432513754745}, + {12473603800066854136, 10368688750745799978, 6023393792530123639, 12684166823166670856, 5507715439369687446, 1938961554823093885}, + }, + { + {13853144112993896041, 13666138769156330420, 3081504300584253886, 10998940258778477483, 2715364081362496022, 5105801355297802600}, + {10251345083070754091, 5637878810016321791, 2328631003481310687, 8881649909555714117, 16947069603315339244, 7416533920645212782}, + }, + { + {8283704072516909927, 12371773270912112344, 3092081269786213287, 16680017677990020370, 689642403329869517, 1983474266047873258}, + {3309976929403283249, 12532343087642554741, 13903549971839166752, 10358144884777122985, 5685607956768455269, 15212858975393784996}, + }, + }, + { + { + {1974541103187663850, 14419503307385213572, 1910357063271577544, 9405849388295731825, 8846714195441265126, 1825348137739350109}, + {8946791593625047664, 7707902765438605609, 16743886742959612839, 10498180759536919434, 17561637045610857774, 6591991118449510560}, + }, + { + {5396387893935102068, 9492930398296567082, 13435301371127725418, 15386190233236435468, 7248487611273180305, 10016334808351425905}, + {11988208056926197509, 10137338921708783421, 2716545254572709847, 14606914623397840325, 2555748042271077974, 4613981232528869724}, + }, + { + {1157528445712671795, 7268820473896949348, 1310099106886122503, 4262348507724938662, 8917553728509651151, 17005257183552454953}, + {10059173412034340597, 577994398230440258, 7002708654309095293, 10286301441424331105, 16384815498995719862, 112791320905797865}, + }, + { + {12313672925235387459, 625188478309360787, 3630661012849554290, 6134464256048521087, 17936871466010965416, 17564699109077082040}, + {6761309657688544628, 17284240846518446876, 3570047841144108922, 15668537842491950089, 17083391336599335387, 9282566732138308423}, + }, + { + {14888961160828833873, 1864596543262469754, 17784154409948684103, 3052077954154793867, 7607056789868369456, 3894203281376040408}, + {17710090260347574598, 2210004113826562961, 5671161332907863757, 6625158587348516953, 577771095520713590, 16394908675016020276}, + }, + { + {6603729010820482722, 310501835036252193, 13954871388003056741, 14251448811909808675, 5233636024407453469, 12245878228209898903}, + {11486231149562966694, 2835585577048418114, 6551484302395633982, 1147669539433231355, 16475838258018071696, 12247646139693000214}, + }, + { + {8095718986263574912, 10516714254110691975, 10870802407417590732, 12874599804285329736, 16364633263585191132, 8865300776110950252}, + {3563236263281283648, 6644962740435178657, 13092866580083075501, 16578846863092146456, 10069414745327895789, 9434194139304387489}, + }, + { + {3556391957256886772, 2045016845106055936, 16226354733380887667, 17466044866167164875, 5174514841894426254, 1878394346602870901}, + {6716526457444196714, 7250663133803025807, 6718545916437832659, 13969599547915135008, 9325220973174112271, 1581163301870356679}, + }, + { + {17874459379059293830, 17502662865497015769, 1413180880150211940, 15088446747480281041, 8470145037392166085, 15096281883892228601}, + {16563437908222832225, 440803266862528997, 17031080291135092609, 11406614303171495232, 3723108198050621166, 4347405779711045020}, + }, + { + {14923234998584905456, 10067479898750534001, 16939842266743060751, 17700070519960195683, 5683478503944407120, 11025361952743521652}, + {4209605377271021882, 1469922120365400988, 11514012988142017467, 7856087734177419136, 4097954809069446909, 12489390616599495992}, + }, + { + {17122478311949624172, 2606406176820258447, 10067594371237100910, 15451154690481864146, 12038146827921735864, 15614369208187755152}, + {6824524079696297568, 2015807129229573570, 8194028607199100376, 6009223747668470820, 7772398281249621704, 762894964403298890}, + }, + { + {7815360071000367774, 17901565192138878313, 10434394026011307506, 17374730254587070753, 520674668586498531, 9514841979847171014}, + {8950553127025783937, 14895127801975478381, 12425287594242504013, 4645132844100203397, 5976766478892526023, 7370660544571859011}, + }, + { + {17533325387355455402, 12119607747199535982, 9073368446213478432, 2599055833895753629, 2355979442709556838, 16659690147892928501}, + {6238157733277724851, 1384135036242951943, 2192811311355019409, 10465103238457430542, 13159060180143520417, 10257462144135243277}, + }, + { + {15864053898474748885, 3221238804944627, 6003608638035281159, 13653735634664806453, 8230891808319557046, 6613649981851363837}, + {5893628415615729604, 9710922278586234190, 10395125337377360528, 3931451882481143085, 15979557321922502583, 16029662329812025753}, + }, + { + {2992392235075872590, 6059858128867517556, 15617366226623071384, 4111806970940100258, 2815759757037139466, 11575444833660170455}, + {12346698926973835666, 7263128764813325306, 15235588485234058492, 7572978345825547287, 4333826640601921394, 1322529269991380909}, + }, + }, + { + { + {9784032244755280441, 10040637167065316270, 13599824657669619733, 10375431024260591386, 11026488569773701752, 148008158803836909}, + {14567290934774912661, 16110515707287744352, 7491732171320356409, 940936830894493669, 14287255966622464286, 5426456074085300916}, + }, + { + {14969046289595378522, 2961608585839402462, 8313047147741327249, 15157159053809069603, 7193489948575262630, 14433197008239894898}, + {14199648694191979725, 3269958096730932465, 7497592897262475128, 2728526358559655944, 4744743661876038842, 2743084008632367240}, + }, + { + {12708234784965893093, 3307842163098541971, 17303873939057534192, 13260319540233926124, 9019484163029605371, 9900024564598332822}, + {9160913700210863226, 14428342536017851587, 603459719728403776, 18236218541634735507, 4474730692000472054, 13244873297017787236}, + }, + { + {1470084386249125812, 13287518884856486050, 2962960042040907088, 2151437856455287500, 2905195302281113959, 16356195231949614105}, + {10979007359054784823, 17866133863009475011, 4170501321215960549, 4594340427813823261, 16023065223081480373, 12495390124432989208}, + }, + { + {3972369974785239897, 2263460443502958971, 271463035813818108, 4070768510424378794, 18183758750525376366, 9693239897287717465}, + {1475136609401905372, 5379591160737925092, 8153537820525801184, 1865515692994364877, 11166184186139353884, 7175559837327764278}, + }, + { + {15851820172704931949, 12655143336395232851, 14730294842561239904, 12459362250042251879, 8382688064372334901, 5889068791548184842}, + {8985568054046695170, 3001288673081076633, 749616385212969715, 2646834045811835619, 4782194008578140982, 10854034154938442923}, + }, + { + {3566983516939841616, 16390187007609797937, 8741971305711964717, 10988398606335852160, 7867588372988852672, 14538400485602331946}, + {8104114227557982732, 14039413126798418158, 5102330106089863488, 5619388808486733299, 2378045731360365970, 7775897872465058879}, + }, + { + {8285639907960685452, 6907081304694029245, 3932091882248482870, 7739498675000172490, 10103249503689721665, 15185105419572705287}, + {6218795015578490321, 6781880938546434941, 5905078566070212755, 299457794212684954, 2165089807353723840, 8480540247598037310}, + }, + { + {14784673784599919989, 2082260535205922993, 8168045341288037020, 11903543474273736259, 11981001928254322331, 9522037239934847936}, + {14472653912826320219, 11309503817936052299, 13738425228648904701, 8042010790362339419, 14117271511958285496, 790309299276090992}, + }, + { + {1732476059839006505, 17018699420444452651, 12153180531366356108, 11316536740921479323, 10078354046704171747, 10800231856927927233}, + {9504117955400644407, 12280517700591263912, 1062093141564177828, 7578015021890571031, 11569246388902651024, 17406496106428159878}, + }, + { + {2347276268330916160, 3811437762946151257, 13719307347921295013, 3930073025002065810, 6454531622431144143, 7482466867004373254}, + {4716770925419565679, 5110702795209658366, 15071426966139561730, 12738769369895983368, 9464508449545437568, 14677026754609888388}, + }, + { + {15527739528861052501, 8795354980099030148, 17061268663297745190, 13090961285447854468, 15698285934641221614, 12271672067594065876}, + {12952447277463416183, 17845959850709540103, 15366734867247877735, 13405705559578435369, 13317381544359441361, 9727437258673830028}, + }, + { + {11430653818134040708, 13972160408058655396, 7084064239516383189, 5779466131231952465, 13956916356587340454, 15097328365167500151}, + {11851587197086244848, 5814948700376813477, 12470797735177958521, 289525451793692048, 15282352302269881904, 15273112883324865707}, + }, + { + {2162599553469592657, 4663793700503951742, 16049802300031157625, 14926606091765253431, 8356290077455847249, 4143079345240852597}, + {13247139040866943853, 14022573155642926251, 207855347034742811, 4720924427150657828, 15071740430405402718, 6051774750243840661}, + }, + { + {7719115525766766580, 15211733959779219234, 9890856375298480641, 2106523170188804656, 11116661084796200293, 7362312025325548799}, + {3717785929351377088, 13315020865788643418, 18113403510273317893, 14815931788618774540, 14634966516940592950, 2034948857717155805}, + }, + }, + { + { + {14244174369224556546, 5342392209233508928, 7438713248457968580, 10614297495547921248, 9202135001584851596, 3342234996026879127}, + {13691335804923598208, 15140348432227922719, 8428540434060562744, 12043754816218808261, 10858831840083451813, 4598155351159579828}, + }, + { + {4498695262421386143, 9265193209482259657, 17498675555682479110, 24163428822819825, 16737629178311549749, 11187404778246278772}, + {10767729479345778777, 17391117902918412174, 6880253873200674120, 15284410651868444657, 12792198194450228219, 2395904758303124696}, + }, + { + {8158446918957702678, 7546107368870022629, 11717312886106537153, 6923216345857736395, 11003539876942772744, 1153070042831623474}, + {633963820936975157, 11353131760056430258, 7976658868901878513, 8020939041587681581, 8591633705762983526, 1696346219311964099}, + }, + { + {16508671692567979884, 7478096400789445774, 14273613261641667275, 16142155569890490590, 17190642547002219793, 1935098112081588531}, + {4595462997311059955, 15750249483900207872, 5924388750545229489, 5293390377249847029, 4749762219313386172, 13693994083245523550}, + }, + { + {16380431445715687892, 106230990604580903, 18014344013591313889, 1033379254497495760, 12516742637402838545, 13779274142940005848}, + {9785610002952463038, 9797590851340545635, 2035999898130400225, 7132629806216558751, 9169445448696845522, 12182932187779129821}, + }, + { + {501907073775093791, 17308901417650437752, 14252322144012009433, 14212853038379844496, 9157666821207522685, 14098967321770430754}, + {693358881197934327, 14629222976781047974, 2813134959990207271, 11343356266664072637, 6987651623587825922, 10281965377549280543}, + }, + { + {2764452604422336440, 300997096301046019, 14094398322842717733, 8058134187047147246, 15215625261188908838, 4382907902287523761}, + {8492851920809087726, 5937579395094221111, 7477845800356457342, 10689515189034436722, 12617667903878138436, 3774778193535313798}, + }, + { + {9960007214821980729, 4069548394854294195, 8627747251011093233, 8210112892681901809, 7088798910112129600, 2053428079297196270}, + {3702967442659062216, 2310906403335544760, 7567753294056516949, 1948580970688562476, 13536454877958536205, 6639944374963599628}, + }, + { + {15295696372734148976, 3579596265901281843, 9574081162895456810, 4923374886486176154, 3219363399904390571, 5015637093415491888}, + {4593899936599160002, 3908598443341109958, 957285171332479030, 15321912334716832124, 7810866701395908986, 1221281858922781688}, + }, + { + {13874958592881679723, 6638033067173937719, 12963324999336699337, 14597466910971525853, 5238085686240872501, 18280593805011112769}, + {1903676504579977735, 6574951020929533498, 13950840705690778416, 1696682485827935789, 8423274085423453740, 14078931046981905240}, + }, + { + {3517518319454019911, 10814049823525725669, 18276808946264820784, 13619936204927961226, 229197000889315492, 16087612506648744856}, + {13359110821899203348, 18273672153546569067, 15448342392556280774, 12827254463788206440, 16731815387033480424, 14776988595871001826}, + }, + { + {15270415391437565596, 2028683490070884787, 11702183509282950225, 8688196922408363831, 9849893844753628582, 9968552033497457092}, + {8940282168698946885, 11937029660413868974, 11118271464781804264, 11568483938414775956, 5728644286601384752, 3703969168279877107}, + }, + { + {11652044326376748259, 17908439335707899388, 17421220331644622730, 9490161168331495839, 12156528627204515202, 7912628748081518108}, + {12398934214500264906, 15275646021381992403, 4419692862258023354, 16421180417058441595, 2454832921933908163, 17393752904451977236}, + }, + { + {17844918621715720543, 3502040829859328267, 12871353770728226564, 3472339707328644724, 12451097532318425848, 71861369639778964}, + {17295347875481859563, 3690461964037187899, 18360181465850037021, 3712583869172705797, 12197237321535716543, 4729929162220746067}, + }, + { + {8731053926361454382, 7287398925224999230, 18086826009699036346, 8335574098738039638, 7591410546978300407, 8794647666674147762}, + {3125018303771223725, 4278864892990223517, 16568066644140435565, 4494257938435512782, 12764272586590492568, 15409898743615904621}, + }, + }, + { + { + {13983598851114853863, 529849755045537891, 1350161153312991881, 5942999622371373086, 13586823003297946505, 12570856107373756476}, + {11045595872248151877, 13409716803560067967, 7556599145425958335, 12242191131006857685, 13579932482365250112, 18381666009358571885}, + }, + { + {17762884470933745605, 13091628412956520, 11848002318246680260, 11007732397942638623, 6536960302098188074, 815221834698284970}, + {9236334332791328041, 1308454297106192382, 13073132817539534118, 10187597698470053764, 1224340772341594193, 17492375944897582958}, + }, + { + {8342214479854782437, 12753724076994494301, 15158115729208345118, 10675749973467471208, 13779951729398402660, 9124105394386876597}, + {16701027235021659665, 17012019762848269150, 9335333600380004220, 4905542903515934494, 4679911467761810541, 18087992689526637879}, + }, + { + {15671008364960232950, 7860658171410702100, 14227259085597804568, 5601891579416133188, 13347153814200955463, 16322888887317605171}, + {6781550399618311953, 3002152930532217896, 16651539803074113759, 12688880914945537327, 8458859171342351565, 6912445599896725323}, + }, + { + {5223854540563296107, 6918357952454360661, 9207094772512963084, 14426924911853158195, 5755518699259636294, 9387283789461380977}, + {3503930759476121643, 9159964934165741367, 15206356441822401499, 1480953354201474586, 16143427034936870480, 14366839330630373342}, + }, + { + {15025229139882835362, 6569314276317895034, 2647355676900663405, 15940408348923221874, 9319872831842193999, 2441065085739546990}, + {10915383241419292088, 9125679006919517116, 16537773929817775472, 16520361616767483661, 177268947296049279, 5845623806684850619}, + }, + { + {1715144640521397840, 9713182207991148222, 9099904704212771890, 18362082653791274277, 5942292809119944225, 9769586133554284694}, + {11519768289953656760, 11743868714787315094, 6721165095180661980, 10279267157246395337, 15375558993376490987, 14492867532550448130}, + }, + { + {12103512047683613691, 4278073385410902126, 14292291658628531517, 9854045601464761923, 16032579696315420438, 7195268416745968767}, + {612006809983855445, 11060333399844039545, 10009253468204157639, 12689475911984215777, 4543371362129747434, 16168227213690204032}, + }, + { + {11770921065158854893, 107067300718291927, 6216709271265794600, 6933524040251286410, 1452606278006972167, 6352326468906969436}, + {14670895904694727522, 3137275022800628766, 14281654070417022408, 17577495604202186311, 16841827195439601162, 422964381244324663}, + }, + { + {2173637395644840283, 9666438537552030781, 2621516439523045149, 16194421987699911464, 1151524228457474221, 2401703450418989544}, + {17462142435831844356, 15163851247483784831, 1841486106108653340, 7822858850019771468, 4249485329140599845, 1821072017377180323}, + }, + { + {15298268041084334151, 1531237843026640514, 15841013071716322151, 9410793877088000637, 5108136920376770765, 14198994672804406233}, + {12867076639631558569, 17777512969934768577, 4278122367966949505, 1107145346780540130, 15722269527707226912, 966176458294482319}, + }, + { + {3539257888383275199, 17944547213827679412, 9759251359067155556, 7261158630405432972, 15290149052332111161, 4170309286957220483}, + {7708910151755850904, 3634500268466769566, 5837736360460882054, 18200381407287071659, 3169144765352868301, 203115232477137729}, + }, + { + {6840468866856259700, 7758204996514135607, 17976257971060442776, 14304394653760424496, 8378305391704268529, 15501414806030165669}, + {11373547512176927055, 7169306605754795400, 4819206690827867025, 938930549801608666, 15550126629632404977, 16998450850862106862}, + }, + { + {15700328879061755831, 3194744149035659602, 12913379952862607162, 10843238782556582006, 10727228193111430396, 1268507586473183326}, + {13242157096784103517, 9764148610613513484, 13432136698405924597, 17207758635006490092, 5669195169308257419, 9700784012686509553}, + }, + { + {13323401950222069126, 7143389192525342566, 2753977793903748710, 14752970139128156351, 11560905576527598704, 7772265590772671469}, + {15339277736310777779, 11892168454138922804, 17815983037800870820, 15149987747549949858, 11149095484837869946, 3146330589620022603}, + }, + }, + { + { + {2176496575786881341, 11137175552988470328, 18165371128924571066, 14493665018797210129, 9027832134416315155, 17831122727374654343}, + {13941117776210453432, 3262628315315934865, 6955607093154218866, 9315601893566251415, 5081138766383608342, 9449507684235557713}, + }, + { + {3015183280845351853, 8567302742230480780, 12270847108839625213, 11246873507912728870, 1058839101090450289, 15063533146116054837}, + {15816951661145602122, 17835613250576961263, 377336345548517249, 16952055578532303378, 10643126612569896087, 15589909904400117121}, + }, + { + {5917530861159333215, 16376811621868701260, 12468667157041084287, 6060910297573454847, 5999643954660792761, 10374199955429433218}, + {15354447643953389125, 17866869079904367209, 8929885267107625215, 9764565262519350782, 12345751593966204455, 9590062130519338399}, + }, + { + {5932736646654537524, 11111625974290371458, 15669816313412657243, 18348488897895796471, 17719589740702908170, 13074575404328778262}, + {13337220567014765893, 3183217332202609863, 13737875422290924678, 5053183954635209364, 7253181521673343044, 16432970095551512913}, + }, + { + {14090926673589572542, 17530443530454432055, 12384368526139233597, 13369819312395505251, 7198182961160804423, 794076975275841051}, + {2760884514203992257, 14661425019208431637, 13933494052308237687, 13461782301434087101, 15552200892959134758, 17074320298955503096}, + }, + { + {6895102306183172231, 17913949034057542002, 8793858421550093100, 16831072178043970751, 13776552101358985318, 1188816091752039796}, + {17433095774009548776, 1361051895268056816, 1584454468837935219, 9000587494960507617, 9150046460469003449, 6677236369751497162}, + }, + { + {10073416357027898043, 11049353932450326412, 5686074628312392124, 8667039569779248174, 7027692055059522005, 7268282275319392236}, + {8629306706584271868, 4544414308773698323, 15825173458798511659, 3783245463927499985, 3277602994961352368, 16594668318001131253}, + }, + { + {17194222042243013514, 9755907999220542865, 15203045510993220352, 16670494240308716815, 5468356552637101934, 2209927657220556130}, + {4080551261822064698, 9410102261896788927, 1729749535853106305, 12865714430736655885, 16788188297672046823, 4739114570896754270}, + }, + { + {14031233216260426655, 13894451532350910002, 14721305842339563831, 2571399673735228739, 17136925918547685412, 12486318545760378351}, + {14945904247785918924, 4332191017784273191, 3577416897748122497, 10770672964471969794, 13859172261775533936, 1323080729872112496}, + }, + { + {4806132367170729030, 3012780210920457375, 3465902493839868696, 8367717133643917430, 7541627860300058604, 15166837387405701033}, + {8755188577678123832, 15440550960246952705, 6821177912455354424, 13580899156034649200, 13889507678691571539, 8622094254907884271}, + }, + { + {8944073100303306076, 6542151642656830118, 4104527697818383341, 956456087501600204, 1355338812157776915, 1576264571133590433}, + {14576384464935893161, 12976993851388633360, 8882463173850021133, 6146594088987122341, 4213885861865358420, 5730501125228024803}, + }, + { + {7734895557992270496, 13773292779533050725, 11791360189416713892, 3844762521853578365, 1284645752772663495, 9812572158308316394}, + {7423486593749131086, 9063179868650496218, 15664453574296549152, 12189904173100887627, 15565268483602424319, 3276085766266736963}, + }, + { + {13663977661665765595, 12869596706690969469, 11622894659269832036, 8626701230474747130, 10051999084490524702, 1254507355148706860}, + {3738417688632628979, 10128963025153309524, 10379579774762834621, 16085982828578912188, 999630916899084620, 5890496890318826833}, + }, + { + {5464691878810358086, 16779490499259550831, 16167618561212471093, 1500388924177938877, 12758820778786031069, 8726936634855616738}, + {17023037108698278190, 3926165730727012559, 2857709494954513428, 3375996756516865105, 7319015008396427730, 5981183379963579669}, + }, + { + {9453101235061934254, 8471689648697407064, 6756160836097095590, 4538217394377244150, 3501535205004454648, 11902347949869551885}, + {698830528006196076, 8321354741552964610, 2475663594321703580, 13966220326496163916, 1495087475066029926, 9248489243263297804}, + }, + }, + { + { + {340762250586370878, 15885853259854490950, 14170016703992127752, 13413185133968590757, 9132295233250564044, 9955913638095083109}, + {11442204168742219584, 18030844452885851851, 4172771706246866818, 8415318956258968622, 10025498907972372942, 9168803391366195663}, + }, + { + {8511258912015600714, 16401285336019435955, 11567231709606604746, 10909146042530314890, 5175867930620067690, 1758264796269950390}, + {1311893356838490889, 2075003657340819455, 4150679767398135680, 9944985572047220304, 11726442185374948983, 9515564709417907692}, + }, + { + {947814274602777664, 16977093960389365711, 17182772961477092323, 7950550504137754878, 12164286910738269376, 2396865457216588451}, + {7712672988612544289, 2256404627520187318, 8042169559407463337, 4322215616044918854, 7896874306873269018, 8861341680456564805}, + }, + { + {1573021064477563490, 12385142738510496803, 5846352022563838737, 7179392922412551607, 16770926861117259109, 4748524474277694353}, + {627992288971210988, 5079973027627716026, 12148275790420566931, 2974507608681532690, 4977283032988448426, 12122543170457868729}, + }, + { + {14982315046876125397, 10694656698025592471, 69978513957895432, 10720522802782817933, 674072974690397016, 18202488981264823240}, + {2763268093414423208, 16627509676996448791, 7905391784431874217, 15969282761758331738, 4087266599186541195, 6705534661083402155}, + }, + { + {4260928749573083864, 14414653187745491590, 17669562882664725861, 5539725367798503840, 9892464532031311709, 8646224288734922726}, + {14636838328767388157, 272416839100440696, 9027818199363669781, 13152959597440376914, 9885545384154705441, 4531971612013043371}, + }, + { + {3054144515900924393, 12231678983485064511, 5344887254723067065, 16260784250181309348, 13554495123766829763, 16541428532159722510}, + {16971418268239157688, 6561565182987963636, 11849488276654035036, 5626075694176069835, 5950685614385695889, 659455020499241038}, + }, + { + {4016750444584361935, 10934103594664060658, 1610640179181480423, 2687152927501620139, 4356423113034416292, 1508042570353658648}, + {12444493154493623021, 7858990549536828280, 2620376282128316119, 3094221996681006634, 2197436117225946497, 13627448762660605994}, + }, + { + {11319267592865004792, 5771783128259971891, 18183444021717726622, 14584551296093059489, 8197314068068346944, 1496665335270628278}, + {7533930075545786161, 17913476997028566696, 10110826559280511221, 12595790705256942207, 8383527098300125989, 10468103262027643123}, + }, + { + {1297397412658178639, 17891290189040928260, 11494441724074567854, 4008680981284786655, 3752678751199473490, 2327749996539228182}, + {14427514318988472029, 3553111765024203036, 9339018535932944476, 5033337384514825308, 4461712737595757481, 1042763231946705190}, + }, + { + {5282595958571557801, 213593101601136936, 5851288338443284810, 7230384975686448098, 5076726665241242579, 15657565414881533309}, + {2806053347798036217, 13325810292191155888, 11207865985035518040, 16753610899485159157, 11780444340160414775, 117213508700926531}, + }, + { + {12301002695840234190, 5825957247323734322, 7540088495914446527, 16042651929295067210, 10094620945045619814, 10110065362760208923}, + {13445281647852023130, 14273322378142608479, 3078794690211711993, 3432436226120118989, 5328806020363596991, 6994513974763316732}, + }, + { + {12003038273625258094, 10383425068383640359, 15520194992621832802, 377777956418164695, 14943016921304093418, 11013649826256127439}, + {7230967483902155369, 10825313619847326325, 7037825115392195402, 8972357023328446193, 1253857384837096935, 6266649133505623519}, + }, + { + {10589482155172539950, 12297389734324327538, 4069221173445026474, 16016744041800779341, 18417752858659154550, 5634264208757126073}, + {15473968400152854338, 2809792092226097652, 7273042078361794560, 2614557813052600661, 11360021509152649943, 16733025469392257248}, + }, + { + {14029153203244842151, 8283401980696181560, 11095661564207243200, 17088874757598325946, 17546567502506221871, 5640913915552816107}, + {7075972272517500150, 2257279655826038849, 5696746906369339622, 2316175253051029175, 17712158778401896374, 364112814656520215}, + }, + }, + { + { + {14679924527974280886, 15947635289512277104, 15351404070450195459, 4727979236151915703, 16350474002987521743, 3821044743014808256}, + {9479595861519884974, 8516666617350278746, 11503226012034686940, 3623032435206572941, 13809630545510991358, 15014347175818555977}, + }, + { + {11057592299455225148, 11418500207601195379, 10015659838321279434, 3277591360102749557, 13870089373464432053, 11899764543560815680}, + {10598708899627490235, 5204860756179583225, 5704026074815499757, 3961740021052616841, 8083325146143482469, 9703502648801234299}, + }, + { + {5296723995152596286, 12702366508473375573, 3560342141598167052, 1229852828708405148, 987112422309132678, 9050289325451932333}, + {8377778558476358877, 18299004077752380767, 8205821641610714688, 415872980483417712, 9637058392436615799, 16488239169772178994}, + }, + { + {14131815066626142041, 11540556304194578314, 17720164231008490194, 8647469527673297080, 13717080072986283066, 16364407850305375121}, + {9812923705693309894, 15252855277120316678, 4251079378183712824, 16287850228852183968, 16981432229628540775, 7288137070535318945}, + }, + { + {8134759848840978213, 133995483652992421, 12594363638483218087, 9394943745697767530, 3292684192987421047, 5641109531274744017}, + {18340625042234832363, 11659678257409646710, 7834895451987153240, 15013848757483954741, 6923004623931848431, 10731117231772923396}, + }, + { + {710182862970832652, 7186938586352280975, 843940566536207033, 18222882275783810673, 9033108566167385693, 5062146455700166349}, + {8983560327851192528, 9593314042056721839, 13080593353438570596, 8499297145526220981, 12018300556898041742, 5590813964218970674}, + }, + { + {560148900890697500, 3872724270688497231, 12155226431747164567, 12069399862495208716, 7800323474020451504, 17842129873781067995}, + {10386941694229256988, 12627593178570682056, 13595572751629997365, 8796981607722448553, 16749808188347360672, 7845278385143284636}, + }, + { + {5771329137650242669, 14398580224071912888, 2684433028961805130, 5472793673559551896, 4139791942141311772, 10242427010920223149}, + {3435557043383543647, 16439074182964580066, 1897097733009851383, 7790954287877138337, 4094797857151328545, 17636387648829877391}, + }, + { + {11084338203592089978, 7046536437278056828, 15270162581532936685, 14872594521711089230, 1065044340676136516, 12215363914120183972}, + {8807558094930205455, 6192530442586873261, 7580836915562456588, 14608662449758709959, 15699254439480728117, 7514868894683313347}, + }, + { + {6725908589474685098, 17990909432805680896, 10064707122671181170, 16351089498679067398, 6987057004328973058, 1476297822394021518}, + {16905817105678067782, 15956790087223100464, 11919441400720484520, 6472307250416206582, 8105558973519980497, 6060069727850515408}, + }, + { + {4394995949664289457, 6428291279342645254, 14868971543072031986, 7469984888154793685, 4535882282594416153, 14087727563932343498}, + {13764853652994987377, 3726460811537607063, 9231152303364152091, 7795121740553029976, 3567427738439652965, 828395371245164136}, + }, + { + {3588112622259521330, 14318995036651536017, 15152996261895537910, 13117193981606719833, 10869520400973032500, 1535537291014629366}, + {3953371315021198156, 386530500873665491, 3508849322379756897, 4055089442250030357, 12628113724743989767, 4186397566457919545}, + }, + { + {3443066389826097469, 5916450488257370663, 14335878619740602917, 10811180552560485498, 10078378655405541627, 10331041864412397191}, + {7918530238023081306, 10187646187565606947, 10643817701072622350, 14671988813510778565, 17264570610690688746, 5035607629406476407}, + }, + { + {3532200476336731719, 5678111310353191224, 11922638866398303913, 7540915859698370345, 7422783730002635298, 12884745215638918079}, + {11258694614182796345, 589030835645795838, 2262193094720294286, 13773904298325886739, 13573020426752625101, 1682880838844955766}, + }, + { + {3667751664279524715, 11424246261326489986, 11184700745029985834, 6642084736925658394, 16833380705883602850, 7641656710490994742}, + {3519566587420847235, 12380249650455369211, 14234084881378137812, 11403307110698732867, 10605766497849541425, 10861452779244197005}, + }, + }, + { + { + {508120474314030324, 2355066544885544183, 2781810294408129833, 15987954833749728730, 11640488433383588320, 273718689405132586}, + {2640929119024127447, 6627781401094026707, 8341197168509731890, 3918225740211580144, 12693567636985320532, 12010813241293331917}, + }, + { + {1067643586933482569, 15789537218210505592, 11772390798352937810, 8551678486344942630, 18134749517345567483, 8018480309623112915}, + {13721763421328053376, 3248048408533182382, 14403298468089883307, 18344377936005924503, 8145236551628572080, 18246715613208739706}, + }, + { + {7517918011338920649, 10924417706771677823, 17726681281676783216, 18231267965570514089, 9942149863736880790, 2495324098584754616}, + {7703134802415701672, 6763631388551517046, 4129117670208724623, 15972974109259347702, 7281041685266079849, 4033286739838961760}, + }, + { + {18167431682574255272, 16875991970663412008, 17295095002088005373, 8493357273501291495, 15937618870319643038, 11833224465563102215}, + {5034304464808785416, 4940901108264101769, 4572127150938139448, 4375798149940068108, 15502449895994354606, 11063825957880913338}, + }, + { + {12106998444454782089, 478129254096369622, 3583445821883510974, 3783525850583222929, 12700800678744232856, 8398918095020677450}, + {10572000908134195556, 2591572375203033135, 7440424324108251337, 5098405712381411786, 16645670879854917662, 1340903336183382664}, + }, + { + {7662402429691938227, 12301560877341388372, 854014491934252472, 13252962285002044539, 14950007384282365768, 9322453517274020995}, + {3037202449373284699, 10134277839370356135, 7874405825451119639, 6074763175687974962, 12425801537362983169, 18441996758138525244}, + }, + { + {6377198952519496340, 10452019513637841848, 17999702029925940943, 7474985002644580736, 16710285089220886173, 8795286825426459720}, + {9274877579709547055, 11658383846072744560, 15190956902413353547, 5248750851994650598, 2300395682072506542, 2755645297874985482}, + }, + { + {17741788053056918633, 14066143977624056531, 9188940017443802353, 8808532662781054683, 3364478519071964886, 3169335378890645771}, + {17112675492175952719, 14236192466751475311, 5603662455233963823, 12286659362580784043, 491873052068930659, 15049849551374735889}, + }, + { + {2576424316119212598, 12775551962911576966, 15259699755977921424, 11651942542046543115, 1402783857204478837, 18324652864132536670}, + {1707338149370542188, 3298420157097588817, 7521797060095862577, 11460596774399479099, 2575910799608490644, 12312525139228130635}, + }, + { + {392896831764612871, 17176033439239962097, 4721807216245185554, 16182155038868684552, 5761252087564225471, 15052621263295120129}, + {12346920066003727294, 6129012491021115289, 9977552588222578097, 6652331187558815009, 14909718540327055008, 968144566139233934}, + }, + { + {13293883802715635807, 2653176068873560866, 709377591048241427, 8121623725564414915, 16119489273759831559, 17342448566209464262}, + {1211174416757974427, 14015417764234041664, 14462722521216925477, 14082661984659007681, 1695477692957516417, 10365750554717767074}, + }, + { + {4884022083833567724, 7559598399602191657, 198426261319140977, 12353123114206461318, 7871074382107198052, 15544439452501146366}, + {10764302824973303475, 18236640700905160595, 4118397287860275206, 8469775327273188212, 6943100138927210185, 7678646557360620170}, + }, + { + {9047129816186912754, 686205745533008290, 17091874804035707852, 13829610192011685605, 8445841882472685584, 12683587236818333381}, + {15248187852218806490, 9143067576807462149, 13130422498538192412, 1987394184930393469, 17234091013976042376, 5309021133366567407}, + }, + { + {11153014502206421469, 15119688811090307722, 11900512007334729116, 12033534775335022157, 14206136005718288725, 11758356920610289524}, + {1170674544739813802, 1735805534869368410, 14265461327530260009, 454122264224446315, 1196955246858854577, 13496891451537487585}, + }, + { + {1963635747876520766, 8037994677047475948, 9778925841589003509, 18373179051584417655, 17774160058627740027, 11457632676580645202}, + {10746767866979893471, 6679657251517714598, 11924693891957720076, 15059776164765359320, 17106029443182107067, 2977050945907214605}, + }, + }, + { + { + {11428714276400700816, 9684363906879720073, 2326880593732199571, 8761076367298171397, 896913682478838017, 17538745710015774502}, + {16011943008419601378, 5975733755904344526, 18015284849904033774, 12671514003052240271, 17740261525233420473, 8887483872226550753}, + }, + { + {4149943974880712918, 10350790058854190497, 8196369947058715735, 4949794127529191723, 14693007776575755250, 799869184787085670}, + {13583602297228816985, 9731922590252326563, 11783888221311533059, 11272596661461028723, 10650424498639591856, 6814307635900293619}, + }, + { + {5187662544727433604, 6610818388649597184, 13217214483925463411, 11225358343307261041, 3979262110455362044, 17023319482473508776}, + {13540734409372034129, 10873366545113221391, 6574497676007990697, 16695089176775352098, 1800106753424785549, 10409365476253724591}, + }, + { + {7201953056257784053, 7550552970976446148, 6715285792546737720, 1597813460246962944, 5934044807465023074, 5362427500790106824}, + {10951441180547054651, 18111344793262344961, 11925095468088301604, 9885237597177799430, 17378911605611802956, 6344832877661407429}, + }, + { + {2193141511878184296, 8475396127202322472, 3917381969650598296, 16265248388470690809, 6186852221346093846, 11846013739636446977}, + {5487357187469375202, 13711750528133438663, 1849109594291933227, 15949224025529501096, 15221000652947043364, 2391723465441720967}, + }, + { + {7536562994359807923, 8905565631504805860, 16506171098935768123, 4130408208541979441, 9322288628868118772, 3079300424148444967}, + {16936259574260547615, 18438783821712938661, 10324525933994673862, 8397550184634189831, 17434676747885185144, 13637497700498785239}, + }, + { + {8483145192795413196, 3847913378476383052, 4337984637797992463, 7010629707438332975, 11953181174909111039, 12014680632165513786}, + {12276869096120751141, 12577833746497947189, 11723523233456261682, 14093651901317012131, 12375742220834231759, 12908141375852234811}, + }, + { + {3461865703771860361, 797298537903379949, 1718621620291046004, 9179319574938112016, 15506643513481237125, 17129849380198117652}, + {7110323273563692976, 2203663670190111617, 9853530541246034651, 12592752863363999293, 5433719754579498668, 224022543784731840}, + }, + { + {326532432663732788, 4070991663847076038, 1470607885232799605, 6211408722804468886, 15716355503743027945, 5590361253785299677}, + {7812181315317979243, 11828059863468531398, 12778009786378056601, 7800732687373876279, 4224156601900994011, 16057020107391082099}, + }, + { + {7782487925572685932, 1724391588041133300, 17972041778362775708, 11333825676811621865, 4537746153362835585, 4171052629714822431}, + {12770750867191330688, 634694503287104037, 10540092664171311636, 1350757360469465298, 16229194085829187695, 11033889142205249636}, + }, + { + {1500626805655044948, 1474262357314620997, 11484027637627776587, 8585564162226987518, 4361776374583212023, 14496468422187250418}, + {17741545623455229310, 12747090277885336885, 18323745182075670270, 2038556268554236114, 7015814683852162475, 2248939812176116415}, + }, + { + {4335040403419509309, 4616570637565163389, 17011251234033239541, 879860923453038495, 6819883123403800219, 1722220926773986334}, + {4709656270455345524, 16636162851412473237, 7348864482366322076, 14270025125795014424, 6328218483059680686, 13214052880713025067}, + }, + { + {11977022734060949713, 5628060629783977587, 103670064741031623, 8484869049261498542, 4939759321638626982, 16432117890868549963}, + {7629267303968775517, 16619962589721111422, 17463764779224102539, 10685322297759502900, 8807902043402042351, 17462711850802416480}, + }, + { + {15295264908526444823, 13335307760080513805, 4604414283483994449, 5316311055438475989, 9106484611277661419, 13606509782370139031}, + {4442177947438604155, 5803819775434638136, 4655697769853187972, 9432210737074556266, 1181431965380933231, 17230321351582564170}, + }, + { + {16450007145062463968, 4085694834533625610, 10068111071916006395, 7262607959861442044, 16002455059452793805, 14195715414553647245}, + {11695905535525197488, 17972632274451872946, 1579756808173779650, 9867832289808138729, 7742524395848721653, 2581276165337478448}, + }, + }, + { + { + {12418897939030198809, 15206661827925660880, 3670234668273509673, 629739459084205561, 12432881678413324698, 14794818295399912598}, + {8304013048279127199, 8979239574719663301, 7898287937622516136, 18064217129523036783, 15422375485556825691, 3491105078158712969}, + }, + { + {12712561841049401285, 13926510503703002969, 2612279756031831730, 9493430901786542794, 13291879522996024106, 5809241029170276658}, + {13691694507969220766, 18143668557798275313, 9138492995891623951, 688189100127541854, 15640560704872541163, 715816703484468594}, + }, + { + {9922254315993542377, 3698353835142433482, 2152397153019100388, 12317485668320147862, 7630803741744990206, 14043844136716370060}, + {8779442871712769558, 9907756658115628584, 14458334256944611273, 16860549487530785456, 6324109159626157948, 4731255892134100106}, + }, + { + {8002922251516613060, 978443873609457407, 3195553158279317543, 5854976976295928246, 10958159112329303460, 3970083282599810189}, + {5557639662225343558, 15971994949723322072, 11989908821085930999, 8821364574039081706, 16665145761534571014, 4658625544288657356}, + }, + { + {6340510664543185199, 17018415579031156332, 5848132202484941289, 1936333141268823482, 12812324366507433640, 6731572340563570418}, + {16857078034411292476, 15068277976532276123, 11722116475437972189, 1964509865396978581, 18238872631873981400, 7991345170212629670}, + }, + { + {4399729739127562657, 11272928375680253530, 11946741552547688174, 14049301799414882766, 15181782087994325146, 10089988859449254233}, + {6518268185564876927, 6536487350448659481, 9828361032623653320, 1339336992832075931, 500012115828942236, 14824212847841613777}, + }, + { + {171920790242842166, 5492071276632784703, 7283720254645560138, 5078044100187809965, 10385647514177990351, 4643536432707194364}, + {14989909821879706494, 8756233713883588748, 12449984475333613170, 12585959722117915734, 1005739684596759274, 11155909844346489416}, + }, + { + {11688324725241825062, 15138461392078796204, 12325266391227455113, 1340485671902994619, 282500164578345499, 7467882813685092227}, + {74331176722111354, 8867394635845954934, 10408699117489665536, 15725442571211452985, 2590111940561580876, 122458286127547889}, + }, + { + {15892645628302923294, 5856468311490081970, 6874561504197875933, 18019303355409739795, 6082937058931523996, 215426188952156771}, + {1268422509930086836, 14213194550854690836, 11126293425133380142, 9865185168089540488, 11632286407552253140, 15174468604920668601}, + }, + { + {10936413110689795487, 15010995742767473191, 4568817801913429420, 4205444133627513879, 6395122355763512349, 8918743386740702009}, + {16692774758406989332, 17955372475145034386, 15048470334846953021, 3736761708891032300, 2111259224340263959, 15614397697732925529}, + }, + { + {8738432084134066654, 3426263179552640084, 719712812862575782, 10981970426674636690, 9230912351159198043, 10854126184000364805}, + {1961455377595115519, 11451312678111642174, 7688356239558056833, 5143561757570891633, 9215608498872789998, 7917478891815725904}, + }, + { + {13905441237538948064, 12480816058500448930, 9351950531208974987, 17868240518152709336, 16456831118221743401, 14827343335622163069}, + {5502543494126784481, 389131188595713234, 13066540568193379266, 13328625471332746991, 5244571811269709341, 6606962250802166084}, + }, + { + {8488561190820155258, 5704568936155861609, 14891109450025140507, 14985917965027582458, 8150697647605526155, 13242121807143276147}, + {3762467964945321810, 6385131138942825064, 11791602379712639353, 8213332910240399371, 995112454035913025, 8530416099523440086}, + }, + { + {13640325735363574879, 9838259707028418406, 13090326969619576773, 13639005985461657607, 2136356356058124836, 13990780887246135133}, + {5609755522352639162, 17659567235866466759, 16259320408797139425, 5409555833771708415, 9408620568269064004, 6504340943038131334}, + }, + { + {5831978049482033791, 13004433680416851426, 13573449569471990176, 7730273069509750576, 11703396887458680397, 13713882189606773514}, + {15136688631097887611, 6655871600738369661, 10582530699775137958, 2242461969176695317, 607007649724149634, 12963349946916344106}, + }, + }, + { + { + {1245849788995478406, 15927065038482738007, 14167031681717622750, 6558184416262903003, 12026552713606964001, 13141157765235910782}, + {13953548913050124814, 10512136906136752951, 17603704039609623324, 145717304147461215, 325471403460036622, 13128236733581623507}, + }, + { + {16674741188506215062, 9760284329368026164, 6227912018538320358, 6062313431245706681, 11530767050864043247, 4050743335749600291}, + {5438096629683113243, 4619575833741800840, 3125333116803012851, 3488990215372938922, 10001296793595923533, 10533821010269665140}, + }, + { + {16525932200239811820, 11277725255119639967, 13380457983594150580, 11345091161981432621, 16404711622698975165, 2413157060343610687}, + {6861888264192898716, 4349048715057257879, 17588098592479288977, 17308040295861018844, 10945075256382032297, 6591571232106737441}, + }, + { + {3312100944805375360, 17751669833244855959, 11421167323527761031, 2790564601954208965, 2677089945270728547, 14912524259578856947}, + {5283996146017069939, 10959370318137784011, 9095576254518931495, 1311273597919359627, 14918615616693191386, 926115797902848153}, + }, + { + {13690563848743893725, 12308308054894561959, 15395087439588112783, 2472586724818805576, 8533710141094669405, 7942802424878184185}, + {5420945215657024810, 16122859608174405004, 3053741733492700862, 12221133467396472029, 15851472746153652052, 1947565546705152863}, + }, + { + {15897054605211154249, 15279739731289823093, 2336561653796295997, 12705889529297020171, 5961825895197974169, 2720481772301941412}, + {18443277954611435845, 594427728188203259, 12303839396678154633, 5358688406862385350, 13000467893527182939, 14952128333381655033}, + }, + { + {6619004200098886597, 3521645713977761698, 12344376102408265251, 12402516760501056887, 16667318326769571309, 12874140072685141335}, + {9621314969493341823, 5207967593480486550, 2826521035705699793, 16265445537996266956, 5066340697704330848, 14633460704255879322}, + }, + { + {4697083591690261853, 16801765456421135763, 18151421584540787936, 16835495532227054337, 7795860894099083043, 1328764521238600097}, + {8297620491750460337, 11793447721298138387, 10295382270817397671, 12786024121368826653, 7279518368534718792, 318434652860893917}, + }, + { + {17026077028448645577, 565529336479994071, 9535502575346171761, 6007100762400155323, 5678897757750626782, 9959925017754425050}, + {16242528163060496516, 4576911095161823236, 4403607854299656167, 12912517930864843821, 4739470393271194311, 1151478280656415262}, + }, + { + {16048476540489898494, 6783117499823714007, 6415336927764029960, 15673195924318961740, 6247136051556578121, 13084657697232162709}, + {13162992357344402018, 16464326350960129807, 839616770160173579, 4740726662754602535, 3152479265198829295, 6404513982945014328}, + }, + { + {3092232113376296196, 15331813846360575326, 18290474234869335723, 8231838642205234980, 7400082193016179605, 8410763375241570875}, + {9128762227989687509, 3794598237625234172, 4286873165056892559, 15334567321376368149, 14794216692099838599, 6895373348463126576}, + }, + { + {2724979383179813062, 14777475620842655294, 8495183486057249617, 13049191530970000171, 1463143549362168712, 7716595605180919892}, + {4514675039144392038, 3975933817505069894, 12970184659307405583, 4177319338659410908, 6165857585915235970, 17620162379352558438}, + }, + { + {1745353185162679063, 3792943368267263896, 5392169106673425858, 12818767881496565683, 12092569230529535449, 2578847804476911357}, + {2780126809449397009, 5405540052572325879, 15285827524500880746, 2941675021271411795, 9447355824276841918, 4559807377485007719}, + }, + { + {7610007746883416737, 10147509530120995196, 10888385397255137878, 14772040059195211280, 10560108669991599276, 2620459706274870386}, + {4887132538582860164, 2596493858310366442, 13580111877897930049, 13035579030058060026, 10732634358057493593, 13596263836781091773}, + }, + { + {16502308326832314698, 6813655593085792854, 865540522694200977, 18406777409114169497, 70237201416715116, 5540630135583650201}, + {11043265419464844764, 75803127346564744, 3544127781510566665, 8608672751361961179, 5292089330226488152, 1998221520759237189}, + }, + }, + { + { + {15843747259285912280, 11051757736519314133, 15850618202671354967, 11414438518663550807, 8901822655665788460, 4938308746649520510}, + {777341510519627412, 11562816405392154916, 767515422569196951, 16316638273329970696, 8108021482044013490, 11530472289475307950}, + }, + { + {17325850825538431065, 37125221006850315, 9538255856396155842, 1677341822293077462, 8890165136267025298, 15244650613952369517}, + {4845598674027029924, 276084057002262337, 16096273565408425115, 5476011667390370895, 13774404766368645238, 1693789135306442102}, + }, + { + {14853893681504474636, 7246777094738611755, 14348468490599768069, 1584676862820702751, 4055902816558872583, 14691624686566000273}, + {8463792358840766097, 3916260300604218254, 7138823842751636444, 12063405069309472256, 9666094494441286118, 227223526050825967}, + }, + { + {11439448267446980509, 10876971879546473859, 12463594188698329361, 4867143769403125573, 12497774131673245064, 3293027647115301082}, + {17269845420219875716, 7999343694417279981, 11042866033136034598, 15364989427615166682, 10865140228718307051, 15023792553833632785}, + }, + { + {3313587089867634043, 12345206552722066323, 2085484537482749047, 8672528099921546193, 13019543378492473719, 16014000899261448682}, + {8688247996955695393, 13880086369349074733, 13685898059232129585, 9745238149905695566, 12860398562206147371, 17318310740773319426}, + }, + { + {4831067862161961952, 1700016751300913085, 120879261664102718, 10126392277187226937, 12334968545166906646, 2424236269343093373}, + {5064451542294364369, 18179376425888307033, 18011599774285802620, 5403509623689485964, 6314622790688034216, 11605915467730303384}, + }, + { + {2247133619710642624, 14577616964025781087, 2368018907158808843, 16498726243986409168, 1407790037339558890, 1268560497020660735}, + {9801656500494901417, 2349861632952537447, 9517882931966374505, 17010759715257218806, 15435798766523589684, 17726795183758368944}, + }, + { + {18311374045587866554, 14447020620922821410, 11083360170030115832, 9113415708727437834, 14541956290558262142, 13961285592123282152}, + {828114605405992045, 12150002910767606346, 7206389356124187542, 17860503209876058312, 11798129788760460490, 17127855426259911149}, + }, + { + {6199176795763629395, 7044922086316649293, 13997864205295119697, 276986585995515541, 18048058974579713616, 16490720274644998299}, + {8536596227155890833, 3914547013952713733, 16510694033833622662, 3939667794619888075, 3178595810875111442, 12482691560580240458}, + }, + { + {6817856411751563437, 5442319161374364825, 2600227314552885688, 885644663444831557, 11700451742910873418, 12995396601628275569}, + {12803389344446349365, 17830292246277698677, 9309532553762179652, 6680640295615786576, 16662072345574199545, 5503555633912973406}, + }, + { + {9023109435328558547, 15291865436110219430, 13383262037362169985, 17595017389171456916, 9112975926620102374, 6959372004949197556}, + {5079998641977253062, 6532421761731762580, 3807095942977659963, 8160554533119900022, 6829392063047646882, 9484387938580835773}, + }, + { + {10226973915924968410, 8694011647938489632, 4300203054946897035, 12117316368104547695, 13852935341469006648, 16325279905079591603}, + {3279907632975731352, 17658867899191622273, 6430488073563164502, 11102370118583390470, 1351653460592165074, 1155328654798844033}, + }, + { + {17696616168038539128, 14705634818800389635, 13086381626647796878, 8160829291664474794, 12380871402708163904, 86292804711961768}, + {18387045944833009681, 366768093235351805, 6342784007092933055, 10213820317755221687, 2637460351332260222, 14273547543620959978}, + }, + { + {17055410858120919085, 5117864209362229433, 7752728474235998778, 5718238531312883549, 11379901830549393718, 6167331998180922513}, + {2139807429787460156, 15318820080504273410, 4676863271077360086, 11038500994511396240, 10091980097419465773, 14332586624137472063}, + }, + { + {10283737372978878771, 12574954996091932368, 15672686541053306208, 12565297310940420187, 16116977738821195704, 13549410483910339391}, + {7927005432441035757, 13175590081759395358, 1211258742602602684, 15884670892710680064, 3650720270567732720, 12671425442920594205}, + }, + }, + { + { + {16945326091077782209, 16464694010613758543, 15031894690983835272, 4230984078465338834, 15876751555985865416, 13853851790773712608}, + {10629669182284449427, 7123507341691517943, 1604779450978617269, 12335442368004615918, 15831231179039969998, 5721219491336463048}, + }, + { + {8779923605369004874, 11015027029723172570, 13053683587822215278, 14371924836322803667, 6175910444240484015, 7444596092153062599}, + {16538104473324970868, 17940085998297689696, 8904671253507597276, 10735167732778346892, 10719411100540081001, 11825864791636217846}, + }, + { + {10513874959070541808, 141726534094196367, 8961670049397339577, 17110620828714912466, 9276156314861939407, 5283989756429336401}, + {10830576007717201253, 10019682216548180288, 14732709404946097825, 11154000097553876933, 7279438743640661651, 11741828296965158287}, + }, + { + {13710602247235634585, 5794283881286256131, 7189333897035442825, 11474888458737436516, 9536387759009059378, 37447282054824480}, + {13831688592995763204, 15514310505960816464, 5617377358519582781, 5382874924721720664, 12826347177360954774, 16487830138240466133}, + }, + { + {10136021926566126263, 11928523244042660673, 620080950963362813, 8625626899007622861, 13450521127313958418, 12173913767817931256}, + {12782398870117899816, 18284930545209739688, 8340732005841122414, 7667253783573485052, 1170918830797979709, 2726644985398233748}, + }, + { + {5868319710548462775, 4614538984539777268, 3606513902357509689, 5842687629722217460, 655661300379058806, 5750034184391579904}, + {6706948898263875391, 1861998499115841763, 17416124038131320471, 3088573942691514912, 10862822225918958565, 10723788336215927712}, + }, + { + {3469954697000879474, 9886078825125536983, 16639512902206423417, 949458984263591079, 4713065388685405969, 6485681870763151394}, + {17550597369256616144, 8492358132474734258, 1973243959933916082, 11845479291839734419, 10373742178422412864, 12917185093797127077}, + }, + { + {10148520876393042933, 17008996819208361065, 11244838413238054187, 7578025140351179165, 11819693939772377780, 11922206691683897452}, + {5193678850892441703, 11269576636085412111, 14586018532679524926, 2160103807216749946, 2883270595579022419, 8933957426785365011}, + }, + { + {7701278840381406043, 813864330332921165, 15346578798485581339, 4630804650809464614, 16185031359787444003, 17826776112141610425}, + {8401323936341934197, 9592171776430509912, 7758005530392712135, 14454554148729439336, 7956273653179990376, 7839320390573561917}, + }, + { + {9250363391170832193, 11006035015261134401, 14458550514807354785, 9325016894298710330, 4144596754841442017, 15054746156170374381}, + {11456640279410058145, 16275606744085683852, 17831878718437221277, 1528529578606146868, 10275813860685205403, 15479223083860040951}, + }, + { + {14596302840734253179, 14900690077811267578, 16140097010885461623, 12772352415462534488, 8614394783748304718, 6766902863888446020}, + {3301138793577892410, 172863568565472035, 5251004015700101269, 3165424378709792613, 4958340403792084944, 12619148531858668210}, + }, + { + {3284553122109620274, 5270759104970263988, 8347616712857016748, 10393685591838506061, 7030247929091757107, 11570651577508724004}, + {303593432212184598, 10870347165523269046, 5858810139852537379, 1529168183268214217, 15332143584615473398, 15102908354736105773}, + }, + { + {9574340152153043928, 1662915623607662881, 1811398080012362182, 14878205415613515919, 13936394534036516069, 2337960597242570130}, + {4877776368265943702, 405103566243555934, 14225276821637443863, 15556532615883469807, 13552306515137288805, 13115529663394516774}, + }, + { + {8161989794903954412, 11660052284711833602, 181947658370696753, 12989304799327482750, 4066413204451462606, 1942221685308503206}, + {12484888137941485851, 4649383641303460090, 8371451456723263654, 18441597518505156777, 2352723388962482606, 13975888702704352920}, + }, + { + {3847700141255053024, 16406472982872848520, 12468984591385771739, 14942334423186830995, 9933763195617481489, 1409101159701707313}, + {3573772803237348824, 11730844867315771254, 7243658460515938367, 2166169203511142802, 6248287935705475203, 8265081108739245827}, + }, + }, + { + { + {13853753564171363451, 13820378722717422408, 3590234094500056381, 6866298275188000567, 9895869565406539361, 14927210698587219451}, + {18236367046121661763, 4730509858602802480, 16337561945026136271, 14109799857833288312, 11587799424253933816, 18285301586729898647}, + }, + { + {5697628194755082385, 10473326214136017445, 14513883747346413480, 15341298111275585222, 17117376470859521237, 11176286297628034124}, + {13634599286238815170, 17382552533170299294, 9094266669583253997, 239734418257835070, 3591794414849763173, 3133034763403569336}, + }, + { + {479206554903518820, 14658665690734737994, 17152906210790105810, 5958667172720220276, 18361725589118886101, 6185981515380453548}, + {3944672359066359091, 13732151285655721173, 13939827029587789643, 4302296200033682886, 10240802189705837857, 17865142655928189798}, + }, + { + {8306168305072060501, 14751131852602843064, 8096080752206544475, 4680206077732390021, 4419645889416275973, 1519820218356079506}, + {5861554578628119723, 17661801171279693964, 13496831092349512650, 3841281188034367706, 9158790543647317313, 10612203699190989969}, + }, + { + {17037898389052207682, 17860849396131636095, 4349951673886175152, 16094377250964498544, 8476986837295463150, 13680887785001025305}, + {9336507099265066829, 5947089043768571535, 16585602400938566700, 12581267016799867259, 5245484406207830441, 15258801158753041634}, + }, + { + {17548721630682880044, 2012629971546646455, 800602602193080743, 17396222438338198463, 15386698858603827900, 4460480856545157616}, + {8525314085294734845, 6802480695964082562, 3816316223911984005, 2464494579218714722, 16070919992014947059, 12434854377052757812}, + }, + { + {10772836789272530628, 17088691547289098969, 6718631187086570471, 420298886229605471, 14226789851958972081, 17291643744773087097}, + {12356365831670845340, 13630822714405907791, 16223114371865091666, 15934941425414639409, 17030594846596638635, 8894066301960174157}, + }, + { + {4310605480085901679, 5471288425725661823, 6576140643955467936, 3714340113776184365, 15078838872712774233, 18067422699917639715}, + {12245168645156565325, 15389216374359086860, 18243910314816324743, 13468377185671333723, 11841166299472831071, 11909676588719569514}, + }, + { + {3039346662401409366, 11575031947853028231, 14291487837746157982, 282111250317099825, 4887181073166372566, 14047452768090024474}, + {2283232607704977993, 4156222868336602759, 2441521584735661714, 13573229353517305526, 9684005436985156440, 16922485212222584386}, + }, + { + {1553039617197624241, 16514547904183858426, 17367571479943820700, 6825408557936662849, 2149227651964819356, 12858662242348855034}, + {16445523343296776096, 15421752631325482241, 9264183421788584112, 10262669298529989004, 3891304426791575665, 7854962043530510807}, + }, + { + {7161328094115041425, 14768718294470741983, 1078847568267874018, 6322480815278149199, 18188544274188331587, 16963805236223110899}, + {6569325721741554692, 3602100460502266263, 6206643867130260259, 3995469255074245935, 4504503583988431466, 13467328567518375341}, + }, + { + {63226333202683911, 14671906635501883344, 4335660486805420293, 11275217723178135465, 6969760830613945548, 5475843160816775058}, + {5191859885839573328, 11668101171119622286, 9518940388019884438, 14714241947617194877, 632307311715190469, 10690578858328770477}, + }, + { + {14884997433355015941, 156621939301515107, 2445891763674288403, 6687931105529654257, 8038932454300528136, 17697513852216155615}, + {10697408303393919012, 1270195498851099805, 8775588255042571995, 1242116603145454630, 9905730533240215250, 11108714318383369270}, + }, + { + {11500726014983094694, 4893160514903146014, 6828604209587544129, 6694479643978756339, 10165551838331433795, 8922014005219839474}, + {3229903124718463251, 14809704320533033299, 16708685770407035451, 5156200782696113140, 8700282174866114406, 7662703141074882120}, + }, + { + {5701014331899997770, 4977516111362250117, 10386130146580034690, 5907362069264702911, 5301877636154186197, 397392370575027293}, + {1263487057932284919, 11711479762453857997, 16042267091696606042, 15652910858049110642, 10197526967041956937, 9889216320967166622}, + }, + }, + { + { + {2278932254609762845, 3068437509226158452, 15744868666981586003, 8677007854964299754, 14625754507006402628, 7482852446653641224}, + {15206963697756253732, 7484355521899064206, 6303098706947551318, 2787820459819783710, 10505036182664953766, 16812578278348872057}, + }, + { + {5328402213024840932, 2831229329708260259, 9906671250991291328, 7195378896450113384, 8137962574541487106, 15483420743942942895}, + {10185763153215621718, 14520317539607894634, 16021622969265412233, 249210915963234415, 17409430098951304156, 3459897863682731842}, + }, + { + {4578309973503497569, 5447834563002642123, 15020655062803172906, 9784029918330815189, 2259183585428823851, 16276654784273178554}, + {16974315692938443293, 10322189489795986428, 18095043949242233690, 15529824169672291114, 1043280182503641486, 14396190389419318386}, + }, + { + {13791916129725914380, 13541507063515942618, 9276345046434203244, 6943275844315018043, 16854690413809965818, 2726487241024832361}, + {3900450032896335120, 5969156219373170750, 17268291021193518751, 11250600592358444059, 7565688406177070545, 15380048155812318403}, + }, + { + {2159715218114046205, 301696308536518990, 11911287610460594499, 11610729258797804364, 1589214470697930255, 1570320627315083551}, + {9260920251773296769, 7918633900008866828, 7386692371354490728, 7126854243096368735, 15222007907649556112, 11290458721857786222}, + }, + { + {17312369275830596578, 5182973081822417591, 5758577204554952034, 295579627010058982, 2247918074145955246, 8367663961370585320}, + {3503412556908913188, 5007246298285139323, 8914116616437113026, 1817837618482256490, 3888281808755203703, 3596198455140072332}, + }, + { + {4204733050884801398, 1015148026108767645, 4474014702901614014, 7893591904251967078, 4629334549496872963, 15544715130284192268}, + {11515169364144564012, 11336358832640243779, 10261616753173485797, 10330995131826947610, 12790048324162427726, 3954964425838098297}, + }, + { + {15466718315096778468, 8207059140145815039, 10673629467808554944, 886708118721286191, 10960160354467637448, 9642682828370620599}, + {17438921783439498819, 14206610474459128199, 11283947246870324451, 12050660127565107275, 13394619346776634282, 17491132232695062376}, + }, + { + {10457517951627566681, 7814805982659785572, 4650803108692583382, 4440130354090651090, 7336812384548660642, 13822285076682517424}, + {11611474337378208231, 10509443664430110860, 10916114862115943164, 12170669850354153477, 1352553062166066021, 11347589626152349860}, + }, + { + {7366949076040585274, 9972276751640303927, 16423512277534811183, 7530907908504052262, 14015798648185098200, 8802667423497257421}, + {228792414850368243, 10508703706507014037, 15514995919049710800, 9118562110950567762, 10221889965935090890, 16185466175233862997}, + }, + { + {16803723690699933675, 8487548998297552291, 5803011050307689648, 8460712827018550942, 16456152075823939447, 156300814418469424}, + {17276908626721299576, 10528203526298520812, 16491173177262003297, 11906011972808274164, 6723396315092456133, 15740670211031988239}, + }, + { + {15373669199500708772, 1418986186617967125, 14646929309039869466, 10499548009936132679, 5225957845760868950, 4939303423191000552}, + {2490287739273437898, 16292383701614685255, 1045010937850952943, 12708627850998017142, 10150876621237058060, 3374704772596624527}, + }, + { + {6486481503809124917, 11162331521576557500, 10016688945665150046, 10440833383589084422, 14434962491136116288, 13795058186240622619}, + {7202909919242169987, 7084906191002088475, 2670999100224514475, 11205165509896785683, 9153315609780748370, 5520519463950164065}, + }, + { + {351071170739877570, 13322560781273060052, 1701785565365847432, 9955777089526659386, 7009753490594385600, 829657910123534028}, + {9606276748652074643, 4015732708367370031, 11721876633733031363, 1595979662340466299, 3599656218219669185, 6412814251963052600}, + }, + { + {322868295872168097, 10779671223207907160, 17146021042584030369, 7744919563204743978, 18009926370684955932, 44255721611034122}, + {7075518626826263580, 12948066299893087092, 7907043165345290748, 13326944701483639264, 4900286334119935957, 4216867816480695349}, + }, + }, + { + { + {11422675888913080491, 5395798484379963549, 17893801226572621158, 3834831668463767880, 18370393837527875887, 17800133101197187390}, + {7029247643873698097, 17334943497121462468, 2660202885167189413, 329065954663218375, 6698129215665562567, 13717605916501910272}, + }, + { + {8639178386474167317, 866299449001193597, 3615027842912577064, 3248451241352944854, 15229370169242039655, 14022996697023959990}, + {18261603954599110401, 277984183194636545, 7122474136492127151, 17268552229454245560, 8360275028065354990, 12658058275321946659}, + }, + { + {7568749213445711158, 11322886283898751316, 1514838974790282409, 16480451187055352472, 3521826310939475982, 13331538149045598985}, + {16615732436977239999, 2388796933096443142, 12226612954948297380, 10822339804892299866, 11505338527635209905, 13965903403607753974}, + }, + { + {17992684961837313681, 6896408298290524868, 8544072807657571566, 6748791036415412590, 14025071172791740982, 9009141746159193034}, + {13586218153614538887, 7799628080484457452, 10266486360990114058, 10957603090701342492, 17913488373740611379, 3678764260563976289}, + }, + { + {7850028067287088329, 12999005266298055869, 177742117066576348, 4187563636181037744, 18227464305249346823, 3944943827343100145}, + {693604820039552598, 11582121744559616851, 8219537047451291189, 12011868187157813437, 4720619866818053644, 4330189064262098264}, + }, + { + {5651722935351245741, 16211924818358123384, 11885056608369234243, 4201983212017634359, 544526908348909642, 18119044215050860139}, + {1629340396439724022, 4959173500186337859, 4507705775156637972, 8833696014848286450, 779478998504818906, 7902380186120673057}, + }, + { + {18293852260825634987, 11802124232706822019, 1644849027510672867, 2812476574328933804, 15557250672802932860, 16508981297686648154}, + {3465734358950613242, 526649456539607490, 1919417099895547055, 17331494709758577824, 5162227762764949865, 6242065099954684976}, + }, + { + {14405288903984360898, 3180009282630369461, 7764333772077120386, 14416489610146878273, 6877362386602494384, 8785041971848387380}, + {16205552197332611855, 1946014005873611974, 7425906351428289382, 14466564319882318102, 17948246265185418576, 2220383241683179866}, + }, + { + {14872241004765885673, 3636107144878936670, 11410176190546783355, 12181463760260857326, 10438330742190191570, 8102662675316985666}, + {6176126135590814635, 15938212979141106430, 6930351408968184663, 8991851982195757076, 5444235666245388183, 9160086367185317170}, + }, + { + {15340964667452830754, 14317488092981700975, 510238063968897076, 6837249889367286466, 525386960344698653, 13363589982130767126}, + {17072735759253073196, 3498833952641874877, 18362568207671943201, 8995020072357799227, 7719631523143820724, 1085622312019426779}, + }, + { + {13037971076711969658, 7591102587937139905, 16112103964232511295, 6658071900440103886, 3506958499519852800, 11206278262730072649}, + {874512935619455066, 14023431168230615564, 7818120766602709739, 8832031439666609419, 5585964366092107082, 11504555017740100069}, + }, + { + {15350102097560218059, 17960930933998802379, 5819537312713605133, 16574725790066529972, 5613973488460835436, 1634532828922318920}, + {6054735558644874316, 6779535286618214798, 12125632371272029575, 14822061593509407829, 9915577628769350648, 3262340591497022728}, + }, + { + {8571949731132956833, 17851489671172976600, 16122671592171467294, 17953595451749771955, 7101774572418004893, 444927268485192911}, + {12898124468306022144, 4543591108002290851, 16651517581025086108, 16702288951395475761, 9009172261902505944, 17794186523942672480}, + }, + { + {15874281727524415422, 6572132168538751333, 2488717046038925837, 7528462563702651155, 15177291123321120421, 14276075288284279593}, + {7287442030153170731, 8621411913466239822, 2230532822823360290, 17882655262254713908, 10820729357094734590, 17116812739217748569}, + }, + { + {3521891825683807648, 1428294732738224966, 4467541612632144795, 10743380230531306175, 11596549629085266496, 12996854075027646298}, + {7286872326554604613, 4747621740227512796, 5892707014992033323, 4322214473714022904, 15745271974603396672, 7332629562375692095}, + }, + }, + { + { + {11178967054056195663, 5059057946657071041, 15846370838494899705, 4058997021862163911, 2593984691649122230, 6254605580411388786}, + {4176062086390468245, 16189011794825339160, 3064989397845883132, 13286588576296135872, 535125068036700463, 10408854172492123217}, + }, + { + {13415824456928728537, 9031989784978508164, 17964218247364329886, 10744745034242750397, 11043008786756317850, 7568533431395324401}, + {7507011205371347198, 2388282443864154121, 13696995679089020165, 12583409078815059304, 13898075392069488590, 3664734608506976906}, + }, + { + {16544958402351236901, 14337484652764170641, 9770866337239118974, 17810777202725060237, 2097808205286057289, 10362289157561627722}, + {2685761484429320421, 2462399891877992298, 6512262486201450596, 10981880327208688077, 6617301996979402163, 2835239075992528291}, + }, + { + {7991173582500478757, 8893625338111976660, 14169111919230117155, 12356393203568432042, 6624804336968870156, 4373502195159979453}, + {5525831087690451674, 11667968375332638977, 11672899591207027148, 16453647862989440606, 11804399513913845371, 7628460269199181450}, + }, + { + {14630566089474246013, 12500213971114656059, 830106031407073402, 6911967831791350423, 5540576114989833332, 5622942981234358149}, + {9345206395676904366, 629433153585557678, 12592664746177863352, 7117895689488311014, 6126264353083621009, 8672251668710377501}, + }, + { + {15343270797031359599, 11669913580639087574, 5479735138674518875, 8134395341091815991, 3472212905841111046, 1943386847444310169}, + {4802323257275851562, 13041393404614837895, 300696023871229709, 8124939534882080453, 7037259695740405607, 15666477288369374120}, + }, + { + {16929655147930952127, 8700678224807582342, 6899508338063907541, 14124820011808216974, 6685131911353931949, 11392136278714910024}, + {16320977876025241931, 1873285772151321892, 3864985292509805330, 9209816330063069102, 14360660501914452161, 13765026774665638630}, + }, + { + {892554047301358165, 8208545275404753447, 8552497586050955747, 5886745868526813090, 11422451069439740114, 14454702771432318255}, + {13473748178404916790, 15675215165690108087, 5664345539094868232, 987897124768858568, 15329698597492189645, 13301936956751718708}, + }, + { + {11819868530282842855, 6710224194746120191, 748201410135027328, 11307022666945855023, 17212649811821554251, 13423110040809399786}, + {9934050328022487645, 12074357593722511625, 6630946082142899698, 17056161405408381398, 8571006633367538659, 3796784189746526746}, + }, + { + {2305785560014348207, 9531795736757421484, 9618934670188570881, 14780074586441306089, 6200104801707088881, 5386351446699164262}, + {3002942961830406638, 148274483233190080, 12735679168321756134, 14693507680316309726, 14232858087052761737, 13985992269476016693}, + }, + { + {13842387890174377681, 15419080605999723375, 16681571383346636493, 9653218004391250805, 1748476375644147649, 16081919636049288692}, + {16200057164189696404, 16659975838973439415, 16148363345960831424, 1128253701358674568, 11627719509137069576, 4062100673790478823}, + }, + { + {9445528033084918138, 3236780574278685899, 9682773997054520194, 3980365165990825614, 10958694477307693178, 10839810148743664524}, + {6650282121724231548, 7894922159420004756, 5624389477223934865, 18151956206730252126, 3735677846659494424, 7111781989342355242}, + }, + { + {10926693111959793122, 3929513560799028061, 13083700370081498912, 7606788298622011804, 1499929199041655117, 2537708677997890346}, + {16163615921094614869, 12490168710448316035, 4173408469387936546, 9680453490885130745, 6897387665823483412, 1803882466154055696}, + }, + { + {12928382421675599167, 8246098434142042032, 7828289919035992593, 12704490623615851803, 11049427248294980078, 13839977807550225944}, + {8790158444480790055, 14691519147850982325, 3571740556626361440, 2025494493460599521, 3901915857099204524, 9232848549491285301}, + }, + { + {17205250580750313739, 15838972152830244406, 5212027996849957464, 16696646218907655391, 13718292263491425643, 17806855155656742837}, + {11988041571551593283, 12853752025657189673, 13524920127388710455, 10671352188986408025, 17279385799981015698, 4758202966923836309}, + }, + }, + { + { + {3974313353418109687, 5720345224825286858, 6801835843798312295, 6372634484952764872, 3310006789326513240, 2726055308497026029}, + {3843770043613727251, 7900599654720541372, 632972795419277904, 5983319127366592262, 3077785537568329842, 11218370678822489750}, + }, + { + {8928421106978139244, 16345148895360341144, 13492011400134727288, 1731289337634521374, 12525842512649542947, 4207120388067304407}, + {2345046098001310699, 330997644936357897, 13635040363459393506, 15230878178212376507, 13652277951430850918, 7237296141945425478}, + }, + { + {4557723407539085034, 14471756909246230823, 12448850285779367089, 7851797223627122363, 5151430975338428030, 2954895927776921398}, + {5279712016090746131, 10809813162354586237, 9242053890074456174, 9668653512111950665, 10135306740731568651, 3351464240228973156}, + }, + { + {1627053608069570695, 11376938021692164730, 9622466798286684763, 5827728193917331600, 975693545877321955, 17470494739932363034}, + {2436171715026125366, 7848361070155121218, 14061221750869732481, 4888283785453330436, 5036741489113467755, 18084794423259936778}, + }, + { + {3552955380513038861, 6493678664778873794, 649357577150179579, 10545862185632419419, 16350124503975893898, 17724367842084936677}, + {8896453178391269512, 4710703558251776246, 8492419126400496150, 12768468520236451572, 9192761450614257478, 7438647446930613021}, + }, + { + {12369531841339403158, 12996664064774054476, 16155473999921375261, 6644207479370307599, 15208474964382806744, 633958492471874768}, + {15790482482394397377, 11673958026072739923, 2075775971265990014, 1102830502989644674, 14328138387706433231, 13602359449553119289}, + }, + { + {12143092119248055873, 14188915263690936719, 7408425876028150433, 3779414505485695820, 1780029671596030155, 12865710926564478965}, + {11680590440944425259, 6090714137241796515, 17343249885314900203, 16644769067866316590, 7256952446206185353, 12961945084971064727}, + }, + { + {11134447122165152593, 12122722588466177555, 13031738851579131777, 775360620960643964, 14535630049172421527, 15517365877497081698}, + {6749416834835986329, 111798195283805063, 9427922671178152846, 5583634039175768131, 18026394909638384188, 9381210933213377107}, + }, + { + {10334265748604755240, 14313974363914896934, 906523409788490776, 18014259526343590726, 2489497295341492694, 15497769074229220560}, + {16667753502962144886, 13343473574324449479, 10922772232061902038, 17638948975896960836, 6206546855196209053, 701379544767660020}, + }, + { + {7323167804561066698, 11606373977379537829, 7740797211952786009, 6774632772002662447, 4137066669379889537, 16448062068535134384}, + {2263388950950990004, 13986419062957738814, 12736780551361126087, 2151837813422636155, 1478109418633068180, 13196418687650255350}, + }, + { + {4763801360917190189, 8413965106647468101, 4459652012857109043, 9905026392952537025, 7732441075598956516, 5321607056947218327}, + {18121980170092748441, 3481588764335216251, 10446782825632997719, 7693360199940913038, 17104571571510845330, 9855412900039516293}, + }, + { + {9385835129240491860, 4824589714590984336, 2196446888524873714, 14983326779959559720, 3813990482140930799, 7930070026494865435}, + {10845320348409053590, 11702362686639252435, 15805206625312010834, 8614879420112692657, 9694429543708544128, 10989853026030014509}, + }, + { + {4594816827257062041, 2562345560258457605, 15050193570974712932, 17246403151526033694, 16146699389908107161, 3086841042515638998}, + {1177843674463060692, 12536747725401551571, 13206715304133223188, 8671490102358535635, 12212794350549092683, 20556749311088582}, + }, + { + {10565304604241425748, 5627103307724972881, 2705248188066943448, 11105071139145988281, 16803969759084451954, 14319542282813740942}, + {9198217579227787191, 10953486347952736044, 4560368619486330585, 757042920267352831, 9594548960853813804, 16693022163678979226}, + }, + { + {16489742344230153188, 6539412415140498039, 5165832543217723569, 13003478072329918265, 10047084890632029191, 4694331753623574371}, + {10703728784580237099, 15556245530594099306, 17588951018132280983, 3935002524499547861, 17702492742125323184, 8520257892664878061}, + }, + }, + { + { + {6560439988460907757, 5477297489685795935, 8263272205317190744, 2155221279069076320, 11867925124460267529, 8571196738200600952}, + {6380793266523402469, 15145030817477249320, 17647327914659401104, 13319573822063298508, 5205094261198279328, 9191043393335719432}, + }, + { + {12034745616655220445, 1806587157936901864, 7601847606478345239, 4533004298191165610, 3124085236761665559, 17389156053407331651}, + {2864989624008200953, 5136009810031599899, 10582433036693217288, 14931735150274274801, 10439401220326631886, 12677134576293396474}, + }, + { + {14650755191841474854, 16300166795758970811, 10649037273588294054, 7104270209860104788, 7967261075606297822, 7279561497784730946}, + {11697616288471532112, 1052366164901768766, 2912238129374155198, 9701834771332452417, 5442175782826775844, 2299045115469613839}, + }, + { + {1287332463662400432, 3513212364154390112, 15346209202263562543, 10855689071781783808, 1452088722357536954, 18071443086358423492}, + {868440689883949449, 1816852863222370485, 5199615657293991859, 9449935448458274470, 177207136542962287, 18245562675978917823}, + }, + { + {17651410429892341588, 2994246517539724152, 17728394019247321391, 15386586165465459648, 3241419904742758835, 8030267348237056794}, + {8435074151094093690, 524712275897055450, 6804195566995782773, 7679712373149113143, 7995287808064276131, 8927279975652841496}, + }, + { + {10778050409776497212, 9536627676531662024, 7658414011223352564, 12327599912454605669, 10735492819935528307, 2807151273987894916}, + {16239030609792653613, 10332717478474239620, 17257364018983708944, 3381279635307716914, 6577585621142376520, 13802487288606991045}, + }, + { + {17954497611593459666, 3664315036641118415, 16509024076253684643, 17283250569741859362, 14982375386085505669, 7689080851173975344}, + {6539602342283003922, 14623322619256010467, 2886392582253254823, 11318353402632029623, 1048960849463114154, 6823726223520193527}, + }, + { + {4530098428200707620, 12839096969967251554, 6198816293838808699, 14497410916805455082, 5464738801928006246, 2590420136286143409}, + {11539859348742386287, 6448283683032046535, 5190841120404297714, 12682630274691496068, 3502978196473226835, 12528396777891929349}, + }, + { + {3746596285568179795, 4244746780559722754, 14192133631604917518, 7971972442736154200, 12850431088842970183, 12924848893782277960}, + {6210043026683817121, 16093936346760077654, 12896762480304091787, 37796835925086671, 3297320202618582783, 16993735692589610973}, + }, + { + {16449417965222475184, 7693932127514324007, 365506606826317804, 11357852591741708092, 13089599889026601450, 16903400737548641302}, + {16984170724371326225, 10391779522684702015, 3067870164038615636, 14252841648119381798, 16218707853229586386, 7836241961586971830}, + }, + { + {15192483994066769425, 4516676767104334066, 3298548929696008355, 14149842818379505147, 7754159985358226567, 18074898548922930513}, + {6787600702315314002, 17427509000681768725, 454039934719798915, 6687725764533626315, 650049015881932447, 8174481017589685550}, + }, + { + {1190766049258248701, 16712766508257076609, 16011267443004798709, 4304976661940244179, 17401735122754430323, 17805491770899188624}, + {12819712409221279306, 6012470734633531883, 13202842728516275075, 6714649673431658519, 14766728086190011567, 12025005326013128366}, + }, + { + {2550442130803597746, 4388182498378820973, 11877916159578114240, 2491232568553766269, 3061633366263606868, 8930196601588700949}, + {8351158090909235917, 17643196865264803997, 15136059012100053669, 10435163437422615040, 14669662828147957267, 1927075496220718405}, + }, + { + {8522264882073051051, 1620578049778200332, 8273686191210510914, 15161466784984992681, 8880636972606501019, 5137083413106892985}, + {7453074636338505180, 12738938384123169905, 14134926144460829976, 13289026532736437285, 9961457855205231232, 16868281080316857896}, + }, + { + {7869220388851879053, 9243594331185701304, 4578820859414588545, 6726500389404417900, 17828060266225175185, 2805995484906762914}, + {8127865232957840490, 1119209698667346666, 1543121112626802223, 11635665147697604228, 8700384215304758069, 15110956032330707009}, + }, + }, + { + { + {3999765870898298471, 14172770317997608516, 15838808511345459441, 17483331932540195875, 11537545446428919358, 18161106008778308362}, + {10832208579815022485, 11144226171709861172, 17832358814667390783, 8104027490956075374, 7738001035752373711, 9976303985994712521}, + }, + { + {3053316092196908301, 14599294197004415859, 11376968891216184065, 2166021074759834008, 15176324388121041813, 1177183645238737592}, + {8872756236922047177, 12695199395087628448, 43719476960233138, 9968538827589652609, 18292294231863534866, 15247938318298852535}, + }, + { + {12542532240058205361, 7268582068935965299, 13539169522639613195, 6415306438194106780, 752732255800848126, 6467156824109874302}, + {8919765688158995394, 10376805730213749427, 3560797874989249371, 13765505640431451465, 5413502209131873679, 5479930898819906026}, + }, + { + {1620953412301746638, 1834494332682380488, 1221287231603861044, 7143200653970910387, 2142887614724373742, 515369627860172237}, + {668312192947122200, 14495573370059274601, 19053408511875346, 11573007294798838371, 5996919291690021344, 10963600343891369281}, + }, + { + {3772056564995867704, 8936213084537725440, 14741295503761475310, 10169482512429303117, 7395158688725827440, 10625709550842394718}, + {14145698620161177178, 2138174424797012712, 6382911437211835009, 9621628449746421183, 15318114188233644891, 9127092351657370481}, + }, + { + {7569439361788924386, 5358743744068588919, 2472617216924555430, 14446025836401453832, 15206339952764265454, 7985026553542652918}, + {2885368393308729366, 7662239829932173449, 16902869606779080248, 173909372728520956, 4745825384290840252, 18238389235634593837}, + }, + { + {17278763089415978011, 14648999284612290464, 14549644405624342751, 5242220935080712551, 1281695041546515602, 15620247700383069753}, + {6061717613096359788, 16094895295267398297, 10954605165474093325, 17036094738837097294, 17315827424817840310, 4006783343088127765}, + }, + { + {3347760495316022590, 18353910874341978035, 6043778301036432970, 13355724919784404041, 13015796096139756391, 12036177583658955420}, + {6518471179080804014, 17158842633921763658, 14405522311746951243, 6973400651137011042, 4746890325642485958, 6736547103097705136}, + }, + { + {10669366973839367672, 2385569531879845310, 5688157778456360570, 5432194657022107321, 12671178471488614588, 7761060866335594839}, + {8978451158519567422, 8492352982229672202, 16643425269116819050, 14671179713658552694, 4363789067899164540, 9370620302779212621}, + }, + { + {13310909055019013380, 9596076897475568893, 6086247547890141325, 6615089564251394108, 7111916614455620574, 11675908774987320387}, + {15925711704010954904, 1550153309190557596, 18423416479089687440, 2237807451710845475, 18354395799746145454, 5438928742395904784}, + }, + { + {4608572069409268399, 15073585230746724421, 5850493471469990136, 17178910933214514567, 9197442918599759710, 1507943865355025659}, + {10368207473957700231, 2360337372791198513, 5963074125901124077, 4250878605574616141, 16077767359709901643, 4855088307376525666}, + }, + { + {2203675397636717516, 10128211604548624427, 4835587188573085370, 7287969591049025649, 18068255218779265239, 17327995020974268765}, + {5719882824311508910, 6709568563671378548, 5291703009398100222, 10788191138630994747, 10408053012947876069, 17443305409665545835}, + }, + { + {3342016462643355321, 16679489257601825281, 12043384844586211843, 2115834496701139743, 7212063995634259653, 9441913556375417406}, + {7879272060659630672, 1322154690117373473, 1520558149537399921, 10259915503278516179, 3368650106971654575, 4144693617269779944}, + }, + { + {123661428923518452, 17329242377861899194, 2113549760254636588, 847106394960135909, 9954070461361301937, 15563438708607816744}, + {1040702637047883211, 10189161753028718742, 4009789976573376701, 1936488692781097326, 8873733742849194027, 12009079112311092681}, + }, + { + {17741068926415815996, 2460265563474934139, 1072480528377351648, 11885568366174373122, 275536108394716793, 4505994571681041972}, + {4997815718062610307, 7966342590073259297, 12194728418927987790, 7653673951695752977, 14783821829300070265, 12992716489185017892}, + }, + }, + { + { + {11640101960998639313, 15953805101075159736, 3493841973394909037, 12961869929990749200, 13933610253398336212, 12682152790147939130}, + {11399471237860797020, 9683858492545796215, 1548460573545589546, 7173998343795107028, 11677696610449743857, 8398835533776273489}, + }, + { + {18347627398589476579, 10477209504919905991, 11985004040168566638, 14212280469459055980, 17155809208164808508, 232842756626748023}, + {17663176896634111834, 11266862009271054832, 2801433370426448852, 5656158823188135309, 12410354059238919535, 2244879375847000921}, + }, + { + {3190520016779022051, 13246407962418081856, 6668351451725762413, 7768576717338627844, 2262028295584292801, 14381567562481981200}, + {15520621358714576108, 15362331656590194956, 13091576850573016550, 5790621552805149408, 11085966456081752022, 7995145398979072602}, + }, + { + {13623592007492989552, 5695669685400021686, 11103834195452561281, 3924874736262277070, 14749945062025337942, 4117578579179786869}, + {4942010861531575831, 1697597687729901180, 8378286745350822869, 1042755497644966445, 4609634700670610222, 1595371322671204226}, + }, + { + {7356907816961926000, 1600282058170066082, 10425052022355846482, 13802483414078059083, 6527010123231557260, 17014236698247006256}, + {18079966107052649494, 18199473573195697305, 12045755339859992655, 9377227322475274712, 4707316309742615490, 9453719605925386277}, + }, + { + {18077338856333540591, 10940855750925578638, 14676427357499773843, 7077022433649111811, 16481763083992802494, 7834705448306735746}, + {10145419701640226394, 16562141330625721365, 16626213781430570449, 17015973614586109901, 12442022173385031947, 9087600251713065715}, + }, + { + {14206474989889371590, 15241997516043179936, 10046960511573015546, 4012668500672179053, 6302607210097986007, 14073285009414845523}, + {10393845740118669710, 9303896053454113349, 318938169015454180, 16356683611313694376, 4951073049233679376, 8961912152048041842}, + }, + { + {8028335957857989427, 10757251699849982309, 4827184158706600421, 1972803202369040744, 10894855692237667943, 4915699847075993000}, + {2764904044867252832, 3759515232559764976, 16791991319742688688, 15982469402311953688, 4451160053970330710, 10836878114068503963}, + }, + { + {1898218734300846462, 1890052160621754096, 17802491502548108823, 6190373917215274157, 803001649590263174, 3115437408056727221}, + {17784493560265139286, 4722713594994619444, 7211558284311348923, 12566601502228621014, 13213147693274689277, 6593798376447442065}, + }, + { + {14162633535901746112, 13888434174969429930, 3406707891053136625, 14343716935895842484, 624836619325620495, 16396608622030250358}, + {11243183545197281900, 13435578064685298093, 8553550930687221160, 11901710173536269070, 11201351899495201574, 6707939517125993234}, + }, + { + {9276193773801045700, 5450558417706905067, 9450904291105895205, 9833917887246857818, 7285500844025425965, 14754203014686269594}, + {810778446780024575, 2913316233752324212, 5099291060376680008, 5738827727953191083, 9464181523940859483, 5936468513591129863}, + }, + { + {4878961831520826954, 14509215665191898446, 6708977457709037859, 12634291587039233323, 14051107097299387218, 1257131711299495146}, + {2944921399309621693, 930008782908430501, 1144887774944683814, 12070375620973983173, 8562905952672576547, 6655131226711101957}, + }, + { + {2899574573379169897, 1484714325759426788, 13026584324463930570, 7354422735718365143, 15271320868736293087, 16264371063992305811}, + {16407322345111310891, 8408499977463544416, 15290440212843619800, 17056597194115740595, 1666861996182883636, 13197583661824364865}, + }, + { + {6358774672677922630, 821442820597003176, 3813988636387892061, 6549290188660731594, 3924164508423783399, 10897312938877431610}, + {10853174774402828944, 11140723571860242940, 13060695462912345962, 14956978874467708930, 3205778154938349955, 4857627122623530951}, + }, + { + {11135246107897067582, 12930931433283727075, 16046715789896369411, 15407716337362202421, 13785191090068112, 14267330907406142872}, + {9630464474491738918, 15849686165796549334, 6769531647489555179, 14133844287397398953, 14941312803089108859, 2539509877677478606}, + }, + }, + { + { + {4519426578252664019, 12498635300136211504, 6321021405218202857, 726318959046945666, 13882007167200891438, 2395319726326567532}, + {14574068852065085528, 10190204462571587840, 3147469108386280925, 10820985172387594951, 6286320751972150388, 11262911446209261547}, + }, + { + {14681940503030753559, 845444804754325384, 17738750192032703554, 16488507045196756482, 11910847346995920258, 8626355026937911802}, + {18017945832199185475, 11050392025640445707, 10242360224530664755, 1617332161128003926, 14748788017604482554, 10938197837639769317}, + }, + { + {16523024021068053599, 14153734702399414874, 8975814599494295874, 13479798347939192877, 11858323547050135962, 16835135870848796279}, + {18442770255404680133, 6432227429946434052, 14626833122688941937, 15380321854072410541, 8513682513482878540, 17341688292014129030}, + }, + { + {9982750773031032188, 8982169985591678537, 5249265836220267338, 745482432716420646, 15780419841302462097, 15584095070673766359}, + {7735573468252400802, 3795411598689442193, 10306326103347347341, 14546148414040805838, 12297870683806673875, 10180646444691724781}, + }, + { + {12710315976002578004, 18013486904999737909, 15071959480643480686, 11232436041458243738, 11242505152758575624, 8836015187488468465}, + {7163797004587484021, 6976175793895240071, 17645939623644273967, 15778152496214427324, 11329126604565270312, 13110466004937401027}, + }, + { + {7062286409431630812, 2728146973991795543, 9706360251287090173, 17163823676653858159, 10108371106182915478, 15145658691257940197}, + {10397214263743326838, 16577575568682665639, 12639970963217473417, 17440990594269730118, 14950277950848187668, 17431952877316305268}, + }, + { + {6480066766050317343, 3568668077668658088, 13783844110647363350, 3962057444946379264, 10510088723077169182, 7170700020292960967}, + {18344863488775695783, 8824084188613580257, 6513472792662119798, 8283498389636157255, 2472052284746094828, 4520476222306731358}, + }, + { + {4812653469852902630, 7740257893595917350, 933590915187574091, 5367604661371230699, 11524926856934229507, 1547803982974742036}, + {7173249707714144699, 3782455439068354757, 3436775349109564743, 2186512130420632639, 13544740200729805403, 16975429410143506788}, + }, + { + {15877732835883777356, 5756653960126645671, 2937501458743429054, 3189115871611189466, 1436979939858552352, 14064609826654033973}, + {6211184029252028368, 14949803431947181926, 13070266838064658248, 12061247352423941993, 10971542374730440659, 3480209766469344160}, + }, + { + {14525709786341885047, 8039674455841380225, 12237612161305828783, 3099183041004087991, 6867967360204688651, 4823608220141329719}, + {2084876862441787600, 12090014665548950766, 3746144123408878153, 3923168966734460049, 9736629444481310223, 2220438547349139262}, + }, + { + {12036615988734629195, 16475002855996060653, 4484972141187264922, 5765002039288394851, 17063350421202862246, 13141299915467681366}, + {18175008310626520279, 16161757370162131471, 10768451552383046438, 17776643199179949221, 10598298165332627044, 15321920779815178261}, + }, + { + {11362509937560115945, 10576153459965418079, 1262608791982484244, 8810089598173523841, 12316042044260285948, 2268907115684739741}, + {11678522433578723279, 13370587091821540471, 9764685266488488043, 16120963353852178901, 6374843544537806852, 9069656632944802220}, + }, + { + {2566151116175682705, 18419852245029475374, 8482627328365732076, 85390825415125292, 15919801360472688229, 5270660089582520119}, + {9546653662379271343, 15939549011572950268, 14048762686232196880, 16243975286260758268, 11298686963723559385, 16417368127514338489}, + }, + { + {17555499161685523827, 4589562335151500279, 4172801013578954247, 4538649193559819086, 14507716041867679317, 15478474910313981001}, + {6017839036160861908, 4246101108460983771, 13629753094704860997, 5513007954781513788, 3904348220984245516, 9061778934720872085}, + }, + { + {15748938882069408756, 14277135008861981773, 18217921952747007161, 13344713176347262386, 17886228199837380528, 1540401873780123937}, + {3324086529084340824, 16272343370371044813, 742477341260013957, 3350915636385358992, 6792514656381585078, 8878152636708404891}, + }, + }, + { + { + {606092015174216516, 5918356105766628823, 3171854402026042629, 5083410488709721579, 3403581311288428367, 17676510467286289614}, + {2967008223055154986, 4440513410884574177, 16523045544893119274, 3217655037837401371, 13054487720522321142, 10034418456224208190}, + }, + { + {7347573045686808521, 8524339315025279874, 16314398830774990578, 7148576901562720613, 17397796952544351613, 12574968465368627587}, + {17127750532495035623, 7031729130299604572, 8389747942949500517, 6996080963912626814, 13495784988274569257, 1168514218006331799}, + }, + { + {3096433627791070893, 1860156442548924013, 15384249936468274478, 6818491582204214579, 16342638307737468887, 4369943414960054850}, + {17533478036417612037, 15025947594061943030, 18236676236976149572, 7039406316466350694, 15869565193009626370, 3852675700088288543}, + }, + { + {18309824205914080602, 6894088905116897314, 10591623158526430812, 2528539630082230699, 12042495883122935729, 5844044239001656400}, + {17005697103726708846, 7925252746001041067, 10999152033548088863, 9154176622465162277, 15084949920970423534, 5578598380515797128}, + }, + { + {6917179209198910574, 3886697537844862434, 18150496386873591051, 4972646778348909437, 4969661664166180669, 2872836128490559084}, + {2704398887171405709, 13639654495080115785, 11425684371658593338, 232369335821630324, 218748759902514707, 6158205593118649580}, + }, + { + {16496178860935794046, 15119575313167393886, 15571136778187380808, 15718174980588554218, 8407222631419874046, 3994751679816363176}, + {16137943000116730838, 649686844284716838, 8196756005862490544, 6988085908898901263, 8051931904212610802, 996284375053598207}, + }, + { + {11202012828915629624, 16434906580972492259, 5073784107975608951, 4555011077667954368, 15056393774484220435, 7153650342547995309}, + {17034230510077633808, 9529331632480295071, 17805365034946979115, 1306070794871122132, 11283252790245181700, 14195024093610616158}, + }, + { + {17062804313340314021, 12487559988166578822, 15223533012653521266, 4215428489484541930, 16150265079986093045, 5813481978377140106}, + {16065565784667247990, 11555499440070100600, 12227692665725509655, 174038838204068309, 6944904892485822829, 8209387774354117162}, + }, + { + {7097764295443365680, 7845963410214653920, 5797125233317311504, 17926005715153747711, 4229684472586339799, 17705398018071993192}, + {11024978540019744970, 7926106855153668317, 3165689713040846858, 1324462571872837789, 4092065205041218276, 4114073167420719940}, + }, + { + {14832234719124735027, 17720736763724642037, 7569347324614805545, 2422203898133075744, 8407080162538697312, 4638392288322278865}, + {14250957996942719144, 1268388636046597839, 5742106579831765479, 7403762642777718888, 10608168393433486378, 5148201736835738471}, + }, + { + {12017738182708598078, 15496109165938912856, 16276087896775269508, 14348251368567035394, 15495719802443424398, 2886769213483924492}, + {13088574881807814182, 6175259348987407998, 10240343649650858024, 2445547966947917305, 4412093101877027279, 11575806026599033878}, + }, + { + {1978949153914018361, 9333756199061121765, 2483677446328516905, 4947844288118935595, 8796341380385369544, 13376588153739423951}, + {15189671345805877067, 7857386656423263866, 12087267128677715980, 3124246805898824272, 8155860863800786429, 10855265042165217616}, + }, + { + {10968540393441817286, 4229948088947631485, 8845677625419290462, 3176865215857370108, 7460329129753473479, 16979518947567294508}, + {2509227000662036147, 6062006495041137172, 10067170914885555116, 17887270821175830326, 11296565130650766701, 7373311159946922401}, + }, + { + {8850120526955796736, 11314469582193677783, 1068054995241090552, 7318394094178466418, 7619360585150493559, 1453572552029566577}, + {17996868603041808639, 17518159987665308986, 12081491143590269787, 16972562088952683938, 9389093909820463685, 4548563124413215604}, + }, + { + {17046249548250582064, 7914728399210345507, 4240928990714296695, 14486835470503581294, 372290144157579880, 16839406978927405392}, + {1016866348257954267, 15113309936348826018, 6432209476523479319, 10269747907106890252, 941691948152294603, 14287414307327182997}, + }, + }, + { + { + {1272546058761547252, 13578575248362383071, 7500958990496300674, 3099202960982751824, 6362531162831059087, 2019233083206809658}, + {2754115770602762476, 17265393813973046355, 1460109499264827148, 8566701200794847730, 7001275408840316981, 8133565635966870191}, + }, + { + {4530800567522751634, 172100420111867893, 10423105592359647894, 5854403877381514842, 8749270627115121145, 3573817859696661904}, + {10641876612315799701, 13310097519809820175, 2575058335739178127, 1763270043880050, 13175676291469077040, 16171136871688122050}, + }, + { + {18354147526894604667, 13484255054412392853, 2800700506464137914, 11110366580313920102, 5646064147441879882, 2795616433118016579}, + {2129899893763421818, 4807666508003926776, 16472812490021449281, 7681490117554722919, 3438671827454179974, 13557284264475208066}, + }, + { + {5975319400755341093, 1124738826642685970, 16753728698306033686, 16494353205423996145, 18061430851006650946, 12807029835851374145}, + {14925084576890361984, 2612771955533652816, 8242017343741157450, 7403436780273402474, 14211525852367133182, 18439046101355433515}, + }, + { + {12522140250931309228, 2650365165363684707, 17266707117780681001, 17646854366183132476, 8242359948852550575, 4320679156333325465}, + {15229476123325427164, 422299931396282295, 12793864739684453285, 14299923645240128941, 9978405170065329096, 832960934203122298}, + }, + { + {518871060412814841, 15562218878203565824, 8980911201550345823, 11524613147177454714, 8894386144833336880, 8282385053468266803}, + {11036310375799843604, 11631323855952279243, 9204542676358250227, 9017637584223443028, 3369721496038149573, 15595900417339550003}, + }, + { + {4591440636846949512, 6036488867281859201, 16533349215338691556, 3133742230803728901, 2571899330106231363, 1631909183838142939}, + {8989734436763331330, 5978410296483257172, 2006955146568177692, 7522769147634649601, 10220842932346919807, 15597809501020248076}, + }, + { + {13439894621213745503, 9146006640549707854, 5648702331867490349, 11405536749919113563, 12230345710914827865, 10071652654740622079}, + {12555953518900584840, 14800100043573333557, 9904134836732167291, 7181207832363950334, 12514588099534090508, 15307927244603231548}, + }, + { + {13605621509983689364, 10781859117898335879, 13538880269705946725, 8371044748813843478, 3462400909078782886, 890871523695605067}, + {16499951906767373988, 10661436183202627477, 10666398637960730939, 12471664467090838807, 1750972772377056241, 7518131157858325250}, + }, + { + {10247949599901648714, 14190196306159090329, 11216722499720804306, 3590282982469992444, 4633227070625809035, 9190116695797697665}, + {15939242820763354667, 16077413183961690083, 6355653157022204783, 8580010924979501748, 7153725479094108372, 1357680516578643501}, + }, + { + {66627260421700178, 981976094061062611, 14088629719356601159, 18087879346236428983, 2519331146402108878, 14689662575392662258}, + {12195986880010891308, 68431921015150749, 3127083875017010141, 3161714979740429833, 12839293036406001550, 7341433216159877049}, + }, + { + {1065953584516863039, 15096288182389718648, 4172454286491200670, 18026295242507833531, 5078063585310882257, 7268157657978060289}, + {7875776889204835546, 10627478238674063372, 8099037147030128002, 3027823377924903270, 14915487051934001991, 15228458635498084487}, + }, + { + {18435525997497788188, 2784122541135616216, 9899619044143187449, 10187065183348144288, 14659596985883743461, 15442370538955392962}, + {17895314255123528958, 5201907198851189607, 3321003244006213256, 12358309570578006578, 16348924419530434982, 11908899161823776291}, + }, + { + {2996337363285490304, 5920778534715228229, 6118912118872553172, 15730295041050666050, 4957216697404822003, 5536648704019369663}, + {17046266803691791611, 2824215581505967575, 8261255744418562057, 9146405379237138408, 14347950681302095310, 16755353354313831572}, + }, + { + {2023775850404636364, 10364798591267796992, 16581829103891111877, 4554451792573593634, 725404179839321971, 11768827269800328280}, + {3438461944423664753, 5207909560991353292, 4151502141621601136, 9129240992387993021, 10289852383205392490, 4419823091950629536}, + }, + }, + { + { + {12192276596816111129, 11439584366963014783, 2713946508948792470, 12156092371372338197, 5082916671545533837, 9910663863905945351}, + {2895173316336063022, 8340424674337499647, 11728516556339912814, 7593958655663885127, 14349406256224440438, 10167298094102276396}, + }, + { + {9604776696424199962, 3890505023889250408, 17042346157821590641, 9813252657656690957, 3258804089827867072, 9204267042383472101}, + {7747649746653076093, 14320851129876639286, 3963186726043119688, 8387428722722708424, 10944959183156131923, 12376934458606855405}, + }, + { + {6374660930662569399, 12346634963964714147, 9701085914647913938, 10287390907227015944, 13392157278046428293, 12147807827670963406}, + {7192397644093650214, 11565761799483254133, 8650181311221997306, 17210098121268283770, 13830241999240110878, 5113645900809384231}, + }, + { + {15158945955863226945, 8229963785033500122, 807836554855297163, 1605387028888366737, 7953194974476541404, 9367206363171169167}, + {189311819502508835, 8213700212546178990, 6170317059714889580, 2177468661830227636, 15110619070491538357, 5283152492368065731}, + }, + { + {16607045468719296517, 2927802433169566022, 8424681719366218084, 17419326047422606150, 5999905625970770911, 6190744183228192436}, + {12634495609470650905, 7990399520412760153, 351497963881822847, 9308418808757913317, 15411526673945299267, 12287423269457077297}, + }, + { + {13180158784974106865, 9942520119447471544, 5134405864152878608, 4720032172529013059, 15879568571954680415, 12977824023383269741}, + {13377925830416234380, 6393639184729793137, 5830766798694674856, 18039280938728751023, 12060628440735138632, 7991124073272328857}, + }, + { + {2644049280934582490, 10000276111558865661, 304722485028140043, 11735908257972102216, 2166515612050129815, 13377192353750901582}, + {14726585142314469382, 16602322022612937022, 4257344852211444460, 18080317473257477535, 2135517644863233373, 17513835768414110554}, + }, + { + {8724634927100459054, 8808563927836495504, 7987949369395724856, 16530109834509215943, 3846892622369353218, 5202324697033273279}, + {6850156471545519811, 15616657543406258924, 5319309874170900032, 16821994765034133697, 11207249294481864848, 9072369915476840210}, + }, + { + {4789875659742294869, 2967870937886378114, 5039716748733970466, 13024655282622758546, 13532935784717493836, 9347203783138386205}, + {8437277641527033147, 7455819464204777750, 3981495148880689532, 17282508695124259106, 13046846599571196113, 911227421359412761}, + }, + { + {14260224171888129031, 18038330451640326075, 15187295489695980501, 6762914031777041371, 6164418084043959767, 2811459417788208737}, + {17735002493861412727, 14516376847997846647, 9469431640063725785, 13958475411167704800, 14313946757521744683, 820863393193999746}, + }, + { + {4594187992219349224, 10516014328076789329, 9634144629372521799, 12811929681753256189, 1612050195000098012, 10578937287722203100}, + {10753937463348294286, 3603138206444261394, 9977000596369528886, 12918098041632842426, 7822977537561576313, 9364821144993035825}, + }, + { + {18090855139103467087, 5666769360330456887, 11220391310171813836, 5925748024381680440, 4640306010653470273, 18420049688662192498}, + {1059075524163100205, 9669195064815845119, 15313725541560391108, 5852840239013352895, 13002771717222269682, 4779511585836627626}, + }, + { + {241470604732582689, 8576671504524153099, 225652023678227074, 12435872718858072551, 13214352155330021296, 13114666440706969044}, + {16229486748212187548, 17546920563101641584, 2680822621869368005, 9315236640170012245, 14213661658286924384, 16853567802071195844}, + }, + { + {9323859950832044295, 15243140817228794442, 16338128914658363502, 12809819155289324786, 11997169044878679089, 9354840640666247977}, + {8822752410054480907, 1693710795906789185, 3728007655785421863, 5709205642332505842, 12656439228195873274, 12902472130882922605}, + }, + { + {14607278468875625959, 7672085385893969446, 11489053104399436980, 9874730896233758251, 8525538217421482215, 13557027426716988643}, + {11011646714046465719, 5278340269600204139, 1189175061902172835, 15246577042271755274, 5610476507823471218, 643296281309723962}, + }, + }, + { + { + {6162274162111650349, 9370977122090552413, 4694677321413743677, 15950549144746715137, 9635784431169384220, 6961808095841628377}, + {2163304554817059286, 8135281500465815472, 15429903319242318055, 11931312695286905498, 8894858811936530766, 995355997076750921}, + }, + { + {12678890939214435529, 17417003843916143348, 13742839322904008361, 10152726179915321290, 734923888530823747, 1110609374259636082}, + {13691542854487986519, 14664730400527454719, 8718834560598843193, 7133813452251675747, 16781599914305742325, 8788103601345715167}, + }, + { + {17797423961269151165, 15688097913738577129, 7587009064470741374, 9652300434517855281, 10128814085960764645, 13054349291137249827}, + {13667863971566990101, 10673432944181115990, 5827094206620143396, 6099167371319575207, 14812954584184361536, 9860618325640310042}, + }, + { + {589591245000469796, 8979433141915604381, 9021800314668643791, 3750105644114233003, 15670991254808140563, 9806671408565926028}, + {2465691143012527725, 4510267491638521072, 7232653231694705753, 14855984652990117558, 12634578316903510172, 1228039410348310529}, + }, + { + {9068020286559576826, 12618713895631873814, 11722393205397692351, 1086070536693193852, 17324321200170762004, 611028187223175838}, + {11651577700459617322, 11901409630642456359, 2085390425394188987, 490403321567849835, 14654293622476130790, 1298964209197946604}, + }, + { + {11322550018095596102, 3527572794553440421, 6339011792028948225, 5151642471735201045, 2959990528935484190, 9272589623358955444}, + {1016320821529073770, 16888052482282045242, 17688112620024597894, 3719928857894020285, 10396159054756858238, 3233119903385274118}, + }, + { + {15749902098907230753, 17763545669244090771, 9755900373517498480, 4320948179558902844, 10566924725356292516, 6116336473010794202}, + {15545737137436862310, 17240371706149670924, 11955643308605230982, 5932841340555536241, 15279500761826801442, 4179996491012197595}, + }, + { + {1552613943182547753, 10840747323421940067, 17328467336775183521, 6802521766845552195, 8626607143686909840, 540795511127208201}, + {15256703109378673438, 5812944466862532241, 6124501523506740441, 513175402986879460, 17434632082742815254, 16069187481501759225}, + }, + { + {8244487053073823419, 3868641351473260462, 2153712666785000554, 6957836165836180397, 500618765615109373, 1238832243704171799}, + {9603490361093858122, 246830756783484378, 2787086006655910133, 3907320948968255488, 14281263422468298103, 939723834433893649}, + }, + { + {6284765599251061063, 16534676857694838737, 3061690289969396130, 9626162384711348108, 1365881874432943624, 14727198041537453743}, + {8889264123676562961, 9777083175236297205, 13215028356698003407, 6986347484245421817, 11678122634649892302, 2435055587926500790}, + }, + { + {10396608653122814276, 17008484250005639146, 6318409447149262851, 7802099541170520164, 5574615603329953919, 16385780123891961969}, + {11134920568042011673, 12640687912091679512, 1146490453403655245, 3102249330058753539, 4095988337115400384, 17335158718433609549}, + }, + { + {12864499821393802475, 11788119049228790088, 977799416909835541, 15499421488379367188, 163390536177699522, 6804786504683418696}, + {3095872826752058595, 7223570057465222827, 1387121623948247335, 15122489364022134171, 10885423363329551545, 6434450333953245952}, + }, + { + {6653769292986613967, 9168736013794357965, 2104630911670700434, 8244457909216763431, 13703714178493743166, 8218306853052367309}, + {7189028979195471657, 5692750993768367394, 6844269123871604359, 17538650433906843042, 2579405218304322009, 2297663885759252861}, + }, + { + {12692054479125812992, 4320705081611888724, 14008964009638233826, 5334393314224233638, 2696459947028270454, 8328775412419649518}, + {5889525878366957250, 11336536538831724301, 12024875252935715642, 3494686190602179160, 9253138142565030267, 3528435954014636439}, + }, + { + {12648684265556130294, 2074783917548245950, 8308495191421783004, 15790318216073206594, 387051048726917672, 10990928722025444053}, + {15969688555016198304, 13762652978883154272, 12850841387412245400, 4825302074606748639, 2432583894467418376, 9326934178392716656}, + }, + }, + { + { + {18031089708973353209, 2245200960251079511, 480259352579296652, 5296730028561240923, 13672097544022918942, 12074013283516969918}, + {695570325720907777, 12417118176840300328, 11125216762475259777, 7694756262905475485, 6389856663806076935, 2023651462558938155}, + }, + { + {3716913865293623832, 9519939044782302522, 1190311626040433621, 4122386088785812252, 9998628051763276281, 6762269968937642429}, + {9861199249890354064, 1243120329240608977, 12074892082479307233, 11448174216179350137, 16878357486848010894, 14263124486707469927}, + }, + { + {4032144724607143660, 17323710612966320098, 4113668299203613008, 17685219225377287708, 13802533048264874636, 2291580023602316722}, + {5991918412653581128, 9413531453038680232, 12039010584036849554, 12779724028748234268, 9334132880061582927, 854018423284649885}, + }, + { + {4279036817315949205, 10908936013777057682, 5459140224800461056, 5336329855941119274, 13817174543987505002, 5803329503585048266}, + {3098013773573646382, 794466548882446711, 10937734087173941890, 10649767122328016589, 672512432710857443, 4439506334562330966}, + }, + { + {6150189972540442038, 17499024099306121191, 973920649937779980, 10819201450198182582, 14435306386254208142, 15898445937302462823}, + {17016479119212840445, 1987134867235671218, 3749994341137487979, 15521454315121012289, 12198185585065236535, 11161746347726704041}, + }, + { + {4108277248035082323, 4763145889189955538, 4083190563033592079, 13055163363599987027, 5746298306966204683, 895046093136418450}, + {4049236010637090060, 13099192881343834296, 8562023198967118756, 13994928855290033576, 12876191625337022672, 15993047528545202523}, + }, + { + {9330745605186235732, 4222579288142143178, 15252637539981899624, 7567380934463081549, 12741264148440889833, 15828019440897091920}, + {12723327006361657486, 4018078838231227180, 2560766106207278510, 13929068044020554063, 4759749660422617144, 1918410964088436476}, + }, + { + {1401229371513852474, 3725211280317699620, 15262967864528722679, 8998318469575212442, 14884830350906617811, 1500695608507126549}, + {629292347007891015, 4795086203008477332, 14482270326941440934, 17180742059572498031, 14991047340345822048, 7320414524005582285}, + }, + { + {3761423041074020566, 9183947159053999516, 17327960252130032123, 17936746435648093112, 4957874135698491906, 18381419405600408140}, + {2021552462092061162, 18293561973713757720, 807095291604235614, 10694367035762253443, 12210621028072312159, 14157551998029009312}, + }, + { + {8253770234288769934, 1748567047436239326, 15113806840556405352, 9849305728745472726, 9352106351313265444, 12676746928135649012}, + {15910355313240486455, 18316120463051771221, 15406553262270712153, 14120304384949032181, 10235649054584170863, 9663403668634321464}, + }, + { + {17566890036357409279, 8153035355283482148, 13497394635071743235, 9324980713264281675, 1855752933438317130, 17353271655839803714}, + {16210618120406652642, 1994646251130732955, 5626798068584404507, 5598549692563786678, 13865783001414878683, 14643387061407936303}, + }, + { + {6501357512501439891, 12176708815869008686, 11994352389570659317, 16086293893515238232, 6781571500932791296, 7749985836495590529}, + {7267769773480576098, 10519122498445425561, 12426530300337493483, 16904464207183051533, 9655317422890141240, 9006359300493534956}, + }, + { + {2379896081555791674, 7529087855981939465, 17515505484370387645, 11992060160533269066, 9874426908749159085, 9612679919749306188}, + {8727002423244992491, 11651910302226593854, 14317531382092040616, 7148921073820945054, 11509981879876620492, 241425876025527115}, + }, + { + {3957931629992459039, 14626193761179440029, 8968065435170182499, 18306857838363825356, 15388760608247994094, 7556220454574081940}, + {2830354800601290284, 6007093254955226710, 5776847166084925815, 17411399255750975735, 12948871637122999099, 10619688187202777033}, + }, + { + {18019620613881262245, 8668018235864297559, 5360445581416845868, 541567173296101055, 17792105755090691444, 11386151880811930327}, + {14234180784132089596, 11582267640018556498, 13014702559444465145, 3629111073015327967, 14739462952187775393, 10310644470035819364}, + }, + }, + { + { + {17403833916326762122, 9740094979480827357, 14548670989847645635, 15707508983563938391, 17654070414772907819, 7410646283891180823}, + {12088151802847404486, 13751887120986972745, 7133572866312957805, 6984144881486426141, 11478362218013196569, 397100930473218000}, + }, + { + {3572843614659695767, 13917566193783723224, 10106991008395751890, 14776064316406512486, 3973284575540205963, 1393548331195253411}, + {17728418700244338613, 3569943135321046585, 15310934114440659327, 7534966422523126315, 6695235484066733707, 10654160843179249647}, + }, + { + {3916524477947621683, 11443354393618774115, 11759119305556384367, 5213174624675660124, 7949463549546931828, 12092151641941435863}, + {62263562580411942, 12003780754220372116, 17593048334196024065, 1486928429974104945, 2382231722092886579, 2435498065565847060}, + }, + { + {12823154059116108213, 7988070353263431872, 5238951896699939370, 8132043978344570215, 9775088878106588256, 1118856390259997431}, + {18065172735230934036, 16325872707906562424, 13000039721574339202, 4312637592102231069, 4902470028754124204, 4272784360331042739}, + }, + { + {6433126302697049134, 14546898608004289942, 5143458349243895500, 2287546739351655153, 15996486027454642710, 8035174736863426329}, + {18381568106804023303, 503934132851985517, 5955511571426124170, 11588909349656865672, 2539783010592793715, 2517368635804605002}, + }, + { + {9688220347159635445, 3779168584047736134, 3386170765747188013, 10056695776861610791, 4230378171552673912, 13380959223891516403}, + {6821607274732022337, 8369692960524296435, 17556137452703259897, 9913246146396765840, 18385056826905781741, 595789229862790596}, + }, + { + {3376198520685928255, 11401697177155390480, 3837907196036866447, 7783605697094735953, 6911185458281008352, 16661582556490022446}, + {8898449499666876128, 12720029146151254358, 9180900453839682688, 16904557421585200609, 3231736335575648393, 13582984509377915948}, + }, + { + {6335991962752687896, 13799946527490837369, 12932853903574384992, 15301891419692833364, 7117580415677557079, 1638243357400401907}, + {12691541233696549250, 13069535028987414972, 1561175855442316177, 15953947983175737946, 17433282081462277288, 17805588449174971002}, + }, + { + {14830787803333713689, 11568262452331360318, 15414418121287856547, 291893575140657361, 8537715289723658891, 895041535012667546}, + {8735575073330490257, 7904711333758081192, 7705478766063086839, 14966128571780877610, 510498342305674002, 5375842717792934507}, + }, + { + {14017553865950425970, 3203585385790093320, 5960504993013900991, 14499792127339543400, 1042520134310564369, 9007730864681746336}, + {8155955287049316865, 1168268403444813838, 8223462980864298646, 7046058388874344827, 3806799754540117714, 14310126916845550569}, + }, + { + {18101015319769141333, 10981175585883985115, 11076843211911188635, 1865376526114106685, 7691555534771124483, 12825758162850881889}, + {12705759021631065468, 13425295730593551151, 2454066834990145158, 7398456861539482216, 17965437387228755239, 4549246519638273011}, + }, + { + {3564216727206350471, 11502367821276581491, 10888792934596534614, 3218935969765398418, 12592775041500777408, 11647588572015935744}, + {2922640897322707689, 8613211193560218045, 2230968453901036138, 14376635144218060540, 16773708514752577950, 17553690068355938998}, + }, + { + {12898296153065645455, 16720692735856066113, 327172655540413761, 13227218237345565511, 8519416956666328535, 9006180558080542517}, + {1264713729050345984, 9103896317460059276, 10413898570640954633, 3676401446977680326, 2935706012419574846, 9423939538748482172}, + }, + { + {2350781039643192469, 1693506343823609927, 11077706501162430667, 16417164483905858926, 13333764386693653370, 12097153330368571478}, + {10940849199388401790, 10597622934633620124, 4717517384091986088, 2104650762579463668, 9840374844871408095, 3483317510992532499}, + }, + { + {4767861261398259198, 15300499894768898507, 8688456959068450491, 16604170046623753993, 38066602101631568, 8293371963850926780}, + {17963446985501477796, 18444654321008564037, 11760177315245860872, 1435879756649854235, 12050871655191687758, 17344630493039043282}, + }, + }, + { + { + {3096485884016777148, 12376984002139145052, 5480443619638874966, 10095208486451434692, 3492940022953765146, 15299835252568625902}, + {6007593829256808804, 9692621867284256874, 13254638193058937432, 11707277530365540634, 16923342671634580125, 10732664863951753047}, + }, + { + {13872582197972895881, 17193014938795396512, 15971767134700759136, 131681455406226309, 15729877667343662624, 15250608391374424092}, + {6602138623471383700, 7643740135412054049, 17664951607321499035, 14599694205978771523, 8340737952520919285, 10584728957567182276}, + }, + { + {4029925504600209836, 9230486924650579139, 12709630435517017856, 16752856913747515048, 16091176512252055807, 5654615991864890349}, + {16213912518103095615, 17398694063688948608, 6470301373189861265, 12049558432878948403, 15731102283993311220, 1974808235304593120}, + }, + { + {4216082854210318654, 13783625863031842952, 14228148352427104722, 798223135284158372, 17371302655925227458, 3868945640945033607}, + {14496156719528803963, 835017877332649412, 15738356549194558199, 11268806386543436865, 1609600006680937174, 15189642421218057250}, + }, + { + {2100911419510810891, 11709730967811792326, 11070968852465741080, 15167667469791505342, 6990446430502772064, 2979739266982579384}, + {9729924531656485522, 14538459181363709770, 8953107760739874488, 15399265283602391297, 2640851218253403446, 397493120169971392}, + }, + { + {15302726863134446614, 13492823216891695902, 1527459733416593466, 3780183339959616960, 646805679119326182, 3572065085993834296}, + {2086050242579936958, 16097128196674610398, 11110917184928300297, 15215051174675736281, 8638996858467536364, 17498051884481561986}, + }, + { + {7442054194398722761, 5899037616301380264, 3602141627092495462, 12455087214158437405, 3316146807961356474, 1301937084617765443}, + {10089073892535620144, 14190065028184329721, 1808236899842351791, 4533062878686621914, 9993862131126637828, 2297009856133766352}, + }, + { + {16801618217516611581, 12059439895460656350, 8598727314831164546, 9586649536512297470, 10941296402181826520, 18191582771052788270}, + {500755738669776861, 12757213489859603192, 5140871938904556861, 9617812594256568652, 14076395917678039824, 9994140370794675736}, + }, + { + {5850038450443732235, 6375066279442420119, 15818683872880571739, 723472722199022174, 9333015052679795537, 16719493839402031559}, + {10024247267249865137, 5868800923297915890, 8041157937570474814, 7928686841256858707, 3370105934450681139, 17883122805284898817}, + }, + { + {5382144947237128088, 1043006451545558226, 1681467077957939654, 9517495454378300520, 7036177533948513894, 13161967355521737889}, + {12219093509482945494, 7442193295382785217, 277712888488640722, 13947546222291113300, 12611485840092686485, 9710833655025677113}, + }, + { + {12502549552167234190, 8232125533311903390, 839854118279680892, 9485775732822833984, 17663390734822952749, 9394764657882708830}, + {9000572432647298775, 6908017511163909222, 6513180860770299323, 1139498172110369417, 14568474154258358741, 5050171222169492187}, + }, + { + {3993332219625203427, 16865359864205374644, 18194512585980505134, 9613014347311695262, 16860790576951889934, 15221161996871384983}, + {15637827171909035878, 12174768900796615919, 10654832940369855667, 2582700277462133737, 6776356767890276075, 15022166989559684534}, + }, + { + {10674226674222713381, 6640126227278302401, 5685415511245921812, 18111307322717025760, 17086035813631913574, 15847356748945327676}, + {15174476977121907079, 17856987969624827110, 16167616169413150302, 1944283930257068430, 2453038170129818707, 1469204933482392249}, + }, + { + {18275102898719666599, 12983079761412852970, 8388106129782060896, 10209355387576245223, 14538158393256278017, 7560687135426084382}, + {10553905131472339745, 11398173317153206213, 13617408055623208259, 11532011743299529667, 11538247191420015587, 5623160693645531170}, + }, + { + {8940662681574827513, 18164959107927468123, 18046552638532109884, 14155453048592004567, 5584625548584318353, 4723581324777545689}, + {11184722677308218083, 3999406699031629777, 4988145712425592916, 12203913929517294737, 9784288473101397226, 128198380995960707}, + }, + }, + { + { + {3863173275874957588, 7607368433346418538, 3446917342117543093, 3102805528911016504, 5796298790620582886, 4845029410873700374}, + {3364570708230969314, 4211843997911050357, 955735840518088540, 4382952718350579495, 11151776336025623039, 3248067064518007812}, + }, + { + {10979154959051140455, 17057489977844809380, 4636877136932368853, 13173423356700842378, 6427295314745268682, 16166484199425823600}, + {13947498680098198587, 9565058221523432140, 6724059640029046123, 2606510272316346451, 14817173045790080526, 17921662463284944192}, + }, + { + {8834547168849238776, 12415387183251468175, 1535769784386765604, 1355498814697642747, 11825072756645717040, 10331067826681906891}, + {8890584623925299707, 550918406340532812, 7338316217644779781, 17543638401057055929, 4365113997542215090, 2411169740153090294}, + }, + { + {10112129279069371496, 11405549101446425766, 12461696963021780427, 1134289511017689360, 9417819820453596293, 7597522379563535727}, + {2074398209324320962, 961715655667925180, 5962000230359126827, 8547804373478236252, 13432658671807283680, 9718385789307084154}, + }, + { + {16080785183875764467, 4017135721666879597, 8974124072605099690, 6665445735103434589, 14756638402029436542, 4331542523722303717}, + {1702503223444440164, 14189603650236390274, 971810312712682183, 8049986845378060800, 7330150922533173899, 16296166314284869572}, + }, + { + {9526769721404560092, 11775998161420767448, 16356632323651128085, 8008696501724706815, 6341629823262057063, 8523528728189280635}, + {18166074208498206728, 2229400479403638901, 5403004557542136690, 8487804674759640484, 3159160659687043477, 5700251865341103945}, + }, + { + {16822522037639219170, 3266418131057286997, 16472577174486956897, 15819423733871391528, 17594326634646650876, 4931927040440301796}, + {999336285551238701, 3401843156036868997, 11496979962939320412, 15550337525570953734, 15845745790852081340, 3342897350949791243}, + }, + { + {5808162251213383712, 18156856773531164983, 1937517322940695286, 11625411969327328360, 9824825636580723903, 12658592751635829899}, + {10492457110340784150, 15080267389153378243, 2728353556631119200, 14320292562386508753, 13490107143925758180, 6274827431709058227}, + }, + { + {14860895913867154489, 10080650032026459432, 12807414385133112117, 847324989654678215, 13613905648479118356, 12400016944146011293}, + {8776013302541032016, 9925887754260000908, 10894174981766535805, 15297900474855663929, 7442689517452234839, 171834335047382038}, + }, + { + {9117588627465418641, 11168331531349603535, 6924358652074850811, 10618700262994212668, 4103627941911888613, 15694811739383802290}, + {9844066545684783246, 18166608448724723735, 15930623463970128522, 16725459693529035690, 2783599048829322892, 441632469097465516}, + }, + { + {499123733301815599, 16274441320546608446, 8669188578438459973, 14214738178860124031, 12485272536092776327, 6746102886227516887}, + {3968023548712012438, 9154853401879925537, 13974983377028591333, 10516947431089663290, 933442150807932151, 1500788281533481018}, + }, + { + {4586047615512747332, 2505846476262500922, 3826876063100299053, 15762019359435942125, 11799323381173767446, 3568265576213353380}, + {12738065238480311575, 4804303397040398585, 6942032723664133680, 14301007503455957988, 184861059208060790, 2126913780868224063}, + }, + { + {1985910238562893230, 14542760065878644523, 16833470122497892859, 6947656477689970299, 16592512648364063018, 6357361689814456051}, + {13200391207691971905, 2310116023035377028, 5508896705935951006, 10187259410896817897, 3059013399060322780, 5209073312162680293}, + }, + { + {2550642766496181772, 11278535109027313473, 3879516477095166631, 5651059749761693924, 6360530625026542850, 8678055154702639383}, + {9895197927639380575, 10283962157020530930, 15939637088764924497, 8554801996782490495, 7371475446643610469, 3583344374097517208}, + }, + { + {17371412619585132655, 4718601666750293258, 15975408209741840969, 7108377055663708997, 17338928230506045982, 14627100588346057122}, + {13528723931279394499, 12515391311856549312, 14781282577544396450, 7264023353215685261, 3375932768360087636, 13881393850792083407}, + }, + }, + { + { + {1721448973177947457, 17542277325179447353, 17937558459976980552, 11205040461324106686, 51740205411633326, 17489989809778293662}, + {15829483165674242202, 2621026715167601087, 12151982072969161717, 14118259735069082779, 16359059099859035748, 2645875010407964904}, + }, + { + {13044315376543176345, 3791987176391770853, 7257315148468660254, 7615181808332653921, 34885173241256032, 13076418563936506107}, + {2024041865836120065, 343217496537691538, 6758070881563975561, 12527712552092021226, 9130227670558521871, 15869156873791479522}, + }, + { + {16624820076559004073, 3290961180687832086, 1505111348777534793, 15451932960818385994, 4885700112405367154, 502473235663078197}, + {9023344755595914819, 1119495374695090045, 13125353132125365621, 4582328460786968359, 13153243053399805058, 7243196921351431637}, + }, + { + {16660609005075089706, 11456541224374281812, 13813535856291553219, 14877518040804369021, 15861475260704681751, 3089740386917625556}, + {5892458763715639755, 15267181778302530854, 3988849050539397794, 10518710330883699493, 17431760984824214042, 12598607198625858948}, + }, + { + {7886366245642682083, 10962884476823348220, 6709711326774074595, 4572918043062220701, 12755952895112236674, 4061495514143300363}, + {7306556391215449886, 9599795224615892204, 459890930081394149, 13715832153540946078, 14440301411429777271, 16495857007705672763}, + }, + { + {265852797146271341, 11386341344328950606, 2823304281998980676, 3128543525090347743, 9711211560804927151, 11699179803002767366}, + {913811348561539832, 4079387039854771378, 5786553996132212662, 4783085098376699354, 11850032584026193104, 2507234732008509693}, + }, + { + {1681054977850769931, 14671156085086914970, 16232677545813708023, 10037013912612964578, 12655886518994362601, 17930493853619313277}, + {4261930640340402336, 16291971428751843912, 14124714297167598319, 7116061430830749554, 5140259185669271312, 9521500824814628533}, + }, + { + {2133204265371102168, 7738424860559779443, 9132973083464203079, 3624293757540177213, 16855385106148764582, 2981904660819867362}, + {2221031423918751149, 12840489442672309770, 12668245131095936710, 2439831201753391314, 19103421409345804, 5682831538477921588}, + }, + { + {2740210992007145962, 10621702461750253547, 10508827636006320761, 8248704461968714321, 6168928611394207164, 14048196011297482761}, + {11562029679319191839, 10199382699007278950, 3360092486992146320, 1463128897560010163, 6976632107921480266, 2129873557666907110}, + }, + { + {1100325675403567262, 673625074442631877, 8514591637299607269, 2345202943752109744, 7167639158345336267, 17342690971659777406}, + {4862595967217912581, 156590070960043410, 1115171684358334313, 6101500075575877531, 4062560666972498140, 5927929705820198011}, + }, + { + {364176692174332883, 7738711573998977497, 3727117924922648734, 17488404453005608305, 8507877372628529188, 7821485339424482447}, + {3407079555113142839, 2821844621824294453, 7117735201903766861, 2746395978318799182, 16096929564195692367, 443983083263483317}, + }, + { + {9618959095759532752, 5009109919584887941, 13273663751866897132, 10020142088235002186, 8463814795688208512, 5854890718933975039}, + {549447413377699602, 13361664826453471360, 4381643613995465702, 11048937580044016933, 356464625333949552, 10426821157046820998}, + }, + { + {18186037674911124153, 9266904366881705693, 1746212978216662911, 16297025199546965112, 12372897714118201342, 8586503557066603618}, + {10659723169179230020, 8331742669536916843, 17458121139259655844, 3918785045029490546, 10947551116738566182, 9999088208920405141}, + }, + { + {8354650412119672244, 17175305374472306433, 2829972105586097490, 10426050169628830453, 17159563166759848715, 58591768570097984}, + {18406299714417692335, 12546352398212878156, 2495694500244923448, 12073608360379166377, 6610894508561660367, 11682997196017168294}, + }, + { + {3210207744299112648, 13875413666800710915, 11640078075030694173, 10454397255148356013, 17880871075693128223, 7359039635726487892}, + {4853115095464004720, 7976333879782734047, 7694722857965415540, 6036769361724001263, 14076311434771587877, 7283323370969754879}, + }, + }, + { + { + {2614353155557682937, 14058591604861440576, 8309144349698829255, 10106897547146685772, 183429285024450792, 7660674933291714098}, + {17722010084076500734, 2099112471522046187, 3527281458003781480, 14209273751181102104, 17230024122478409574, 10483334506136982748}, + }, + { + {6047132184189720819, 4426654828692160218, 4329633098905519796, 14236543825083707690, 14077477151979085718, 1291177900283865316}, + {12977722282683448473, 17497194838527230928, 5763750732808676924, 9844068727688186332, 650882686296875205, 16353023628194028517}, + }, + { + {3571331741751811067, 18233407145253967397, 2182689380490249825, 9862956875499357585, 4101378667203447553, 2434938326871008100}, + {4975383754309760613, 3934729624717234976, 18322513804399478400, 4995364561535811634, 4754224073033422626, 18130942841051642409}, + }, + { + {13897652105647445247, 15549865991927044469, 17587166399757083359, 645157568514571702, 756205085560500677, 14733833165754071077}, + {913239358738001609, 2071269782500914614, 17073597609159000389, 944355324501816969, 4767516640133819639, 7180502768526971577}, + }, + { + {11871454882320947778, 4076335602405372571, 4747500308730376335, 18397169244778911221, 7987453080975894942, 6950688158372586713}, + {17368720469534992117, 11740301568583332137, 15177273953729130117, 18421847781159349697, 505562344182069757, 3704550989049269178}, + }, + { + {11672240582589566888, 1108540908548515402, 3338717371374145046, 10460877846984614452, 9211584971186313940, 11952076760337213457}, + {7672641505116403277, 13764930264603220483, 3744578737514393421, 15724456999421097869, 13506821640767565708, 13538891648668593334}, + }, + { + {1050281222231361612, 8994982763868301024, 12355411974171252835, 11306931529620801092, 5865750322856587361, 15613850005955819172}, + {14398943333497272142, 15112832726445460775, 9983052759258731406, 16935356055040242837, 14203640081769534446, 9130644307291338833}, + }, + { + {4953908352693126534, 5062976277743240918, 16505639315575105155, 14534500310766348303, 17944736498552318640, 4792459954642443738}, + {18252334781095086320, 13063263503472794652, 13198172387261578292, 1616650596611064703, 15181924039569157445, 5150232158682339336}, + }, + { + {5624679813550782251, 2451770210293674414, 13240746159856752674, 903265396767255440, 11078214582152861563, 7261508578820008638}, + {9752563467317727618, 7386516386070528758, 14793037822648488271, 5090452706673272192, 15308894744012067286, 8130767753744452857}, + }, + { + {6918549675326654825, 8356548187098615599, 18110842889094676823, 3963339850475613373, 6987554242330845710, 2982471659740542895}, + {12669841747723635164, 12626688679931160789, 9018528450701894905, 9726597985776847011, 11318736602457760788, 14025138192598645150}, + }, + { + {17505324765173267460, 7096407019104498095, 15924951709972151945, 16257204011042132345, 4971672139719859625, 2321621670487320814}, + {17594404375116307560, 4647612677109579503, 3901300263702871151, 16326292626815115333, 6831256398102532757, 627750677080250535}, + }, + { + {18076088553817290385, 17349449293663683793, 11642446393364288036, 10122513438385611555, 16537537641493131433, 14156371894700831240}, + {10743408581678488725, 8483948758453680699, 12243160245743380209, 1500764398487579885, 13614004849488464930, 5994785415308094372}, + }, + { + {6122565183919808230, 1008209506550806598, 15249625726527344206, 5096898832984665512, 10958457055229538950, 14428643543814058899}, + {17024506398778167044, 1989641393139458938, 3538068469415906392, 7351031458262333307, 18232141335489091166, 101299571031811981}, + }, + { + {12540548462618170712, 208754347981855850, 5755714353878203428, 13810850252670464562, 2144696743162115760, 15602160948740024567}, + {18186995987441524090, 17284490982574717647, 6768470157308652643, 9315159601737265015, 15486248506383436092, 4135862452814063276}, + }, + { + {7062558030802288283, 4151046583133123194, 17296845417413488570, 2939642080257680057, 10681059010204949305, 5154176607283576645}, + {4961584994822815984, 6524971500046141586, 9968235534650293072, 14236553626523573525, 11581675440714217403, 10779043421926068031}, + }, + }, + { + { + {5704148093399535513, 1982201820910068915, 2015300701102890863, 4938678016782651685, 4225735698935095441, 380627551509963002}, + {12290756922107972790, 14689334170111259003, 17081591129898655804, 12725711463684644427, 14355859294197921899, 4833292303349912353}, + }, + { + {1199430367393420777, 7844876978855113240, 8362429417006246806, 18405301817567609597, 2010437614964189103, 15790163337826190044}, + {13172944002680008407, 7545247538771827356, 8799495964430321755, 1636508240176095806, 3688223623562214043, 5001180399862075810}, + }, + { + {9236682024243624347, 1097419180975135931, 16930071776861614326, 9425037863420681425, 1897777030645415141, 14923573308348753100}, + {9048832771935393542, 16495423457575818894, 14651297528469675829, 14681410364817210043, 6270262408162655998, 3202527036040014714}, + }, + { + {12148128553462546338, 14272886082678845161, 1998189262058231244, 3290638835546848685, 10974691513020291898, 11300741189288469923}, + {12102666221723151731, 15168969616238080084, 7571411875816772674, 6708095321534436923, 13842254475238776074, 11645310689961969980}, + }, + { + {15206355933923800488, 1526822957768928677, 18444342976893277734, 18290836660807940588, 14597401039689350006, 2191517853826363150}, + {6631276040465224272, 9608830307927194622, 13173894809175192722, 3447459865798044953, 7473450899969070648, 17538173612935114726}, + }, + { + {2545753328201935179, 1541411216554356934, 12430899315303981226, 16873953755863768968, 16122659417628515478, 11719197339014743998}, + {15840812009819945279, 5620933673682798071, 11726809338101868835, 10020394952939578101, 6417033277605415646, 1193962146484927818}, + }, + { + {12699385012539356648, 1074729856826138284, 11360834127412011973, 11614291784573969284, 4629063743007127923, 6826004983002907114}, + {5533842397602974776, 5380622214800401295, 8077909061924689270, 9153034190848608609, 6198536077171060590, 10840145921066532009}, + }, + { + {16250603474235152690, 753654051241256788, 2265085864511952533, 7827038858733068367, 4327850715387046187, 11399515242612634708}, + {10497059724291403883, 4688252136426618327, 18024770225850104963, 15437873549837467773, 8363336228498661948, 7727493073571533637}, + }, + { + {12358979317647022406, 2405166324543341567, 1131516171615394739, 5450907798304034460, 6666818116269349649, 5855256214551082397}, + {10663129043987590669, 4887396919880469663, 2298289197437656441, 5676069638451158212, 11906248580355770142, 9562940725527931031}, + }, + { + {14844739915543480162, 13246961953132764518, 15443922107017863339, 17591911221252177558, 14809121152752475646, 14938006221572424065}, + {18293125953571441775, 3365272595752907779, 17552372285854513998, 17235054008682833997, 8690722712832570147, 13050282119073535772}, + }, + { + {15776540266747032014, 14852977882697304855, 12442551787887075800, 16222199462276877546, 1348770173344153190, 18330160582494566789}, + {4685257266073614758, 17629760902250811736, 1099686978395867610, 5720148750089389598, 8752939799218942652, 12653117413452417188}, + }, + { + {1928524914772854786, 8132034417591551586, 7951059682269625334, 2812108933072612507, 1596610641421367938, 3496321797212562056}, + {9864359450003079695, 13827098275898780935, 7851275574239236550, 148489084772098078, 14414610826237061088, 6221005392878728474}, + }, + { + {10231841021413400882, 6416526412762119350, 428961125681723016, 5443671154306564465, 6515481304725718135, 7472109697629360236}, + {4053824519380499109, 9856627631912166862, 8808287978132340097, 3494734447997642012, 13122490218403354627, 1586718502175528539}, + }, + { + {6260407175309061893, 14850337727743664854, 15585408845772003227, 7077264422349275731, 8392418541009408758, 443622451095627013}, + {11824794477049100598, 12322457178558060770, 7174368023614892223, 18169994008863893305, 1353822949072228703, 10638226122523854578}, + }, + { + {4765938320248439052, 8363686885434148155, 11304264598901869535, 14452099896297485497, 14813989444275511579, 11997113422384802221}, + {6448271325447843219, 636006309719920128, 9686816723717740028, 9631232081121088634, 8102244673875044160, 3189426959171768223}, + }, + }, + { + { + {2463818565041698203, 8022820688029070207, 4888356879458026368, 11629790905165524278, 16555714206595898330, 13627886481857856688}, + {16335710071193906987, 6321854959216334024, 13113326664056241925, 11554351464078489040, 794805091959363175, 12545188758454015719}, + }, + { + {156113733862257116, 12812294601068672576, 3563267346091688314, 3001452181277921772, 15607483360571672694, 17299258115284201469}, + {981410215374975479, 10842895849914354733, 4019626280262303535, 3964525883133678208, 11449335357635141837, 7447803780571143247}, + }, + { + {3449274165036362414, 4918853138124055081, 1547983020534099669, 8313761980678241388, 12236549001847065606, 8919544181940646346}, + {7959615711717924349, 1998441664630865730, 15662251542753222396, 878616613737147225, 10921558209848383451, 14643587960617282503}, + }, + { + {10030195466513813736, 7264007409425871486, 13572379319575545436, 5989173427119562900, 9714898089014614002, 16719526588489259967}, + {14134732214629887880, 12965589590960717029, 12056814709100630613, 13827802528787563910, 2927559054475015091, 12475732844535894680}, + }, + { + {14808325747134274433, 8057826914079617564, 5525954727355605916, 5290214223388727378, 1085748056393626543, 12252253028550111114}, + {5922977969674250041, 2448526450681685329, 2926522479362225384, 13034339434060413522, 14285788618705740240, 14224616444852968120}, + }, + { + {14468289541178842512, 12201944999920129159, 12698876919717580942, 6936204399773360929, 8336457280891506998, 14054191262205054108}, + {7985103068695070111, 11634744794544986495, 3492551865016082791, 12866518520735982455, 12992402881058061256, 5203085761453373334}, + }, + { + {2744232347627720169, 13383652591074198984, 11038998560267305871, 13459807200627641401, 4723235801697844775, 6052210961441690931}, + {8015232138170246714, 12079252961549472414, 13192819517464270060, 14584389580251977550, 17833236661373150481, 3761490117360962633}, + }, + { + {10639242284018919836, 15769134811853365977, 2764713995390457156, 2939983068560561484, 7744415034623844491, 9862924824634167441}, + {5812124348561302205, 16914325820321413839, 4446235265737737774, 5136338484784530512, 467458589733891477, 2630304324972701607}, + }, + { + {6832719395023449163, 2033508612951663629, 3511592613860178255, 981472589675863291, 12626082291731102761, 966591436305020179}, + {13733382109710953302, 1434291421752039220, 17971214388752092375, 7561304859414785821, 17294534194238094519, 6834714320288858574}, + }, + { + {2420226340788279821, 12053022832331502898, 15086319486305540754, 14384436305396163060, 7162949585624069622, 2339283057144054658}, + {16555809395586932014, 16575909670975005732, 12006449181862665382, 10896691971361895576, 3873458976101713782, 4179351799128456450}, + }, + { + {4772589731323745937, 17591537228186096278, 7733169684400774683, 7943142157971243776, 2600580496982037708, 12240688438179106242}, + {1682995002150080423, 8105112813163255258, 14679869015350748762, 10615354182892733709, 1101044368915518409, 5335546289827620815}, + }, + { + {2820596099556415173, 2594358308517525622, 3833328115443141899, 1838617013547370473, 10703662474010707679, 6132526521387027976}, + {2504146752328209083, 10365161708998346132, 18378027908391206958, 5944023165464852345, 17106626712229962048, 8325422024401372832}, + }, + { + {11789842430665850017, 6421202279499314143, 11573596254910462066, 4537895385523862063, 4377931158374724860, 12552031527611086863}, + {15504318552571625652, 3707368681645487345, 15001785752614913702, 11705782900778611709, 11949053603484681481, 18195922704834165941}, + }, + { + {15421742936087622130, 10159987354101918308, 5370406297439414101, 18048469588184356347, 15077974257262174351, 4171587624627671421}, + {14084050992809485269, 6539059918771085671, 1374789379818515594, 3838078018577862594, 17679614135822761449, 15474878493731691411}, + }, + { + {12693451959622797980, 13290565128275588854, 7361758586005248557, 16075093967835316398, 7087112768596951545, 11543822053453504948}, + {5902482308820286139, 7353185101342606440, 4571190498315407690, 7730145317036018296, 3643250411451134315, 10481041494035321174}, + }, + }, + { + { + {11379922315523310195, 6620262071143097557, 10733110307157784360, 2455420994718286142, 4941160012966559203, 12036389373766931776}, + {2004451758092625142, 4014199760272071819, 15292911034143935666, 17687179513796035433, 1569516718335592017, 12444236748783362218}, + }, + { + {1200397030012372876, 6457491138111915023, 11531993623745349026, 17899861472742612738, 14124733664835562044, 10645792077218180283}, + {13099261645024141037, 10440696952297433984, 1918236772154249849, 9506923430535157418, 17499444799293611002, 1509670397443280998}, + }, + { + {4465757364835631722, 10965936787556583155, 14540946401148103030, 4584421538084028348, 13594362137297692686, 8844279558284617491}, + {5111359204171112465, 12790060720198863411, 4014742787506192452, 6614930013636115085, 11730197034873324635, 8776100629808369100}, + }, + { + {3790258798970833100, 15996801276739271696, 3464398440425134039, 15326814870706418920, 14448492169636125498, 3231159483392005876}, + {3705423779579747953, 11372348237300277088, 8069222225331107027, 2700528497189769719, 13555552327194442702, 410730686168183967}, + }, + { + {6826832086550914049, 17351671830508265713, 10661972945889099645, 12894337943034505815, 9813078142757356629, 782908000516993322}, + {12769245099971286736, 4882620828121265763, 9488137564983431475, 12539028776281802034, 14846786398874564444, 9073776363026222135}, + }, + { + {11362886301924370650, 6443575479653887522, 351000858570459150, 915347620832419895, 12517886863027987115, 12886465789602176705}, + {13102667374276139057, 6893636638757694468, 4158135635197259073, 17014006099419646155, 2886247550772729453, 14342905125501493077}, + }, + { + {3750785743865695174, 16184496891679274640, 4508484768462328620, 12569830003082072446, 4338678566828661049, 15769546354414324906}, + {3809488443136531987, 3433818606509958865, 2864343169319087118, 3035827594190654155, 4283767959137064887, 1597329211670760111}, + }, + { + {6735976130349257678, 16303412525749538849, 16400428130291037330, 3771855351047356253, 8461011934077951901, 9862709568546362072}, + {6948691434839126085, 15094238067058818238, 11970945255041716883, 8357516122660935053, 11312726144884161679, 13888868066934144152}, + }, + { + {8552971979382238094, 14893844762756755755, 15247853217772454969, 7990879378400788049, 1337495408598927433, 4927592820371154426}, + {11318355400818989979, 14034508604918932131, 850449205422148972, 8707631597140933770, 9005290700503315458, 11206135773816655778}, + }, + { + {11717560420962665146, 16036488489927426530, 1073385780093662141, 5605091585524991500, 11567805488139392367, 6960929895827554242}, + {3185029102977538829, 2880896879639691851, 3758583862703327606, 2607528607094689740, 6140415866307855875, 12833322601936456641}, + }, + { + {2487173712779352607, 4163293746622453413, 15225064953453124837, 4745691426593935280, 15916414889134198240, 1934042257062059048}, + {6574682739913942887, 13440408571236322143, 18076013925783648472, 6693474681185919321, 6987178681680099301, 8824321410010451056}, + }, + { + {663297042995494661, 14801753841371941556, 8727539546491979133, 232708169718659428, 1190547424093432076, 10001731533557757135}, + {10564965587834524294, 10882077754824824235, 18044231443793420173, 16047844267187742404, 15237359807179541598, 12335098732141186268}, + }, + { + {4522044229514984187, 12692311112090809521, 5174544620399081630, 15624956610993361290, 17499804740829372070, 14159780115181988400}, + {6980473429664507297, 16919669078262269987, 2419328464610134620, 7279187746594254030, 12270975978407595756, 12652404087215952443}, + }, + { + {3097250801852684058, 7529383389734329429, 8943150468940937789, 8684872219957364714, 1510282680805138697, 1736664582387906156}, + {8559488977052206069, 5218002957160199868, 16129363866527754916, 3419381639187625321, 7406388656339306496, 733912006552345760}, + }, + { + {5051832488018112348, 2845773093799720531, 4269756063941307164, 11932175332287301151, 15864531947553285757, 6880993309378786007}, + {17221326993540037993, 7339003944245759506, 1709954257215636952, 3058564762936670215, 1381289108584710274, 10818101921467782182}, + }, + }, + { + { + {11909603028098105071, 1433304974993906210, 8596793362628962403, 17840341647275356595, 17335910880809706217, 14496938254816120063}, + {9718444168237729680, 97136308719864699, 385208539784578137, 3982687391919868715, 16704940770194925306, 549720452261507487}, + }, + { + {2694843761758977903, 18124804948268586954, 3810124062407334761, 815390255307793990, 14032033031902943311, 4699208123402406172}, + {12100023268807134280, 12092656330344745210, 13856900984407365162, 10791000625265461807, 10537408988523295901, 1213148431505044944}, + }, + { + {5564129609030186650, 661399315027471445, 6227812982018710887, 12211259814675657270, 12640363533246661095, 4250662369482871640}, + {13995602364293455479, 12559572490607005689, 4555992709769317618, 10656755099067169486, 5466266601354190684, 18303706146826818496}, + }, + { + {15368142834518355591, 387732588739217687, 17906815839192787578, 2458368923948318521, 1213186515140052771, 18119735955342268000}, + {1464255699774805313, 15706302797823747047, 11515240128938376809, 3345743489851301863, 4182988989553146063, 5822101833208111449}, + }, + { + {16987042022725647034, 319232815210787283, 4458381292742179195, 17988503646508966180, 11158143875082860346, 11504863432259964894}, + {1973834314893704871, 17030914264131630067, 4911299812763134293, 5430690367398180217, 2557726880455581905, 12434521041073812213}, + }, + { + {545462916220339990, 3584698686781184519, 5328421879230100723, 366775970831948805, 4024338021516994343, 1533516434617926006}, + {15759296396039088968, 1165424695035321437, 4856582709870659258, 12896943835426779442, 14754955776815298193, 410556923033083573}, + }, + { + {4186087526910663586, 6165136419336713660, 12136818299454961122, 3405693470185967536, 3648773103438697505, 6515981208652058927}, + {3752988438485155801, 16815658448321902855, 2796662867929732032, 5824574038203643621, 9332750850995495618, 14417469253846871647}, + }, + { + {5370314366938532279, 9877969370138171231, 13966511470431609240, 15877758322148217369, 773982613756465354, 2790333076733361805}, + {15260338585394597865, 6297024182872652719, 12048909513493364581, 12444492358042311467, 4022686688297847278, 17410241858326791474}, + }, + { + {3482292231700676468, 8908690623157180028, 16288460904525269506, 5959395600638297217, 360588989624002344, 4420646335976102398}, + {15326491091968545497, 9102573345895719113, 11981331366781021439, 11438298421566869030, 11986315544156148772, 9586987921414184090}, + }, + { + {12658775917959337138, 7321726641436322889, 8904085691599899669, 6181173455344381785, 16990799257112339793, 6589370949402051563}, + {152076730697639797, 6292489939246750855, 2631558763335345129, 2400788177969090289, 3082489011322585694, 5460755211051411481}, + }, + { + {16026468164120587616, 3890624441511373656, 13608676030619425331, 10074131329717815957, 10336173319596529425, 15010101088827254127}, + {16066548767291218138, 346765727064293714, 3034008750782532770, 10634970483280908770, 11696186401772501910, 992070167768548909}, + }, + { + {16700357690267037996, 2280486417700678036, 12292705505251502979, 17433319339816222360, 3180311752818744080, 12556842763675232270}, + {7431081179990995973, 11626745676061745617, 925792030195302151, 7573296302591880847, 7111534405851948348, 7418370979279348359}, + }, + { + {16126038235581718523, 4590472232521394945, 15667737325175661395, 3234185470951996453, 6433453928669282028, 15899702540931522631}, + {4961512606010997533, 7075023696164954837, 1926349877304076748, 15847449820251106944, 12103289522218620655, 11755646081940303532}, + }, + { + {2815793807577222685, 3974873120030374430, 14070231706868366483, 14914212937861260775, 11217571411566683403, 13488284407258074738}, + {2447044301855977709, 1991486381221843561, 10306272153518153979, 13012982641746076783, 7500759912363127296, 9368569895638129462}, + }, + { + {16633917127904484128, 766128895880122918, 12296015683476921956, 12780904198992336027, 1747119835730230715, 11648694124739687510}, + {6931300612490207931, 11673373686239852450, 18176687859595005370, 16590940298368519075, 10350216104129322491, 4313019598947936772}, + }, + }, + { + { + {18436559208253217538, 10052692439679361295, 13914661242043605922, 5303216763167780904, 10320619132458662262, 764916138455538204}, + {9742933872987685981, 10626539639975944361, 8938199719602528282, 3118400879731019025, 17486614403295685962, 8194019942137487488}, + }, + { + {16848715567479381646, 3965484758491433728, 17553116401134175918, 266130778949555493, 15612913147808127901, 2452271039599659592}, + {12112647027603191858, 9836632132933298138, 7150220004740389636, 6080952109208447401, 12794151692277391601, 11339774216918951773}, + }, + { + {15370271492241639789, 13865842581349159076, 14645993961035890521, 8096824553138062253, 17815019169532343171, 12197261930135611113}, + {13843017114364404011, 5010421400581829489, 17814230270064460774, 687861654752340118, 17009006702144007774, 10314843449915140883}, + }, + { + {2744318910620647716, 5603184151316605771, 11257624090959454283, 13185449267405233716, 13751271304022947910, 357227629545275976}, + {6629711137100856610, 2708216448052728946, 13226058796854087226, 1788986271084080906, 9168817775042008469, 11922427675226424552}, + }, + { + {14454843566511544351, 12858454059009483825, 6952579439068010126, 7733931976949613017, 2531905974818570751, 2340234299628817285}, + {4064406969820346920, 11776091497743820272, 8329625521872996607, 17793038299121088064, 8268289814329664881, 6179727598715947755}, + }, + { + {13248035145811273019, 7752115389537037710, 3783507151237115160, 7998022990884122769, 16933952266389620556, 9525578126304597588}, + {17660710021706978693, 7887275263336665238, 1823257268190340929, 16929028893372651088, 5606633925842000055, 17725594627635071001}, + }, + { + {10717942541841401668, 5062492223707666521, 2874099965260778327, 2111658619166071126, 11668640869427564697, 129797271043653095}, + {9692221446048485432, 1712242857382255473, 4838248139231811400, 4970058966083233108, 16360347161442205136, 3339445137046433520}, + }, + { + {11766141551615199913, 8685320933099257575, 12025130600585049936, 11062435310323182587, 10065203967214956664, 17179026247686360724}, + {973705476571001605, 12336450041607754348, 874536885921370264, 3620964755713794319, 3600247557571996978, 3539695373337548386}, + }, + { + {6671466056512719629, 16184392602500878537, 13956944166874842510, 3115630032774258951, 1843095648852176408, 8229461234479287588}, + {9459156799383170558, 575562900712226104, 1461784124210182226, 9743344326188849649, 8264467109834156287, 14855166366987863706}, + }, + { + {14443662408692449290, 7664862287740722890, 17649339370312940977, 2156776012545551339, 15768456150480100232, 14346672920916515716}, + {8113778989714113681, 15635297215600657635, 3026622243462570848, 9983527114455639519, 495493109210132335, 1825135321586189570}, + }, + { + {3948205964039691358, 9147407127214526584, 7561468478346924639, 10897363606469824992, 703934561704031911, 11244219452628483166}, + {9517458047229537628, 17195327556556691064, 15691063270835772767, 9438705527839014294, 9695368154409603795, 3649704513354366568}, + }, + { + {8298214822826346584, 16160788589831391317, 17819994725843440833, 1024306577659159521, 1852010738280183503, 16583513376689890736}, + {3373755007779392878, 15683692594403040997, 13166508057783939533, 11523709082285599828, 5437988652322971796, 18109256413139496795}, + }, + { + {12923777389997376805, 9977718769355025596, 13018161749708349740, 14360291996204235159, 9575337711644144758, 9974219793575670651}, + {10424562739975667006, 3563632038522075692, 3672552713411869989, 13884443527418224724, 6155373509257036382, 3207888628018922232}, + }, + { + {11930174348010923271, 1348949055337526798, 726415247102229584, 5055400198081198789, 11015209320490555612, 9833582750989675305}, + {9700597556714543589, 2992217892752165914, 13783701793319444227, 11374474240057387342, 10199414602968931098, 17127353744132587534}, + }, + { + {9563065141641954290, 14665066342222635705, 9884992491626869089, 5974715562776845322, 573036282426832215, 11499375779477883827}, + {3206285674430939161, 12354004793799927731, 5478655966737394286, 7263281183196607046, 8288729282303345591, 18029234498520921275}, + }, + }, + { + { + {2992157424964359003, 10438615318402196118, 255815347996375468, 4465802505310361450, 1438013292054608859, 2462444921683526793}, + {6885574398590377060, 1301114469257389079, 2687344453450416312, 14090513069242834662, 17764663004285116999, 8889109452874431564}, + }, + { + {3947928161712886286, 6283937438203374232, 1924037281168554481, 16154924465225066172, 1172742291383405274, 4266561696255722724}, + {7000612604942850536, 7659188878730526073, 17637356804126820843, 16975720578569227612, 4896458553166174167, 2686308470754372836}, + }, + { + {9432182594949608034, 7182179915820505304, 7710800442508848674, 13288492478214648407, 12461818323948657464, 5572387091938177662}, + {277315655080978560, 8486149812061624297, 17273407137514060442, 15942854874670749371, 11686164309797544370, 5909985884404360345}, + }, + { + {16367186110059925561, 346226761199691539, 11243569651429838414, 15633495530019237469, 16343973985917329298, 10134611081598971563}, + {15093301170509003037, 1008194724710082237, 3218608412640277159, 7159496834485052730, 10712235151472906025, 4198145441405858657}, + }, + { + {5131609251652718207, 86776758092331267, 11360734888319180911, 3469913385423048534, 18100684383471212679, 325475210458359248}, + {3689757001346201628, 1730954327037278569, 3788507424874318707, 10512008196941777061, 11932764492105480931, 8036637367681551485}, + }, + { + {16591185232690243721, 6455242289394723746, 6695217017042848759, 4941824958829892109, 10112600357660465319, 18308711553066796539}, + {8438656634392593423, 4958573399768303703, 11140056576272524422, 1895853887747460679, 7283324369187624339, 16195252249773926894}, + }, + { + {823375075601828122, 17327350242456001950, 1349893857168950396, 8412958507213802615, 948019923217166776, 7456308766971274642}, + {17370437399496312157, 8520389823586348238, 15411367408205754799, 13174837180834440525, 9274060964565734577, 14571182742247634669}, + }, + { + {1082395577808637743, 8147865335545732038, 1404461702912200930, 4993236329065838796, 17484910947541357459, 6852232223602019945}, + {8965634425630211893, 4255349305144782529, 5448760775922504263, 708413774782466570, 11280134104493101923, 6100170211777061175}, + }, + { + {625515264652475732, 3039989026588849470, 417945613321369841, 17093374707175198551, 13237189962567875668, 2311750606403861433}, + {8005856008273673581, 6479389764331986131, 14555228340786648758, 7247893743936400741, 1374541774474051599, 11227441366009495338}, + }, + { + {4181002734489236543, 470999966911862785, 15476804201865281857, 9087684620614573993, 18304567027803637491, 15731747090499402793}, + {2010012731370719240, 2998664217104214076, 1961508652389190300, 6950362691421142338, 15681741907839112240, 17447712985298987779}, + }, + { + {11768357416958608825, 7645918167071842001, 16228882427244007654, 1745696721312212486, 11721695430734972091, 7273899982161219731}, + {8266026594340198219, 15717218685429720821, 14112476118090358572, 17888013578946462203, 13290175546249368751, 17734414485500127553}, + }, + { + {5326868799317243470, 16458483939729073751, 14887970960607081992, 5039987544340497966, 14821797247198942090, 3950630707728288537}, + {17597412384190391301, 5520789045820740828, 8226360244407437775, 16657311355689665307, 5224094771449505848, 16756747441122548551}, + }, + { + {598869525170933512, 6677154916771020677, 12401580674393252457, 9920987208485925499, 13800670572914405529, 9707555292166940171}, + {3223483868032463832, 3631710847850758369, 11358667894316546298, 3754511562356210854, 1701568866431315786, 5919933616663414779}, + }, + { + {11490856134015076232, 5025125213251421660, 17087480468251353943, 3675626333374651640, 15669324372624095816, 5288578761594490376}, + {13849647572526881715, 390378562422129603, 5286372605531545224, 634678992498468192, 16814060184007219837, 16839035721991946110}, + }, + { + {5403383155926395805, 125221686724158846, 16200173587003585891, 1190332142773424609, 15217396669374393068, 2578745759049575066}, + {13475383798014306998, 6424876294380300114, 14191098580567931628, 5890095616593589345, 2936173359172605332, 17487060099266163274}, + }, + }, + { + { + {12719214741013613290, 5114617959251923035, 10751915446782581763, 2484828566956964312, 14343803650946049216, 14801299356022205455}, + {3016813884715770290, 17891349667893557724, 15777676062783188811, 1712819799097224132, 12168613974393954998, 13986990585905126288}, + }, + { + {8023010081509653349, 5335670617918622683, 1846902627262622829, 11994486113849390341, 6538926236372175318, 4814731736716894207}, + {16304448710578682702, 9349072176363267816, 9186691613158664419, 17103823355609391752, 3916770392270698134, 9012943127536839823}, + }, + { + {5275622406326687551, 6112584237967786501, 265405289314185926, 1412958831727264346, 7651126186628822932, 5834995389479500713}, + {13122792515707256985, 2550947875326289463, 7066444771311187962, 4421293422025492021, 10767771791627962866, 14226728638256751184}, + }, + { + {11448691464520706664, 15675985285202273608, 3655079521218996928, 15936388576359819252, 13208918369662918590, 9516984219307854927}, + {11597611792829772123, 7713221738127008948, 7961786708858212519, 16353817233799898756, 14783345852732475068, 10250761950603958774}, + }, + { + {2625594970679028763, 2169078556432423136, 13021097165593667190, 10791106227007710714, 2690189788129576822, 5484825642511489488}, + {16273557857984121953, 12145090445512587769, 16101739928864380638, 2643908061410998004, 12729107251027632439, 7695556167491532786}, + }, + { + {11157440928684545360, 3046840632242460591, 11426877095892198900, 8918480588279063509, 8787952932779849223, 9027816580501160769}, + {9128814207932650961, 7203341616721124638, 8182325905700299211, 13427506527593902897, 18140725933956453022, 5063665298842103866}, + }, + { + {13658301013561762689, 2849842635737133681, 9794505509330850697, 4574981021203185846, 8209746334820554465, 5056236831081348743}, + {16624206083233762319, 2806783205419280334, 4722899220782250386, 6951333432373876775, 16586996273337609315, 4087561966128175843}, + }, + { + {3878852889783645167, 5400481924475044908, 13648745681887805278, 16385969341835471642, 8474668593315413480, 17072114360268111657}, + {15909524935314055264, 12962656664337915873, 16045825205726727428, 17668445836324789204, 9582515111403822925, 8311229418367164498}, + }, + { + {16750713536855692337, 12158883093332386860, 869753891367085490, 15605303972493341694, 12313210121941258747, 13916691409490803616}, + {11444860648717627512, 2835105424184438282, 10913132759099776850, 1412948777401255586, 769776732776506316, 1165176872145242057}, + }, + { + {3136155720816959363, 176782515877232633, 15898658221137319414, 5945945464575269676, 9144428244947354059, 15406556014273518710}, + {9716246750324542500, 1672303908580126879, 11063634686713475813, 5077145573933036029, 9745467858439955753, 6968865545502175550}, + }, + { + {2495713660630230645, 1185980555358051965, 14406641941666869071, 13418195026575315332, 5357639127530659925, 1493186117020140399}, + {15828121188984359229, 8349485267934650396, 7613912943850760152, 18030871967540857146, 8018837622665199635, 15135626352960024679}, + }, + { + {17168709744073976774, 17815617756406029920, 7562176203824291435, 12623565445431123456, 18154939934834134345, 7536657795057385488}, + {1403539525163296919, 18383425392072061037, 3301314769729806667, 6468401011400515937, 17613786701601511597, 14867910979962040781}, + }, + { + {5676915880842387064, 10055846762720957031, 11806698128040651823, 5264306477430907541, 8384892015115220698, 78358395066300931}, + {1150314427301408206, 5063901896663115767, 638613414256407118, 8689364962315350092, 16590905670553712162, 18128165591184340257}, + }, + { + {7752905958520447175, 14603722115727539325, 9781506285327318406, 13087529078766636510, 14023569057475503528, 6019746498716519160}, + {1031759345651315039, 13964338843948005473, 6689558506286989216, 14220086196735492654, 8688284060108936168, 11830821814034764828}, + }, + { + {13480780456478148129, 17091116390541906595, 5942938816814828424, 476503073112423896, 17958436423709724523, 12898659138199048553}, + {2131038254379659612, 12525642025600402532, 3081067260990044234, 2822022238840761302, 7062264661943515613, 5905091641833394361}, + }, + }, + { + { + {13440622283766006421, 9484751676577363406, 9905947788244365184, 9616606862630155221, 9253691280381130230, 310805699197692105}, + {15857119177216089006, 10322980288919041083, 18373416554700920525, 6657775287925290320, 3666256939083168698, 439429372311506210}, + }, + { + {1597897383029505429, 10525228828887910120, 4933923276776716663, 10152243689983019623, 15301370315971850890, 4214213542732825860}, + {897349283246619198, 5660938796941340389, 3717921090959741165, 5280841632073610594, 17979019565907796206, 11519275321457511404}, + }, + { + {3291527771490538711, 12694342940653469057, 13203683462309390985, 1193899784465090270, 659621542292721066, 1071462121865719293}, + {9590655863442234173, 337930243762610616, 6432199645357122456, 10260314756660590323, 14326008875664555298, 3522995246882448014}, + }, + { + {4644598969538718139, 12193860868892577984, 12250306904140467019, 5407962404963080644, 4485091644169226191, 16089382217006835007}, + {920589308924763406, 7142202226709964624, 11524080200370440713, 8450954286780755403, 4635718750704941162, 1486085287263603581}, + }, + { + {14187921230404535350, 11346105716295753707, 18142765952006405051, 4300086759963317261, 1825347314279603037, 4246997353784727565}, + {10550338330776677777, 11915257613511762166, 465865811699731787, 14525465801670139106, 4190035864475007181, 15697268699718129928}, + }, + { + {16520532307875617691, 6478110846501161864, 12009144890567102539, 6639996996037161221, 10346745057146969014, 545026149668689158}, + {12347224953633676077, 13721884389953920858, 16613557823182647213, 8719051450883594518, 1657296232801227258, 9195723469582730377}, + }, + { + {10672379303837372508, 1178915066578644658, 7318232521602719432, 4586807728983065460, 9645130800550409989, 10469349993209561384}, + {6164577485020507700, 14774782349604625747, 1175325949885081731, 7503981034527378970, 6665905526100319746, 14115807008378187235}, + }, + { + {10537591092984195751, 14902777188358201211, 1609682826674157693, 1415112203205414973, 2121292735488271251, 9730644628099641048}, + {1561907835543757283, 17295199465882003505, 6244864773422006269, 14104758566372328508, 5172569374976915040, 10911149041876998445}, + }, + { + {4142743472397546820, 3389473658987681872, 10678200230732012359, 11202709549973179279, 9306523242271834336, 12282962716364438596}, + {9003120795952620535, 14330038165744890298, 10145599770735328847, 16631175899061725823, 6362275304129962702, 314787489785924267}, + }, + { + {11721097912057176600, 465843171488534090, 3822319191955558577, 15208224590212643113, 11095623855521247100, 6466436977520978591}, + {10032477427078550098, 14389677632018329866, 7463855252587484514, 9538679795516955542, 2432362658144624282, 3283104727441149351}, + }, + { + {12785913170846555661, 16504696481298824206, 18387430512449781784, 11501522553203007302, 17453226662032435648, 72841124322579339}, + {10340092917595603421, 18425536899827803529, 3390279596984649469, 104139025934621284, 14389540744379448736, 13185495434887927728}, + }, + { + {13047319551312062583, 13069113474868968778, 14400534570791996729, 2940176026787857058, 3476131159454733686, 4052732675176402643}, + {3639915650884140037, 3373696894468266675, 5954677702497869028, 12219029297141994717, 14767012055233408577, 4804879819244591749}, + }, + { + {5743319169894187724, 3403171851694334648, 4433580132084214877, 13890862639937427160, 10419362266230633172, 2859349082979398226}, + {8742566305870816529, 13813314196081988405, 13904410987635691727, 16614452833957126689, 13707357634780610178, 1642839273094370920}, + }, + { + {14027248214112167925, 1719835930921678207, 18418332983139545900, 3720933284960441366, 602535342330473807, 561868717519919310}, + {12719483106586196278, 10935152826803494465, 1856788292694114055, 11401362997997198554, 16655766755327767076, 16749664986736295564}, + }, + { + {4746163886620296056, 16195921656868907520, 8331686623103669412, 560576196003183117, 12094183225971951844, 16935771085543970093}, + {9464520802091612215, 10072288040788029476, 13937774116306076245, 4650247287489763753, 7901567587026209939, 5944125224832984247}, + }, + }, + { + { + {9018413310491937545, 7479211580165592007, 4723343534675309263, 13895454120971208439, 13937115985645404601, 11554040025799661497}, + {5480952972697767947, 2914963179369015982, 10162636262303291625, 11296982831055708826, 17035403260442020132, 11311386309034106855}, + }, + { + {10287403934820058638, 140061018296065973, 4609836502448609974, 12833794578281306273, 7013376274017941064, 3171002103636180619}, + {17411865245980625367, 17830137832122912415, 9926615308142487378, 10170594699632265376, 9289903336520035955, 295986264357752633}, + }, + { + {2353717779065485542, 7849736054356737745, 16353139566092721807, 12477191479637934527, 611225681162111976, 2348028862004420825}, + {9785747690717484735, 17418090343401958851, 12038755953887168101, 16958893033340106984, 13647755196440313762, 12405018904475572776}, + }, + { + {5298494778929819598, 3924508621232171971, 8749972845037533540, 1931716910689763937, 11971817937790329025, 8597404460835479112}, + {14699754936537593409, 3124307020702767627, 15973366477384098168, 12480586491719897520, 7671564839409689125, 13926805082785871387}, + }, + { + {15204999194234914607, 8349634193664955592, 6009098602331648241, 6924706367035510132, 11252627761006599356, 18041169172716666620}, + {17789359299204781079, 5727817029324871017, 8859671792757355400, 522069605866675301, 11189207261261388877, 11232767462102509610}, + }, + { + {16139497738710238126, 4157146187414349131, 5487114022641721563, 1063383115530797038, 2906599717299719710, 5276015474524600486}, + {9269825514681515477, 16775312150546041513, 14582957882487299154, 15170954478995084883, 2499812420501884408, 10945713424572036595}, + }, + { + {5089807051541807662, 7157200325468149470, 2937849588731584444, 9354845172055266578, 5631696405995964524, 2214323534299283665}, + {9722628493150662989, 17918792662316048829, 3417043373414897775, 17679083211095336242, 16808346554886232447, 13289844996223351707}, + }, + { + {11269874526592562906, 16500978216603335212, 10118738127249413871, 3659452648579232998, 5141018253691260035, 16117724868471222014}, + {11347815034616287201, 7709514744105498479, 14118984237650181458, 12026134955404838277, 9335436582353087685, 369430838816330654}, + }, + { + {1585139051234805814, 404691396436142113, 11444293817557480245, 5830770104023383537, 12277306276048209251, 10642326551634509497}, + {13792665542662432081, 6208000577113784638, 15717378408394080413, 7820469524198781038, 14389089922028942421, 8582404818280480446}, + }, + { + {70981166460121239, 5563408652468244620, 614683176526977757, 2781152952815547101, 12029155884278293318, 17760250353211832620}, + {3187755494407378069, 17888395113661363276, 13412285944510495080, 11584741820870126887, 15965393589757423852, 18040989847530826793}, + }, + { + {5405473909442890818, 14666994240588619109, 12458304673324386647, 11008174367296119903, 14582036957337795851, 17282661739787817063}, + {14222078674054535548, 11008919174943325660, 11819167351245959209, 18134905895138035484, 13162976610859867356, 7513570547713034700}, + }, + { + {14503898932310678540, 10872534209513960811, 10769539085938900258, 950968100788102293, 2593957957211394429, 9325054429337127538}, + {8794306083750832982, 1021791833181379560, 9826075936615091843, 3550496685357100718, 10181274077023686988, 1708403758287646690}, + }, + { + {2114324794753920008, 9126128083829835556, 16280212870402563277, 13283686190256525376, 3251349600931694719, 14483424206972436627}, + {10572754008401154275, 8633764455629405737, 6588424944597437957, 1571954989152470825, 8516883611989669014, 11640306975729561230}, + }, + { + {4109007533450828692, 2356386509806748446, 9041152461761446992, 16218546554098405589, 14154709222330366952, 9392453621407519648}, + {17770577554690365656, 10932372374411174377, 12600690631485435764, 7948622706571305677, 8660221260057720358, 4747684946643246411}, + }, + { + {8540558873947276350, 3622540825228765451, 16650849354810540513, 11226397583292742086, 4705379347219803579, 12325233166887290731}, + {15619140333232072725, 8608337299420394261, 2163342765639233276, 15744964703433685214, 5280747802181153134, 17233894809548258880}, + }, + }, + { + { + {13115213709675436794, 10299123692547567131, 9429245948262081969, 13047795122467758935, 13812575189117105527, 2948332115489926339}, + {2744672569127744094, 4815622797427999112, 859178603639156086, 11576446289001159839, 9958253466657519480, 16703064241036892748}, + }, + { + {9659930467403989932, 17321718087937017122, 3615409075768522018, 6398728174042229488, 8382474392298007936, 16868018560156882295}, + {15394153985344325633, 18233056749369336201, 2786261003208561400, 14117307321540249886, 9686181390715937042, 8956691786907318249}, + }, + { + {12469663383430832235, 13312156986621640537, 11912360761178303017, 11804219970133303678, 18138791436343161493, 2154714404896772973}, + {8464860256859883443, 14324425897255227015, 11075246616197014103, 11084846688464899884, 14026644252332359919, 6402389694082745611}, + }, + { + {1664247920632234678, 10050469124529404545, 13550912777105883578, 5684389909240961711, 18262622312373628010, 5992040147885225610}, + {3886052343944693110, 7794548519566311969, 5328743476861022198, 3557155954099235264, 3684795529791949842, 17691405542438413688}, + }, + { + {9667044915797468497, 5187341894386544411, 9007932748072503962, 8968805127439822005, 4693907985120651307, 1280923431871955632}, + {6721231714391543602, 12198545097663757759, 4397005010009650381, 1422329781944115833, 125099025124551420, 12942840780107155582}, + }, + { + {9559600762660458657, 2654878193132084429, 6142683421157333426, 8600628541895281085, 2720194395607941256, 11800628992463553487}, + {4425191657353376240, 6088099402960722641, 115029919295524541, 12646988404583673832, 13384863624367861501, 18364682859012250550}, + }, + { + {4532078693830769620, 718394906501818236, 3877201007259789143, 760257150764070663, 16650468445415199734, 14938394407466859533}, + {13647198668172065265, 8150502240122876834, 14693081828320862132, 7303871211541846858, 9083743247615337146, 14627695013907233453}, + }, + { + {15736758467123642408, 9706701086221383807, 2559832927730153795, 7692171838583389170, 10835849209926253466, 2290935724211630501}, + {7110948153091501836, 12491488884744421116, 17194507769433100343, 12871741772449719665, 13293932181017940663, 15615371283128275924}, + }, + { + {10561525560550219871, 8873205184226519024, 7699063686607517061, 13635014797737384505, 14667176363819822811, 3925937510121565786}, + {10228456892890207582, 14846438160606646653, 5315480697106497650, 5122456725957472423, 6204140834106767339, 673047575978292150}, + }, + { + {13827793037997042902, 2372112433190900987, 4942678787760432958, 17946455618542608613, 15396054321262292130, 11511518053778317681}, + {11160017347470886464, 13664803594602056362, 8669936965482088617, 17765994223101087455, 14455539200673473573, 7079780915049059206}, + }, + { + {8033984515178450060, 16378670770570801979, 1548095437408110789, 11401360828210390234, 8750170757194679057, 4561487363432466918}, + {9995552829545286346, 4476962116767664929, 5764765679815373569, 15487395691041270870, 2323841776203994300, 2856618876814473844}, + }, + { + {11531868239432263786, 5277805717080096397, 11682853637330501925, 5733978770749385591, 17364192273085890197, 7500286843970580511}, + {86794299821863973, 4596156132784169023, 4785356555999800565, 10872734824615120105, 3047769721102166199, 10829425068529251522}, + }, + { + {16664987869819734811, 12973908345922045971, 4703076108718901177, 14075270048770461650, 104815219486926864, 892782843371503265}, + {10458459649338308428, 10668999312407153052, 13704561636334771166, 4635417240676718572, 5106553366947462575, 3703456388087747221}, + }, + { + {2751721731474885326, 16084898094744997319, 12429196417254737907, 6088459822127419367, 6900842023460552142, 12211266007254795824}, + {7744071277950462535, 2084549072065931478, 9120649345176753774, 4812104275201077076, 657496594162312754, 3182353075430185403}, + }, + { + {8755422501308001479, 10142307435936727265, 11064770721673029308, 18425843187034865157, 13347285302222173760, 3708437028689637787}, + {14876728210989151093, 7705511398925586068, 14248821016296346136, 17806364092565886021, 5124212170718863197, 16198455889993493512}, + }, + }, + { + { + {11131309769818983841, 14973020341004185634, 8446856854308327009, 89059453523509986, 9172267203688134801, 11760494578717306152}, + {5073673248942080292, 1012148470051943223, 11336947344365930468, 9256490203060408704, 15345366488712852356, 4777703526474964085}, + }, + { + {6785992801663327967, 18012758086365480538, 11715768358595862309, 15278468386670997865, 7557494802091764967, 3226512940013553265}, + {10651059331535692113, 11605693566797492518, 7683257465728908366, 1028223626866438466, 16313431221531990341, 6758261315736790700}, + }, + { + {11449545682029299204, 6596199629139963480, 963551988680601724, 698978766831128675, 17425132333529601498, 13413146748170623416}, + {1714656874981820009, 4296884965902036208, 2990962557113972989, 10577651126385226151, 14576461165238503913, 6650017187571610816}, + }, + { + {6245777462138705770, 602174165006002688, 9651995753732157494, 6180859913470161771, 12820839311740267213, 10236566947582409415}, + {11884174684151318817, 15241119462662846032, 6907037784685500586, 8001533132847243248, 3670287336361099984, 3392433665095714529}, + }, + { + {13912308898779395548, 3788232904773170505, 13510110594291767173, 8520990689262136399, 5635271140287576080, 7032476081565599191}, + {3050147342057890882, 5226316271430966932, 11412499390577871486, 11913706106456146646, 4829447444602840419, 14235552292854028654}, + }, + { + {17312195306081130163, 12680842068822272296, 11528293990644984223, 14726421452780975383, 11447257867816650567, 762807127447733227}, + {11172211697797188525, 8517884001168098535, 18342273006866963779, 17586041278289316668, 4779448404822225420, 9813346493235742371}, + }, + { + {9286929404285814938, 8816346852883562511, 7466996584964541958, 5933279471984750642, 1644469041072153982, 11834454051429614839}, + {11689018037377144292, 9302324005187580531, 5409758949060136366, 4109111569593553253, 16829865226968878273, 6434426298631595957}, + }, + { + {16596404332021807148, 11395037243930999642, 6230660960102828038, 14208272099018002212, 8705581668959309002, 7133705014266607355}, + {14252633600291674542, 17382067068187300207, 18138192466898743511, 6530204006214324897, 18284169711456293177, 4900989821334366705}, + }, + { + {5965502925766151340, 3801830478050084251, 6152884788276000974, 10584299273681935132, 2524731521663531672, 15776417203522871638}, + {6285082299497166915, 15290822150488384424, 5578747051433926469, 5845296506012538407, 4823217512374723890, 7213090796321328136}, + }, + { + {1838054042722947491, 18012783215465657741, 1258715365050436512, 7913577973454740911, 7384511648712781941, 4158912753329944154}, + {14299503727251690236, 8238664371507527991, 5075150254794639881, 11556112057563955850, 9196908777829742547, 1421651284198415569}, + }, + { + {7653294651845234281, 297639109833143896, 4336984993054011825, 16447737956972905656, 1714050270655945931, 15452230596345454363}, + {15076547011376710685, 7524806307535928719, 7795256374139730227, 10089448010239318836, 7023465550055784134, 6968423688937605957}, + }, + { + {13092365251897461865, 18278882827386367428, 14555338542207092484, 6910907828139278038, 4543230946116571027, 5044543664197618202}, + {6650151637454194021, 6834808965400326944, 16365723935359292167, 14827804062568090126, 13707520293209424632, 6325303435642990801}, + }, + { + {343357558658755796, 6940253811840342433, 12914150358606642695, 17231336963809853008, 11079943205463705734, 12473223889867436019}, + {15215091930162368566, 11521732813165590119, 4432843582148093137, 2750024527657999932, 9405241261008362249, 10288224084277755975}, + }, + { + {10358507458667546506, 4836195114970556281, 4009596827146315911, 11256224974885245252, 5176303767964952564, 111134394063583597}, + {6393513946378868409, 17037805604945819779, 10171688558016965768, 7858522891516850377, 1914205856134346186, 16973629294504183772}, + }, + { + {10256813334907479264, 17555541259591449755, 10506400127843286281, 3802242808788493442, 16997535067306771110, 8902379766095587425}, + {1036044043924340639, 17424237503082033211, 12387965860513794582, 2930816639468217614, 10629728210657646483, 15009855708899356359}, + }, + }, + { + { + {4454189113653900584, 2369870743683386936, 9771750146904378734, 7229551204834152191, 9308930686126579243, 5564951339003155731}, + {2523209505731486974, 11655219901025790380, 10064955099576512592, 14322381509056856025, 15960759442596276288, 3132442392059561449}, + }, + { + {14421263046720478865, 10262735078638179312, 3820432306672060577, 15745169881456738128, 11281698473866736902, 15822191634431631555}, + {4821811912616493018, 16782915424867765464, 1577651352486052440, 716633372221422297, 508136038908094084, 16377700646398062786}, + }, + { + {424706049021067379, 14217487990368728988, 7719227939353578736, 4199843265846733886, 16388456301404529776, 15169247696432251820}, + {9090595157644861783, 10581077201944372077, 1379900013445280838, 7494321123029536948, 17787926264007537465, 5067787616258265775}, + }, + { + {769698236917518124, 3483900225503109603, 3336909192235363398, 541374049706836141, 18104741290431601017, 14983166848044339752}, + {6121492399965995954, 16666617093809949054, 10249737155929975505, 1473067211573216915, 16575421339110736253, 5806380672117240601}, + }, + { + {13499925512737386719, 13944763802764915814, 9159954083757191227, 6979221481184822758, 14300821660040225990, 16265637021317828603}, + {3128114568639019553, 2504404013570803046, 9274630379913042841, 5414311569178493969, 16628860202352780141, 5598477736550720675}, + }, + { + {9130425033956973272, 14637917817606979898, 17028834835152328690, 3041045091819937813, 5696889246846210875, 14160128160963955776}, + {4567408060924985859, 8330188839918063054, 10075889358467904432, 10649295639077482245, 6371906135676507546, 14525834287139954362}, + }, + { + {16074395804418777643, 5541188270073279665, 8295310521928755861, 6864072771162821613, 17911901316631945045, 10605026599429014107}, + {690935445353571870, 1392537891789610105, 7325904616956299332, 1149398686564874112, 17689896955892401926, 15639337629880458046}, + }, + { + {2591269655907388346, 11399575915049212026, 2043559396265943823, 2133276679198333751, 2052339475550725155, 6752287291455887793}, + {949413463927904836, 9470431435117911687, 8077017638133728996, 16830570160974576546, 8072941217145343758, 4326954112402321249}, + }, + { + {3412919337711024431, 16383399630678254841, 2740801234954712157, 15867621577894919999, 2797972073741634922, 6677462884297174122}, + {17474301298337562800, 3996912168590289455, 2877907669270439874, 12028178698733277400, 9048903683242829652, 16676938495979746758}, + }, + { + {9535591367797480450, 3032516458384811911, 16858722241492443043, 6099583463893158590, 14048493063580960236, 12185142455189643566}, + {13517307410699214798, 262669939477440604, 6425159725529082877, 9337681168995712285, 4468475772573169834, 7978572861495407848}, + }, + { + {14371139353492294781, 4986055967754386106, 994283350302316111, 124059366184412674, 17931249617405877625, 11248278814950278199}, + {8524946062048541221, 6940016701900868483, 4388778906010249088, 3316636379456104494, 4720367297793042554, 11143646688813775128}, + }, + { + {4447383188862483936, 15286779289485640736, 264847228943597281, 17761832039421017475, 5925682522537768028, 7096337516750811757}, + {18071896252632882904, 9283619734214567194, 10122267390711497388, 4667499764407784879, 227971306242715406, 895727107492327229}, + }, + { + {11203525951412289019, 12852755217270479509, 9978444356559295662, 15803698066139233622, 15160649502708391831, 13050401346945170580}, + {17641607277129335085, 15629899850899448002, 8690304923168739299, 13258223666573053280, 9366850728951877315, 5050696512039385569}, + }, + { + {6369749042849981516, 14997591469096472735, 14585781473609538602, 4957906834847789414, 9248310387962593481, 5103185051386294714}, + {13712135472859015397, 6056087516321847761, 2219295526440778687, 8233797578211440273, 7240984299223714420, 4911601582698376693}, + }, + { + {4929990821929415849, 3130583257788034008, 9497231337826843444, 6435653863924772981, 1134942105434085779, 18114272026645693035}, + {2524774042677381563, 7016780555346498950, 5414403864902656268, 15986697199444096112, 9742407776110139287, 6514675658717406998}, + }, + }, + } +} diff --git a/core/crypto/_weierstrass/tools/ecc_gen_tables.odin b/core/crypto/_weierstrass/tools/ecc_gen_tables.odin index e69927a90..609c19cd0 100644 --- a/core/crypto/_weierstrass/tools/ecc_gen_tables.odin +++ b/core/crypto/_weierstrass/tools/ecc_gen_tables.odin @@ -13,41 +13,62 @@ GENERATED :: `/* */` main :: proc() { - gen_p256r1_tables() + gen_tables("p256r1") + gen_tables("p384r1") } -gen_p256r1_tables :: proc() { - Affine_Point_p256r1 :: struct { - x: secec.Field_Element_p256r1, - y: secec.Field_Element_p256r1, - } - Multiply_Table_p256r1_hi: [32][15]Affine_Point_p256r1 - Multiply_Table_p256r1_lo: [32][15]Affine_Point_p256r1 +gen_tables :: proc($CURVE: string) { + when CURVE == "p256r1" { + Affine_Point_p256r1 :: struct { + x: secec.Field_Element_p256r1, + y: secec.Field_Element_p256r1, + } + + Multiply_Table_hi: [32][15]Affine_Point_p256r1 + Multiply_Table_lo: [32][15]Affine_Point_p256r1 + + SC_LEN :: 32 + + g, p: secec.Point_p256r1 + } else when CURVE == "p384r1" { + Affine_Point_p384r1 :: struct { + x: secec.Field_Element_p384r1, + y: secec.Field_Element_p384r1, + } + Multiply_Table_hi: [48][15]Affine_Point_p384r1 + Multiply_Table_lo: [48][15]Affine_Point_p384r1 + + SC_LEN :: 48 + + g, p: secec.Point_p384r1 + } else { + #panic("weistrass/tools: invalid curve") + } - g, p: secec.Point_p256r1 secec.pt_generator(&g) // Precompute ([1,15] << n) * G multiples of G, MSB->LSB - for i in 0..<32 { - b: [32]byte + for i in 0..